通过hosts.deny和hosts.allow设置只对国内IP开放

服务器时常有许多国外IP访问,存在补爆破的风险。之前制作了几个脚本,主要是根据ssh多次登录失败加入到/etc/hosts.deny中,以及加入到/etc/firewalld/zones/public.xml中。这样感觉还是有点被动,因为还是不断有国外IP进行登录渗透。后来还想到用黑名单的办法,感觉有点麻烦,于是想到了用白名单的办法,只允许国内用户访问即可。

一、保存国内IP地址

wget -q --timeout=60 -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /root/china_ssr.txt

二、将国内IP地址加入到hosts.allow中,新建脚本test.sh内容如下:

#!/bin/bash
#hosts.allow文件
hostsallow='/etc/hosts.allow'
hostsdeny='/etc/hosts.deny'
china_ssr='/root/china_ssr.txt'
a=`cat ${china_ssr}`
for i in $a;do
   echo "sshd:$i:allow" >> $hostsallow
done
echo "sshd:all:deny" >> $hostsdeny
echo 'ok'

三、将hosts.deny设置全部禁止,原理是优先使用hosts.allow设置。已经在上面脚本中生成,也可以单独生成如下:

echo "sshd:all:deny" >> /etc/hosts.deny