Apache 2.4 จำกัด URL สำหรับบาง IP


14

ฉันพยายาม จำกัด URL ที่เฉพาะเจาะจงเพื่อให้สามารถใช้ได้นอกเครือข่ายเฉพาะที่อยู่ IP ที่เฉพาะเจาะจง เมื่อผู้ใช้ภายนอกพยายามเข้าถึง URL นั้นและไม่ได้มาจากรายการ IP เขาจะถูกเปลี่ยนเส้นทางไปยังหน้าแรก

นี่คือสิ่งที่ฉันได้ลองมาโดยที่ไม่มีโชค ส่วนสุดท้ายมันเปลี่ยนเส้นทางทุกคนไปที่หน้าแรกโดยไม่คำนึงถึง IP

<Location "/secret">
#    <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
#    Redirect 303 "/secret" /
#    </If>

RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]

LogLevel debug rewrite:trace6
</Location>

PS: / ลับ URL จริง ๆ แล้วเป็น URL เสมือนจริงและไม่มีอยู่จริงในไดรฟ์


ถ้างบมีความเห็นออก? เปิดใช้งานการเขียนใหม่ - RewriteEngine Onหรือไม่
9517

คำสั่ง <If> เป็นรุ่นที่ฉันได้ลองแล้ว RewriteEngine On directive จะประกาศไว้ก่อนหน้านี้ นั่นคือเหตุผลที่มันเปลี่ยนเส้นทางทุกคน
เดนิสเรนเดอร์

1
ฉันคิดว่าคุณควรยกเลิกการทำเครื่องหมายคำตอบที่เลือกเพราะมันไม่ถูกต้องสำหรับ Apache 2.4 ตามที่คุณร้องขอ (มันให้ข้อมูลที่ไม่ถูกต้องกับผู้คนที่ผ่านไป)
Erenor Paz

คำตอบ:


4

ใช้Order, Denyและallowเพื่อระบุที่มีการเข้าถึง vhost หรือสถานที่ของคุณ

<VirtualHost *:80>
    ServerName example.net
    DocumentRoot /docroot

    <Directory "/docroot">
        Order Deny,Allow
        Deny from all
        Allow from 10.10.10.10
        Allow from 10.10.11.0/24
    </Directory>   
</VirtualHost>

เมื่อมันมาถึงการเปลี่ยนเส้นทาง, คิดเกี่ยวกับหน้าข้อผิดพลาดที่กำหนดเอง นี่เป็นเรื่องทั่วไปมากขึ้นเนื่องจากการเข้าถึงที่ไม่ได้รับอนุญาตทุกครั้งควรก่อให้เกิดข้อผิดพลาด 403 และสามารถประเมินได้ง่าย

ฉันไม่เคยทำสิ่งนี้ด้วย apache แต่ใช้กลยุทธ์นี้กับ nginx สำหรับ apache somethin เช่นนี้ควรทำ:

ErrorDocument 403 http://homepage.example.com

เอกสารข้อผิดพลาดที่กำหนดเองถูกกำหนดค่าโดยใช้คำสั่ง ErrorDocument ซึ่งอาจใช้ในบริบทโกลบอลโฮสต์เสมือนหรือไดเร็กทอรี มันอาจถูกใช้ในไฟล์. htaccess หากตั้งค่า AllowOverride เป็น FileInfo (จาก apache docs)


2
ดูเหมือนว่าชุดของการกำหนดค่า Apache httpd 2.2 มันจะยังใช้งานได้กับ 2.4 หรือไม่
9517

อย่างน้อยErrorDocumentส่วนหนึ่งมาจาก 2.4 เอกสาร ฉันไม่ได้ใช้ Apache ตั้งแต่ Nginx เป็นรอบ แต่สันนิษฐานว่าOrder, DenyและAllowยังคงอยู่รอบ ๆ ใน Apache 2.4
ansi_lumen

ขอบคุณ แต่ฉันไม่ได้ช่วย ฉันลืมที่จะพูดถึง แต่ฉันได้อัปเดตคำถามจริง ๆ แล้ว / URL ลับเป็น URL เสมือนจริงและไม่มีอยู่จริงในไดรฟ์ URL ที่เป็นของตัวเองคือ rewrite จาก index.php นั่นเป็นสาเหตุที่ฉันใช้คำสั่ง <Location>
เดนิสเรนเดอร์

4
ไวยากรณ์นี้เลิกใช้แล้วใน apache 2.4
Luca Reghellin

1
ทำไมนี่คือคำตอบที่ยอมรับได้? นี่สำหรับ Apache 2.2 ไม่ใช่ 2.4 เนื่องจากคำถามบ่งบอกว่า ... มันจะไม่ทำงาน
Jeremy

23

ตัวเลือก Order, Deny และ Allow ได้ถูกแทนที่ใน Apache 2.4 ด้วย

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
</Directory>

คุณสามารถ จำกัด ที่อยู่อย่างชัดเจนโดยใช้สิ่งต่อไปนี้:

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
    Require not ip 192.168.0.1
</Directory>

ตรงข้ามที่แน่นอนเป็นจริงเช่นกันในการ จำกัด ทั้งหมดและอนุญาตให้เฉพาะชุดย่อยใช้ต่อไปนี้:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
</Directory>

ข้อมูลเพิ่มเติมมีอยู่ในเอกสารการควบคุมการเข้าถึง Apache 2.4

เกี่ยวกับคำถามของคุณ (แก้ไขของฉันเองเนื่องจากไม่มีคะแนนในการเพิ่มความคิดเห็น) คุณควรจะสามารถตั้ง ErrorDocument โดยใช้ดัชนีที่ตั้งเป็นเส้นทาง URL:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
    ErrorDocument 401 /index.html
</Directory>

หวังว่านี่จะช่วยได้!


ขอบคุณ @Linztm! แต่นี่แก้ปัญหาของฉันได้เพียงบางส่วนเท่านั้น ฉันไม่ต้องการบล็อกเฉพาะผู้ใช้ แต่เปลี่ยนเส้นทางเขาไปที่หน้าแรก
Denis Rendler

ดูเหมือนว่าจะทำงานกับคำสั่ง ErrorDocument เฉพาะในกรณีที่ฉันระบุ URL แบบเต็มรวมถึงโดเมนและโปรโตคอล ฉันจะทำการวิจัยเพิ่มเติม ขอบคุณ
Denis Rendler

ฉันพบอย่างน้อยหนึ่งกรณีเมื่อคุณจำเป็นต้องใช้allowแม้ว่าเลิกใช้แล้วRequire 127.0.0.1 ยังอนุญาตการเข้าถึงโดยที่อยู่ภายนอกจากเครื่องท้องถิ่นซึ่งอนุญาตให้ไวยากรณ์อนุญาตเฉพาะที่อยู่ 127 แห่งเท่านั้น
Alexei Martianov

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