Cara Blokir Akses IP Address Langsung (http & https) di Apache2/NginX

Cara Blokir Akses IP Address Langsung di Apache2/NginX – Sebuah webserver bisa menampung lebih dari satu website berdasarkan pengaturan kita sebagai sysadmin dengan memanfaatkan sumber daya yang masih dirasa longgar untuk dijadikan multi hosting dengan menggunakan IP Address server yang sama. Lantas bagaimana jika setiap server tersebut memiliki IP Address sendiri?

Dalam hal ini jika sebuah server memiliki IP Address sendiri maka kita bisa mengetikkan alamat url dengan IP Address tersebut ke web browser jika konfigurasi dalam server tersebut secara default. Mungkin ini terkadang menjadi masalah saat crawlers mencoba untuk crawl IP Address tersebut yang seharusnya tidak dilihat.

Kita mungkin tidak akan mendapatkan masalah ini jika menggunakan shared hosting.

Pada dasarnya server yang kita gunakan menggunakan IP address untuk mengaksesnya, dan disini DNS berfungsi sebagai penerjemah, contoh kita tidak perlu mengingat atau membagikan alamat server kita dengan IP Adress tapi menggunakan nama domain yang mudah diingat. DNS atau Domain Name System, menerjemahkan nama domain yang dapat dibaca manusia misalnya judisweb.com ke alamat IP yang dapat dibaca mesin misalnya 172.5.23.134.

Tetapi jika kita menjalankan webserver Apache2/NginX sendiri pada VPS atau dedicated server, webserver kita bisa diakses secara langsung menggunakan IP Address tersebut.

JudisWeb disable ip welcome
With domain name
JudisWeb disable ip welcome2
With IP Address
judisweb disable ip welcome3
Disable direct ip access

Blokir Akses IP Address HTTP Apache2

Buat file konfigurasi website baru pada direktori sites-available nginx /etc/apache2/sites-available dengan nama bebas misal disable_direct_ip_access_http.conf.

sudo nano /etc/apache2/sites-available/disable_direct_ip_access_http.conf
<VirtualHost *:80>
    ServerName IP_ADDRESS
    Redirect 403 /
    DocumentRoot /var/www/html
</VirtualHost>

Keluar editor nano kemudian save file tersebut dan aktifkan konfigurasi baru:

sudo a2ensite disable_direct_ip_access_http.conf

Kemudian restart Apache2:

sudo systemctl restart apache2

Blokir Akses IP Address HTTPS/SSL Apache2

Buat file konfigurasi website baru pada direktori sites-available nginx /etc/apache2/sites-available dengan nama bebas misal disable_direct_ip_access_ssl.conf.

sudo nano /etc/apache2/sites-available/disable_direct_ip_access_ssl.conf
<IfModule mod_ssl.c>
	<VirtualHost *:443>
       		ServerName xxx.xxx.xxx.xxx
       		Redirect 403 /
       		DocumentRoot /var/www/YOURDOMAIN.COM/public_html
   	</VirtualHost>
</IfModule>

Keluar editor nano kemudian save file tersebut dan aktifkan konfigurasi baru:

sudo a2ensite disable_direct_ip_access_ssl.conf

Kemudian restart Apache2:

sudo systemctl restart apache2

Blokir Akses IP Address HTTP NginX

Blokir Akses IP Address di Nginx

Buat file konfigurasi website baru pada direktori sites-available nginx /etc/nginx/sites-available dengan nama bebas misal disable_direct_ip_access.conf atau tanpa file ekstensi .conf.

sudo nano /etc/nginx/sites-available/disable_direct_ip_access_http

atau:

sudo nano /etc/nginx/sites-available/disable_direct_ip_access_http.conf

Dengan mengaktifkan konfigurasi baru tersebut bisa menjadi default semua server_name yang tidak ditentukan secara eksplisit. Contoh pada artikel sebelumnya Cara Membuat Server Block NginX, saya jelaskan bagaimana membuat virtual host dimana server_name ditentukan secara eksplisit misal: www.namadomain1.com namadomain1.com.

server {
	listen 80;
 	listen [::]:80;
 	server_name _;

 	#return <HTTP_RESPONSE_STATUS_CODE>;
	return 444;
}

Note: Kode respons 444 adalah kode respons semu khusus Nginx, kode ini menginstruksikan Nginx untuk hanya menutup koneksi dan tidak memberikan respons apa pun.

Jika mau, kita juga dapat menggunakan return 404 (not found) atau return 403 (forbidden) sebagai gantinya untuk memberi tahu pengguna bahwa tidak ada yang dapat ditemukan di sini atau akses terlarang.

Atau menggunakan redirect:

server {
        listen 80;
        server_name IP_ADDRESS;
        return 301 http://YOUR.DOMAIN;
}

Saat kita mengaktifkan konfigurasi ini, http://<IP> seharusnya tidak lagi dapat diakses.

Mengaktifkan Konfigurasi Nginx yang baru Blokir Akses IP Address:

sudo ln -s /etc/nginx/sites-available/disable_direct_ip_access_http /etc/nginx/sites-enabled/

Kemudian restart NginX:

sudo service nginx restart

3 Cara Blokir Akses IP Address HTTPS/SSL NginX

Ada 3 cara untuk Blokir Akses IP Address HTTPS NginX:

  1. Menggunakan self-signed ssl_certificate
  2. Menggunakan ssl_reject_handshake
  3. Menggunakan IF

Check versi nginx terlebih dahulu untuk Blokir Akses IP Address HTTPS NginX:

nginx -v

Menggunakan Self-signed ssl_certificate Untuk versi NginX lama dibawah 1.19.4

Step 1: Membuat sertifikat placeholder yang ditandatangani sendiri

sudo mkdir -p /usr/local/etc/ssl
cd /usr/local/etc/ssl
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout default.key -out default.crt -subj '/CN='

Step 2: Membuat Server Block NginX (virtual host)

Kemudian, mari kita lihat pengaturan server block. Bisa menggunakan file konfigurasi default yang terletak pada /etc/nginx/sites-available/default atau dengan membuat konfigurasi baru /etc/nginx/sites-available/disable_direct_ip_access_http_https.

sudo nano /etc/nginx/sites-available/disable_direct_ip_access_http_https
server {
	listen 80;
	listen [::]:80;

 	listen 443;
 	listen [::]:443;

	ssl_ciphers aNULL; 
 	ssl_certificate /usr/etc/ssl/default.crt;
 	ssl_certificate_key /usr/etc/ssl/default.key;

 	server_name _;
	#return <HTTP_RESPONSE_STATUS_CODE>;
 	return 444;
}

Step 3: Mengaktifkan Server Block/Virtual Host Nginx

sudo ln -s /etc/nginx/sites-available/disable_direct_ip_access_http_https /etc/nginx/sites-enabled/

dan setelah itu restart NginX:

sudo service nginx restart

Menggunakan ssl_reject_handshake Untuk versi NginX 1.19.4 dan terbaru

Jika kita menggunakan Nginx 1.19.4 atau yang lebih baru, dengan menggunakan ssl_reject_handshake membuatnya sangat mudah untuk memblokir akses IP langsung melalui HTTPS.

Step 1: Membuat Server Block NginX (virtual host)

Bisa menggunakan file konfigurasi default yang terletak pada /etc/nginx/sites-available/default atau dengan membuat konfigurasi baru /etc/nginx/sites-available/disable_direct_ip_access_http_https.

sudo nano /etc/nginx/sites-available/disable_direct_ip_access_http_https
server {
	listen 80;
 	listen [::]:80;

 	listen 443;
 	listen [::]:443;
 	ssl_reject_handshake on;

 	server_name _;
 	return 444;
}

Step 2: Mengaktifkan Server Block/Virtual Host Nginx

Aktifkan konfigurasi server block/virtual host:

sudo ln -s /etc/nginx/sites-available/disable_direct_ip_access_http_https /etc/nginx/sites-enabled/

Kemudian restart nginx:

sudo service nginx restart

Menggunakan IF

server {
	listen 443 default_server;
 	listen [::]:443 default_server;
	server_name YOUR_DOMAIN.com;
 
	ssl_certificate /etc/nginx/ssl/YOUR_DOMAIN.com.crt;
	ssl_certificate_key /etc/nginx/ssl/YOUR_DOMAIN.com.key;

	if ($host != "YOUR_DOMAIN.com") {
 		return 444;
	}
}

Kesimpulan

Dari tutorial diatas kita telah mempelajari Cara Blokir Akses IP Address Langsung (http & https) di Apache2/NginX step by step baik menggunakan webserver Nginx maupun Apache2.

Semoga bermanfaat.

Reference:

Tinggalkan komentar