|
|||
|
Настройка iptablesШтатный, довольно популярный фаервол в Ubuntu - iptables. Все примеры статьи протестированы под Ubutnu 14.04. Iptables — это по сути пользовательский интерфейс управления системой netfilter, которая управляет сетевым стеком Linux. Iptables сравнивает каждый поступающий пакет с набором установленных правил и принимает решение, что с ним делать. Все команды iptables необходимо выполнять только с root-привилегиями, для этого нужно:
В данном руководстве применяется вариант работы под root - это хоть и не является безопасным вариантом, но если часто вводить команды из консоли под root, набирать все время sudo нецелесообразно. После предварительной настройки сервера, когда работа под root сведена к минимуму, уже стоит использовать sudo. Следует учесть, что для сети IPv4 используется iptables, а для IPv6 - ip6tables, и если IPv6 не используется - можно сразу запретить весь трафик в ip6tables: # ip6tables -P INPUT DROP # ip6tables -P OUTPUT DROP # ip6tables -P FORWARD DROP Но, если после отключения всех соединений по IPv6 перестанет работать обновление системы (aptitude update), нужно будет модифицировать настройки. Чтобы в ходе экспериментов не потерять доступ к удаленному серверу по IPv4, нужно прописать сброс всех правил iptables раз в 20 минут по cron: # crontab -e Добавить строку: */20 * * * * /sbin/iptables -F Теперь, даже если случайно будет заблокирован весь трафик, то каждые 20 минут будет происходить сброс правил из таблицы фаервола filter table, что позволит не потерять доступ к серверу. Для этого варианта следует учитывать политики iptables по умолчанию. Если фаервол еще никем не настраивался, то запустив команду iptables -S можно увидеть следующее: # iptables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT Данные настройки указывают, что после сброса всех правил при помощи iptables -F весь трафик будет разрешен. Если заменить настройки по умолчанию на DROP, как это сделано в начале статьи для протокола IPv6, то они все равно будут действовать даже после сброса настроек с помощью флага -F. То есть команда iptables -F удаляет ВСЕ настройки firewall из таблицы filter tables, КРОМЕ НАСТРОЕК ПО УМОЛЧАНИЮ. Все настройки iptables будут сброшены после перезагрузки сервера, включая цепочки INPUT, FORWARD, OUTPUT, которые после запуска сервера перейдут в статус ACCEPT. Это же касается и настроек по умолчанию. Как не потерять настройки iptables и ip6tables при перезагрузке, будет написано ниже. Таблицы правилШтатный фаервол Ubuntu - iptables, состоит из пяти таблиц: filter, nat, mangle, raw и security. Чтобы посмотреть настройки из определенной таблицы, например из nat table, нужно запустить команду: iptables -L -t nat. Таблица filter table используется по умолчанию, и для того, чтобы посмотреть, какие правила уже внесены в неё, достаточно набрать: iptables -L (без указания имени таблицы). По умолчанию, iptables настроен так, что разрешено все. Filter table - таблица для фильтрования входящего, исходящего и проходящего (перенаправляемого) трафика. Для каждого вида трафика в filter table используется своя цепочка: INPUT, OUTPUT и FORWARD соответственно. Nat table - применяется для изменения IP адреса источника и имеет три своих цепочки правил: PREROUTING - меняет IP адрес перед переадресацией, POSTROUTING - изменяет IP адрес после перенаправления и OUTPUT - используется для фильтрации исходящих пакетов. nat table нужна, например, для настройки VPN и др. Mangle - используется для модификации пакетов. Еще существует две таблицы: raw и security, для чего они предназначены, можно ознакомиться набрав man iptables. Настройка правил iptablesПеред настройкой правил, чтобы не заблокировать нужные сервисы, стоит посмотреть открытые порты на сервере при помощи команды: # netstat -tulpn Все правила iptables применяются сразу после выполнения команды по добавлению правила в firewall. Чтобы это проверить, можно сразу запретить доступ к 80 порту, если конечно на нем настроен web-сервер, для относительно безопасного наблюдения за действиями блокировки: # iptables -A INPUT -p tcp -m tcp --dport 80 -j DROP Теперь можно убедиться, что сайт, для доступа к которому используется 80 порт, стал недоступен. Флаг -A добавляет правило в самый конец выбранной цепочки. Поскольку в команде не указано имя таблицы правил (-t tablename), используется таблица по умолчанию: filter. Снять блокировку можно, как было описано ранее, путем запуска команды iptables -F, но что делать, если нужно удалить только одно правило, а все остальные оставить без изменений? Удалить все правила из цепочки INPUT с параметром DROP: # iptables -D INPUT -j DROP Удалить только правило, заданное с помощью INPUT -p tcp -m tcp --dport 81 -j DROP # iptables -D INPUT -p tcp -m tcp --dport 80 -j DROP Ключ -D обозначает: удалить одно или более правил согласно следующему за ним условию. Также, удалить правило, можно зная его номер. Просмотреть все правила с номерами строк, можно при помощи ключа --line-numbers, номер правила будет указан в колонке num: # iptables -L -n -v --line-numbers Флаги -L, -n и -v:
Теперь удалить одно правило, зная его номер, можно так: # iptables -D INPUT 1 Добавить правило на определенное место, например на первую строчку, можно, используя такой синтаксис: # iptables -I INPUT 1 -s 4.4.4.4 -j ACCEPT Все правила, записанные ранее, включая то, что было в строке 1, будут сдвинуты на строчку ниже. Опция -Z сбрасывает в ноль счетчики пакетов и байт. DROP или REJECTDROP и REJECT отклоняют соединение, но REJECT еще дополнительно отправляет инициатору ICMP пакет, с сообщением, что попытка соединения отклонена. DROP - просто отбрасывает пришедший пакет, не отправляя никакого сообщения в ответ. В случае DoS-атаки, REJECT будет создавать избыточный трафик своими ответами, так что в случае отклонения соединения лучше всего использовать DROP. В Сброс правил: опция -F или -XВо многих примерах для полной очистки правил используется сразу флаг -F и флаг -X: # iptables -F # iptables -X И это правильно! Так как -F удаляет все пользовательские правила созданные в стандартных и пользовательских цепочках, а вот флаг -X удаляет пользовательские названия цепочек, созданные при помощи флага -N. Менять местами -F и -X не стоит, так как для удаления пользовательской цепочки, необходимо предварительно очистить её от правил, иначе цепочка удалена не будет и отобразиться сообщение об ошибке. Запись настроекПосле настройки iptables и ip6tables и тестирования работоспособности сети, настройки стоит сохранить в директории /etc в файлы с именами: iptables.conf и ip6tables.conf (на самом деле путь и названия файлов можно выбрать по своему усмотрению): # iptables-save > /etc/iptables.conf # ip6tables-save > /etc/ip6tables.conf Далее в директории /etc/network/if-pre-up.d следует создать файл iptables (# touch /etc/network/if-pre-up.d/iptables), сделать его запускаемым (# chmod +x /etc/network/if-pre-up.d/iptables) и заполнить его таким содержимым: #!/bin/sh iptables-restore < /etc/iptables.conf ip6tables-restore < /etc/ip6tables.conf Теперь, при каждой загрузке сервера, перед включением сети, в iptables и ip6tables будут загружаться правила из файлов /etc/iptables.conf и /etc/ip6tables.conf. Если загружать правила нужно уже после включения сети, файл iptables можно создать в директории /etc/network/if-up.d. Альтернативный путь - использовать утилиту iptables-persistent. Если не восстанавливать настройки iptables после загрузки сервера, фаервол будет запущен с настройками по умолчанию, включая настройки по умолчанию (ACCEPT) для цепочек таблицы filter: INPUT, OUTPUT и FORWARD. Также, не забудьте отключить сброс настроек iptables по cron, если таковой был предварительно настроен. Безопасная проба настроек - iptables-applyСуществует утилита iptables-apply, для безопасного тестирования настроек iptables на удаленном сервере. Суть её работы сводится к следующему: она применяет новые настройки из указанного файла на некоторый период времени (по умолчанию 10 сек.) и если пользователь в консоли не подтвердил новые настройки нажатием клавиши Y, в iptables возвращаются настройки, которые были доп применения новых. iptables-apply -t 15 new_iptable_conf В примере выше, iptables-apply сразу после запуска применит настройки фаервола из файла new_iptable_conf и будет ждать подтверждения от пользователя на протяжении 15 секунд. И если пользователь не подтвердит новую конфигурацию, будет возвращена старая. Формат файла iptables-apply такой же, как и при сохранении настроек с помощью iptables-save. Т.е. для безопасного тестирования настроек iptables необходимо: записать текущую конфигурацию в файл new_iptable_conf: iptables-save > new_iptable_conf, далее отредактировать этот файл и уже после этого безопасно испытать новые параметры при помощи iptables-apply: iptables-apply -t 15 new_iptable_conf. Опубликовано: 2016/03/29
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/linux.php?txt=553" target="_blank">Настройка iptables</a> 11092
Добавить комментарий
|