6
Ноя

Базовые конфигурации IPTables на Centos 6

Вступление

Данное руководство демонстрирует создание простого фаервола на сервере Centos, а также рассказывает, как открыть нужные порты и закрыть остальные сервисы, отразить атаки и вернуться на VPS в случае случайной блокировки.

Руководство не является исчерпывающим, оно только показывает, как открыть некоторые порты (Apache, SSH и email) и закрыть все остальные, а также создать некоторые общие правила, блокирующие скрипты и ботов, которые ищут уязвимые VPS. Вопрос блокировки исходящего трафика не охвачен.

IPTables — простой фаервол, установленный на большинстве дистрибутивов Linux. Руководство Linux говорит, что IPTables — это инструмент управления пакетными фильтрами IPv4 и NAT, то есть, это инструмент фильтрации и блокировки интернет-трафика. IPTables включен в CentOS по умолчанию.

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

Какие порты и сервисы открыть?

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

Во-первых, нужно оставить открытым порт SSH, чтобы иметь возможность подключаться к серверу удаленно; это порт 22. Для веб-трафика нужны порты 80 и 443 (порт SSL). Чтобы пользоваться электронной почтой, нужно открыть порт 25 (обычный SMTP) и 465 (защищенный SMTP). Чтобы пользователи могли получать электронную почту, откройте порт 110 (POP3) и 995 (защищенный POP3). Кроме того, нужно открыть порты IMAP (если установлен): 143 для IMAP, а также 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). Локальный хост часто используется для размещения базы данных, к которой подключаются веб-сайт и почтовый сервер. Таким образом, VPS имеет доступ к базе данных, но взломать ее через интернет нельзя.

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

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

В цепочку ACCEPT были добавлены два порта (порт http 80 и порт https 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

Разрешить или запретить ICMP Ping запросы.

Чтобы запретить:
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP

Разрешить для определенных сетей / хостов:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

Разрешить только часть ICMP запросов:
### ** предполагается, что политики по умолчанию для входящих установлены в DROP ** ###
# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
## ** разрешим отвечать на запрос ** ##
# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Ограничение доступа SSH

Также нужно разрешить трафик SSH, чтобы иметь возможность подключаться к VPS удаленно. Это очень просто сделать при помощи команды:

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

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

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Теперь правила фаервола настроены должным образом.

Сохранение настроек

Теперь можно просмотреть список установленных правил, чтобы убедиться, что все нужные правила внесены:

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-адрес, и теперь фаервол не разрешает доступ с неизвестного ему адреса. Теперь к правилам нет доступа, и даже перезагрузка сервера не поможет. К счастью, существуют веб-интерфейсы, позволяющие подключиться к серверу через консоль.

Подключившись, нужно войти как root и выполнить команду:

iptables -F

Это сбросит все правила, и можно будет снова войти на сервер.

Итоги

Данное руководство не является исчерпывающим и знакомит с основами настройки простого фаервола на машине Linux. Оно помогает пользователю, не знакомому с командной строкой Linux и правилами IPTables, выполнить все необходимые действия по защите обычного почтового или веб-сервера. Тем не менее, можно сделать намного больше. В интернете можно найти огромное множество статей и руководств, помогающих установить более надежные настройки; данные же краткие инструкции обеспечат серверу базовый уровень безопасности.