iptables recent模块--用于ssh brute force--芝麻开门访问

recent模块参考:
1)Iptables 之recent模块小结 https://www.cnblogs.com/kevingrace/p/10008487.html 非常重要,重点参考
2)Iptables模块recent应用 https://www.haiyun.me/archives/iptables-recent.html
3)使用 iptables 限制黑客猜密码续—深入 recent 模块 https://www.cnblogs.com/hiloves/archive/2011/07/19/2109899.html

实际应用:
1)Methods to Stop SSH Brute Force Attacks https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/?cf_chl_captcha_tk=f445a6bbb2281e5c161a88299b64f6c2bafdb315-1605575387-0-AS8m1wnIG3fY17s9piHEXjlMzuApra1Ya9KT6Qe-CEobC6d_EmV7FATITQ_6DJ-AhgI7dDS4pl98IMsWd_Rkrcp7wsiL7QntCvmMWhUr1kGJLqap9fJC8OuKcUBpvDA3W1dSyUm4IekxICFas7XAG9QBdbyUElJNEPVOQCHpYxw9lBN6YBp_LQORyOJZARUeniRX3vctSTAfuILO0z8b_wqo4zWIK9kF5T6ZGKylD6jDTx9Bp-knfwcwGH768TKmnojVy2sDRtydarpuDZNp65RBdlI9iKy7eQylqotAtkY0M-LpqYGy4cNGzADVUdR9NYpArhX6egGgeMKM_fVdFgSBkM9sA0rG-eSNp3wLE0zK3YyXi5TQ9yQllashBLI6006kNDP_75Hh9slhVni1xP4SztdkehfGIvsLgsR0SSj5JeUDOfnnf869mdQYMJkiAbYHRIfyuXytiZuyiIKIZDT4L3Cpp-qA4oMBjlEJxFXNPhzy9TVFi6zS0kqBkIyBSDJVHllTdlmBudLWDlszWzp2cHqeIkFQ3mcFBdXxKdGUHOuhgLDlfhmDHsKYBpK6hvSqmO2fuWanWfw17_Ryzg9CngI1EwrqwSf5lJpOucrVM-YfqTH1IzkIw_kYXKaY-QphA3xVkgnto2c27mTKjfY
注意以上参考文章中前提应该需要默认INPUT链为ACCEPT
2)实际操作:(这里操作的实际意义就是当需要隐藏ssh服务时,可以在这里加上“开门芝麻” 同时也防止了外部scanner的扫描)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -j LOG --log-prefix 'SSH_OPEN_KEY'
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -m recent --name openssh --set --rsource -j ACCEPT
iptables -A INPUT -p tcp --dport 22 --syn -m recent --name openssh --rcheck --seconds 60 --rsource -j ACCEPT
iptables -P INPUT DROP
icmp协议request包78 ,一般IP包头20字节,icmp包头8个字节
ping -s 50 ip #linux主机的ip
ping -l 50 ip #windows主机的ip
观察linux下的/proc/net/xt_recent下的openssh(以上--name openssh所定义) 如下:

参考:
IP头部结构 https://www.cnblogs.com/jacklikedogs/articles/3848263.html

ICMP协议及报文格式 https://blog.csdn.net/u011784495/article/details/71743516

常见包头格式 https://www.cnblogs.com/michael-shan/archive/2012/04/04/6652621.html

分析一个实际的例子:
1)
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 78 -m recent --set --name prox --mask 255.255.255.255 --rsource -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m multiport --dports 40022,8006 -m recent --rcheck --seconds 60 --name prox --mask 255.255.255.255 --rsource -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -s 172.168.186.200/32 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 10.1.18.0/24 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 10.1.18.253/32 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 100.72.139.0/24 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 100.73.73.0/24 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 112.35.36.2/32 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 111.192.82.1/32 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 219.223.176.0/20 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 219.223.168.0/21 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 202.112.39.2/32 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 183.172.0.0/15 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 166.111.0.0/16 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 118.229.0.0/19 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 101.6.0.0/16 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 101.5.0.0/16 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 59.66.0.0/16 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 219.223.176.0/20 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 219.223.168.0/21 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 202.112.39.2/32 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 183.172.0.0/15 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 166.111.0.0/16 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 118.229.0.0/19 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 101.6.0.0/16 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 101.5.0.0/16 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 59.66.0.0/16 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 219.223.176.0/20 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 219.223.168.0/21 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 202.112.39.2/32 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 183.172.0.0/15 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 166.111.0.0/16 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 118.229.0.0/19 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 101.6.0.0/16 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 101.5.0.0/16 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 59.66.0.0/16 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 219.223.176.0/20 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 219.223.168.0/21 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 202.112.39.2/32 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 183.172.0.0/15 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 166.111.0.0/16 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 118.229.0.0/19 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 101.6.0.0/16 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 101.5.0.0/16 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 59.66.0.0/16 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -j DROP
分析下为什么可以访问8006服务,而不能访问40022???
2)改正如下: 关键是-A INPUT -p tcp -m tcp --dport 40022 -j DROP 需要放在-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 之后
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [203:84593]
:OUTPUT ACCEPT [139:34771]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 78 -m recent --set --name prox --mask 255.255.255.255 --rsource -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m multiport --dports 40022,8006 -m recent --rcheck --seconds 60 --name prox --mask 255.255.255.255 --rsource -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -s 172.168.186.200/32 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 10.1.18.0/24 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 10.1.18.253/32 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 100.72.139.0/24 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 100.73.73.0/24 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 112.35.36.2/32 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 111.192.82.1/32 -p tcp -m tcp --dport 40022 -j ACCEPT
-A INPUT -s 219.223.176.0/20 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 219.223.168.0/21 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 202.112.39.2/32 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 183.172.0.0/15 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 166.111.0.0/16 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 118.229.0.0/19 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 101.6.0.0/16 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 101.5.0.0/16 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 59.66.0.0/16 -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -s 219.223.176.0/20 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 219.223.168.0/21 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 202.112.39.2/32 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 183.172.0.0/15 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 166.111.0.0/16 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 118.229.0.0/19 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 101.6.0.0/16 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 101.5.0.0/16 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 59.66.0.0/16 -p tcp -m tcp --dport 18006 -j DROP
-A INPUT -s 219.223.176.0/20 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 219.223.168.0/21 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 202.112.39.2/32 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 183.172.0.0/15 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 166.111.0.0/16 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 118.229.0.0/19 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 101.6.0.0/16 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 101.5.0.0/16 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 59.66.0.0/16 -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -s 219.223.176.0/20 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 219.223.168.0/21 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 202.112.39.2/32 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 183.172.0.0/15 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 166.111.0.0/16 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 118.229.0.0/19 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 101.6.0.0/16 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 101.5.0.0/16 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -s 59.66.0.0/16 -p tcp -m tcp --dport 3128 -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -p tcp -m tcp --dport 40022 -j DROP
-A INPUT -j DROP
实际上上述的 -A INPUT -p tcp -m tcp --dport 8006 -j DROP
-A INPUT -p tcp -m tcp --dport 40022 -j DROP 2条规则是多余的

原文地址:https://www.cnblogs.com/weihua2020/p/13995319.html