Настройка фаервола iptables на сервере Centos 6
iptables – это фаервол (или брандмауэр), используемый на подавляющем большинстве дистрибутивов linux; мануал linux называет iptables средством управления NAT и пакетными фильтрами IPv4, проще говоря – это инструмент для фильтрации и блокировки трафика.
Данное руководство поможет настроить простой фаервол для виртуального выделенного сервера Centos 6; такой фаервол оставляет открытыми только необходимые порты, а остальные сервисы закрывает. Также в руководстве показано, как предотвратить атаки и вернуть себе доступ к случайно заблокированному серверу.
Конечно, данное руководство нельзя назвать исчерпывающим. Оно охватывает настройку некоторых основных портов: apache, SSH и электронной почты; остальные порты будут закрыты. Также здесь можно найти инструкции по блокировке вредоносных скриптов и ботов. Блокировка исходящего трафика в руководстве не рассматривается.
В целом фаервол представляет собой список правил; если входящее соединение отвечает одному из правил этого списка, то на него будут распространяться действия, предписанные этим правилом. Если пользовательские правила не установлены, используются правила по умолчанию.
Примечание: Данное руководство охватывает настройку безопасности IPv4. В системе Linux безопасность IPv6 настраивается отдельно. Брандмауэр iptables поддерживает правила только для IPv4; брандмауэр для адресов IPv6 называется ip6tables. Если ваш сервер использует IPv6, нужно настроить правила для интерфейсов IPv4 и IPv6 . Подробнее об инструментах IPv6 можно прочесть в статье «Настройка и использование IPv6 на сервере Linux».
Какие порты и сервисы нужно открыть?
Для начала нужно определить, какие сервисы и порты должны быть доступны. Для примера рассмотрим стандартный сервер. Как правило, на нем работает веб-сервер и почтовый сервер, а для входа необходим порт SSH.
Потому, во-первых, нужно оставить открытым порт SSH – 22 (в противном случае удаленный доступ к серверу будет заблокирован).
А во-вторых, нужно открыть SSL-порты 80 и 443 для веб-трафика. Для отправки электронной почты нужен порт 25 (обычный SMTP) и 465 (безопасный SMTP), а для получения почты – порты 110 (POP3) и 995 (безопасный POP3).
Также нужно открыть порты IMAP: 143 (стандартный порт) и 993 (IMAP по SSL).
Примечание: Рекомендуется использовать только безопасные протоколы (для этого нужно иметь возможность изменить почтовые клиенты пользователей).
Предотвращение распространённых атак
Как правило, весь трафик на сервере разрешен. Чтобы сбросить все правила фаервола, используйте команду:
iptables -F
Затем можно добавить несколько простых правил, которые предотвращают самые распространённые атаки и защищают сервер от скрипт-кидди. На самом деле, не стоит полагаться на то, что iptables сможет самостоятельно отразить полноценную DDOS-атаку или нечто подобное, однако этот фаервол может без труда заблокировать доступ для сканирующих сеть ботов, которые ищут лазейки в безопасности сервера.
Сначала заблокируйте нулевые пакеты:
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
Это правило блокирует входящие пакеты с tcp-флагами. Нулевые пакеты, по сути, являются средством разведки; они позволяют выяснить настройки сервера и определить его слабые места. Это правило предотвратит syn-flood атаки:
iptables -A INPUT -p tcp ! –syn -m state –state NEW -j DROP
При syn-flood атаке злоумышленник создает новое подключение, при этом не устанавливая никаких флагов (SYN, ACK и т.д.); такие атаки проводятся с целью отнять ресурсы сервера, следовательно, эти пакеты принимать не следует. После этого нужно запретить разведывательные пакеты XMAS:
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
Эти правила защитят сервер от самых распространённых атак.
Открытие портов
Теперь нужно открыть порты выбранных ранее сервисов. Для начала откройте локальный интерфейс:
iptables -A INPUT -i lo -j ACCEPT
Эта команда добавит (флаг -А) в фильтр входящих соединений (INPUT) правило, которое принимает (-j ACCEPT) весь трафик, поступающий на локальный интерфейс (-i lo). Этот интерфейс часто используется для размещения БД, к которой подключены сайт и почтовый сервер. Таким образом, сам сервер имеет доступ к этой базе данных, но взломать ее через интернет не получится.
Эти правила откроют трафик веб-сервера:
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Эти команды добавят в цепочку ACCEPT порты 80 и 443, что откроет трафик на эти порты. Чтобы открыть порты сервера SMTP, используйте:
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
Как отмечалось ранее, лучше использовать безопасные версии протоколов, что доступно только при возможности влиять на пользователей; к сожалению, это возможно не всегда, потому клиенты будут использовать порт 25, который достаточно легко взломать. Чтобы пользователи могли читать электронную почту, добавьте правила:
iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
Они откроют трафик POP3. После этого нужно открыть протокол IMAP:
iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
Защита SSH
Чтобы подключаться к серверу удалённо, нужно разрешить трафик SSH.
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
Эта команда добавляет в брандмауэр правило, которое откроет tcp-трафик, входящий на порт 22 (порт SSH по умолчанию). Рекомендуется вместо порта 22 использовать другой свободный порт (для этого откорректируйте вышеуказанное правило); к сожалению, настройка SSH не входит в рамки данного руководства. Однако можно настроить сам фаервол. Имея постоянный IP-адрес, можно разрешить доступ к SSH только для этого адреса.
Для этого нужно узнать внешний IP-адрес. Важно убедиться, что это не адрес локальной сети, в противном случае правило не будет работать. Узнать IP-адрес можно на сайте whatismyip.com, либо же можно ввести в терминал:
w
Эта команда покажет текущего пользователя (если только он вошёл в систему) и IP-адрес. Результат имеет примерно такой вид:
root@iptables# w
11:42:59 up 60 days, 11:21, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 213.191.xxx.xxx 09:27 0.00s 0.05s 0.00s w
После этого можно создать правило фаервола, принимающее трафик на порт SSH только от одного IP-адреса:
iptables -A INPUT -p tcp -s IP_АДРЕС -m tcp --dport 22 -j ACCEPT
Примечание: В команде нужно указать свой внешний IP.
В брандмауэре можно открыть и больше портов. Тогда фаервол будет разрешать доступ ко всем нужным сервисам. Теперь необходимо добавить еще одно правило, которое разрешает устанавливать исходящие подключения (т.е. использовать ping или обновлять программное обеспечение):
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
После этого можно заблокировать все остальное и разрешить все исходящие соединения.
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
Базовый фаервол iptables готов.
Сохранение правил iptables
Просмотрите список установленных правил, чтобы убедиться, что все нужные правила были добавлены:
iptables -L -n
Флаг -n выводит только IP-адреса (без доменов). К примеру, если в правилах указан IP 12.34.56.78:, брандмауэр отследит его и узнает, что это IP принадлежит сайту somesite.com. Данный флаг не будет выводить домены, оставляя только IP-адреса. Теперь можно сохранить настройки фаервола:
iptables-save | sudo tee /etc/sysconfig/iptables
Конфигурационный файл iptables в системе CentOS хранится в /etc/sysconfig/iptables. Приведенная выше команда сохранила все созданные правила в этот файл. Чтобы убедиться, что все работает корректно, перезапустите фаервол:
service iptables restart
Теперь правила будут действительны даже после перезагрузки сервера.
Как разблокировать себя на сервере?
Если при создании правил в настройках была случайно допущена ошибка, брандмауэр может заблокировать вам доступ к собственному VPS. Возможно, ошибка была допущена в IP-адресе, и теперь фаервол блокирует настоящий IP, поскольку он ему неизвестен. Теперь к правилам нет доступа; даже перезагрузка сервера не поможет. Для таких случаев существуют веб-интерфейсы, позволяющие подключиться к серверу через консоль.
Подключившись к серверу, войдите как пользователь root и сбросьте правила фаервола:
iptables -F
После этого доступ к серверу будет восстановлен.
Заключение
Данное руководство помогает пользователю, не знакомому с командной строкой Linux и правилами IPTables, настроить базовые правила фаервола и защитить все важные сервисы. Конечно, это руководство не является исчерпывающим, iptables имеет гораздо больше функций, но для начала такой настройки будет достаточно.
Tags: CentOS 6, Iptables, IPv4, IPv6, SSH
2 комментария
Эта команда как-то неправильно выглядит. Можно ее исправить?
iptables -A INPUT -p tcp ! —syn -m state —state NEW -j DROP
iptables -A INPUT -p tcp! –syn -m state –state NEW -j DROP