В учебниках и книгах часто рекомендуется фильтровать недопустимые флаги TCP с помощью iptables. Интересно, не отфильтрованы ли они уже самим ядром или модулем состояния iptables. У кого-нибудь есть дополнительная информация по этому поводу?
Фильтрация странных TCP-флагов обычно является хорошей идеей по двум причинам:
В iptables вы должны выполнять фильтрацию таких пакетов вручную (насколько я знаю), другие межсетевые экраны, такие как PF, имеют модули «очистки». Очистка - это набор стандартных правил, который пытается удалить недопустимые пакеты из потока, гарантирует, что все пакеты имеют одинаковый TTL и т. Д.
Я предполагаю, что спецификации TCP не запрещают некоторые недопустимые конфигурации флагов. Некоторые системы может выберите отправку (или раньше отправляли) странные комбинации флагов, но в настоящее время их отправляют только «плохие парни» (для сканирования FIN и т.д.), поэтому рекомендуется их отфильтровать.
Кстати, вот правила iptables, которые я использую, чтобы отфильтровать их (вероятно, получил их из учебника по frozentux iptables)
#new not syn
-A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
-A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP
-A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP
-A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
-A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
-A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
Новые версии ядер не отвечают на сообщения с недопустимыми флагами TCP. Вы можете быть протестированы, отправив пакеты с недопустимыми флагами Hping3 с помощью этого инструмента. Если нужно использовать iptables, оставляю свой скрипт:
#!/bin/bash
# -- UTF 8 --
iptables="/sbin/iptables"
CADENA="put INPUT, FORWARD or OUTPUT"
IPWS="put destination IP"
IFACE_Nro1="put input interface (example: wlan0 or eth0)"
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags SYN,FIN,PSH SYN,FIN,PSH -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags SYN,FIN,URG SYN,FIN,URG -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags SYN,FIN,RST SYN,FIN,RST -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL SYN,FIN,RST,PSH -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,PSH -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL ALL -j DROP
$iptables -A $CADENA -i $IFACE_Nro1 -d $IPWS -p tcp --tcp-flags ALL NONE -j DROP