nginx 屏蔽ip

在网站运行过程中,我们有的时候需要对某个IP或者IP段进行封禁,禁止IP访问本服务器,如果服务器的环境用的是Nginx,下面我们来看看Nginx如何禁止某个IP访问!

方法一:
首先在nginx的conf目录下建立名为blocksip.conf配置文件:

然后用vim打开blocksip.conf文件,写入以下规则:

deny xxx.xxx.xxx.xxx; (xxx为需要封禁的IP)
保存一下。

在nginx的配置文件nginx.conf中加入:

include blocksip.conf;
重启下nginx的服务:

service nginx restart
blocksip.conf:的格式还有许多种,可以配置只允许的IP访问或者IP段访问:

deny IP;
allow IP;
# block all ips
deny all;
# allow all ips
allow all;
其中网段的写法是这样的:192.168.1.0/24这样的形式。

deny 192.168.1.11;
deny 192.168.1.123;
deny 10.0.1.0/24;
如果你想实现这样的应用,除了几个IP外,其他全部拒绝,

那需要你在ip.balcklist中这样写

allow 1.1.1.1;
allow 1.1.1.2;
deny all;
单独网站屏闭IP的方法:

在server”{}”,在这个大括号内加入deny IP地址是限制某IP地址访问;allow IP地址是只允许某IP地址访问;

屏蔽单个IP的命令是

deny 123.45.6.7

封整个段即从123.0.0.1到123.255.255.254的命令

deny 123.0.0.0/8

封IP段即从123.45.0.1到123.45.255.254的命令

deny 124.45.0.0/16

封IP段即从123.45.6.1到123.45.6.254的命令是

deny 123.45.6.0/24

这里写图片描述

方法二:
使用iptables
1、iptables -L -n //查看iptables规则
2、iptables -F //清掉iptables规则
3、封闭ip命令
单个IP的命令是
iptables -I INPUT -s 124.115.0.199 -j DROP

封IP段的命令是 
iptables -I INPUT -s 124.115.0.0/16 -j DROP 

封整个段的命令是 
iptables -I INPUT -s 194.42.0.0/8 -j DROP 

封几个段的命令是 
iptables -I INPUT -s 61.37.80.0/24 -j DROP 
iptables -I INPUT -s 61.37.81.0/24 -j DROP 

4、 service iptables save ,保存规则,不然重启会将原来设置的规则覆盖掉
5、systemctl restart iptables //重启iptables
6、删除一条已有的规则
iptables -L INPUT –line-numbers //查看规则对应的rulenum
iptables -D chain rulenum //chain 对应的是-I 后面的命令,如上图设置为 “INPUT” ,

重启防火墙失败 ,Failed to restart iptables.service: unit not found.
解决办法:
yum install iptables-services //重新安装一遍
systemctl stop iptables && systemctl disable iptables
systemctl start iptables && systemctl enable iptables

### 使用 Nginx 和 Lua 实现 IP 屏蔽功能 #### 安装 OpenResty 并集成 Lua 支持 OpenResty 是一个基于 Nginx 与其它多个模块构建的应用平台,允许使用者轻松创建高效可扩展的 Web 应用和服务[^2]。 对于想要利用 Lua 脚本语言来增强 Nginx 功能的情况来说,安装 OpenResty 将会是非常便捷的选择。这不仅简化了环境搭建过程,还提供了更稳定的性能表现和更多的内置特性支持。 #### 下载并编译必要的组件 为了使 Nginx 可以执行 Lua 代码,在安装过程中还需要额外获取 Luajit、ngx_devel_kit(NDK)以及 lua-nginx-module 这些依赖项: ```bash [root@nginx-lua src]# wget http://luajit.org/download/LuaJIT-2.0.tar.gz [root@nginx-lua src]# wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz [root@nginx-lua src]# wget https://github.com/openresty/lua-nginx-module/archive/v0.9.16.tar.gz ``` 完成上述操作之后按照官方文档指示进行解压、配置、编译直至最终安装这些包[^3]。 #### 修改 `nginx.conf` 文件添加 Lua 配置 编辑 Nginx 主配置文件 `/usr/local/nginx/conf/nginx.conf` ,在 HTTP 块内增加如下指令以便加载 Lua 脚本用于处理请求访问逻辑: ```nginx http { ... # WAF相关设置 lua_shared_dict limit 50m; lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua"; init_by_lua_file "/usr/local/openresty/nginx/conf/waf/init.lua"; access_by_lua_file "/usr/local/openresty/nginx/conf/waf/access.lua"; ... } ``` 这段配置指定了共享内存区名称及其大小(此处设为50MB),设置了 Lua 模块搜索路径,并指定初始化脚本(init.lua)及入口函数(access.lua)[^4]。 #### 编写 Lua 脚本来实现 IP 黑名单机制 接下来就是编写具体的 Lua 程序来判断客户端 IP 是否存在于预定义好的黑名单列表之中。假设已经有一个名为 `blacklist.txt` 的纯文本文件保存着所有被禁止访问系统的 IP 地址,则可以在 `access.lua` 中读取该文件并将其中的内容转换成表结构供后续查询使用;也可以考虑将此数据存储于 Redis 数据库当中从而提高效率和支持分布式部署场景下的同步需求[^1]。 下面给出一段简单的 Lua 伪代码作为参考: ```lua -- 加载所需库 local redis = require "resty.redis" -- 创建Redis连接实例 local red = redis:new() red:set_timeout(1000) -- 设置Redis服务器地址和端口 local ok, err = red:connect("127.0.0.1", 6379) if not ok then ngx.log(ngx.ERR, "failed to connect: ", err) end -- 获取当前来访者的IP地址 local client_ip = ngx.var.remote_addr -- 查询给定键名对应的值是否存在 local res, err = red:get(client_ip) if not res then -- 如果不存在则继续正常流程 elseif res == "blocked" then -- 若返回结果表示已被封锁,则拒绝服务 ngx.exit(403) else -- 处理其他可能情况... end -- 断开数据库链接释放资源 red:close() ``` 以上即完成了基本的 Nginx 结合 Lua 来达到 IP 访问控制目的的方法介绍。当然实际项目里还可以根据业务特点进一步优化和完善相应策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值