Nginx可以通过几种方式实现IP黑名单功能,阻止特定IP地址访问您的网站或服务。以下是几种常用的方法:
在Nginx配置文件中,可以使用deny
指令来拒绝特定IP的访问:
http {
server {
listen 80;
server_name example.com;
# 允许所有IP访问
allow all;
# 拒绝特定IP
deny 123.45.67.89;
deny 192.168.1.100;
# 拒绝IP段
deny 10.0.0.0/8;
location / {
# 您的其他配置
}
}
}
/etc/nginx/blacklist.conf
):deny 123.45.67.89;
deny 192.168.1.100;
deny 10.0.0.0/8;
http {
include /etc/nginx/blacklist.conf;
server {
listen 80;
server_name example.com;
location / {
# 您的其他配置
}
}
}
对于大量IP地址的管理,可以使用Nginx的Geo模块:
http {
geo $blacklist {
default 0;
123.45.67.89 1;
192.168.1.100 1;
10.0.0.0/8 1;
}
server {
listen 80;
server_name example.com;
if ($blacklist) {
return 403;
}
location / {
# 您的其他配置
}
}
}
sudo apt-get install fail2ban # Debian/Ubuntu
sudo yum install fail2ban # CentOS/RHEL
# /etc/fail2ban/jail.local
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
action = iptables-multiport[name=NoAuthFailures, port="http,https"]
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600
http {
include /etc/fail2ban/nginx-ban.conf;
server {
# 其他配置
}
}
http {
lua_shared_dict ip_blacklist 1m;
init_by_lua_block {
local blacklist = ngx.shared.ip_blacklist
blacklist:set("123.45.67.89", true)
blacklist:set("192.168.1.100", true)
}
server {
listen 80;
access_by_lua_block {
local blacklist = ngx.shared.ip_blacklist
if blacklist:get(ngx.var.remote_addr) then
ngx.exit(ngx.HTTP_FORBIDDEN)
end
}
location / {
# 其他配置
}
}
}
每次修改Nginx配置后,执行以下命令:
sudo nginx -t # 测试配置是否正确
sudo systemctl reload nginx # 重载配置(不影响现有连接)
# 或
sudo service nginx reload
以上方法可以根据您的具体需求和安全要求进行选择和组合使用。