Iptables. Hints

Материал из Wiki
Перейти к навигации Перейти к поиску

Разрешить входящие соединения и сохранить правила

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.