Назад | Перейти на главную страницу

IPTables - правила не работают

Я изучал некоторые новые правила, но в настоящий момент не могу заставить их работать. Я все время получаю ошибку 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; Я подозреваю, что это не будет в повестке дня.

Надеюсь, что вышесказанное проливает свет на проблему и возможные способы ее устранения.