前言:被端口扫描扫麻了
因为临时外出远程控制宽带下面的一台电脑,就偷懒直接映射了3389端口。过了几天忘了关,回来一看电脑被锁着了,显示"账户引用账户当前已锁定,且可能无法登录",就是被远程尝试密码次数过多锁住了,虽然是强密码,但还得进PE改管理员改安全策略才进去了。
开常用端口映射固然不安全,但天天被扫也很烦,不如就直接弄个蜜罐把扫描的IP收集起来,一扫就拉黑舒服了。

实现:利用ipset和动作-j SET
我想的是写一个脚本部署在路由器/VPS上的,尽可能简单轻量和兼容,加入开机启动运行一次就可以,因此最基本的思路就是:创建一个ipset,谁扫了我的常用端口,就把他加入这个ipset(利用iptables的动作-j SET),然后在入站对ipset里面的IP全部DROP掉。
一个比较简单的例子是这样的,假设公网IP的网口是eth0:

创建一个名为blacklist的ipset

ipset create blacklist hash:ip

从eth0入站的IP,触碰了22/3389端口就把这个IP加入blacklist

iptables -I INPUT -i eth0 -p tcp -m multiport --dports "22,3389" -j SET --add-set blacklist src

从eth0入站的数据,是blacklist的就直接DROP掉

iptables -I INPUT -m set --match-set blacklist src -j DROP
Flytrap —— 一个简单的蜜罐防火墙脚本
脚本可从Github下载: https://github.com/kkkgo/Flytrap

Flytrap,一个简单的蜜罐防火墙脚本。如其名字,就像一个捕蝇草,抓住来扫端口的IP地址捣蛋鬼,拉黑他DROP掉!

脚本配置项:

Customizable option area

公网接口名字

wan_name="pppoe-wan"

定义扫了哪些端口就抓住他

trap_ports="21,22,23,3389"

定义是否也部署IPv6,yes/no

trap6="no"

IP封禁时间,0为一直封禁,值大于0超时从名单中移除(单位:秒)

unlock="0"

Customizable option end

改好脚本直接执行sh flytrap.sh就可以帮你加上规则。加入开机运行一次即可。
脚本还有提供了其他操作命令:

列出收集到的坏蛋IP

sh flytrap.sh list

列出收集到的坏蛋IP(v6)

sh flytrap.sh list 6

手动添加坏蛋IP地址

sh flytrap.sh add xxxxx

手动删除坏蛋IP地址

sh flytrap.sh del xxxxx

删除所有坏蛋IP地址

sh flytrap.sh delall

清空flytrap相关的iptables规则和所有IP地址集合

sh flytrap.sh clean
如果需要修改端口trap_ports,修改完了直接执行即可,会自动清除旧规则。
如果要指定端口范围可以用冒号,比如trap_ports="1:1024,3306,3389"
如果需要修改接口名wan_name,修改前可以执行sh flytrap.sh clean清除相关接口的规则。
建议设置一些unlock选项的时间,存太多旧数据意义不大。
脚本仅需依赖ipset和iptables命令。一些系统可能自带的防火墙命令是nft,由于nft并不像iptables那样有默认的表,可以根据提供的脚本和思路,按需修改。

注意事项
一些远程rdp客户端似乎会默认主动尝试3389端口导致把自己锁外面了,如果你有用到rdp的话,建议3389不要加到里面,rdp使用较高位端口,比如12388,并且把相邻的端口加入到陷阱(比如12387和12389)。
原文来自此处,互联网笔记,如有侵权请联系删除

最后修改:2025 年 06 月 03 日
如果觉得我的文章对你有用,请随意赞赏