使用DOCKER创建青龙容器后,偶尔会遇到被人恶意扫描爆破青龙账号的情况,虽然青龙自身限制了试错频率,爆破成功的几率不大,但是看到后台有人试图登录的信息还是心里不爽。所以研究了一下怎么禁止其他人访问青龙端口。
由于是通过docker暴露的端口,iptables处理INPUT规则前就把网络请求转给DOCKER的虚拟网卡了, 所以普通iptables禁止端口访问的设置是没有效果的。 翻看了网上不少文章,方式方法也五花八门,但很多方法都不简单或者不完美。试了其中几种,发现一个既简单又完美的方法,记录下来以备以后使用。
服务器执行下面代码即可
iptables -I DOCKER-USER -s 被禁止访问的IP -p tcp -m conntrack --ctorigdstport 5700 --ctdir ORIGINAL -j DROP
下列代码都是在宿主机执行。
一定要先执行禁止命令,再执行放行命令,否则放行命令不会生效。
执行下面代码,以禁止所有IP访问青龙的5700端口:
iptables -I DOCKER-USER -p tcp -m conntrack --ctorigdstport 5700 --ctdir ORIGINAL -j DROP
执行下面的代码,给自己的IP放行:
iptables -I DOCKER-USER -s 218.12.0.0/16 -p tcp -m conntrack --ctorigdstport 5700 --ctdir ORIGINAL -j ACCEPT
iptables -I DOCKER-USER -s 39.144.0.0/16 -p tcp -m conntrack --ctorigdstport 5700 --ctdir ORIGINAL -j ACCEPT
iptables -I DOCKER-USER -s 132.145.89.22/32 -p tcp -m conntrack --ctorigdstport 5700 --ctdir ORIGINAL -j ACCEPT
说明:前两条命令是分别给我手机联通和移动网络放行的,因为手机的网络IP是随机的,但是一般前缀不变,IP后面设置/16子网,可以保证只要手机没出本地区,IP前半部分地址没变,就都可以访问。 第三条命令是给我一个VPS的IP开放端口的,如果遇到以外,还可以通过该VPS中转访问青龙页面。因为是固定IP,所以子网是/32,只放行这一个IP。 如果只放行一个IP(段),执行一条命令即可。
完毕后执行下面命令保存IPTABLES规则:
service iptables save
如果青龙已经被人扫的不能登陆了(需要等很久后才能登陆),可以进入宿主机执行下面命令清除青龙的登陆错误次数。
docker exec -it qinglong ql resetlet