ฉันใช้ CentOS 5.5 พร้อมกับ Apache Apache httpd-2.2.3
ฉันเปิดใช้งานmod_statusที่ตำแหน่ง / เซิร์ฟเวอร์ - สถานะ ฉันต้องการอนุญาตการเข้าถึงตำแหน่งนี้ด้วยวิธีต่อไปนี้:
- ปฏิเสธจากทั้งหมด
- อนุญาตจากซับเน็ต 192.168.16.0/24
- ปฏิเสธจาก IP 192.168.16.100 ซึ่งอยู่ในเครือข่ายย่อย 192.168.16.0/24
1 & 2 นั้นง่าย อย่างไรก็ตามเนื่องจากฉัน "อนุญาตจาก 192.168.16.0/24" เป็นไปได้ไหมที่ปฏิเสธจาก 192.168.16.100
ฉันพยายามเพิ่มคำสั่งปฏิเสธสำหรับ 192.168.16.100 แต่มันไม่ทำงาน นี่คือการกำหนดค่าที่เกี่ยวข้อง:
<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>
หรือ:
<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>
อย่างไรก็ตามสิ่งนี้ไม่ได้ป้องกันการเข้าถึงหน้านี้โดยเฉพาะดังที่แสดงในบันทึกการเข้าถึง:
www.example.org 192.168.16.100 - - [11/Mar/2011:16:01:14 -0800] "GET /server-status HTTP/1.1" 200 9966 "-" "
ตามคู่มือสำหรับmod_authz_host :
อนุญาตให้ปฏิเสธ
ก่อนอื่นคำสั่ง Allow ทั้งหมดจะถูกประเมิน ต้องตรงกันอย่างน้อยหนึ่งรายการหรือคำขอถูกปฏิเสธ ถัดไปคำสั่งปฏิเสธทั้งหมดได้รับการประเมิน หากการแข่งขันใด ๆ คำขอถูกปฏิเสธ
ที่อยู่ IP ตรงกับคำสั่งปฏิเสธดังนั้นคำขอไม่ควรถูกปฏิเสธ?
ตามตารางในหน้า mod_authz_host ที่อยู่ IP นี้ควร "จับคู่ทั้งอนุญาตและปฏิเสธ" ดังนั้นจึงควรใช้กฎ "การควบคุมการจับคู่สุดท้าย: ปฏิเสธ"
การจับคู่อนุญาต, ปฏิเสธผลลัพธ์ปฏิเสธ, อนุญาตผลลัพธ์ อนุญาตการแข่งขันเท่านั้นอนุญาตอนุญาตคำขออนุญาต จับคู่ปฏิเสธเท่านั้นปฏิเสธคำขอปฏิเสธ ไม่มีการจับคู่ค่าเริ่มต้นเป็นคำสั่งที่สอง: ถูกปฏิเสธค่าเริ่มต้นเป็นคำสั่งที่สอง: อนุญาต จับคู่ทั้งตัวเลือกอนุญาตและปฏิเสธการจับคู่สุดท้าย: ปฏิเสธตัวควบคุมการจับคู่สุดท้าย: อนุญาต
Allow from 192.168.16.0/24
ฉันยังทำ ตามที่ฉันเข้าใจเอกสาร IP ของผู้ร้องขอใด ๆ ในเครือข่าย 192.168.16.0/24 จะตรงกับคำสั่งอนุญาตนี้อนุญาตให้มีการร้องขอได้