Terkadang, seorang webmaster dituntut untuk dapat melakukan pemblokiran terhadap IP tertentu supaya IP tersebut tidak bisa mengakses situs yang ia miliki karena berbagai macam alasan. Bisa jadi, webmaster tersebut hanya menginginkan situsnya diakses oleh IP yang ia kenal atau bisa jadi beberapa IP yang mengakses situs tersebut terdeteksi melakukan hal-hal yang mengganggu seperti melakukan aktifitas spamming.
Baca Juga Cara Install Nginx di Centos dan Cara Install Nginx di Ubuntu
Apapun alasannya, memblokir IP tertentu memang terkadang sangat dibutuhkan oleh seorang webmaster. Oleh karena itu pula lah, nginx sebagai salah satu web server gratis yang banyak digunakan saat ini menyediakan fasilitas pembokiran IP tertentu dengan cara yang sangat mudah dan simpel.
Cara Blokir IP Menggunakan Web Server Nginx
Cukup gunakan perintah deny dan allow di file konfigurasi virtual host (server block) nginx anda, maka anda sudah bisa mengatur IP mana saja yang ingin anda blokir dan IP mana saja yang diperbolehkan mengakses situs anda. Perintah deny digunakan untuk memblokir IP atau subnetnya secara langsung, sedangkan perintah allow digunakan untuk memberikan izin kepada IP atau subnet untuk dapat mengakses situs anda.
Berikut adalah contoh konfigurasinya :
# deny IP; deny 49.213.16.109; # deny subnet; deny 49.213.16.0/24; # allow IP; allow 185.106.122.114; # allow subnet; allow 185.106.122.0/24; # block all ips deny all; # allow all ips allow all;
Contoh kasus penggunaannya :
- Apabila anda ingin memblokir beberapa alamat IP maka cukup gunakan :
deny IP1; deny IP2; deny IPdst;
- Jika anda ingin memblokir subnet langsung, maka silahkan gunakan :
deny subnet1; deny subnet2 deny subnetdst;
- Apabila anda ingin memblokir seluruh IP kecuali IP tertentu, misalnya IP tertentu yang tidak akan diblokir adalah IP 185.106.122.114, maka gunakan :
deny all; allow 185.106.122.114;
IP atau subnet yang anda blokir tersebut nantinya tidak akan dapat mengakses situs anda secara keseluruhan dan akan mendapat pesan error 403 atau access forbidden. Adapun apabila anda hanya ingin memblokir IP atau subnet tertentu untuk direktori tertentu saja, maka silahkan tambahkan lokasi direktorinya sebelum menggunakan perintah deny dan allow seperti diatas.
Contoh :
location /download/ { allow all; deny 49.213.16.109; }
Maksud contoh diatas adalah bahwa direktori /download/ (http://situsanda.com/download/) dapat diakses oleh semua IP kecuali IP 49.213.16.109. Diluar direktori download tersebut, maka IP 49.213.16.109 akan dapat mengakses situs anda seperti biasa.
Silahkan anda modifikasi dan sesuaikan saja perintah allow dan deny tersebut sesuai dengan kebutuhan anda. Pada intinya, deny digunakan untuk blokir (melarang) dan allow digunakan untuk memperbolehkan (mengizinkan). Jangan lupa setelah selesai mengatur pemblokiran dan pemberian izin, anda harus merestart layanan web server nginx dengan command :
service nginx reload
atau
service nginx restart
Cara Merubah Halaman Error Nginx
Seperti yang saya informasikan diatas bahwa IP yang diblokir nantinya akan mendapati halaman error 403 dengan pesan access forbidden. Halaman error 403 tersebut adalah halaman default nginx, yang artinya setiap website yang menggunakan nginx dan melakukan pemblokiran untuk IP tertentu, maka IP tertentu tersebut akan mendapati halaman error 403 yang sama.
Apabila anda ingin merubah halaman default tersebut menjadi halaman yang berbeda dengan yang lain, silahkan anda buat saja file php atau html baru yang dikhususkan untuk halaman error 403 tersebut. Dalam tutorial ini, saya hanya akan membuat contoh pembuatan halaman 403 khusus dengan menggunakan html saja.
Silahkan anda masuk ke direktori tempat penyimpanan file-file situs anda. Misalnya tempat penyimpanan file situs saya berada di /usr/share/nginx/dedeerik.ga/ :
cd /usr/share/nginx/dedeerik.ga/
Buatlah file direktori baru, misalnya saya membuat direktori baru bernama error :
sudo mkdir error sudo chmod 755 /usr/share/nginx/dedeerik.ga/error/
Silahkan masuk ke direktori error yang sudah dibuat :
cd error
lalu buat file baru misalnya nama filenya adalah 403.html :
nano 403.html
Masukkan baris-baris seperti berikut ini :
<html> <head> <title>403</title> <center>Forbidden</center> </head> <body> </br><center> Mohon Maaf</br> Anda Tidak Boleh Mengakses Halaman ini</center> </body> </html>
Diatas hanyalah contoh file html basic, anda dapat merubahnya sesuai dengan keinginan anda.
Jangan lupa simpan file tersebut dengan CTRL+X, Y.
Masuk ke file konfigurasi virtual host (server block) nginx anda. Biasanya lokasi file virtual host tersebut berada di direktori /etc/nginx/conf.d/ atau /etc/nginx/sites-enabled/.
nano /etc/nginx/conf.d/dedeerik.ga.conf
Lalu, tambahkan baris seperti berikut ini kedalam file tersebut :
error_page 403 /error/403.html; location = /error/ { internal; root /usr/share/nginx/dedeerik.ga/; allow all; }
Simpan konfigurasinya dengan CTRL+X, Y.
Restart nginx dengan command :
service nginx restart
Apabila anda ingin merubah halaman error lain, misalnya halaman error 404 (not found), silahkan anda buat file html atau php baru seperti diatas, lalu tambahkan baris berikut ke dalam konfigurasi nginx virtual host anda :
error_page 404 /error/404.html;
Hal tersebut juga berlaku apabila anda ingin membuat atau merubah halaman error lainnya, misalnya halaman error 405, 500, 501, 502, 503 dan 504.
Cara Menghentikan Request URL Undefined
Entah karena theme yang saya gunakan, masalah javascript atau karena masalah lain, beberapa waktu yang lalu, saya sering menemukan adanya IP yang mengakses situs saya dengan tambahan /undefined. di akhir URL artikel. Misalnya http://www.dedeerik.com/artikel/undefined/ yang apabila diakses tentu saja hasilnya adalah error 404 not found.
Akses undefined ini pertama kali saya temukan pada statistis histats. Hal seperti ini saya rasa cukup mengganggu, karena akses undefined tersebut biasanya terus terjadi berulang kali, bahkan bisa sampai ratusan kali.
Ketika saya membuka access log di web server nginx, ternyata request url undefined ini saya temukan direquest oleh IP tertentu saja, bahkan ada satu IP yang sampai merequest halaman undefined hingga seribu kali. Sebenarnya masalah ini bisa diatasi dengan memblokir IP tersebut, tapi biasanya beberapa hari kemudian ada IP lain yang melakukan perbuatan yang sama, sehingga saya memutar otak dan mencari cara agar permintaan akses URL undefined ini dapat dihentikan.
Setelah bertanya kesana-kemari, akhirnya saya menemukan cara agar bisa menghentikan permintaan terhadap URL yang mengandung kata undefined tersebut dengan menggunakan return 204 di konfigurasi nginx virtual host saya seperti berikut ini :
location ~ undefined/?$ { return 204; }
Dengan konfigurasi tersebut, maka siapapun yang mencoba mengakses situs saya dengan menggunakan URL yang mengandung kata undefined, maka nantinya browser yang digunakan hanya akan menampilkan halaman sebelumnya, meskipun browser tersebut direload berkali-kali.
Konfigurasi diatas dapat anda sesuaikan dengan kebutuhan anda. Pada intinya dengan return 204, maka browser hanya akan menampilkan halaman sebelumnya. Kata undefined dapat anda ganti dengan kata atau kalimat lain yang sesuai dengan situasi dan kondisi yang anda alami.