Từ chối tất cả, chỉ cho phép một IP thông qua htaccess


156

Tôi đang cố gắng từ chối tất cả và chỉ cho phép một IP duy nhất. Nhưng, tôi muốn có htaccess sau hoạt động cho IP đơn đó. Tôi không tìm ra cách để cả hai hoạt động: từ chối tất cả và chỉ cho phép một, cộng với các tùy chọn sau:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule>

Có cách nào để làm cho công việc này?

Câu trả lời:


356
order deny,allow
deny from all
allow from <your ip> 

95
GHI CHÚ! Apache rất nhạy cảm với không gian trong htaccess. Không cho phép bất kỳ không gian giữa từ chối, cho phép. Tức là không viết đơn từ chối, cho phép.
H.Rabiee

2
THÔNG TIN: - nó cũng hoạt động cho IPv6! chỉ cần thêm một dòng khác vớiallow from yourIPv6
jave.web

Có thể trong nginx?
shgnInc

10
Lưu ý trên 2,4 tài liệu : Các chỉ thị Cho phép, Từ chối và Đặt hàng, được cung cấp bởi mod_access_compat, không được chấp nhận và sẽ biến mất trong phiên bản tương lai. Bạn nên tránh sử dụng chúng, và tránh các hướng dẫn lỗi thời khuyến nghị sử dụng chúng.
Martin Schneider

4
Như @ MA-Maddin đã chỉ ra, - sau đó mod_access_compat không được dùng nữa. Bài đăng này cho thấy làm thế nào để làm trong các phiên bản mới hơn. Và người ta cũng nên xem xét, nếu máy chủ đang sử dụng proxy, vì khi đó sẽ hiển thị proxy-IP cho khách truy cập. Bài đăng này gợi ý một giải pháp cho điều đó.
Zeth

115

Tôi biết câu hỏi này đã có câu trả lời được chấp nhận, nhưng tài liệu Apache nói:

Các chỉ thị Cho phép, Từ chối và Đặt hàng, được cung cấp bởi mod_access_compat, không được chấp nhận và sẽ biến mất trong phiên bản tương lai. Bạn nên tránh sử dụng chúng, và tránh các hướng dẫn lỗi thời khuyến nghị sử dụng chúng.

Vì vậy, một câu trả lời trong tương lai sẽ là:

<RequireAll>
    Require ip xx.xx.xx.xx yy.yy.yy.yy
</RequireAll>

Hy vọng rằng, tôi đã giúp ngăn trang này trở thành một trong những "hướng dẫn lỗi thời". :)


Chúng ta đặt IP ở đâu?
Gary Carlyle Cook

1
Con đường để đi! Giải pháp này nên được chấp nhận vì nó không chỉ hoạt động mà còn cả đồng hồ bấm giờ.
6opko

Câu trả lời khác không giúp được gì trong tình huống của tôi. Nhưng điều này đã làm. Cảm ơn, vì đã cập nhật một chủ đề cũ.
Johann Dyck

1
Ví dụ câu trả lời này cho phép truy cập từ hai IP? Vì vậy, để thêm nhiều IP, chúng ta chỉ cần đặt một khoảng trống giữa chúng? Bạn có thể đặt Require ipnhiều dòng để làm cho nó dễ đọc hơn hay tất cả các IP phải nằm trên một dòng không?
Hastig Zusammenstellen

Nếu bạn đã sử dụng điều này, làm thế nào bạn sẽ chuyển hướng đến một trang tạm thời mới như một số câu trả lời đã làm?
rudtek

39

Điều này có thể được cải thiện bằng cách sử dụng chỉ thị được thiết kế cho nhiệm vụ đó.

ErrorDocument 403 /specific_page.html
Order Allow,Deny
Allow from 111.222.333.444

Trong đó 111.222.333.444 là địa chỉ IP tĩnh của bạn.

Khi sử dụng chỉ thị "Cho phép đặt hàng, từ chối", các yêu cầu phải khớp với Cho phép hoặc Từ chối, nếu không được đáp ứng, yêu cầu sẽ bị từ chối.

http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order


1
Làm thế nào để thêm uRL acustom?
giây

32

Phiên bản sửa đổi một chút ở trên, bao gồm một trang tùy chỉnh sẽ được hiển thị cho những người bị từ chối truy cập:

ErrorDocument 403 /specific_page.html
order deny,allow
deny from all
allow from 111.222.333.444

... và theo cách đó, những yêu cầu không đến từ 111.222.333.444 sẽ thấy cụ thể_page.html

(đăng bài này dưới dạng bình luận trông khủng khiếp vì các dòng mới bị mất)


Chào. Tôi có mã chính xác giống như bạn có trong .htaccess của mình nhưng tôi cứ bị lỗi 500. Trang tôi đã chỉ định được gọi test.htmlvà nằm trong cùng thư mục với .htaccess. Tuy nhiên, tôi không thể xem nhật ký (không được phép từ máy chủ). Bạn có biết tại sao tôi có thể có vấn đề đó? Khi tôi nhận được đường dẫn của tệp thông qua ứng dụng khách ftp, nó sẽ cho tôi biết /test.htmlđường dẫn không phải là vấn đề, phải không?
Musterknabe

Ngoài ra, lỗi 500 xuất hiện ngay cả khi tôi có dòng với errordocument nhận xét. Vì vậy, đó không phải là vấn đề. Có một lý do 3 dòng khác không thể làm việc? Trong .htaccess của tôi, tôi có thêm ba dòng, trong đó tôi chuyển hướng không www sang www, nhưng đó là nó. Nhưng tôi cũng nhận được lỗi khi tôi CHỈ có ba dòng từ chối, cho phép, v.v.
Musterknabe

Làm cách nào để thêm URL tùy chỉnh?
giây thứ

8

Cải thiện thêm một chút các câu trả lời trước đó, một trang bảo trì có thể được hiển thị cho người dùng của bạn trong khi bạn thực hiện các thay đổi cho trang web:

ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #.#.#.#

Ở đâu:


Khi tôi sử dụng ErrorDocument 403, tôi gặp thêm một lỗi 403 cho tệp bảo trì đó, bởi vì nó cũng không thể truy cập tệp đó. Bạn có một giải pháp cho điều đó?
Zdravko Donev

3

Ngoài câu trả lời @David Brown, nếu bạn muốn chặn IP, trước tiên bạn phải cho phép tất cả sau đó chặn IP như sau:

    <RequireAll>
      Require all granted
      Require not ip 10.0.0.0/255.0.0.0
      Require not ip 172.16.0.0/12
      Require not ip 192.168
    </RequireAll>

First line allows all
Second line blocks from 10.0.0.0 to 10.255.255.255
Third line blocks from 172.16.0.0 to 172.31.255.255
Fourth line blocks from 192.168.0.0 to 192.168.255.255

Bạn có thể sử dụng bất kỳ ký hiệu nào được đề cập ở trên để phù hợp với nhu cầu CIDR của bạn.


Cảm ơn, đây là cách thích hợp để đối phó với Apache 2.4!
Alexanderar Pavić

2

Bạn có thể sử dụng các điều sau trong htaccess để cho phép và từ chối truy cập vào trang web của bạn:

SetEnvIf remote_addr ^1\.2\3\.4\.5$ allowedip=1

Order deny,allow
deny from all
allow from env=allowedip

Trước tiên chúng ta đặt biến env allowip nếu địa chỉ ip của máy khách khớp với mẫu, nếu mẫu khớp với thì env biến allowip được gán giá trị 1 .

Trong bước tiếp theo, chúng tôi sử dụng Cho phép, từ chối các chỉ thị để cho phép và từ chối truy cập vào trang web. Order deny,allowđại diện cho thứ tự của denyallow. deny from alldòng này nói với máy chủ từ chối tất cả mọi người. dòng cuối cùng allow from env=allowedipcho phép truy cập vào một địa chỉ IP duy nhất mà chúng ta đặt biến env cho.

Thay thế 1\.2\.3\.4\.5bằng địa chỉ IP được phép của bạn.

Chuyển hướng:


1
Những ưu điểm của việc sử dụng này thay vì chỉ cho phép từ 324.234.22.1 là gì?
Berry M.

2

Tôi không thể sử dụng phương pháp 403 vì tôi muốn trang bảo trì và hình ảnh trang trong một thư mục con trên máy chủ của mình, vì vậy đã sử dụng phương pháp sau để chuyển hướng đến 'trang bảo trì' cho mọi người trừ một IP *

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !**.**.**.*
RewriteRule !^maintenance/ http://www.website.co.uk/maintenance/ [R=302,L]

Nguồn: Tạo trang giữ để ẩn blog WordPress của bạn


Giải pháp này là đơn giản nhất - tôi thích nó
Gerfried 24

1

Bạn có thể có nhiều IP hoặc thậm chí một số loại cho phép khác như người dùng, tên máy chủ, ... thông tin thêm tại đây https://www.askapache.com/htaccess/setenvif/

SetEnvIf remote_addr ^123.123.123.1$ allowedip=1
SetEnvIf remote_addr ^123.123.123.2$ allowedip=1
SetEnvIf remote_addr ^123.123.123.3$ allowedip=1
SetEnvIf remote_addr ^123.123.123.4$ allowedip=1

Order deny,allow
deny from all
allow from env=allowedip

0

Nếu bạn muốn sử dụng mod_rewrite để kiểm soát truy cập, bạn có thể sử dụng các điều kiện như tác nhân người dùng, người giới thiệu http, addr từ xa, v.v.

Thí dụ

RewriteCond %{REMOTE_ADDR} !=*.*.*.* #you ip address
RewriteRule ^$ - [F]

Chuyển hướng:


0

Thêm lệnh sau trong tệp .htaccess. Và đặt tập tin đó vào thư mục htdocs của bạn.

Order Deny,Allow
Deny from all
Allow from <your ip> 
Allow from <another ip> 

0
ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #:#:#:#:#:#

Đối với tôi, điều này dường như hoạt động (Sử dụng IPv6 chứ không phải IPv4) Tôi không biết điều này có khác với một số trang web hay không nhưng đối với tôi thì nó hoạt động.

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.