Di Apache, bagaimana cara menonaktifkan akses ke situs web ketika seseorang hanya menggunakan alamat IP di browser web?

8

Saya menggunakan server web apache di CentOS dan saya perlu menonaktifkan kemampuan orang untuk mengakses situs web dengan menggunakan alamat IP server di browser web. Saya menginginkannya sehingga ketika seseorang mencoba menelusuri ke alamat IP mereka mendapatkan pesan kesalahan terlarang.

Konfigurasi apa yang diperlukan untuk melakukan itu?

Amr Elkhedewy
sumber

Jawaban:

10

Cukup atur virtual host default. Ada contoh yang dikomentari di dalam httpd.confatau melakukan sesuatu yang sepele seperti:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>
Michael Hampton
sumber
Nah, Ini menyelesaikan masalah saya .. terima kasih banyak untuk Anda semua :)
Amr Elkhedewy
7

Anda dapat mencapai ini dengan mod_rewrite (baik dalam .htaccessfile, atau dalam konteks server default, atau dalam VirtualHost terpisah di mana ServerNamealamat IP host):

RewriteEngine On
RewriteCond %{HTTP_HOST} 1.2.3.4 # Replace with your own IP address
RewriteRule .* - [F]

Ini mengatakan bahwa jika header HTTP_HOST cocok dengan alamat ip 1.2.3.4, maka setiap permintaan harus dipenuhi dengan a 403 Forbidden. Permintaan apa pun yang memiliki tajuk HTTP_HOST lain (mis. Permintaan dengan nama domain sebenarnya dan bukan alamat IP) tidak boleh terpengaruh.

Jenny D
sumber
Tidak berfungsi di httpd.conf
Amr Elkhedewy
itu bekerja melalui file .htaccess, saya perlu dilakukan dari konfigurasi Apache.
Amr Elkhedewy
2
Apakah Anda memulai ulang apache setelah mengedit httpd.conf? Kalau tidak apache tidak akan tahu tentang konfigurasi baru. Ini berbeda dari .htaccess, yang juga diuraikan tanpa memulai ulang apache.
etagenklo
Tentu tetapi tidak ada yang berubah
Amr Elkhedewy
1

Anda tidak dapat memblokir akses langsung dengan IP. Anda harus mengizinkan koneksi tetapi kemudian memutuskan apa yang harus dilakukan dengannya. Ini bisa mengembalikan 403, a 404 atau mengarahkan mereka ke halaman yang diinginkan. Anda dapat melakukan ini dengan mod_rewrite.

 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
 RewriteRule ^(.*)$ - [F,L]

Ini akan cocok dengan tajuk HTTP HOST yang disahkan oleh klien web. Semua permintaan lain akan lewat.

Namun, Anda mungkin ingin menormalkan URL Anda untuk keperluan SEO.

Dengan pendekatan ini Anda menulis ulang apa pun yang tidak cocok dengan hasil yang diinginkan.

RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]

Referensi: https://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl

Referensi: http://en.wikipedia.org/wiki/URL_normalization

jeffatrackaid
sumber
Tidak berfungsi di httpd.conf
Amr Elkhedewy
itu bekerja melalui file .htaccess, saya perlu dilakukan dari konfigurasi Apache.
Amr Elkhedewy
Ini akan bekerja di httpd.conf, tetapi pastikan untuk mengaktifkan mesin menulis ulang dan menaruhnya di dalam arahan host virtual Anda. Kalau tidak, itu hanya akan berlaku untuk server default Anda. Lihat: httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
jeffatrackaid
1

Solusi ini tidak mencakup semua kasus.

Ganti angka atau titik apa pun di URL IP dengan% ## misalnya 1 dengan% 31 ... 8 dengan% 38 dan Anda akan tiba di IP, bukan pada url domain.

Misalkan IP buruk ini, digunakan untuk memudahkan penjelasan: 123.45.6.789

Anda harus menggunakan 2 alternatif untuk semua digit dan titik: titik adalah% 2E dan 0..9 adalah% 30 ..% 39

RewriteEngine on
RewriteCond %{HTTP_HOST} (1|%31)(2|%32)(3|%33)(\.|%2E)(4|%34)(5%35)(\.|%2E)(6|%36)(\.|%2E)(7|%37)(8|%38)(9|%39)
RewriteRule . - [F]

Jelek, itu bisa dikurangi dengan {1,3} dan ditahan ke IP yang valid tetapi seperti untuk IP Anda, tidak perlu melakukannya.

Jangan lupa port seperti ": 80". HTTP_HOST memuatnya dan SERVER_NAME tidak dapat diandalkan.

shijie-hk
sumber