LINUX.ORG.RU
решено ФорумAdmin

iptables string

 


1

1
iptables -A INPUT -p tcp --dport 80 -m string --string "12345" --algo bm -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
# iptables -L -v -n
Chain INPUT (policy ACCEPT 3017 packets, 385K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 STRING match  "12345" ALGO name bm TO 65535
    6   304 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

Если оставить только первое правило - то счетчик начинает увеличиваться.

# iptables -L -v -n
Chain INPUT (policy ACCEPT 143 packets, 15393 bytes)
 pkts bytes target     prot opt in     out     source               destination
    6  2296 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 STRING match  "12345" ALGO name bm TO 65535

Почему когда добавляю вторым правилом DROP - iptables игнорирует первое?



Последнее исправление: poiuty (всего исправлений: 3)

Забыл про state => так работает.

iptables -A INPUT -p tcp --dport 80 -m state --state  ESTABLISHED -m string ! --string "12345" --algo kmp -j DROP

poiuty
() автор топика

Допустим у тебя 2 правила - ACCEPT и потом DROP. При этом в пакете начинающем соединение строчки «12345» нет. Догадайся, под какое правило попадёт данный пакет? Правильно - в DROP. А если соединение не начнётся, под ACCEPT никогда ничего и не сматчится.

Разреши все новые(--state NEW) соединения на 80 порт перед тем как дропать всё. И то не факт что во всех ESTABLISHED пакетах потом у тебя будет строчка «12345»

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.