Настройка и конфигурации IPTables на Centos 6

baltun

Администратор
Сообщения
10.868
Реакции
2.584
Баллы
2.003
Блокировка наиболее распространенных атак.

Обычно хостинг-провайдеры предоставляют ненастроенные серверы — весь трафик разрешен. Но на всякий случай можно сбросить все правила фаервола:

Код:
iptables -F

Список всех правил.
Код:
iptables -S

Затем можно добавить несколько простых правил, которые отражают наиболее распространенные атаки и защищают сервер от скрипт-кидди. Конечно, 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

Ограничение доступа 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
service iptables save

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

Код:
service iptables restart

Сохраненные правила останутся действительными даже после перезагрузки фаервола.
Конфигурация Iptables для веб-сервера.
Код:
Шаг 1: Flush или удалите все IPTABLES правила

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

Шаг 2: Установите правила по дефолту

iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
Шаг 3: Разрешить доступ к HTTP для 80 порта и HTTPS для 443 порта

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

Включите и сохраните IPTables
Введите следующие две команды, чтобы включить брандмауэр:

Код:
chkconfig iptables on
service iptables save
----------------------------------------
service iptables start
# restart the firewall
service iptables restart
# stop the firewall
service iptables stop

Анти synflood с Iptables
Нужно отредактировать /etc/sysctl.conf, чтобы защититься от некоторых видов атак и добавить или обновить можно добавив эти строки в файл:

Код:
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.netfilter.ip_conntrack_max = 1048576

Код:
# iptables -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 --syn -m recent --set --name CHECK --rsource
# iptables -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 --syn -m recent --update --seconds 5 --hitcount 15 --rttl --name CHECK --rsource -j DROP

Открытие портов на Centos 7:
Код:
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

Удаление портов:
Код:
firewall-cmd --permanent --remove-port=80/tcp

Смотрим открытые порты:
Код:
firewall-cmd --list-all
Вывод команды:
Код:
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh dhcpv6-client http https
  ports: 80/tcp 443/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
 
Последнее редактирование:
Назад
Верх Низ