Add Rule block IP ต่างประเทศ by port โดยใช้ Iptable (Debian/Ubuntu)
1) Install ipset
apt install ipset
2) สร้าง directory เก็บ script ต่างๆ
mkdir /root/iptable-rule
เข้าไปใน directory ไว้ ขั้นตอนหลังจากนี้จะทำในนี้หมด
cd /root/iptable-rule
3) สร้าง script download list ip ต่างประเทศ
$ vim list_ip.sh
#!/bin/bash
wget -P /root/iptable-rule/ https://www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz
tar -xvf /root/iptable-rule/all-zones.tar.gz -C /root/iptable-rule/all-zones
rm -rf /root/iptable-rule/all-zones.tar.gz
rm -rf /root/iptable-rule/all-zones/th.zone
chmod 755 /root/iptable-rule/list_ip.sh
4) สร้าง script สำหรับ add rule ให้ iptable
vim block_inter.sh
#!/bin/bash
ls -r /root/iptable-rule/all-zones > /root/iptable-rule/zone.txt
for x in $(cat /root/iptable-rule/zone.txt)
do
ipset create geoblockinter_${x} hash:net
for IP in $(cat /root/iptable-rule/all-zones/${x})
do
ipset add geoblockinter_${x} $IP
done
done
for y in $(cat /root/iptable-rule/zone.txt)
do
/sbin/iptables -A INPUT -m set --match-set geoblockinter_${y} src -p tcp --dport 1000:65535 -j DROP
/sbin/iptables -A INPUT -m set --match-set geoblockinter_${y} src -p tcp --dport 443 -j DROP
done
for z in $(cat /root/iptable-rule/zone.txt)
do
ipset save geoblockinter_${z} > /etc/iptables/ipset/geoblockinter_${z}
done
chmod 755 /root/iptable-rule/block_inter.sh
##สามารถเปลี่ยน port ตามที่ต้องการจะ block ได้ ในตัวอย่างจะblock 1000 ถึง 65535 และ 443
5) รัน script ตามขั้นตอนต่อไปนี้
รัน list_ip.sh เพื่อ download list ip
$ bash -x list_ip.sh
รัน block_inter.sh เพื่อ add rule to iptable
$ bash -x block_inter.sh
7) สร้าง script สำหรับ run rule iptable เมื่อ restart
#!/bin/bash
for z in $(cat /root/iptable-rule/zone.txt)
do
/sbin/ipset restore < /etc/iptables/ipset/geoblockinter_${z}
done
systemctl restart netfilter-persistent.service
รัน script ด้านบน โดยใช้ crontab
6) ถ้าจะ add rule นอกเหนือจากนี้ให้ใช้ script ด้านล่างนี้
#!/bin/bash
/sbin/iptables -F
for y in $(cat /root/iptable-rule/zone.txt)
do
/sbin/iptables -A INPUT -m set --match-set geoblockinter_${y} src -p tcp --dport 1000:65535 -j DROP
/sbin/iptables -A INPUT -m set --match-set geoblockinter_${y} src -p tcp --dport 443 -j DROP
done
for a in $(cat /root/iptable-rule/allow_ip.txt)
do
/sbin/iptables -I INPUT -p tcp -s ${a} -j ACCEPT
done
/sbin/iptables-save > /etc/iptables/rules.v4
systemctl restart netfilter-persistent.service
ใส่ ip ที่ต้องการเพิ่ม โดย
vim allow_ip.txt
Example
security.ubuntu.com
repo.zabbix.com
nginx.org
ppa.launchpad.net