LINUX.ORG.RU
ФорумAdmin

Блокировать больше, чем N одновременных входящих соединений с одного хоста

 


0

3

Добавил правило такого вида

iptables -I INPUT -p tcp --syn --dport $PORTNUMBER -m connlimit --connlimit-above 3 -j REJECT

первым в список, политика для INPUT по дефолту - ACCEPT. Но соединения всё равно не блокируются, множественные входящие соединения на порт $PORTNUMBER с одного хоста всё равно устанавливаются. Как быть, что делать, куда копать?

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  anywhere             anywhere             tcp dpt:smtpflags: FIN,SYN,RST,ACK/SYN #conn src/32 > 2 reject-with icmp-port-unreachable
REJECT     tcp  --  anywhere             anywhere             tcp dpt:3388flags: FIN,SYN,RST,ACK/SYN #conn src/32 > 3 reject-with icmp-port-unreachable
fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain fail2ban-ssh (1 references)
target     prot opt source               destination         
DROP       all  --  58.241.25.82         anywhere            
RETURN     all  --  anywhere             anywhere
★★★★★

предложу воркараунд

Subj на случай, если не удастся разобраться с тем, что изначально задано:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport $PORTNUMBER -m state --state NEW -m recent --set --name TCP-$PORTNUMBER --rsource 
iptables -A INPUT -i eth0 -p tcp -m tcp --dport $PORTNUMBER -m state --state NEW -m recent --update --seconds 600 --hitcount 3 --name TCP-$PORTNUMBER --rsource -j REJECT

Он делает немного не то, что Вам надо, но всё же близкое по функциональности, а именно: если за 10 минут с какого-то IP будет больше 3 соединений, то он их откидывает эти, которые сверх. Попробуйте поиграться вот так.

Infra_HDC ★★★★★ ()

Счётчики показывают сработку правила?

Как определяется, что «множественные входящие соединения на порт $PORTNUMBER с одного хоста всё равно устанавливаются» ?

mky ★★★★★ ()

к слову об оформлении

Subj: вывод команды

# iptables-save
был бы, безусловно, более информативен, чем вывод команды
# iptables -L

Infra_HDC ★★★★★ ()
Ответ на: комментарий от mky

Как это точно определить, показывают счётчики или нет? Вроде бы показывают. Входящие соединения смотрю через netstat, и вижу, что от одного IP их намного больше, чем 3, в состоянии ESTABLISHED

# iptables -L -n -v
Chain INPUT (policy ACCEPT 13162 packets, 777K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    9   540 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:25flags: 0x17/0x02 #conn src/32 > 2 reject-with icmp-port-unreachable
 2430  146K REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:3388flags: 0x17/0x02 #conn src/32 > 3 reject-with icmp-port-unreachable
 219K   31M fail2ban-ssh  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 13446 packets, 1189K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain fail2ban-ssh (1 references)
 pkts bytes target     prot opt in     out     source               destination         
 208K   30M RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0 
Harald ★★★★★ ()
Ответ на: комментарий от Harald

что от одного IP их намного больше, чем 3, в состоянии

и соединения эти точно созданы после добавления правила

Harald ★★★★★ ()
Ответ на: комментарий от mky

3.2.0-38-generic #61-Ubuntu SMP Tue Feb 19 12:18:21 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Harald ★★★★★ ()

собственно, как я наблюдаю, правило не срабатывает только для одного хоста, создающего много соединений. Для остальных вроде бы работает, больше 3 не создаётся

Harald ★★★★★ ()
Ответ на: комментарий от Harald

Попробуйте в начало iptables добавить три правила:

iptables -I INPUT 1 -s HOST-ip -m conntrack --ctstate NEW 
iptables -I INPUT 2 -s HOST-ip -p tcp --syn --dport $PORTNUMBER -m connlimit --connlimit-above 3 -j REJECT
iptables -I INPUT 3 -s HOST-ip -m conntrack --ctstate NEW -j LOG
и посмотреть счётчики и логи. Может действительно баг какой в connlimit или первый пакет соединений какой-то необычный и ″--syn″ на него не срабатывает.

mky ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.