ฉันจะบล็อกตัวแทนผู้ใช้จากทุกไซต์บนเซิร์ฟเวอร์ของฉันได้อย่างไร


9

ฉันเดิมนี้โพสต์ที่webmasters.stackexchange.comแต่ก็บอกว่าฉันจะได้รับการต้อนรับที่ดีกว่าที่นี่


ในช่วงไม่กี่วันที่ผ่านมาฉันได้รับความทุกข์ทรมานจากสิ่งที่ดูเหมือนว่าจะเป็นการโจมตี DDOS (โดยไม่ตั้งใจ) ฉันได้รับคำขอมากมายจากตัวแทนที่ระบุว่า "Mozilla / 4.0 (Compatible; ICS)" ซึ่ง apache จะกินผ่านหน่วยความจำที่มีอยู่ทั้งหมด

ดังนั้นฉันต้องการปิดกั้นคำขอทั้งหมดที่มาพร้อมกับตัวแทนผู้ใช้นี้ดังนั้นฉันจึงลองทำสิ่งนี้ใน httpd.conf:

SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user

แต่เมื่อฉันรีสตาร์ท apache มันบ่นเกี่ยวกับการใช้denyที่นี่ โดยไม่ต้องห่อในlocationหรือdirectoryบล็อกซึ่งหมายความว่าฉันจะต้องเพิ่มบล็อกใหม่สำหรับแต่ละเว็บไซต์มีวิธีที่ฉันสามารถปฏิเสธการเข้าถึงเซิร์ฟเวอร์ทั้งหมดหรือไม่


ปรับปรุง: ข้อผิดพลาดที่ฉันได้รับ

  • การรีสตาร์ทเว็บเซิร์ฟเวอร์ apache2
    ข้อผิดพลาดทางไวยากรณ์ในบรรทัดที่ 4 ของ /etc/apache2/httpd.conf: ปฏิเสธไม่อนุญาตที่นี่ [ล้มเหลว]

คำตอบ:


7

ดูเหมือนคำถามเก่าตอนนี้ แต่ฉันต้องการทำแบบเดียวกันและพบคำตอบจากเส้นประสาทด้านบน มันไม่ถูกต้องอย่างที่ควรจะเป็น - ดูเหมือนว่าฉันควรจะเป็น<Location "/">และSetEnvIfความต้องการในการแสดงออกปกติเพื่อให้วงเล็บต้องอ้าง

สิ่งนี้ใช้ได้สำหรับฉันที่จะใช้การควบคุมการเข้าถึงกับ vhost ทั้งหมด:

SetEnvIfNoCase User-Agent "^Mozilla/4.0 \(compatible; Synapse\)" bad_ua
<Location "/">
    Deny from env=bad_ua
</Location>

เพียงรวมไว้ก่อนคำจำกัดความของ vhost


(สำหรับเทียบเท่าใน Apache 2.4) ระวังการใช้<Location>ในขณะที่มันจะแทนที่ข้อ จำกัด การอนุมัติอื่น ๆ ในเว้นแต่คุณเพิ่ม<Directory> AuthMerging Andดูคำเตือนความปลอดภัยเกี่ยวกับRequireในเอกสาร apache: httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
Cedric Knight

4

mod_rewrite สามารถกำหนดค่าได้ที่ระดับเซิร์ฟเวอร์ตามเอกสาร:

RewriteCond %{HTTP_USER_AGENT} "Mozilla/4\.0 \(compatible; ICS\)" [nocase]
RewriteRule ^.*$ - [forbidden,last]

อย่าลืมที่จะหนี Regex ใน RewriteCond


1
ข้อควรระวัง: เครื่องหมายขีดกลางไม่ใช่เส้นประจริงเมื่อคัดลอก ฉันพยายามแก้ไข แต่ SF จะบ่นว่าการแก้ไขของฉันเล็กเกินไป ขอบคุณต่อไปทำงานรักษา!
Thibaut Barrère

@ ThibautBarrèreหากคุณต้องการจริงๆคุณสามารถข้ามขีด จำกัด การแก้ไขเล็กน้อยโดยเพิ่มการ<!-- -->แก้ไขที่มองไม่เห็น
hanshenrik

1

ให้ไวยากรณ์บนบรรทัด SetEnv ถูกต้องคุณควรจะสามารถโยนมันใน conf ดังนี้:

<Location *>
SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user
</Location>

ควรอนุญาตให้ใช้งานได้กับโฮสต์เสมือนทั้งหมด - ทดสอบที่ 2.2.24 เท่านั้นทำงานเหมือนมีเสน่ห์


นี่เป็นการดีกว่าที่ไม่มีข้อผิดพลาดใด ๆ แต่ในขณะที่การปลอมตัวตัวแทนผู้ใช้ของฉันฉันจะไม่ถูกปฏิเสธ ความคิดใด ๆ ที่อาจเป็นเพราะอะไร
Tom Wright
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.