** 說明:** 博主很早前發過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
命令保存下,保存命令可能在很多系統中都不通用,這裡就不說了,需要各位自行搜索解決了,有耐心的也可以每次重啟的時候都重新設置一下防火牆。