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