Поиск по сайту:

Как настроить базовый брандмауэр Iptables на Centos 6


Статус: устарело

В этой статье рассматривается версия CentOS, которая больше не поддерживается. Если вы в настоящее время используете сервер под управлением CentOS 6, мы настоятельно рекомендуем обновить или перейти на поддерживаемую версию CentOS.

Причина:

См. вместо этого:

  • Iptables Essentials: общие правила и команды брандмауэра
  • Как работает брандмауэр Iptables.
  • Как настроить брандмауэр с помощью FirewallD в CentOS 7

вступление

В этой статье показано, как создать простой брандмауэр на Centos VPS. Это откроет только те порты, которые нам нужны, и закроет другие службы. Я также покажу, как предотвратить более простые атаки и как снова войти в VPS, если вы случайно запретили себе доступ.

Учебник ни в коем случае не является исчерпывающим и показывает только, как открыть несколько входящих портов: для apache, SSH и электронной почты и закрыть все остальные. Мы не будем блокировать исходящий трафик, а создадим лишь несколько наиболее распространенных правил для блокировки обычных скриптов и ботов, которые ищут уязвимые VPS.

iptables — это простой брандмауэр, установленный в большинстве дистрибутивов Linux. На странице руководства Linux для iptables говорится, что это инструмент администрирования для фильтрации пакетов IPv4 и NAT, что в переводе означает, что это инструмент для фильтрации и блокировки интернет-трафика. . Брандмауэр iptables включен по умолчанию в образы Linux Centos 6.4, предоставленные DigitalOcean.

Мы настроим брандмауэр по одному правилу. Проще говоря: брандмауэр — это список правил, поэтому, когда открыто входящее соединение, если оно соответствует какому-либо из правил, это правило может принять это соединение или отклонить его. Если никакие правила не выполняются, мы используем правило по умолчанию.

Примечание. В этом руководстве рассматривается безопасность IPv4. В Linux безопасность IPv6 поддерживается отдельно от IPv4. Например, \iptables\ поддерживает правила брандмауэра только для адресов IPv4, но у него есть аналог IPv6, называемый ip6tables\, который можно использовать для поддержки правил брандмауэра для сетевых адресов IPv6.

Если ваш VPS настроен для IPv6, не забудьте защитить сетевые интерфейсы IPv4 и IPv6 с помощью соответствующих инструментов. Дополнительные сведения об инструментах IPv6 см. в этом руководстве: How To Configure Tools for Use IPv6 on the Linux VPS

Решите, какие порты и сервисы открыть

Для начала мы хотим знать, какие сервисы мы хотим открыть для публики. Давайте использовать типичный сервер веб-хостинга: это веб-сервер и сервер электронной почты, и нам также нужно войти через сервер SSH.

Во-первых, мы хотим оставить порт SSH открытым, чтобы мы могли удаленно подключиться к VPS: это порт 22.

Также нам нужны порты 80 и 443 (SSL-порт) для веб-трафика. Для отправки электронной почты мы откроем порт 25 (обычный SMTP) и 465 (защищенный SMTP). Чтобы пользователи могли получать электронную почту, мы откроем обычный порт 110 (POP3) и 995 (защищенный порт POP3).

Кроме того, хорошо откройте порты IMAP, если он у нас установлен: 143 для IMAP и 993 для IMAP через SSL.Примечание: Рекомендуется разрешать только безопасные протоколы, но это может быть не вариант, если мы не можем повлиять пользователям почтовой службы изменить свои почтовые клиенты.

Блокировать самые распространенные атаки

DigitalOcean VPS обычно поставляются с пустой конфигурацией: разрешен весь трафик. Чтобы убедиться в этом, мы можем сбросить правила брандмауэра, то есть стереть их все:

iptables -F

Затем мы можем добавить несколько простых правил брандмауэра, чтобы блокировать наиболее распространенные атаки и защитить наш VPS от скрипт-кидди. Мы не можем рассчитывать только на iptables, чтобы защитить нас от полномасштабного DDOS или подобного, но мы можем, по крайней мере, отложить обычных ботов, сканирующих сеть, которые в конечном итоге найдут наш VPS и начнут искать дыры в безопасности, чтобы использовать их. Во-первых, мы начинаем с блокировки нулевых пакетов.

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

Мы сказали брандмауэру принимать все входящие пакеты с tcp-флагами NONE и просто DROP их. Нулевые пакеты — это, проще говоря, разведывательные пакеты. Шаблоны атак используют их, чтобы посмотреть, как мы настроили VPS, и найти слабые места. Следующий шаблон, который следует отвергнуть, — это атака syn-flood.

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Пакеты XMAS, а также пакет разведки.

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

Мы исключили по крайней мере некоторые из обычных шаблонов, которые находят уязвимости в нашем VPS.

Откройте порты для выбранных сервисов

Теперь мы можем начать добавлять выбранные службы в наш фильтр брандмауэра. Первая такая вещь — это локальный интерфейс:

iptables -A INPUT -i lo -j ACCEPT

Мы говорим iptables добавить (-A) правило в таблицу фильтрации входящего (INPUT) любого трафика, поступающего на интерфейс localhost (-i lo), и принять (-j ACCEPT) его. Localhost часто используется для, т.е. ваш веб-сайт или почтовый сервер взаимодействуют с локальной базой данных. Таким образом, наш VPS может использовать базу данных, но база данных закрыта для эксплойтов из Интернета.

Теперь мы можем разрешить трафик веб-сервера:

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Мы добавили два порта (http-порт 80 и https-порт 443) в цепочку ACCEPT, чтобы разрешить трафик через эти порты. Теперь давайте разрешим пользователям использовать наши 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-трафик, чтобы мы могли удаленно подключаться к VPS. Простой способ сделать это с помощью этой команды:

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Теперь мы сказали iptables добавить правило для приема трафика tcp, входящего на порт 22 (порт SSH по умолчанию). Рекомендуется изменить конфигурацию SSH на другой порт, и этот фильтр брандмауэра следует изменить соответствующим образом, но настройка SSH не является частью этой статьи.

Однако мы могли бы сделать еще одну вещь с самим брандмауэром. Если бы у нашего офиса был постоянный IP-адрес, мы могли бы разрешить подключения к SSH только из этого источника. Это позволит подключаться только людям из нашего местоположения.

Сначала узнайте свой внешний 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 YOUR_IP_ADDRESS -m tcp --dport 22 -j ACCEPT

Конечно, замените YOUR_IP_ADDRESS фактическим IP-адресом.

Мы могли бы открыть больше портов на нашем брандмауэре по мере необходимости, изменив номера портов. Таким образом, наш брандмауэр разрешит доступ только к тем службам, которые нам нужны. Прямо сейчас нам нужно добавить еще одно правило, которое позволит нам использовать исходящие соединения (например, пинговать с VPS или запускать обновления программного обеспечения);

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Это позволит любым установленным исходящим соединениям получать ответы от VPS на другой стороне этого соединения.

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Теперь у нас есть правила брандмауэра.

Сохраните конфигурацию

Теперь, когда у нас есть вся конфигурация, мы можем перечислить правила, чтобы увидеть, не упущено ли что-нибудь.

iptables -L -n

Переключатель -n здесь потому, что нам нужны только IP-адреса, а не доменные имена. Т.е. если в правилах есть такой IP-адрес: 69.55.48.33: брандмауэр проверит его и увидит, что это IP-адрес linux-console.net. Нам это не нужно, только сам адрес. Теперь мы можем, наконец, сохранить конфигурацию нашего брандмауэра:

iptables-save | sudo tee /etc/sysconfig/iptables

Файл конфигурации iptables в CentOS находится в папке /etc/sysconfig/iptables. Приведенная выше команда сохранила созданные нами правила в этот файл. Чтобы убедиться, что все работает, мы можем перезапустить брандмауэр:

service iptables restart

Сохраненные правила сохранятся даже при перезагрузке VPS.

Сбросьте, чтобы разблокировать себя

Если мы допустили ошибку в нашей конфигурации, возможно, мы заблокировали себе доступ к VPS. Возможно, мы указали неправильный IP-адрес, поэтому брандмауэр не разрешает подключения с нашей рабочей станции. Теперь мы не можем добраться до этих правил, а если мы их сохранили, то даже перезагрузка нам не поможет. К счастью, веб-интерфейс DO позволяет нам подключаться к серверу через консоль:

После подключения мы входим в систему как root и вводим следующую команду:

iptables -F

Это очистит фильтры, и вы сможете снова войти в VPS.

Заключение

Эта статья не является исчерпывающей, и она лишь поверхностно описывает запуск простого брандмауэра на машине с Linux. Этого будет достаточно для типичного сценария веб-сервера и почтового сервера для разработчика, не знакомого с командной строкой Linux или iptables.

Однако можно было бы сделать гораздо больше. В Интернете есть хорошие учебные пособия и примеры, которые помогут нам обеспечить более надежную конфигурацию. Для производственных сред рекомендуется создать более подробную конфигурацию или поручить ее подготовить эксперту по безопасности.