IP黑名单
来自SEnginx
目录 |
IP黑名单
概要
IP黑名单模块提供了动态IP黑名单的功能,此模块和其他的安全功能模块配合使用,可以实现当某个源IP地址在1秒内发生指定的攻击次数时,将此IP地址加入到IP黑名单中,并阻断此IP一段时间。
此模块在SEnginx 1.5.5以及以后的版本中提供。
命令
ip_blacklist
语法 | ip_blacklist on/off |
默认值 | off |
上下文 | http |
控制IP黑名单功能在全局的开启和关闭
示例:
ip_blacklist on;
ip_blacklist_size
语法 | ip_blacklist_size size |
默认值 | 1024 |
上下文 | http |
指定IP黑名单的大小,size是黑名单的条数,也就是要存储的IP数量。
示例:
ip_blacklist_size 10240;
ip_blacklist_timeout
语法 | ip_blacklist_timeout timeout |
默认值 | 60 |
上下文 | http |
指定IP黑名单条目的超时时间,单位为秒。在超时时间范围内的条目会被阻断。
示例:
ip_blacklist_timeout 120;
ip_blacklist_log
语法 | ip_blacklist_log on/off |
默认值 | off |
上下文 | http/server/location |
指定某个IP地址被加入到黑名单的时候,是否记录日志。注意,已经被加到黑名单中的IP地址引发的后续阻断不会记录日志。
示例:
ip_blacklist_log on;
ip_blacklist_show
语法 | ip_blacklist_show |
默认值 | |
上下文 | location |
指定在某个location下开启查看IP黑名单的功能。
示例:
location /show_blacklist { ip_blacklist_show; }
ip_blacklist_flush
语法 | ip_blacklist_flush |
默认值 | |
上下文 | location |
指定在某个location下开启刷新IP黑名单的功能。
示例:
location /flush_blacklist { ip_blacklist_flush; }
然后在浏览器或者使用其他的http客户端,如wget, curl等,访问/flush_blacklist路径,即可清空当前系统中的黑名单,例如:
curl http://1.1.1.1/flush_blacklist
此请求会返回状态码为444的应答,此应答没有任何意义,仅是关闭连接而已。
ip_blacklist_mode
语法 | ip_blacklist_mode sys/local |
默认值 | local |
上下文 | http |
全局指定黑名单的工作模式,分为2种:
- 系统命令模式(sys):指当某个IP地址达到加入黑名单的条件时,条用一条外部命令执行动作,例如将此IP地址加入到系统的iptables中,而SEnginx本身不进行黑名单的记录。
- 本地模式(local):当某个IP地址达到加入黑名单的条件时,此IP地址会被记录在SEnginx内部的黑名单列表上,后续的访问会被在SEnginx处阻断。
示例:
使用系统命令模式: ip_blacklist_mode sys; 使用SEnginx本地模式: ip_blacklist_mode local;
ip_blacklist_syscmd
语法 | ip_blacklist_syscmd [system command] |
默认值 | |
上下文 | http |
指定当IP黑名单的工作模式为sys时SEnginx需要执行的外部系统命令,IP地址在命令中以%V表示
示例:
指定一个脚本来处理加入到黑名单的IP地址: ip_blacklist_syscmd "sudo /path/to/a/scritp %V"; 使用iptables来加入一个IP地址并阻断: ip_blacklist_syscmd "sudo /sbin/iptables -A INPUT -s %V -j DROP";
例子
和机器人缓解模块配合使用的例子
黑名单的次数在机器人模块中设置,下面的这个例子,是指同一IP地址的请求每秒超过10个时,并且这些请求都没有通过机器人模块的挑战,则加入黑名单中。
http { ... ... ip_blacklist on; ip_blacklist_size 10240; ip_blacklist_timeout 60; ip_blacklist_log on; server { listen 80; server_name localhost; location /blacklist_flush { ip_blacklist_flush; } location /blacklist_show { ip_blacklist_show; } location / { ... ... robot_mitigation on; robot_mitigation_mode js; robot_mitigation_blacklist 10; ... ... } } }