Salah satu tindakan pencegahan mengamankan akses server dari internet adalah membatasi aksesnya berdasarkan letak geografis.
Pada artikel ini, saya menggunakan Rocky Linux 8 dengan kernel 4.18 dan xtables-addons 3.27. Sebagai contoh, pembatasan akses akan dilakukan pada Zimbra Mail blockServer

1. Instalasi dependensi
yum install gcc gcc-c++ kernel-modules kernel-core kernel-headers kernel-devel perl-Net-CIDR-Lite perl-Text-CSV_XS elfutils-libelf-devel iptables-services
2. Download dan extract xtables-addons
cd /tmp/ wget -c https://inai.de/files/xtables-addons/xtables-addons-3.27.tar.xz tar -xvf xtables-addons-3.27.tar.xz
3. Hapus extension obj-$ kecuali xt_geoip
Karena saya hanya butuh GeoIP saja, maka saya hapus extension yang lain
cd xtables-addons-3.27 vi extensions/Kbuild
Lihat contoh di bawah
[root@localhost xtables-addons-3.27]# cat extensions/Kbuild # -*- Makefile -*- include ${XA_ABSTOPSRCDIR}/mconfig -include ${XA_ABSTOPSRCDIR}/mconfig.* obj-m += compat_xtables.o obj-${build_geoip} += xt_geoip.o -include ${M}/*.Kbuild -include ${M}/Kbuild.*
4. Compile dan install xtables-addons
./configure make make install
Jika mengalami kendala ketika compile, pastikan UEFI dalam keadaan non-aktif. Untuk mengeceknya, jalankan perintah berikut
sudo mokutil --sb-state
Contoh tampilan
[root@localhost xt_geoip]# sudo mokutil --sb-state EFI variables are not supported on this system
Jika menggunakan VMware, silakan ikuti panduan non-aktifkan UEFI: https://knowledge.broadcom.com/external/article/377377/enable-or-disable-uefi-secure-boot-for-a.html
5. Enable module xt_geoip
modprobe xt_geoip
6. BuatΒ account di https://www.maxmind.com
Setelah membuat account di maxmind.com, Pilih menu Manage License Keys dan generate a new license key. Simpan Account ID dan License Key untuk download GeoIP di bagian berikutnya.
7. Membuat direktori GeoIP
mkdir /usr/share/xt_geoip/
8. Download GeoIP databases
cd /usr/share/xt_geoip/ wget -q -OGeoLite2-Country-CSV.zip "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country-CSV&license_key=INSERT-LICENSE-KEY-FROM-MAXMIND&suffix=zip" unzip GeoLite2-Country-CSV.zip cp GeoLite2-Country-CSV*/GeoLite2-Country-Blocks-IPv4.csv /usr/share/xt_geoip/ wget -O dbip-country-lite.csv.gz "https://download.db-ip.com/free/dbip-country-lite-$(date +'%Y-%m').csv.gz" gunzip dbip-country-lite.csv.gz
Note: Silakan sesuaikan INSERT-LICENSE-KEY-FROM-MAXMIND
9. Compile GeoIP database
/tmp/xtables-addons-3.27/geoip/xt_geoip_build -D /usr/share/xt_geoip/ GeoLite2-Country-Blocks-IPv4.csv
10. Membuat rule iptables
iptables -A INPUT -s 127.0.0.0/8 -j ACCEPT iptables -A INPUT -s IP-OF-MY-ZIMBRA -j ACCEPT iptables -A INPUT -m geoip ! --src-cc ID -p tcp -m multiport --dport 80,110,143,443,465,587,993,995,7071 -j DROP
Jika kamu ingin menambahkan country code yang lain, gunakan koma. Contoh: Saya ingin mengizinkan akses dari Singapur juga
iptables -A INPUT -m geoip ! --src-cc ID,SG -p tcp -m multiport --dport 80,110,143,443,465,587,993,995,7071 -j DROP
11. Iptables persistent
Agar rule yang dibuat otomatis load ketika booting, aktifkan iptable service
yum install iptables-services
12. Save, enable autostart dan restart
service iptables save systemctl enable iptables systemctl restart iptables
Sekarang kamu bisa testing akses Zimbra dari country code yang diizinkan dan tidak diizinkan. Kamu juga bisa gunakan tools berikut untuk mengecek portnya: https://mxtoolbox.com/TCPLookup.aspx atau yang ini: https://www.yougetsignal.com/tools/open-ports/
Saat ini, Zimbra server saya hanya bisa diakses dari Indonesia (atau singapur) saja
Semoga bermanfaat π