Điểm:1

Cách từ chối quyền truy cập vào tất cả trừ một IP và cho phép tất cả truy cập vào các URI cụ thể với Apache 2.4

lá cờ cz

Tôi cần chặn quyền truy cập vào trang web từ công khai nhưng cho phép một địa chỉ IP. Và tôi cần cấp quyền truy cập vào một vài URI cho công khai. Nhưng không có gì hoạt động - tất cả đều bị chặn hoặc tất cả đều mở.

Trích xuất đơn giản từ Apache conf:

<Directory /site/dir>
    Require ip 1.2.3.4
</Directory>

<Location "/open/for/public1">
    Require all granted
</Location>
<Location "/open/for/public2">
    Require all granted
</Location>

Bây giờ tất cả đều bị chặn.

Cũng đã thử với cú pháp cũ:

<Location "/open/for/public1">
    Order allow,deny
    allow from all
</Location>

Vẫn vậy.

Tôi đã thử chặn trang web bằng chỉ thị <Location "/"> (thay vì chỉ thị <Directory>) nhưng sau đó public1 và public2 cũng bị chặn.

Tôi đã thử với:

SetEnvIf Request_URI "^/open/for/public1$" NO_AUTH_NEEDED=1
<Thư mục /site/dir>
    Lệnh từ chối, cho phép
    Tư chôi tât cả
    Cho phép từ env=NO_AUTH_NEEDED
    Cho phép từ 1.2.3.4
</Thư mục>

Không hoạt động, tất cả đều bị chặn.

Tất cả các đề xuất chào mừng

Chris avatar
lá cờ it
*Tôi đã thử chặn trang web với chỉ thị (thay vì chỉ thị) nhưng sau đó public1 và public2 cũng bị chặn *. Tôi vừa thử nghiệm phương pháp đầu tiên với 3 khối `Vị trí` thay vì `Thư mục` như đối với phương pháp đầu tiên và phương pháp đó hoạt động, tôi bị chặn ở mọi nơi trừ vị trí tôi đã xác định.
goldie avatar
lá cờ cz
@Chris Cảm ơn bạn đã xem. Đã thử một lần nữa, tất cả vẫn bị chặn. Có lẽ đó là thứ tự của các chỉ thị? Bạn có thể gửi conf của bạn?
Điểm:1
lá cờ cz

Điều cuối cùng đã giúp tôi là các quy tắc Viết lại Apache và Viết lại cảnh báo LogLevel:trace6. Trong trường hợp này, có vẻ như ngoài một số tệp .htaccess (tôi không nghĩ là có bất kỳ ảnh hưởng nào), còn có một số chuyển hướng nội bộ trong mã. Vì vậy, tôi đã kết thúc việc sử dụng trong phần VirtualHost một cái gì đó như:

RewriteCond %{REMOTE_ADDR} !1.2.3.4
RewriteCond %{REQUEST_URI} !^/open/for/public(.*) [NC]
RewriteRule .* - [F]

và trong .htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Quy tắc viết lại . index.php [KẾT THÚC]

tôi nói thêm rằng [CHẤM DỨT] và dường như nó rất quan trọng, vì không có nó, công cụ Viết lại vẫn tiếp tục hoạt động và vì lý do nào đó, với một số chuyển hướng nội bộ (từ nhật ký Apache: ...chuyển hướng nội bộ với /index.php [CHUYỂN ĐỔI NỘI BỘ]) URL bị xáo trộn và Quy tắc viết lại . - [F]* bắn mọi lúc.

Điểm:0
lá cờ it

Trong ví dụ đầu tiên, tôi nghĩ bạn bị chặn vì Danh mục chỉ thị tiếp quản Địa điểm chỉ thị:

<Directory /site/dir>
    Require ip 1.2.3.4
</Directory>

<Location "/open/for/public1">
    Require all granted
</Location>

<Location "/open/for/public2">
    Require all granted
</Location>

Có nhiều cách để đạt được những gì bạn muốn.

  • Cách đầu tiên phù hợp với tôi là sử dụng Địa điểm chỉ các lệnh (được thử nghiệm với IP thực và factice, URL công khai là các tệp thực trên hệ thống của tôi):

      DocumentRoot /site/dir
    
      <Vị trí />
          Yêu cầu ip 1.2.3.4
      </ Vị trí
    
      <Location "/open/for/public1">
          Yêu cầu tất cả cấp
      </Vị trí>
    
      <Location "/open/for/public2">
          Yêu cầu tất cả cấp
      </Vị trí>
    

    Với Địa điểm chỉ thị, thứ tự không thành vấn đề. Trong ví dụ sau, tôi bị chặn ở mọi nơi vì khối cuối cùng ghi đè lên các khối khác:

      <Location "/open/for/public1">
          Yêu cầu tất cả cấp
      </Vị trí>
    
      <Location "/open/for/public2">
          Yêu cầu tất cả cấp
      </Vị trí>
    
      <Vị trí />
          Yêu cầu ip 1.2.3.4
      </ Vị trí
    
  • Tôi cũng đã thử nghiệm bằng cách sử dụng Danh mục chỉ thị. Trong trường hợp này, thứ tự không quan trọng (các lệnh được áp dụng theo thứ tự khớp ngắn nhất trước)

      <Directory /site/dir>
          Require ip 1.2.3.4
      </Directory>
    
      <Directory "/site/dir/open/for/public1">
          Require all granted
      </Location>
    
     <Directory "/site/dir/open/for/public2">
         Require all granted
     </Directory >
    

    Để lựa chọn giữa Danh mục hoặc Địa điểm chỉ thị, xem khuyến nghị apache.

  • Đây là một ví dụ khác được thử nghiệm bằng cách sử dụng mod_rewrite:

      <Directory /var/www/site/>
    
          # first, allow all 
          Require all granted
    
          # Then enable rewrite engine   
          RewriteEngine On
    
          # Requests that: 
          # do not start with 'test' (test is a real folder supposed open to public)
          RewriteCond %{REQUEST_URI} !^/test
    
          # AND that do not start with 'another_test'
          RewriteCond %{REQUEST_URI} !^/another_test
    
          # AND ...
    
          # AND that do not come from given IP
          RewriteCond "%{REMOTE_ADDR}"  !1.2.3.4
    
          # are blocked (403 Forbidden)
          RewriteRule .* - [F]
      </Directory>
    
goldie avatar
lá cờ cz
Cảm ơn đã chỉ cho tôi đi đúng hướng! Sau nhiều ngày (!) Đập đầu vào tường, tôi quyết định thử với Rewrite rules và cảnh báo LogLevel rewrite:trace6. Và có vẻ như ngoài một số tệp .htaccess thú vị, còn có một số chuyển hướng nội bộ trong mã. Vì vậy, cuối cùng tôi đã sử dụng một cái gì đó như: * RewriteCond %{REMOTE_ADDR} !1.2.3.4 RewriteCond %{REQUEST_URI} !^/open/for/public(.*) [NC] RewriteRule .* - [F,END]

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.