Panduan ini tentu tidak hanya untuk Rocky Linux saja, namun OS Linux yang lain seperti Redhat, Oracle Linux, CentOS Linux, Alma Linux, dan Redhat derivative lainnya.
Goal dari tulisan ini adalah membatasi akses ke server hanya dari IP negara (GeoIP) tertentu saja. Misalnya hanya dari IP Indonesia saja. Selain dari IP Indonesia, tidak bisa diakses
Contohnya untuk membatasi akses Zimbra Mail Server
Versi Rocky Linux yang digunakan sebagai contoh pada tulisan ini adalah versi 8. So, kita langsung saja install
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 semua ektension obj-$ kecuali xt_geoip
Karena hanya membutuhkan GeoIP, ektension yang lainnya dihapus
cd xtables-addons-3.27 vi extensions/Kbuild
Lihat contoh di bawah ini
[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 pada saat compile, pastikan UEFI dinonaktifkan. Bisa dicek dengan perintah berikut
sudo mokutil --sb-state
Contoh hasilnya
[root@localhost xt_geoip]# sudo mokutil --sb-state EFI variables are not supported on this system
Jika menggunakan VMware, ikuti panduan ini untuk menonaktifkan UEFI: https://knowledge.broadcom.com/external/article/377377/enable-or-disable-uefi-secure-boot-for-a.html
5. Aktifkan modul xt_geoip
modprobe xt_geoip
6. Buat account di https://www.maxmind.com
Setelah membuat account di maxmind.com, klik Manage License Keys dan generate a new license key. Simpan Account ID dan License Key untuk download GeoIP di tahapan berikutnya.
7. Membuat direktori GeoIP
mkdir /usr/share/xt_geoip/
8. Download GeoIP database
cd /usr/share/xt_geoip/ wget -q -O GeoLite2-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
Catatan: Silakan ganti 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. Buat 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 ingin mengizinkan kode negara lain, gunakan koma. Sebagai contoh saya ingin mengizinkan akses dari Singapore 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 iptables otomatis terload ketika booting, install iptables-services
yum install iptables-services
12. Simpan, aktifkan autostart dan restart
service iptables save systemctl enable iptables systemctl restart iptables
Sekarang coba akses Zimbra dari IP negara yang diizinkan dan tidak diizinkan. Atau coba test menggunakan tools untuk cek port: https://mxtoolbox.com/TCPLookup.aspx atau yang ini: https://www.yougetsignal.com/tools/open-ports/
Silakan dicoba 🙂