banner
moeyy

moeyy

一条有远大理想的咸鱼。
github
mastodon
email

使用ipset設置防火牆端口白名單,只讓指定國家訪問

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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。