Blokir Akses Berdasarkan GeoIP di RHEL 8, Rocky 8, Oracle Linux 8, dan CentOS 8

Posted by

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

Gambar generate by AI

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 πŸ™‚

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.