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;
... ...
}
}
}