|
本帖最后由 hkal 于 2017-8-14 00:12 编辑
路由器要远程管理,最简单方法是对外打开 ssh 端口。为防止暴力破解,ssh 可以改用五位数的端口,并只容许用 key 登录。有些其他的服务,例如 frp 服务器,不支持 key,只能用密码。虽然暴力破解并不是这么容易,但是端口老是被骚扰总是不爽。而且这肯定会加大路由器的负担。
fail2ban 功能上是非常好,但对于 cpu 和 内存都非常寒碜的路由器来说,fail2ban 是太沉重了。对于路由来说,iptables 的 xt_recent 是更好的选择(tomato 已经自带 xt_recent)。fail2ban 和 xt_recent 不同的地方是:fail2ban 会封锁一段时间(自定义)内登录错误几次(自定义)的 ip 地址;而 xt_recent 不会分辨登录是否成功,它会以一段时间内连接次数超过多少次来封锁 ip。
假设 ssh 已经可以远程登录,现在只是要添加 xt_recent 规则保护端口:
使用 iptables 的 xt_recent,需要安装 iptables-mod-conntrack-extra。另外脚本我喜欢用 bash,顺手也装上:- okpg update
- opkg install iptables-mod-conntrack-extra bash
复制代码
如果容许 ssh 从 WAN 口进来的规则是在 luci 界面设定的话,应该就会有一条类似这样的规则(假设 ssh 外网端口是 12345):- -A zone_wan_input -p tcp -m tcp --dport 12345 -m comment --comment "Allow Dropbear" -j ACCEPT
复制代码 我们要添加的 xt_recent 规则必须要在这条规则的前面。我们在命令界面输入:iptables -S,往下看,会看到:
红框的地方: openwrt 已经设定了一条 CHAIN 叫 input_rule,并且已经 Jump 进去执行了(目前是空白的,所以没东西执行)。我们可以把 xt_recent 的规则添加到这条 CHAIN 里面。
脚本 add-recent-rules :- #!/bin/bash
- IPT=/usr/sbin/iptables
- EXTIF="eth0.2"
- # Allow max [3] connections to port [12345] in [120] seconds, store banned ip in [BFATTACK]
- $IPT -A input_rule -i $EXTIF -p tcp --dport 12345 -m state --state NEW -m recent --set --name BFATTACK --rsource
- $IPT -A input_rule -i $EXTIF -p tcp --dport 12345 -m state --state NEW -m recent --update --seconds 120 --hitcount 4 --name BFATTACK --rsource -j DROP
复制代码
上面容许120秒内,最多 3次连接到 端口 12345,被封锁的 ip 储存在 BFATTACK 表内。
设定每次开机自动执行,在 /etc/rc.local 里面, exit 前面加上:
- /path/to/add-recent-rules &
复制代码
如果要保护其他端口,两个办法:
- 重复脚本里面的最后两句,[ ] 按实际需要修改。
- 规则改为 multiport :
- $IPT -A input_rule -i $EXTIF -p tcp --match multiport --dports 12345,12321,23454 -m state --state NEW -m recent --set --name BFATTACK --rsource
- $IPT -A input_rule -i $EXTIF -p tcp --match multiport --dports 12345,12321,23454 -m state --state NEW -m recent --update --seconds 120 --hitcount 4 --name BFATTACK --rsource -j DROP
复制代码
其他:
1. 查看 BFATTACK 表里面的 ip:- cat /proc/net/xt_recent/BFATTACK
复制代码
2. 手动解除封锁某 ip (例如 ip 是 123.123.123.123):
- echo -123.123.123.123 >/proc/net/xt_recent/BFATTACK
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|