Tolak semua, izinkan hanya satu IP melalui htaccess

156

Saya mencoba menolak semua dan hanya mengizinkan satu IP. Tapi, saya ingin htaccess berikut berfungsi untuk IP tunggal itu. Saya tidak menemukan cara untuk membuat keduanya berfungsi: tolak semua dan biarkan hanya satu, ditambah opsi berikut:

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

Apakah ada cara untuk membuat ini berfungsi?

punkbit
sumber

Jawaban:

356
order deny,allow
deny from all
allow from <your ip> 
b101101011011011
sumber
95
CATATAN! Apache sensitif untuk ruang di htaccess. Jangan biarkan ada ruang di antara deny, allow. Yaitu jangan menulis pesanan menyangkal, izinkan.
H.Rabiee
2
INFO: - itu berfungsi untuk IPv6 juga! tambahkan saja baris lain denganallow from yourIPv6
jave.web
Apakah mungkin di nginx?
shgnInc
10
Catatan pada 2.4 docs : Arahan Allow, Deny, dan Order, yang disediakan oleh mod_access_compat, sudah usang dan akan hilang dalam versi yang akan datang. Anda harus menghindari menggunakannya, dan menghindari tutorial yang ketinggalan zaman merekomendasikan penggunaannya.
Martin Schneider
4
Seperti yang ditunjukkan oleh @ MA-Maddin, - maka mod_access_compat sudah tidak digunakan lagi. Posting ini menunjukkan bagaimana melakukannya di versi yang lebih baru. Dan orang juga harus mempertimbangkan, jika server menggunakan proxy, karena itu akan menampilkan proxy-IP untuk pengunjung. Posting ini menyarankan solusi untuk itu.
Zeth
115

Saya tahu pertanyaan ini sudah memiliki jawaban yang diterima, tetapi dokumentasi Apache mengatakan:

Arahan Allow, Deny, dan Order, yang disediakan oleh mod_access_compat, sudah tidak digunakan lagi dan akan hilang dalam versi yang akan datang. Anda harus menghindari menggunakannya, dan menghindari tutorial yang ketinggalan zaman merekomendasikan penggunaannya.

Jadi, jawaban yang lebih tahan masa depan adalah:

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

Semoga, saya telah membantu mencegah halaman ini menjadi salah satu dari "tutorial yang ketinggalan zaman". :)

Rok Sprogar
sumber
Di mana kita meletakkan IP kita?
Gary Carlyle Cook
1
Jalan untuk pergi! Ini harus diterima sebagai solusi karena tidak hanya berfungsi tetapi juga tahan terhadap waktu.
6opko
Jawaban lain tidak membantu dalam situasi saya. Tapi yang ini berhasil. Terima kasih, untuk memperbarui utas lama.
Johann Dyck
1
Contoh jawaban ini memungkinkan akses dari dua IP? Jadi, untuk menambahkan beberapa IP, kita cukup menempatkan spasi di antara mereka? Bisakah Anda memakai Require ipbeberapa baris untuk membuatnya lebih mudah dibaca pengguna atau apakah semua IP harus berada pada satu baris?
Hastig Zusammenstellen
jika Anda menggunakan ini, bagaimana Anda akan mengarahkan ulang ke halaman temp baru seperti beberapa jawaban lakukan?
rudtek
39

Ini dapat ditingkatkan dengan menggunakan arahan yang dirancang untuk tugas itu.

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

Di mana 111.222.333.444 adalah alamat IP statis Anda.

Saat menggunakan arahan "Pesanan Boleh, Tolak" permintaan harus cocok dengan Boleh atau Tolak, jika tidak ada yang dipenuhi, permintaan ditolak.

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

MickeyRoush
sumber
1
bagaimana cara menambahkan acustom uRL?
Detik malam
32

Versi modifikasi di atas sedikit, termasuk halaman khusus untuk ditampilkan kepada mereka yang mendapat akses:

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

... dan dengan cara itu permintaan tersebut tidak datang dari 111.222.333.444 akan melihat specific_page.html

(memposting ini sebagai komentar tampak mengerikan karena baris baru hilang)

Oliver Maksimovic
sumber
Hai. Saya memiliki kode yang sama persis seperti yang Anda miliki di .htaccess saya, tetapi saya terus mendapatkan kesalahan 500. Halaman yang saya tentukan dipanggil test.htmldan berada di folder yang sama dengan .htaccess. Namun, saya tidak dapat melihat log (tidak diizinkan dari server). Apakah Anda tahu mengapa saya bisa mengalami masalah itu? Ketika saya mendapatkan path file melalui klien ftp itu memberitahu saya /test.htmljadi path seharusnya tidak menjadi masalah, kan?
Musterknabe
Juga, 500 kesalahan muncul bahkan ketika saya memiliki garis dengan errordocument berkomentar. Jadi itu seharusnya bukan masalah. Apakah ada alasan mengapa 3 saluran lainnya tidak bisa berfungsi? Dalam .htaccess saya, saya memiliki tiga baris lagi, di mana saya mengarahkan non-www ke www, tetapi hanya itu. Tapi saya juga mendapatkan kesalahan ketika saya HANYA tiga baris dengan deny, allow, etc.
Musterknabe
Bagaimana cara menambahkan acustom URL?
Detik malam
8

Meningkatkan sedikit lebih banyak jawaban sebelumnya, halaman pemeliharaan dapat ditampilkan kepada pengguna Anda saat Anda melakukan perubahan pada situs:

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

Dimana:

IvanRF
sumber
Ketika saya menggunakan ErrorDocument 403 saya mendapatkan kesalahan 403 tambahan untuk file maintenance.html itu, karena tidak bisa mengakses file itu juga. Apakah Anda punya solusi untuk itu?
Zdravko Donev
3

Selain jawaban @ David Brown, jika Anda ingin memblokir IP, Anda harus terlebih dahulu mengizinkan semua lalu memblokir IP seperti itu:

    <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

Anda dapat menggunakan salah satu notasi yang disebutkan di atas untuk memenuhi kebutuhan CIDR Anda.

Rafa Carvalhido
sumber
Terima kasih, ini adalah cara yang tepat untuk berurusan dengan Apache 2.4!
Aleksandar Pavić
2

Anda dapat menggunakan yang berikut ini di htaccess untuk mengizinkan dan menolak akses ke situs Anda:

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

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

Kami pertama-tama mengatur variabel env allowip jika alamat ip klien cocok dengan pola, jika pola cocok dengan maka env variabel allowip diberi nilai 1 .

Pada langkah berikutnya, kami menggunakan Bolehkan, tolak arahan untuk mengizinkan dan menolak akses ke situs. Order deny,allowmewakili urutan denydan allow. deny from allbaris ini memberi tahu server untuk menolak semua orang. baris terakhir allow from env=allowedipmemungkinkan akses ke satu alamat ip yang kita atur untuk variabel env.

Ganti 1\.2\.3\.4\.5dengan alamat ip yang diizinkan.

Refrences:

Amit Verma
sumber
1
Apa kelebihan menggunakan ini alih-alih hanya Izinkan Dari 324.234.22.1?
Berry M.
2

Saya tidak dapat menggunakan metode 403 karena saya ingin halaman pemeliharaan dan gambar halaman dalam sub folder di server saya, jadi gunakan pendekatan berikut untuk mengarahkan ke 'halaman pemeliharaan' untuk semua orang kecuali satu IP *

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

Sumber: Membuat halaman holding untuk menyembunyikan blog WordPress Anda

LOGAM
sumber
Solusi ini adalah yang paling sederhana - Saya lebih suka itu
Gerfried
1

Anda dapat memiliki lebih dari satu IP atau bahkan beberapa jenis izin lainnya seperti pengguna, nama host, ... info lebih lanjut di sini 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
Meloman
sumber
0

Jika Anda ingin menggunakan mod_rewrite untuk kontrol akses Anda dapat menggunakan kondisi seperti agen pengguna, pengarah http, addr jarak jauh dll.

Contoh

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

Refrences:

Abhishek Gurjar
sumber
0

Tambahkan perintah berikut dalam file .htaccess. Dan tempatkan file itu di folder htdocs Anda.

Order Deny,Allow
Deny from all
Allow from <your ip> 
Allow from <another ip> 
Ramsha Omer
sumber
0
ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #:#:#:#:#:#

Bagi saya, ini sepertinya berfungsi (Menggunakan IPv6 daripada IPv4) Saya tidak tahu apakah ini berbeda untuk beberapa situs web tetapi untuk saya ini berfungsi.

TigerMANEK426
sumber