O parâmetro --dport
não pertence à correspondência state
. Experimente:
iptables -A INPUT -i venet0 -p tcp --dport 22 -m state --state NEW -m recent --set
Eu tenho um problema com a adição de regras contra ataques SSH de força bruta. Eu tento fazer da seguinte maneira:
iptables -F
iptables -L
iptables -N SSHATTACK
iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7
iptables -A SSHATTACK -j DROP
#Block each IP address for 120 seconds which establishe more than three connections within 120 seconds. In case of the forth connection attempt, the request gets delegated to the SSHATTACK chain, which is responsible for logging the possible ssh attack and finally drops the request.
iptables -A INPUT -i venet0 -p tcp -m state --dport 22 --state NEW -m recent --set
iptables -A INPUT -i venet0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK
Mas tenho um problema com estas duas linhas:
iptables -A INPUT -i venet0 -p tcp -m state --dport 22 --state NEW -m recent --set
iptables -A INPUT -i venet0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK
Saída após este comando é
iptables: No chain/target/match by that name.
iptables -L
fornece a seguinte saída:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain SSHATTACK (0 references)
target prot opt source destination
LOG all -- anywhere anywhere LOG level debug prefix 'Possible SSH attack! '
DROP all -- anywhere anywhere
e iptables -S
dão:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N SSHATTACK
-A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7
-A SSHATTACK -j DROP
ip add
dá (eu escondi o endereço IP com '?'):
1 lo LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN
linkloopback 000000000000 brd 000000000000
inet 127.0.0.18 scope host lo
inet6 1128 scope host
valid_lft forever preferred_lft forever
2 venet0 BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP mtu 1500 qdisc noqueue state UNKNOWN
linkvoid
inet 127.0.0.132 scope host venet0
inet ?.?.?.24820 brd ?.?.?.255 scope global venet00
O que posso fazer para adicionar esta regra? O que estou perdendo?
O parâmetro --dport
não pertence à correspondência state
. Experimente:
iptables -A INPUT -i venet0 -p tcp --dport 22 -m state --state NEW -m recent --set
What am I missing?
Você pode reduzir a complexidade de seu próprio conjunto de regras e permitir que algo como fail2ban
gerencie isso para você. Disponível em um repositório de pacotes do CentOS 7 perto de você, ou pode ser baixado via EPEL no CentOS 6.
O Fail2ban tem regras prontas para bloquear ssh
ataques, e há alguns tutoriais aqui ou aqui .
Este é um tópico antigo, mas se alguém chegar aqui, isso pode ajudar (resolvido por mim).
O problema é um driver de kernel ausente. Depois de adicionar
CONFIG_NETFILTER_XT_MATCH_RECENT=y
para a configuração do kernel e recompilando-o, o problema foi resolvido. Você também pode adicioná-lo como um módulo (= m) e insmod-lo em tempo de execução
boa sorte!