我试图使用Nginx上的IP限制来锁定对WP-admin的访问。以下似乎阻止了wp-admin,但没有阻止wp-login.php
这是一个开始,因为它会阻止任何人能够从任何其他IP登录,因为登录后您被重定向到受限制的wp-admin。但是,它们仍然可以进入标志形式,理论上仍然会受到强力攻击的影响。
server {
listen 80;
server_name website.com www.website.com dev.website.com;
location / {
root /var/www/html/website.com/;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
root /var/www/html/website.com/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ ^/(wp-admin|wp-login/.php) {
root /var/www/html/website.com/;
index index.php index.html index.htm;
allow 123.123.123.123/32;
deny all;
}
}
答案 0 :(得分:3)
如果您修复了上下文,则可能会解决此问题。而不是正斜杠在.php
之前做反斜杠location ~ ^/(wp-admin|wp-login\.php) {
allow 123.123.123.123/32;
deny all;
}
答案 1 :(得分:2)
不是一个完美的解决方案,但我现在正在使用它:
server {
listen 80;
server_name website.com www.website.com dev.website.com;
root /var/www/html/website.com/;
error_page 403 404 500 502 503 504 = /server_error.php;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location = /wp-login.php {
allow 123.123.123.123/32;
deny all;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
这会让每个人都离开,但不会掩盖wp-admin存在的事实。如果有人要导航到wp-admin,他们会被重定向到受限制的wp-login.php。
整理了一下。
答案 2 :(得分:1)
我知道这有点老了,但你的回答对我有所帮助,而且我已经改进了。所以对于其他人来说,我认为这个问题实际上很常见。对我来说,Nginx只是阻止CSS文件。
我认为这个问题是由Nginx首次看到它的一个php文件引起的,因此在它location ~ \.php$ {}
location ~ ^/(wp-admin|wp-login\.php) {}
内处理它
所以我这样做了,首先在location ~ \.php$ {}
上面添加:
location = /wp-login.php{
allow 12.345.6.7; #example IP address
deny all;
fastcgi_index index.php;
include fastcgi_params;
}
这会阻止对wp-login.php
的访问,这很好,但就像你说它没有阻止wp-admin
所以只需通过添加location ~ \.php$ {}
下面的其他块来跟进
location ~ ^/(wp-admin|wp-login\.php) {
allow 12.345.6.7 #example IP address
deny all;
}
现在,如果您不是来自IP 12.345.6.7
,那么您将无法访问wp-admin
或wp-login.php
答案 3 :(得分:0)
现在(2018年)Wordpress将wp-admin自动重定向到wp-login。 因此,仅仅禁用/wp-login.php就足够了:
location = /wp-login.php {
allow 16.16.12.11
deny all;
}
将它放在默认的“location` .php $”块
之后