Apache httpd: Làm cách nào tôi có thể từ chối tất cả, Cho phép từ mạng con, nhưng Từ chối IP trong mạng con đó?


26

Tôi đang chạy CentOS 5.5 với cổ phiếu Apache httpd-2.2.3.

Tôi đã kích hoạt mod_status ở trạng thái Vị trí / máy chủ. Tôi muốn cho phép truy cập vào Địa điểm duy nhất này theo cách sau:

  1. Tư chôi tât cả
  2. Cho phép từ mạng con 192.168.16.0/24
  3. Từ chối IP 192.168.16.100, nằm trong mạng con 192.168.16.0/24.

1 & 2 thật dễ dàng. Tuy nhiên, vì tôi "Cho phép từ 192.168.16.0/24", có thể từ chối từ 192.168.16.100 không?

Tôi đã cố gắng thêm một tuyên bố từ chối cho 192.168.16.100 nhưng nó không hoạt động. Đây là cấu hình có liên quan:

<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>

Hoặc là:

<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>

Tuy nhiên, điều này không ngăn truy cập vào trang cụ thể này, như được thể hiện trong nhật ký truy cập:

www.example.org 192.168.16.100 - - [11/Mar/2011:16:01:14 -0800] "GET /server-status HTTP/1.1" 200 9966 "-" "

Theo hướng dẫn cho mod_authz_host :

Cho phép từ chối

Đầu tiên, tất cả các chỉ thị cho phép được đánh giá; ít nhất một phải phù hợp, hoặc yêu cầu bị từ chối. Tiếp theo, tất cả các chỉ thị từ chối được đánh giá. Nếu bất kỳ trận đấu, yêu cầu bị từ chối

Địa chỉ IP khớp với chỉ thị Từ chối, vì vậy không nên từ chối yêu cầu?

Theo bảng trên trang mod_authz_host, địa chỉ IP này sẽ "Khớp cả Cho phép & Từ chối" và do đó, nên áp dụng quy tắc "Điều khiển đối sánh cuối cùng: Bị từ chối".

    Cho phép kết hợp, Từ chối kết quả Từ chối, Cho phép kết quả
    Phù hợp Chỉ cho phép Yêu cầu được phép Yêu cầu được phép
    Khiếu nại chỉ từ chối Yêu cầu bị từ chối Yêu cầu bị từ chối
    Không khớp Mặc định cho lệnh thứ hai: Từ chối Mặc định cho lệnh thứ hai: Được phép
    Khớp cả hai Cho phép & Từ chối Điều khiển trận đấu cuối cùng: Từ chối Điều khiển trận đấu cuối cùng: Được phép

Từ chối tất cả 192.168.16.100 - Vì bạn đang sử dụng "tất cả" ở đây, tôi sẽ mong tất cả các yêu cầu bị từ chối từ bất kỳ địa chỉ IP nào. Hãy nghĩ điều gì khác đang diễn ra ở đây.
micah

@Michah: Mình cũng đang làm a Allow from 192.168.16.0/24. Theo tôi hiểu tài liệu, mọi IP của người yêu cầu trong mạng 192.168.16.0/24 sẽ khớp với câu lệnh Cho phép này, yêu cầu được cho phép.
Stefan Lasiewski

Theo các tài liệu dán ở trên. "Đầu tiên, tất cả các lệnh Cho phép được ước tính; ít nhất một lệnh phải khớp hoặc yêu cầu bị từ chối" ==> Điều này phải khớp với "Cho phép từ 192.168.16.0/24", nhưng phần thứ hai của "Tiếp theo, tất cả các lệnh từ chối đều được đã đánh giá. Nếu có bất kỳ trận đấu nào, yêu cầu bị từ chối "Với" Từ chối tất cả ", sẽ không mọi yêu cầu khớp với phần thứ hai và do đó bị từ chối?
micah

Bạn thực sự nên xem xét nếu bạn muốn từ chối rằng địa chỉ IP hoàn toàn truy cập vào hệ thống của bạn hoặc chỉ từ httpd. Nếu trước đây tiếp tục với cách tiếp cận của bạn trong việc sử dụng chỉ thị apache. Nếu sau này điều này nên được thực hiện trong tường lửa.
Trường hợp Andrew

Cảm ơn ACase. Tôi chỉ muốn từ chối truy cập từ 192.168.16.100 đến trang cụ thể này. Tôi muốn 192.168.16.100 có thể truy cập tất cả các trang khác trên máy chủ web này.
Stefan Lasiewski

Câu trả lời:


35

Tôi chưa thử, nhưng tôi nghĩ bạn gần như ở đó.

<Location /server-status>
    SetHandler server-status
    Order Allow,Deny
    Deny from  192.168.16.100
    Allow from 192.168.16.0/24
</Location>

Deny from allkhông cần thiết Trong thực tế, nó sẽ làm hỏng bởi vì mọi thứ sẽ khớp all, và do đó bị từ chối (và tôi nghĩ Apache đang cố tỏ ra thông minh và làm điều gì đó ngu ngốc). Tôi đã luôn luôn tìm thấy Apache Order, AllowDenychỉ thị khó hiểu, vì vậy luôn luôn hình dung mọi thứ trong một bảng (lấy từ các tài liệu ):

Trận đấu | Cho phép, từ chối kết quả | Từ chối, cho phép kết quả
-------------------------------------------------- -----
Chỉ cho phép | Được phép | Được phép
Chỉ từ chối | Bị từ chối | Từ chối
Không có trận đấu | Mặc định: Bị từ chối | Mặc định: Được phép
Phù hợp với cả hai | Trận chung kết: Bị từ chối | Trận chung kết: Được phép

Với các cài đặt ở trên:

  • Các yêu cầu từ 192.168.16.100 nhận được "Kết hợp cả hai" và do đó bị từ chối.
  • Các yêu cầu từ 192.168.16.12 nhận "Chỉ cho phép" và do đó được cho phép.
  • Các yêu cầu từ 123.123.123.123 nhận được "Không khớp" và do đó bị từ chối.

1

Tôi có lẽ cũng sẽ xem xét thêm các quy tắc IPTables cho việc này để từ chối máy chủ duy nhất trên cổng 80, từ chối tất cả và cho phép mạng con.

Bạn sẽ không gặp vấn đề gì khi thiết lập quy tắc từ chối từ một địa chỉ cụ thể sau khi bạn cho phép mạng con. Chỉ cần làm theo thứ tự đó.


Tôi đã cập nhật câu trả lời của mình. Tôi đã bao gồm quy tắc "Từ chối 192.168.16.100", nhưng quyền truy cập vẫn được cho phép từ 192.168.16.100
Stefan Lasiewski

Tôi muốn cho phép truy cập vào tất cả các vị trí khác từ máy chủ này. Tuy nhiên, tôi muốn từ chối các địa điểm cụ thể. IPTables không giúp tôi ở đây.
Stefan Lasiewski

IPTables sẽ không từ chối cụ thể lưu lượng truy cập đi trừ khi bạn nói với nó. Tuy nhiên, bạn có thể từ chối lưu lượng truy cập trong nước từ thế giới và một địa chỉ cụ thể, nhưng tất cả đều cho phép một mạng con.
Mike

Tôi nghĩ rằng bạn hiểu sai yêu cầu của tôi. Tôi muốn chỉ áp dụng điều khiển truy cập này cho / trạng thái máy chủ, không phải toàn bộ máy chủ. IPtables không thể làm điều này một cách dễ dàng, theo hiểu biết của tôi.
Stefan Lasiewski

-4

Bạn có thể sử dụng php? Nếu vậy hãy thêm một câu lệnh php để thoát / chuyển hướng cho một địa chỉ IP cụ thể đó

Thí dụ:

$ deny = mảng ("111.111.111", "222.222.222", "333.333.333");

if (in_array ($ _SERVER ['REMOTE_ADDR'], $ deny))

{tiêu đề ("vị trí: http://www.google.com/ ");

lối thoát hiểm();

Tham khảo: http://perishablepress.com/press/2007/07/03/how-to-block-ip-addresses-with-php/


2
Điều này sẽ phải có trong mỗi trang được lưu trữ bởi máy chủ web. Giải pháp này không thực tế và không phải là nơi bạn muốn lọc truy cập vào máy chủ web.
Trường hợp Andrew
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.