前言:
??? 境外肉雞攻擊有點(diǎn)多,并業(yè)務(wù)無境外訪問需求,IDC機(jī)房網(wǎng)絡(luò)防火墻無法實(shí)現(xiàn)8K多條的china大陸地址導(dǎo)入;為實(shí)現(xiàn)僅china大陸地址訪問,在業(yè)務(wù)入口主機(jī)(DNAT端口映射或DNAT端口轉(zhuǎn)發(fā)),使用iptables防火墻+ipset過濾實(shí)現(xiàn)訪問控制,對(duì)于訪問量不大的業(yè)務(wù)可考慮使用。
如僅僅對(duì)某端口做過濾,搜本博"iptables-ipset僅允許國(guó)內(nèi)訪問---端口白名單"篇
如需簡(jiǎn)單快捷的方式,搜本博“以錯(cuò)誤路由方式禁止境外IP來訪”篇 (缺點(diǎn):主機(jī)也無法主動(dòng)請(qǐng)求境外目標(biāo)了)
創(chuàng)建ipset得到的備份文件,便于批量添加8k條地址
創(chuàng)建一個(gè)ipset
?ipset create whitelist hash:net maxelem 1000000
加入一個(gè)名單ip
ipset add whitelist 9.9.9.9
查看已經(jīng)ipset配置內(nèi)容
ipset list
Name: whitelist
Type: hash:net
Revision: 3
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 16816
References: 0
Members:
9.9.9.9
將ipset規(guī)則保存到文件
ipset save whitelist -f whitelist.txt
查看備份內(nèi)容
more? whitelist.txt
create whitelist hash:net family inet hashsize 1024 maxelem 1000000
add whitelist 9.9.9.9
下載china大陸地址集合并處理格式
curl -# -O http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
cat delegated-apnic-latest | awk -F '|' '/CN/&&/ipv4/ {print $4 "/" 32-log($5)/log(2)}'|cat >ip.txt
head -n 2 ip.txt???
1.0.1.0/24
1.0.2.0/23
設(shè)置符合ipset備份文件格式
sed 's/^/&add whitelist /g'? ip.txt? >? add-ip.txt
cat? add-ip.txt?? >> whitelist.txt;? cp whitelist.txt? china_whitelist.txt
head -n 4?? china_whitelist.txt ????????
create whitelist hash:net family inet hashsize 1024 maxelem 65536
add whitelist 9.9.9.9
add whitelist 1.0.1.0/24
add whitelist 1.0.2.0/23
先刪除前面創(chuàng)建的ipset
ipset destroy whitelist
導(dǎo)入ipset規(guī)則
ipset restore -f china_whitelist.txt
查看目前應(yīng)用的ipset內(nèi)容
ipset list | head -n 12
Name: whitelist
Type: hash:net
Revision: 3
Header: family inet hashsize 2048 maxelem 1000000
Size in memory: 126736
References: 0
Members:
202.118.64.0/18
223.212.0.0/15
103.217.56.0/22
150.242.184.0/22
43.246.76.0/22
去除名單ip
ipset del whitelist 9.9.9.9
導(dǎo)入完畢
禁用centos7firewalld,安裝iptables
systemctl stop firewalld
systemctl disable firewalld
yum -y? install iptables-services
systemctl start iptables
systemctl enable iptables
操作
service? iptables status
service? iptables stop
service? iptables restart
iptables -F
先放行SSH,以免無法遠(yuǎn)程
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
service iptables save
修改內(nèi)核參數(shù),開啟轉(zhuǎn)發(fā)功能
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
開啟DNAT
?iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.53.22:80
?iptables -t nat -L -n
(后端主機(jī)看實(shí)際情況做返程路由,這里不做贅述,當(dāng)然阿里云等不適用自建DNAT端口映射,可改用DNAT的端口轉(zhuǎn)發(fā),主要看后端有沒獲取客戶端源IP需求)
應(yīng)用ipset規(guī)則實(shí)現(xiàn)白名單,禁止境外ip
在dnat的端口用FORWARD鏈
iptables -t filter -I? FORWARD? -m set --match-set ?whitelist? src -p tcp --dport 80? -j? ACCEPT
iptables -t filter -A? FORWARD -p tcp --dport? 80 -j DROP
iptables? -L -n
使用國(guó)內(nèi)與境外地址分別測(cè)試通達(dá)性
curl -I ?http://ip+端口
如實(shí)現(xiàn)預(yù)期,保存規(guī)則永久生效
service iptables save
reboot重啟ipset集合消失,并且導(dǎo)致iptables啟動(dòng)失敗
?????? 因創(chuàng)建的 ipset 存于內(nèi)存中
解決:
?????? yum ?-y install ipset-service
?????? systemctl?enable?ipset
?????? ipset restore -f china_whitelist.txt
?????? service?ipset?save
sed -i 's/IPSET_SAVE_ON_STOP="no"/IPSET_SAVE_ON_STOP="yes"/' /etc/sysconfig/ipset-config
帶時(shí)間的玩法
創(chuàng)建默認(rèn)ip生效時(shí)間為1天的ipset集合
ipset create timeout_list hash:net timeout 86400
ipset add timeout_list? 1.9.9.9 ?#繼承集合默認(rèn)生存時(shí)間
ipset add timeout_list? 2.9.9.9? timeout 3600 ?#生存時(shí)間為1小時(shí)
ipset add timeout_list? 3.9.9.9? timeout? 0? ??#生效時(shí)間無限
查看
ipset? list? timeout_list
Name: timeout_list
----
Header: family inet hashsize 1024 maxelem 65536 timeout 86400
----(像redis一樣顯示時(shí)間倒計(jì)時(shí))
1.9.9.9 timeout 86372
3.9.9.9 timeout 0
2.9.9.9 timeout 3572
關(guān)于刪除ipset和DNAT
因地址條目過多索引過大,帶來的刪除ipset和DNAT失敗
刪除DNAT異常
iptables -t nat -L -n --line-numbers
iptables -t nat? -D POSTROUTING? 號(hào)
報(bào)iptables: Index of deletion too big.
刪除ipset異常
ipset destroy whitelist
ipset v7.1: Set cannot be destroyed: it is in use by a kernel component
嘗試清空ipset的ip條目再刪除
ipset flush
結(jié)果也是一樣
嘗試關(guān)閉iptables再刪除ipset
service iptables stop
ipset destroy whitelist
隨后發(fā)現(xiàn)service iptables restart失敗 ,提示找不到whitelist,需要導(dǎo)入回去再重啟恢復(fù)。
ipset restore -f china_whitelist.txt
service iptables restart
最終的清理方式
iptables? -F
ipset destroy whitelist
service iptables save
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
service iptables save
添加連續(xù)ip范圍到集合
ipset add a_list? 1.1.2.1-1.1.2.64????????
ipset list a_list文章來源:http://www.zghlxwxcb.cn/news/detail-459061.html
Name: a_list
Members:
1.1.2.2/31
1.1.2.1
1.1.2.16/28
1.1.2.32/27
1.1.2.64
1.1.2.8/29
1.1.2.4/30
詳細(xì)應(yīng)用移步
參考文獻(xiàn)
ipset詳解 使用ipset提高iptables的控制效率 - 快樂嘉年華 - 博客園文章來源地址http://www.zghlxwxcb.cn/news/detail-459061.html
到了這里,關(guān)于iptables-ipset僅允許國(guó)內(nèi)訪問---DNAT入口的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!