Ada kalanya, kita ingin agar direktori atau lokasi tertentu pada web server hanya dapat diakses dari IP terdaftar di negara tertentu. Dan, ketika kondisi ini terpenuhi, kita berikan proteksi tambahan pada direktori tersebut dengan password.
Sebagai contoh, ketika user mengunjungi /data dari web browser, kita hanya ijinkan dari IP yang terdaftar di country code ID dan isi direktori hanya dapat ditampilkan apabila user telah memasukkan kombinasi username dan password yang tepat.
Tutorial ini mengasumsikan sistem operasi yang digunakan adalah Alma Linux 8 dan web server yang digunakan adalah Apache HTTP Server, dimana semua yang dibutuhkan tersedia sebagai package yang siap diinstalasi.
Catatan:
Berikanlah perintah berikut untuk melakukan instalasi web server, kemudian memastikan web server tersebut dijalankan:
sudo dnf install httpd sudo systemctl enable httpd sudo systemctl restart httpd
Apabila diperlukan, cobalah untuk mengunjungi IP komputer tersebut dengan web browser (secara default, sebuah halaman welcome akan ditampilkan).
Kita akan membuat direktori data di /var/www/html/ dengan perintah berikut:
cd /var/www/html/ sudo mkdir data
Dengan browser sebelumnya, tambahkanlah /data pada URL yang dikunjungi. Secara default, isi direktori akan ditampilkan.
Untuk kebutuhan ini, kita perlu menginstalasi package mod_maxminddb (dari EPEL) beserta package tambahan.
sudo dnf install mod_maxminddb geolite2-country geolite2-city
Perhatikanlah bahwa konfigurasi /etc/httpd/conf.d/maxminddb.conf telah dibuat. Sesuaikanlah menjadi isi berikut:
<IfModule mod_maxminddb.c> MaxMindDBEnable On MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb MaxMindDBFile CITY_DB /usr/share/GeoIP/GeoLite2-City.mmdb </IfModule>
Perhatikanlah juga bahwa modul httpd terkait telah di-load, sebagaimana isi file /etc/httpd/conf.modules.d/10-maxminddb.conf
LoadModule maxminddb_module modules/mod_maxminddb.so
Misal kita hanya mengijinkan akses dari country code ID untuk /data, buatlah file /etc/httpd/conf.d/data.conf (misal sudo vim /etc/httpd/conf.d/data.conf) dengan isi berikut.
<Location /data> MaxMindDBEnable On MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code SetEnvIf MM_COUNTRY_CODE ^(ID) AllowCountry Require env AllowCountry </Location>
Kemudian, restartlah httpd dengan:
sudo systemctl restart httpd
Apabila IP yang digunakan sesuai country code, maka /data tetap dapat diakses. Cobalah mengubah ID menjadi country code lain (dan restart httpd), dan dengan koneksi internet yang sama, kunjungilah /data. Error 403 Forbidden akan tampil. Kembalikanlah ke konfigurasi semula dan restartlah kembali httpd untuk melanjutkan pembahasan kita.
Mari kita buat file /etc/httpd/.passwd dan tambahkan user dengan nama admin. Apabila file/user telah ada, sesuaikanlah opsi menjalankan htpasswd.
sudo htpasswd -c /etc/httpd/.passwd admin
Sesuaikanlah /etc/httpd/conf.d/data.conf menjadi isi berikut. Pastikanlah baris Require env AllowCountry sebelumnya telah dihapus. Perhatikanlah juga bahwa kita mengunakan RequireAll untuk kondisi yang diinginkan.
<Location /data> MaxMindDBEnable On MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code SetEnvIf MM_COUNTRY_CODE ^(ID) AllowCountry AuthType Basic AuthName "Data" AuthUserFile /etc/httpd/.passwd <RequireAll> Require env AllowCountry Require valid-user </RequireAll> </Location>Restartlah httpd. Apabila tidak berhasil authentikasi, error 401 Unauthorized akan ditampilkan.
Terima kasih telah membaca :)