Настройка IPTables

IPTables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра).

Ключи для работы с цепочками:
-A — добавить новое правило.
-D — удалить правило.
-F — удалить все правила.
-R — замена правила.
-L — вывод списка всех правил.

INPUT — входящий трафик.
OUTPUT — исходящий трафик.
FORWARD — пересылаемый(транзитный) трафик.

Параметры:
-p — протокол, может быть all,icmp,tcp,udp.
-s — ip адрес/хост источника.
-d — ip адрес/хост назначения.
-i — интерфейс на который пришел пакет.
-o — интерфейс с которого уйдет пакет.
—sport — порт источника.
—dport — порт назначения.

Действия:
ACCEPT — разрешить пакеты.
REJECT — блокировать пакеты с сообщением об отказе.
DROP — блокировать пакеты (меньше нагрузка на CPU при массовых запросах, более приоритетный вариант чем REJECT).
RETURN — прекращение проверок текущей цепочки и продолжение с родительской.
MARK и CONNMARK — маркировка пакетов.
LOG — журналирование пакетов в syslog.

Примеры просмотра правил:

iptables -nvL
iptables -nvL | grep 192.168.0
iptables -n -L -v --line-numbers
iptables -L INPUT -n -v
iptables -L OUTPUT -n -v --line-numbers
iptables -L OUTPUT -n --line-numbers | less
iptables -L OUTPUT -n --line-numbers | grep 192.168.2.14
iptables -L INPUT --line-numbers

ip6tables -nvL
ip6tables -t filter -nvL

iptables -S
iptables -t raw -S
iptables -t mangle -S

iptables -L -t nat
iptables -L -t mangle

Примеры удаления правил:

iptables -D INPUT 3
iptables -D INPUT -s 192.168.2.14 -j DROP

Пример добавления правила на первое место в цепочке INPUT:

iptables -nL --line-numbers
iptables -I INPUT 1 -s 1.2.3.4/32 -m comment --comment "ixnfo.com" -j ACCEPT

Приведу пример простого NAT правила (где 10.0.0.0/24 — локальная сеть, а 10.50.50.1 смотрит в интернет):

iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 10.50.50.1 --persistent

Пример удаления и добавления NAT правил:

iptables -t nat -D POSTROUTING -s 172.16.2.0/16 -o eth1 -j SNAT --to-source 192.168.1.251-192.168.1.254 --persistent
iptables -t nat -A POSTROUTING -s 172.16.2.0/17 -o eth1 -j SNAT --to-source 192.168.1.218-192.168.1.222 --persistent

Если настроен NAT и нужно пробросить порт к локальному IP (где 192.168.0.18 — локальный IP, а 10.50.50.2 на eth0 смотрит в интернет):

iptables -t nat -A PREROUTING -d 10.50.50.2/32 -i eth0 -p tcp -m tcp --dport 81 -j DNAT --to-destination 192.168.0.18:81

Допустим NAT для сети 192.168.0.0/24 настроен через 10.50.50.1, а 192.168.0.18 нужно пустить через 10.50.50.2:

iptables -t nat -A POSTROUTING -s 192.168.0.18/32 -o eth0 -j SNAT --to-source 10.50.50.2

Полный сброс правил:

iptables -F

Управление службой:

service iptables stop/start/restart/save

Пример разрешающих правил для pop3, pop3s:

iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 995 -j ACCEPT

Пример для imap, imaps:

iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp --dport 993 -j ACCEPT

Установка политик INPUT и FORWARD на отбрасывание по умолчанию:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Чтобы разрешить ping:

iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

Примеры блокировки и разблокировки IP адреса или сети:

iptables -A INPUT -s xx.xx.xx.xx -j DROP
iptables -A INPUT -s xx.xx.xx.xx/24 -j DROP
iptables -A INPUT -s xx.xx.xx.xx/24 -j REJECT --reject-with icmp-port-unreachable
iptables -D INPUT -s xx.xx.xx.xx -j DROP

При добавлении правила желательно добавить комментарий, например:

iptables -A INPUT -s xx.xx.xx.xx -m comment --comment "text" -j DROP

Ограничить количество подключений до 200 на определенный порт, например 443 и 80 (замечу что connlimit при очень большом трафике может сильно нагружать процессор):

iptables -A INPUT -p tcp -m tcp --dport 443 -m connlimit --connlimit-above 200 --connlimit-mask 32 -j DROP
iptables -A INPUT -p tcp -m tcp --dport 443 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT

iptables -A INPUT -s 172.16.0.0/12 -p tcp --dport 80 -m connlimit --connlimit-above 200 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -p tcp --dport 80 -j ACCEPT

Открытие порта 80 с лимитом подключений:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 50/second -j ACCEPT

Если в правиле необходимо указать несколько портов, то нужно добавить multiport, например:

-m multiport --dports 80,8080

Пример маркировки пакетов:

iptables -t mangle -A PREROUTING -s 192.168.5.0/24 -j MARK --set-mark 38

Вариант запрета сканирования портов (блокируются IP на 300 секунд, с которых идут пакеты помимо разрешенных портов):

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p all -i eth0 -j ACCEPT
iptables -A OUTPUT -p all -o eth0 -j ACCEPT
iptables -A INPUT -m recent --rcheck --seconds 300 --name STOPSCAN -j DROP
iptables -A INPUT -p tcp -m multiport ! --dports 80,443 -m recent --set --name STOPSCAN -j DROP
iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 443 -j ACCEPT
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Можно сделать резервную копию правил в файл, а также восстановить их из него командами:

iptables-save > iptables.dump
iptables-restore < iptables.dump

ip6tables-save > ip6tables.dump
ip6tables-restore < ip6tables.dump

Искать текст по правилам можно так:

iptables-save|grep 172.16.2.0/24

Так как могут быть уязвимости через RPC, то лучше закрыть порт 111 (а еще лучше открыть только нужные порты и сделать по умолчанию INPUT DROP):

rpcinfo -p localhost
/sbin/iptables -A INPUT -p tcp --dport 111 -j DROP
/sbin/iptables -A INPUT -p udp --dport 111 -j DROP

Смотрите также мои статьи:
IPTables правила для: Accel-ppp, BGP, DHCP, DNS, FreeRADIUS, WEB, Asterisk, TFTP, SSH, Samba, FTP, NTP и SNTP, SNMP, MySQL, ntopng, nprobeZabbix

Правила iptables для других служб ищете в моих статьях по установке этих служб.

Оставьте комментарий

Добавить комментарий