Iptables. Hints
Разрешить входящие соединения и сохранить правила
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables-save > /etc/sysconfig/iptables
Посмотреть правила с номерами строк
iptables -L -v -n -t filter --line-numbers
Удалить правило по номеру строки
iptables -t filter -D INPUT номер_строки
Сохранить примененные правила iptables
systemctl disable firewalld
yum install -y iptables-services
systemctl enable iptables
systemctl start iptables
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o ens32 -j MASQUERADE
service iptables save
Перенаправить логи определенного правила в отдельный log файл. Centos 7
systemctl disable firewalld
systemctl stop firewalld
yum install -y iptables-services
systemctl enable --now iptables
Ловим входящие соединения 5060/udp с лог-префиксом "Attack SIP: "
iptables -A INPUT -p udp --dport 5060 -j LOG --log-level info --log-prefix "Attack_SIP: "
iptables -A INPUT -p tcp --dport 5060 -j LOG --log-level info --log-prefix "Attack_SIP: "
service iptables save
systemctl restart iptables
Смотрим
iptables -L -v -n -t filter
Конфигурация rsyslog для перенаправления логов в файл
nano /etc/rsyslog.d/iptables.conf
:msg, contains, "Attack_SIP: " -/var/log/iptables/iptables.log & ~
mkdir /var/log/iptables/
chmod 666 /var/log/iptables/
nano /etc/rsyslog.conf
... $umask 0000 $FileCreateMode 0644
systemctl restart rsyslog
Проверяем
На любой другой машине
nmap -sU <адрес_машины_с_iptables> -p5060
После этого на машине с iptables
cat /var/log/iptables/iptables.log
... Jul 20 17:22:18 centos7-honeypot01 kernel: Attack SIP: IN=ens160 OUT= MAC=00:50:56:ba:6b:50:00:50:56:83:24:e2:08:00 SRC=192.168.17.250 DST=192.168.166.52 LEN=28 TOS=0x00 PREC=0x00 TTL=51 ID=9330 PROTO=UDP SPT=47791 DPT=5060 LEN=8 ...
Обнулить правила в цепочках
iptables -F -t filter
iptables -F -t nat
Как правильно использовать диапазон портов в –sport и –dport в iptables с использованием multiport
Избавляемся от ошибки multiport can only have one option
Ситуация: нужно закрыть UDP-порты в трёх диапазонах: 1…52, 54…122, 124…1024. При этом если стук в порт идёт из привилегированного порта (то есть с номером 0…1023), то соединение нужно просто сбрасывать, если же стук идёт с непривилегированного порта, то расценивать это как сканирование и выполнять какие-то действия.
Например, обращение к порту 137 по протоколу UDP может быть как атакой какого-нибудь червя, так и безобидным запросом от NetBIOS. И если запросы, исходящие от NetBIOS, вполне безобидны («рабочий» трафик), то сканирование портов обычно не так безобидно.
Решение в лоб:
iptables -A INPUT -p udp -m multiport --sport 1:1024 --dport 1:52,54:122,124:1024 -j DROP
iptables -A INPUT -p udp -m multiport --dport 1:52,54:122,124:1024 -j do_something
Но такой вариант не сработает: iptables пожалуется на неверный синтаксис первой команды: iptables v1.4.4: multiport can only have one option. При этом манипуляции с с перестановкой параметров не помогают:
iptables -A INPUT -p udp --sport 0:1023 -m multiport --dport 1:52,54:122,124:1024 -j DROP
iptables v1.4.4: invalid port/service `52,54:122,124:1024' specified
iptables -A INPUT -p udp --sport 0:1023 --dport 1:52,54:122,124:1024 -m multiport -j DROP
iptables v1.4.4: invalid port/service `52,54:122,124:1024' specified
Мне советовали разбивать правила на несколько и обходиться без multiport, но в случае сложного скрипта это не выход.
Я нашел два более простых решения:
- Использовать multiport два раза:
iptables -A INPUT -p udp -m multiport --dport 1:52,54:122,124:1024 -m multiport --sport 0:1023 -j DROP - Использовать модуль udp (tcp для TCP-соединения):
iptables -A INPUT -p udp -m udp --sport :1023 -m multiport --dports 1:52,54:122,124:1024 -j DROPобращаю внимание на использование --dports вместо --dport.