iptables — утилита для командной строки, которая является стандартным интерфейсом управления работой брандмауэра netfilter. Здесь разобраны основные правила брандмауэра, которые используются во многих сценариях: открытие и блокирование портов, IP-адресов, сервисов и сетевых интерфейсов. Большое руководство по iptables: https://www.opennet.ru/docs/RUS/iptables/
Краткое руководство https://wiki.centos.org/HowTos/Network/IPTables
Порядок правил в цепочке имеет важное значение.
- Добавляем правило в конец цепочки:
1 |
sudo iptables -A ... |
- Вставляем новое правило в цепочку под нужным номером. Число после имени правила — задаёт его номер.
1 |
iptables -I INPUT 1 --dport 80 -j ACCEPT |
Чтобы поместить правило в начало цепочки, достаточно не указывать его номер.
- Проверить текущий набор правил iptables можно следующим образом:
1 2 |
sudo iptables -S sudo iptables -L |
Сохранение правил
Если новые правила Iptables не сохранить специальной командой, то они сбрасываются после перезагрузки сервера.
Сохранение правил в Ubuntu
В Ubuntu новые правила iptables сохраняются с помощью пакета iptables-persistent. Если пакет не установлен, то его следует установить:
1 |
sudo apt-get install iptables-persistent |
Для сохранения новых правил следует ввести команду:
1 |
sudo invoke-rc.d iptables-persistent save |
Сохранение правил в CentOS версии 6 и младше
В CentOS 6 для сохранения новых правил можно воспользоваться следующей командой:
1 |
sudo service iptables save |
Правила iptables сохраняются в файле /etc/sysconfig/iptables.
В ОС CentOS 7 вместо iptables используется FirewallD
Общие правила iptables
Интерфейс обратной петли
Интерфейс обратной петли (loopback) используется для настройки взаимодействия сервера приложений с сервером баз данных на локальном адресе. Для установки соединения, необходимо настроить брандмауэр для его поддержки.
Чтобы разрешить loopback трафик, нужно выполнить команды:
1 2 |
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT |
Разрешение существующих и связанных с ними входящих подключений
Сетевой трафик должен быть входящим и исходящим, т.е. двухсторонним. Нужно добавить правило в брандмауэр, которое разрешает существующие соединения и связанный с этими соединениями входящий трафик, для того, чтобы сервер принимал обратный трафик от исходящих соединений, который был инициирован самим сервером.
1 |
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
Разрешение существующих исходящих соединений
Правило для разрешения серверу поддерживать исходящий трафик существующих соединений:
1 |
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Внешняя eth0 и внутренняя сеть eth1
Правило для настройки взаимодействия eth0 и eth1 :
1 |
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT |
Сброс недействительных пакетов
Периодически пакеты сетевого трафика помечаются как недействительные. Иногда такие пакеты следует зарегистрировать в логе, но обычно их сбрасывают.
1 |
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP |
Блокировка IP-адреса
Правило для блокировки всех сетевых соединений, исходящих от конкретного IP-адреса (например, 15.15.15.45):
1 |
sudo iptables -A INPUT -s 15.15.15.45 -j DROP |
Отклонить соединение
Правило для отклонения соединения, поступающие от конкретного IP-адреса. При этом инициатор получит ошибку Connection refused:
1 |
sudo iptables -A INPUT -s 15.15.15.45 -j REJECT |
Ограничение соединений по интерфейсу
Блокировка соединения, поступающие от конкретного IP на определённый интерфейс:
1 |
sudo iptables -A INPUT -i eth0 -s 15.15.15.45 -j DROP |
Сервис SSH
Разрешение всего входящего трафика:
1 2 |
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT – не ACCEPT.
Белый список IP-адресов
Правило для разрешения входящих SSH соединений только от безопасных подсетей или адресов.
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT – не ACCEPT.
Разрешение исходящего трафика
Правило для разрешения исходящих SSH-соединений (если OUTPUT – не ACCEPT).
1 2 |
sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Входящие соединения rsync
Rsync — программа для синхронизации файлов и каталогов, использует порт 873.
Правило для разрешения входящих соединений rsync, поступающих от определённых IP-адресов или подсети:
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT – не ACCEPT.
Веб-серверы
Разрешение входящего трафика HTTP
Чтобы разрешить весь входящий HTTP-трафик (порт 80), используйте:
1 2 |
sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT – не ACCEPT.
Разрешение входящего трафика HTTPS
Правило для разрешения всего входящего HTTPS –трафика по 443 порту:
1 2 |
sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT – не ACCEPT.
Разрешение входящего трафика HTTP и HTTPS
С помощью модуля multiport можно разрешить трафик HTTP и HTTPS. Правило, которое открывает оба порта для входящего трафика:
1 2 |
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT – не ACCEPT.
СУБД MySQL
Белый список IP-адресов для удалённого доступа к серверу MySQL.
Правило открывающее доступ к MySQL только для определённых IP-адресов или подсетей:
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT для MySQL – не ACCEPT.
Сетевые интерфейсы MySQL
Правило для разрешения доступа к MySQL с помощью определённого сетевого интерфейса, например, eth1:
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT– не ACCEPT.
СУБД PostgreSQL
СУБД PostgreSQL для установки клиентских соединений прослушивает порт 5432.
Белый список IP-адресов для доступа к PostgreSQL с удалённого сервера
1 2 |
sudo iptables -A INPUT -p tcp -s 15.15.19.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT– не ACCEPT.
Сетевые интерфейсы PostgreSQL
Открыть доступ к PostgreSQL с помощью сетевого интерфейса, например, eth1:
1 2 |
sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT– не ACCEPT.
Почтовые сервисы
Почтовые серверы Sendmail или Postfix работают с разными протоколами и слушают большое количество портов для получения/отправки электронной почты. Для повышения безопасности следует оставить открытыми только те порты, которые используются и заблокировать исходящую SMTP почту.
Блокирование исходящей почты SMTP
SMTP использует порт 25 для отправки почтовых сообщений. Правило для его блокировки:
1 |
sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT |
Разрешение трафика SMTP
Правило для разрешения SMTP трафика на 25 порту:
1 2 |
sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT– не ACCEPT.
Разрешение входящего трафика IMAP
Правило для разрешения серверу отвечать на IMAP-соединения на порт 143 и принятие почты:
1 2 |
sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT– не ACCEPT.
Разрешение входящего трафика IMAPS
Правило для разрешения серверу отвечать на IMAPS-соединения на порт 993 и принятие почты:
1 2 |
sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT– не ACCEPT.
Разрешение входящего трафика POP3
Правило для разрешения серверу отвечать на POP3-соединения на порт 110 и принятие почты:
1 2 |
sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT– не ACCEPT.
Разрешение входящего трафика POP3S
Правило для разрешения серверу отвечать на POP3S-соединения на порт 995 и принятие почты:
1 2 |
sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
Вторая команда уместна только в случае, если политика OUTPUT– не ACCEPT.
Свежие комментарии