Примеры настройки iptables для популярных и не очень сервисов и служб Linux. Заметка, в основном, для себя, чтобы не ошибиться и ничего не забыть. Всего, ессественно, не охватить сразу, так что со временем буду добавлять записи. Подробного описания ключей и опции тут не будет, только конкретные примеры iptables.
Итак, в стандартной установке CentOS файл правил iptables выглядит следующим образом.
cat /etc/sysconfig/iptables
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT |
Если у Вас такого файла нет, то нужно доставить необходимые пакеты.
yum install iptables iptables-services
Хоть нас и предупреждают, что редактировать этот файл не рекомендуется, именно сюда будут записываться новые правила iptables. Синтаксис строки с правилом аналогичен синтаксису команды. Пройдемся немного по основным командам.
1. Просмотр текущего состояния iptables
iptables -nvL --line-number
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 9521 12M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 1 60 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 3791 packets, 159K bytes) num pkts bytes target prot opt in out source destination |
Тут у нас 3 цепочки правил:
— INPUT — для входящих пакетов, здесь и будут отображаться записываемые правила.
— FORWARD — для входящих пакетов, перенаправленных на выход, в данном случае все запрещено, так как компьютер не является роутером.
— OUTPUT — для исходящих пакетов, тут всё разрешено.
Можно посмотреть каждую цепочку отдельно, например
iptables -nvL INPUT --line-number
1 2 3 4 5 6 7 |
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 20063 26M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 1 60 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited |
2. Добавление и удаление правил iptables.
Как уже говорилось выше, управлять правилами можно, редактируя конфигурационный файл /etc/sysconfig/iptables или используя команды. Следующая команда разрешает входящие соединения с локальной сети, записывая правило 5-ой строкой в цепочку INPUT.
iptables -I INPUT 5 -s 192.168.1.0/24 -j ACCEPT
Посмотрим.
iptables -nvL INPUT --line-number
1 2 3 4 5 6 7 8 |
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 20069 26M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 1 60 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 ACCEPT all -- * * 192.168.1.0/24 0.0.0.0/0 6 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited |
Нижеприведенная команда запретит нам посещать сайт известной компании.
iptables -A OUTPUT -p tcp -d www.microsoft.com -j DROP
Таким образом можно заблокировать сеть негодяев, пытающихся что-то выведать и сломать на нашем сервере.
iptables -I INPUT -s 5.9.0.0/16 -j DROP
Отличия параметра I от параметра A заключается в том, что I позволяет вставлять правило в определенное место по номеру, без номера помещает правило на 1-ое место. A вставляет правило в конце цепочки. Если Вы поместите правило с помощью параметра A ниже 6-ой строки в листинге выше, то оно не сработает, так как 6-ая строка запрещает все, что не было разрешено раньше. Правила выполняются строго по очереди.
Следующая команда удаляет правило с соответствующим номером из указанной цепочки.
iptables -D INPUT 5
Чтобы сохранить изменения, выполненные с помощью команд, необходимо использовать
iptables-save > /etc/sysconfig/iptables.
Если Вы редактировали конфигурационный файл, iptables нужно перезапустить
service iptables restart или, если используется systemd,
systemctl restart iptables.
Теперь, собственно, примеры. Не забывайте про параметр A и последнюю строку в Ваших цепочках.
Разрешить или запретить ICMP Ping запросы.
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -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
Разрешить сервер SSH на порту 22.
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
Разрешить с опреденной сети
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
Если ставите другой порт для SSH и SELinux не отключен, то необходимы дополнительные действия, описанные тут.
Разрешить сервер ProFTPd.
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 50000:50535 -j ACCEPT
Синхронизация времени NTPd.
iptables -A INPUT -m state --state NEW -p udp --dport 123 -j ACCEPT
Разрешить WEB-сервер на портах http/https
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
Разрешить почтовый сервер SMTP, POP3, IMAP
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
Разрешить DNS сервер
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
Разрешить Samba сервер для локальной сети
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT
Разрешить CUPS сервер печати
iptables -A INPUT -p udp -m udp --dport 631 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
Разрешить Proxy сервер для локальной сети
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT
Разрешить MYSQL сервер для локальной сети
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
Разрешить Transmission торрент-сервер
iptables -A INPUT -p tcp -m tcp -m state --dport 9091 --state NEW -j ACCEPT
Разрешить Minidlna медиа-сервер для локальной сети
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 8200 -j ACCEPT
Разрешить входящие соединения удаленного рабочего стола xrdp
iptables -A INPUT -p tcp -m tcp --dport 3389 -j ACCEPT