社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

运维工程师必看!Nginx 防火墙这样配:IP自动封禁+CC攻击防护,看完直呼内行

Linux就该这么学 • 1 周前 • 14 次点击  

链接:https://www.cnblogs.com/hahaha111122222/p/18702355

在 Web 服务器中,Nginx 提供了一种简单而强大的方法来控制访问,允许管理员基于 IP 地址来设置黑名单(禁止访问)或白名单(仅允许特定 IP 访问)。本教程将介绍如何在 Nginx 配置黑白名单,并提供具体示例。

allow、deny

deny和allow指令属于ngx_http_access_module,nginx默认加载此模块,所以可直接使用。

在Nginx配置文件中定义允许访问系统的IP地址。假设您的Nginx配置文件位于 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default。

直接配置文件中添加

server {
    listen 80;
    server_name your_domain_or_ip;

    # 设置白名单
    location / {
        allow 192.168.1.1;  # 允许特定IP访问
        allow 192.168.1.2;
        allow 192.168.1.3;
        allow 192.168.1.4;
        allow 192.168.1.5;
        allow 192.168.1.6;
        deny all;  # 拒绝所有其他IP访问
    }

    # 设置最高权限的运行维护IP
    location /admin {
        allow 192.168.1.7;  # 最高权限的运行维护IP
        deny all;
    }

    # 设置有限权限的维护IP
    location /limited {
        allow 192.168.1.8;  # 有限权限的维护IP1
        allow 192.168.1.9;  # 有限权限的维护IP2
        deny all;
    }
}

通过读取文件IP配置白名单

location /{
    include /home/whitelist.conf;
    #默认位置路径为/etc/nginx/ 下,
    #如直接写include whitelist.conf,则只需要在/etc/nginx目录下创建whitelist.conf
    deny all;
}

在/home/目录下创建whitelist.conf,并写入需要加入白名单的IP,添加完成后查看如下:

cat /home/whitelist.conf

#白名单IP
allow 10.1.1.10;
allow 10.1.1.11;

ngx_http_geo_module

默认情况下,一般nginx是有加该模块的,ngx_http_geo_module,参数需设置在位置在http模块中。此模块可设置IP限制,也可设置国家地区限制。位置在server模块外即可。

配置文件直接添加

geo $ip_list {
    default 0;
    #设置默认值为0
    192.168.1.0/241;
    10.1.0.0/16    1;
}
server {
    listen       8081;
    server_name  192.168.152.100;
    
    location / {
        root   /var/www/test;
        index  index.html index.htm index.php;
        if ( $ip_list = 0 ) {
           #判断默认值,如果值为0,可访问,这时上面添加的IP为黑名单。
           #白名单,将设置$ip_list = 1,这时上面添加的IP为白名单。
           proxy_pass http://192.168.152.100:8081;
    }
}

读取文件IP配置

geo $ip_list {
    default0;
    #设置默认值为0
    include ip_white.conf;
}
server {
    listen       8081;
    server_name  192.168.152.100;
    
    location / {
        root   /var/www/test;
        index  index.html index.htm index.php;
        if ( $ip_list = 0 ) {
            return403;
            #限制的IP返回值为403,也可以设置为503,504其他值。
            #建议设置503,504这样返回的页面不会暴露nginx相关信息,限制的IP看到的信息只显示服务器错误,无法判断真正原因。
      }
    }
}

国家地区IP限制访问

安装ngx_http_geoip_module模块

ngx_http_geoip_module,参数需设置在位置在http模块中。nginx默认情况下不构建此模块,应使用 --with-http_geoip_module 配置参数启用它。对于ubuntu系统来说,直接安装 nginx-extras组件,包括几乎所有的模块。




    
sudo apt install nginx-extras

# 对于centos系统,安装模块。

yum install nginx-module-geoip

下载 IP 数据库

ngx_http_geoip_module模块依赖于IP数据库,所有数据在此数据库中读取,需要下载ip库(dat格式)。下载同时包括Ipv4和Ipv6的country、city版本。

#下载国家IP库,解压并移动到nginx配置文件目录,
sudo wget https://dl.miyuru.lk/geoip/maxmind/country/maxmind.dat.gz
gunzip maxmind.dat.gz
sudo mv maxmind.dat /etc/nginx/GeoCountry.dat

sudo wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind.dat.gz
gunzip maxmind.dat.gz
sudo mv maxmind.dat /etc/nginx/GeoCity.dat

配置nginx

geoip_country /etc/nginx/GeoCountry.dat;
geoip_city /etc/nginx/GeoCity.dat;

server {
    listen  80;
    server_name 144.11.11.33;

    location / {
      root  /var/www/html/;
      index index.html index.htm;
      if ($geoip_country_code = CN) {
         return 403;
         #中国地区,拒绝访问。返回403页面
      }
   }
 }

国家相关参数

$geoip_country_code:两位字符的英文国家码。例如:CN, US
$geoip_country_code3:三位字符的英文国家码。例如:CHN, USA
$geoip_country_name:国家英文全称。例如:China, United States

城市相关参数

$geoip_city_country_code:两位字符的英文国家码。例如:CN, US
$geoip_city_country_code3:三位字符的英文国家码。例如:CHN, USA
$geoip_city_country_name:国家英文全称。例如:China, United States
$geoip_region:地区代码,通常是两位数的数字。例如:杭州是02, 上海是23
$geoip_city:城市的英文名称。例如:Hangzhou
$geoip_postal_code:城市的邮政编码。国内这字段可能为空
$geoip_city_continent_code:大洲代码。国内通常是AS
$geoip_latitude:纬度
$geoip_longitude:经度

END

官方站点:www.linuxprobe.com

 Linux命令大全:www.linuxcool.com

刘遄老师QQ:5604215

Linux技术交流群:2636170

(新群,火热加群中……)

想要学习Linux系统的读者可以点击"阅读原文"按钮来了解书籍《Linux就该这么学》,同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/180197
 
14 次点击