在Nginx中,如果你想要屏蔽某些IP地址,可以通过配置ngx_http_access_module
模块来实现。以下是一些常见的方法:
deny
和allow
指令编辑Nginx配置文件:
打开你的Nginx配置文件,通常位于/etc/nginx/nginx.conf
或/etc/nginx/sites-available/your-site
。
添加访问控制规则:
在server
或location
块中添加deny
和allow
指令来控制IP访问。
server {
listen 80;
server_name example.com;
# 屏蔽特定IP地址
deny 192.168.1.1;
deny 192.168.1.2;
# 允许所有其他IP地址
allow all;
location / {
root /var/www/html;
index index.html index.htm;
}
}
重新加载Nginx配置: 保存配置文件并重新加载Nginx以应用更改。
sudo nginx -s reload
geo
模块如果你有多个IP地址需要屏蔽,可以使用geo
模块来简化配置。
编辑Nginx配置文件: 打开你的Nginx配置文件。
定义IP地址范围:
使用geo
模块定义需要屏蔽的IP地址范围。
http {
geo $block_ip {
default 0;
192.168.1.1 1;
192.168.1.2 1;
}
server {
listen 80;
server_name example.com;
# 屏蔽特定IP地址
if ($block_ip) {
return 403 "Forbidden";
}
location / {
root /var/www/html;
index index.html index.htm;
}
}
}
重新加载Nginx配置: 保存配置文件并重新加载Nginx以应用更改。
sudo nginx -s reload
fail2ban
fail2ban
是一个更高级的工具,可以自动屏蔽恶意IP地址。
安装fail2ban:
在大多数Linux发行版上,可以使用包管理器安装fail2ban
。
sudo apt-get install fail2ban # Debian/Ubuntu
sudo yum install fail2ban # CentOS/RHEL
配置fail2ban:
编辑fail2ban
的配置文件,通常位于/etc/fail2ban/jail.local
或/etc/fail2ban/jail.d/*.conf
。
[DEFAULT]
bantime = 600
findtime = 600
maxretry = 3
[nginx-badbots]
enabled = true
filter = nginx-badbots
action = iptables-multiport[name=BadBots, port="http,https", protocol=tcp]
logpath = /var/log/nginx/access.log
创建过滤器:
创建一个过滤器文件来匹配恶意IP地址,通常位于/etc/fail2ban/filter.d/nginx-badbots.conf
。
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*"
ignoreregex =
重启fail2ban:
保存配置文件并重启fail2ban
以应用更改。
sudo systemctl restart fail2ban
通过以上方法,你可以有效地屏蔽Nginx日志中的特定IP地址。选择适合你需求的方法进行配置即可。