Trong Apache, làm cách nào để vô hiệu hóa quyền truy cập vào một trang web khi ai đó chỉ sử dụng địa chỉ IP trong trình duyệt web?


8

Tôi đang sử dụng máy chủ web apache trên CentOS và tôi cần vô hiệu hóa khả năng mọi người truy cập trang web bằng cách sử dụng địa chỉ IP của máy chủ trong trình duyệt web. Tôi muốn nó để khi ai đó cố duyệt đến địa chỉ IP, họ sẽ nhận được thông báo lỗi bị cấm.

Những cấu hình nào sẽ là cần thiết để làm điều đó?

Câu trả lời:


10

Chỉ cần thiết lập máy chủ ảo mặc định. Có một ví dụ nhận xét trong httpd.confhoặc làm một cái gì đó tầm thường như:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>

Chà, điều này đã giải quyết vấn đề của tôi .. cảm ơn tất cả các bạn :)
Amr Elkhedewy

7

Bạn có thể đạt được điều này với mod_rewrite (trong .htaccesstệp hoặc trong ngữ cảnh máy chủ mặc định hoặc trong Virtualhost riêng biệt có ServerNameđịa chỉ IP của máy chủ):

RewriteEngine On
RewriteCond %{HTTP_HOST} 1.2.3.4 # Replace with your own IP address
RewriteRule .* - [F]

Điều này nói rằng nếu tiêu đề HTTP_HOST khớp với địa chỉ IP 1.2.3.4, thì mọi yêu cầu sẽ được đáp ứng với a 403 Forbidden. Bất kỳ yêu cầu nào có tiêu đề HTTP_HOST khác (ví dụ: một yêu cầu có tên miền thực chứ không phải địa chỉ IP) sẽ không bị ảnh hưởng.


Nó không hoạt động trong httpd.conf
Amr Elkhedewy

nó đã làm việc thông qua tệp .htaccess, tôi cần nó được thực hiện từ các cấu hình Apache.
Amr Elkhedewy

2
Bạn đã khởi động lại apache sau khi chỉnh sửa httpd.conf? Nếu không thì apache sẽ không biết về cấu hình mới. Điều này khác với .htaccess, cũng được phân tích cú pháp mà không khởi động lại apache.
etagenklo

Chắc chắn nhưng không có gì thay đổi
Amr Elkhedewy

1

Bạn không thể chặn truy cập trực tiếp bằng IP. Bạn phải cho phép kết nối nhưng sau đó quyết định phải làm gì với nó. Điều này có thể trả về 403, 404 hoặc chuyển hướng chúng đến trang mong muốn. Bạn có thể làm điều này với mod_rewrite.

 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
 RewriteRule ^(.*)$ - [F,L]

Điều này sẽ khớp với tiêu đề HTTP HOST được truyền bởi máy khách web. Tất cả các yêu cầu khác sẽ đi qua.

Tuy nhiên, bạn có thể muốn bình thường hóa URL của mình cho mục đích SEO.

Với phương pháp này, bạn viết lại bất cứ điều gì không phù hợp với kết quả mong muốn.

RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]

Tham khảo: https://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl

Tham khảo: http://en.wikipedia.org/wiki/URL_n normalization


Nó không hoạt động trong httpd.conf
Amr Elkhedewy

nó đã làm việc thông qua tệp .htaccess, tôi cần nó được thực hiện từ các cấu hình Apache.
Amr Elkhedewy

Nó sẽ hoạt động trong httpd.conf, nhưng hãy chắc chắn bật công cụ viết lại và đặt nó vào bên trong các chỉ thị máy chủ ảo của bạn. Nếu không, nó sẽ chỉ áp dụng cho máy chủ mặc định của bạn. Xem: httpd.apache.org/docs/civerse/mod/mod_rewrite.html#rewritecond
jeffatrackaid

1

Giải pháp này không bao gồm tất cả các trường hợp.

Thay thế bất kỳ số hoặc dấu chấm nào trong URL IP bằng% ## của nó, ví dụ 1 bằng% 31 ... 8 bằng% 38 và bạn sẽ đến IP, không phải trên url tên miền.

Giả sử IP xấu này, được sử dụng để giảm bớt lời giải thích: 123,45.6.789

Bạn phải sử dụng 2 lựa chọn thay thế cho tất cả các chữ số và dấu chấm: dấu chấm là% 2E và 0..9 là% 30 ..% 39

RewriteEngine on
RewriteCond %{HTTP_HOST} (1|%31)(2|%32)(3|%33)(\.|%2E)(4|%34)(5%35)(\.|%2E)(6|%36)(\.|%2E)(7|%37)(8|%38)(9|%39)
RewriteRule . - [F]

Xấu xí, nó có thể được giảm với {1,3} và bị hạn chế thành IP hợp lệ nhưng vì nó là dành cho IP của bạn, không cần phải làm như vậy.

Đừng quên các cổng như ": 80". HTTP_HOST chứa nó và SERVER_NAME không đáng tin cậy.

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.