说明:博主很早前发过VPS
一键屏蔽指定国家IP
的教程,查看:Linux VPS一键屏蔽指定国家所有的IP访问,这对于我们阻止某个国家访问网站和CC
攻击还是很有用的,不过鉴于很多人需要白名单设置方法,博主研究了下,发现也可以用ipset
来完成,这里就说下,目前测试是没问题的。
方法
首先需要得到国家IP
段,下载地址:http://www.ipdeny.com/ipblocks/。这里以我们国家为例。
1、安装ipset
#Debian/Ubuntu系统
apt-get -y install ipset
#CentOS系统
yum -y install ipset
CentOS 7
还需要关闭firewall
防火墙:
systemctl stop firewalld.service
systemctl disable firewalld.service
2、清空之前的规则
#防止设置不生效,建议清空下之前的防火墙规则
iptables -P INPUT ACCEPT
iptables -F
3、创建新规则
#创建一个名为cnip的规则
ipset -N cnip hash:net
#下载国家IP段,这里以中国为例
wget -P . http://www.ipdeny.com/ipblocks/data/countries/cn.zone
#将IP段添加到cnip规则中
for i in $(cat /root/cn.zone ); do ipset -A cnip $i; done
4、设置IP段白名单
#放行IP段
iptables -A INPUT -p tcp -m set --match-set cnip src -j ACCEPT
#关掉所有端口
iptables -P INPUT DROP
这时候就只有指定国家的IP
能访问服务器了。
如果你在国内,网站不允许被国内人访问,建议别关所有端口,这样你的SSH
会上不去,我们可以只关闭80
/443
端口。
#关闭指定端口,比如80/443
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP
这时候其他国家的IP
是无法访问你服务器的80
/443
端口,等于无法访问你的网站,其它端口还是可以访问的。
5、删除规则
#将参数里的-A改成-D就是删除规则了,如
iptables -D INPUT -p tcp -m set --match-set cnip src -j ACCEPT
iptables -D INPUT -p tcp --dport 443 -j DROP
说明
设置防火墙后,可能有些服务器重启系统后会清空防火墙规则,导致设置的失效,所以我们设置规则后,需要使用iptables
命令保存下,保存命令可能在很多系统中都不通用,这里就不说了,需要各位自行搜索解决了,有耐心的也可以每次重启的时候都重新设置一下防火墙。
版权声明:本文为原创文章,版权归 Rat's Blog 所有,转载请注明出处!
本文链接:https://www.moerats.com/archives/684/
如教程需要更新,或者相关链接出现404,可以在文章下面评论留言。
设置完之后,无法解析任何域名了,没人注意到这个问题吗?
这似乎会把127.0.0.1屏蔽了。
把它加进去不就得了
请教RAT,我想屏蔽中国大陆访问80/443,使用以下设置是否正确,烦请指教,谢谢!
禁止IP段iptables -A INPUT -p tcp -m set --match-set cnip src -j ACCEPT
禁止指定端口80/443iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP
iptables -I INPUT -p tcp -m set --match-set cnip src -j ACCEPT
禁止指定端口80/443iptables -I INPUT -p tcp --dport 80 -j DROP
iptables -I INPUT -p tcp --dport 443 -j DROP
找了一下资料,似乎应该这样才对,还请Rat帮忙检查,谢谢
这个直接用nginx配置就可以禁止国内访问网站,还简单些
我用Apache也可以对吧,你这个省事点
都可以,nginx也行,不过这些需要安装ip模块啥的,相对来说比较复杂些
站长安安,我的vps环境是
CentOS 7.5.1804(x86_64)httpd nginx iptables
按照上面的设置没有效果不知道是哪一个环节出问题
谢谢站长>M<
按照步骤走是没错的,你设置完了后使用iptables -L查看下规则,带cnip的规则在第一排,如果你单独禁端口,那禁端口的规则在第二排。
翻车了,保存规则后重启vps iptables自启失败
要service iptables save再service iptables start才能启动。且规则也保存不了 。
其实可以不用保存的,每次重启服务器就运行一遍规则就行了。
这个长期需要的,程序要代替每次手动加规则