Saya menjalankan CentOS 5.5 dengan stok Apache httpd-2.2.3.
Saya telah mengaktifkan mod_status di Lokasi /server-status. Saya ingin mengizinkan akses ke Lokasi tunggal ini dengan cara berikut:
1 &; 2 mudah. Namun, karena saya "Izinkan dari 192.168.16.0/24", apakah mungkin untuk Menolak dari 192.168.16.100?
Saya mencoba menambahkan pernyataan Deny untuk 192.168.16.100 tetapi tidak berhasil. Berikut adalah konfigurasi yang relevan:
<Location /server-status>
SetHandler server-status
Order Allow,Deny
Deny from all
Deny from 192.168.16.100 # This does not deny access from 192.168.16.100
Allow from 192.168.16.0/24
</Location>
Atau:
<Location /server-status>
SetHandler server-status
Order Allow,Deny
Deny from all
Deny from 192.168.16.100 # This does not deny access from 192.168.16.100
Allow from 192.168.16.0/24
</Location>
Namun, ini tidak mencegah akses ke halaman khusus ini, seperti yang ditunjukkan dalam log Akses:
www.example.org 192.168.16.100 - - [11/Mar/2011:16:01:14 -0800] "GET /server-status HTTP/1.1" 200 9966 "-" "
Menurut manual untuk mod_authz_host:
Allow,Deny
Pertama, semua arahan Allow dievaluasi; setidaknya satu harus cocok, atau permintaan ditolak. Selanjutnya, semua arahan Deny dievaluasi. Jika ada yang cocok, permintaan ditolak
Alamat IP cocok dengan arahan Deny, jadi, bukankah seharusnya permintaan ditolak?
Menurut tabel pada halaman mod_authz_host, alamat IP ini seharusnya "Cocok dengan kedua Izinkan &; Tolak &", dan dengan demikian "Kontrol kecocokan akhir: Ditolak &" aturan seharusnya berlaku.
Cocokkan Izinkan, Tolak hasil Tolak, Izinkan hasil Cocokkan Izinkan saja Permintaan diizinkan Permintaan diizinkan Cocokkan Tolak saja Permintaan ditolak Permintaan ditolak Tidak ada kecocokan Default ke arahan kedua: Ditolak Default ke arahan kedua: Diizinkan Cocokkan keduanya Izinkan &; Tolak Kontrol kecocokan akhir: Ditolak Kontrol kecocokan akhir: Diizinkan
Saya belum mengujinya, tetapi saya pikir Anda hampir sampai di sana.
<Location /server-status>
SetHandler server-status
Order Allow,Deny
Deny from 192.168.16.100
Allow from 192.168.16.0/24
</Location>
Tolak dari semua
tidak diperlukan. Malah itu akan mengacaukan karena semuanya akan cocok dengan semua
, dan dengan demikian ditolak (dan saya pikir Apache mencoba untuk menjadi pintar dan melakukan sesuatu yang bodoh). Saya selalu menemukan arahan Apache, Order
, Allow
dan Deny
membingungkan, jadi selalu visualisasikan hal-hal dalam tabel (diambil dari dokumen):
Cocokkan | Izinkan, Tolak hasil | Tolak, Izinkan hasil ------------------------------------------------------- Izinkan saja | Diizinkan | Diizinkan Tolak saja | Ditolak | Ditolak Tidak cocok | Default: Ditolak | Default: Diizinkan Cocokkan keduanya | Kecocokan akhir: Ditolak | Kecocokan akhir: Diizinkan
Dengan pengaturan di atas:
Saya mungkin akan melihat juga menambahkan aturan IPTables untuk ini untuk menolak host tunggal pada port 80, menolak dari semua, dan mengizinkan subnet.
Anda seharusnya tidak memiliki masalah dalam menyiapkan aturan deny dari alamat tertentu setelah Anda mengizinkan subnet. Lakukan saja dalam urutan itu.
Dapatkah Anda menggunakan php? Jika demikian tambahkan statement php untuk keluar/redirect untuk satu alamat IP tertentu
Contoh:
$deny = array("111.111.111", "222.222.222", "333.333.333");
if (in_array ($_SERVER['REMOTE_ADDR'], $deny))
{ header("location: http://www.google.com/");
exit();
Referensi: http://perishablepress.com/press/2007/07/03/how-to-block-ip-addresses-with-php/