Я изучал некоторые новые правила, но в настоящий момент не могу заставить их работать. Я все время получаю ошибку iptables: Applying firewall rules: iptables-restore: line 36 failed
и это COMMIT
.
Я переместил COMMIT, чтобы посмотреть, могу ли я сузить проблему, и я думаю, что это может быть связано с -A LIMIT_INDIVIDUAL_CURRENT -m recent --update --seconds 300 --hitcount 200 -j DROP
есть ли у кого-нибудь идея.
*filter
:INPUT DROP [13:672]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1604:100070]
:LIMIT_INDIVIDUAL_NEW - [0:0]
:LIMIT_INDIVIDUAL_CURRENT - [0:0]
:LIMIT_OVERALL_NEW - [0:0]
-A INPUT -i lo -j ACCEPT
#Apache
-A INPUT -p tcp --dport 80 -m state --state RELATED,ESTABLISHED -j LIMIT_INDIVIDUAL_CURRENT
-A INPUT -p tcp --dport 80 --syn -m state --state NEW -j LIMIT_INDIVIDUAL_NEW
#Teamspeak
-A INPUT -p tcp --dport 30033 -m state --state RELATED,ESTABLISHED -j LIMIT_INDIVIDUAL_CURRENT
-A INPUT -p tcp --dport 30033 --syn -m state --state NEW -j LIMIT_INDIVIDUAL_NEW
-A INPUT -p tcp --dport 10011 -m state --state RELATED,ESTABLISHED -j LIMIT_INDIVIDUAL_CURRENT
-A INPUT -p tcp --dport 10011 --syn -m state --state NEW -j LIMIT_INDIVIDUAL_NEW
-A INPUT -p udp --dport 9987 -j ACCEPT
#Iptables DoS and Slowloris mitigation
-A LIMIT_INDIVIDUAL_CURRENT -m recent --set
-A LIMIT_INDIVIDUAL_CURRENT -p tcp --tcp-flags FIN FIN -m recent --remove
-A LIMIT_INDIVIDUAL_CURRENT -m recent --update --seconds 300 --hitcount 200 -j DROP
-A LIMIT_INDIVIDUAL_CURRENT -j ACCEPT
-A LIMIT_INDIVIDUAL_NEW -m recent --set
-A LIMIT_INDIVIDUAL_NEW -m recent --update --seconds 1 --hitcount 30 -j DROP
-A LIMIT_INDIVIDUAL_NEW -j LIMIT_OVERALL_NEW
-A LIMIT_OVERALL_NEW -m limit --limit 500/second -j ACCEPT
-A LIMIT_OVERALL_NEW -j DROP
COMMIT
Я пробовал это, и похоже, что ваши подозрения верны:
[root@risby home]# iptables -A FOO -m recent --update --seconds 300 --hitcount 200 -j DROP
iptables: Invalid argument. Run `dmesg' for more information.
[root@risby home]# dmesg|tail -1
[1141835.281122] xt_recent: hitcount (200) is larger than packets to be remembered (20)
man iptables
показывает следующее:
--hitcount hits This option must be used in conjunction with one of --rcheck or --update. When used, this will narrow the match to only happen when the address is in the list and packets had been received greater than or equal to the given value. This option may be used along with --seconds to create an even narrower match requiring a certain number of hits within a specific time frame. The maximum value for the hitcount parameter is given by the "ip_pkt_list_tot" parameter of the xt_recent kernel module. Exceeding this value on the command line will cause the rule to be rejected.
Так что на твоем месте я бы попробовал бросить это 200
к 10
. Если это заставит проблему исчезнуть (или, по крайней мере, оставить эту строку), значит, вы определили проблему. Я запустил strings
в модуле ядра и поискал этот параметр, и среди прочего нашел следующие две записи:
parm=ip_pkt_list_tot:number of packets per IP address to remember (max. 255)
parmtype=ip_pkt_list_tot:uint
которые говорят мне, что этот параметр может быть установлен в качестве аргумента при загрузке модуля, но ни в коем случае не может превышать 255. Это своего рода ограничение, которое заставляет меня думать, что даже перекомпиляция вашего собственного ядра не поможет, и вам придется переписать модуль, чтобы использовать более одного байта (uint
= беззнаковое целое) counter; Я подозреваю, что это не будет в повестке дня.
Надеюсь, что вышесказанное проливает свет на проблему и возможные способы ее устранения.