只有通过日本IP地址访问才能登录页面的WordPress + Nginx (IPv6指南)
首先
在使用WordPress发布网站时,经常会出现大量的非法登录尝试。
遗憾的是,其中大部分来自海外。
考虑到我的使用情况,没有来自海外的更新者,所以我尝试仅在来自日本IP的访问时显示登录页面。
暂时先试试看。
我在下方网站发现有人做了类似的事情,所以参考他们的方法,尝试实现了以下功能:如何在Nginx中只允许特定国家的IP访问。
location = /wp-login.php {
# JP IP Address
allow 000.000.000.000/24;
# <<中略>>
deny all;
# 一時的に、確認のためにログを分ける
access_log /var/log/nginx/access_wp-login.log;
error_log /var/log/nginx/error_wp-login.log error;
# WordPressを動かすPHPの環境に合わせて下記は変えてください
# (例示は別ファイルに分けている場合です)
include /etc/nginx/sites-available/wordpress-php.conf.parts;
}
设定完成后,重新加载nginx,并使用tail -f /var/log/nginx/access_wp-login.log来监视访问情况。
然后下面这样的日志就开始涌现了。
<<IPv6アドレス>> - - [06/Aug/2023:xx:xx:xx +0900] "GET /wp-login.php HTTP/1.1" 403 134 "-" "**********"
是的,标题中暴露出来了,我没有考虑到IPv6。(我忘记了服务器已被分配IPv6地址。)
那我们该怎么办呢?
在日本网络信息中心(JPNIC)管理下的IPv6地址已经在以下网页上公开。
https://www.nic.ad.jp/ja/dns/ipv6-addr-block.html
本篇文章将把“由JPNIC管理的IPv6地址=日本的IPv6地址”定义为一致。(为了避免混淆)
根据在此处公开的IPv6地址,让我们修改之前的文件。
location = /wp-login.php {
# JP IPv4 Address
allow 000.000.000.000/24;
# <<中略>>
# JP IPv6 Address
allow 0000:0000::/32;
# <<中略>>
deny all;
access_log /var/log/nginx/access_wp-login.log;
error_log /var/log/nginx/error_wp-login.log error;
include /etc/nginx/sites-available/wordpress-php.conf.parts;
}
最后
请务必不要直接复制粘贴以下nginx配置文件中示例的IP地址,因为它是完全虚构的。