在 WordPress 中使用 fail2ban 封禁恶意登入用户

因为无聊的逗比尝试破解 ssh,安装了 fail2ban 保护作业系统安全,然后就给博客加了点料。。。
具体方案详见全文。

1.安装 WP-fail2ban 插件并启用

WordPrees 后台: 搜索并安装

WP-Cli: 

wp plugin install wp-fail2ban --activative

2.安装 fail2ban

Ubuntu:

apt-get install fail2ban

CentOS:

yum install fail2ban

3.启动服务

service fail2ban restart

4.在 /etc/fail2ban 下新建监狱配置文件,并且删除本地系统 logpath 字段前的 “#”

touch jail.local
vim jail.local
[DEFAULT]
# 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名
# 用于指定哪些地址可以忽略 fail2ban 防御
ignoreip = 127.0.0.1
# 客户端主机被禁止的时长(秒)
bantime = 86400
# 客户端主机被禁止前允许失败的次数 
maxretry = 3 
# 查找失败次数的时长(秒)
findtime = 1800 

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
# Debian 系的发行版 
#logpath = /var/log/auth.log
# Red Hat 系的发行版
#logpath = /var/log/secure
# ssh 服务的最大尝试次数 
maxretry = 2
bantime = 2592000

[wordpress-hard]
enabled = true
filter = wordpress-hard
# Debian 系的发行版 
#logpath = /var/log/auth.log
# Red Hat 系的发行版
#logpath = /var/log/secure
#logpath = /var/log/messages
maxretry = 3
action = iptables[name=Http, port=80, protocol=tcp]
action = iptables[name=Https, port=443, protocol=tcp]
findtime = 1800
bantime = 3600

[wordpress-soft]
enabled = true
filter = wordpress-soft
# Debian 系的发行版 
#logpath = /var/log/auth.log
# Red Hat 系的发行版
#logpath = /var/log/secure
#logpath = /var/log/messages
maxretry = 10
action = iptables[name=Http, port=80, protocol=tcp]
action = iptables[name=Https, port=443, protocol=tcp]
findtime = 1800
bantime = 3600

5.查找 php.ini 并修改配置使其输出到 syslog

find / -name php.ini

记住上面的返回路径

vim 返回路径
/display_errors =

使用 vim 打开 php.ini, 并且定位到 display_errors, 将该行修改为

display_errors = off

同理,修改 log_errors 为 on

/log_errors =
log_errors = on

同理,修改 error_log 为 syslog

/error_log =
error_log = syslog

6.重启服务使设置生效

service restart fail2ban
service restart nginx
service restart httpd

高级方案:
修改 error_log 为 自定义路径

/error_log =
error_log = 自定义的路径

jail.local 的配置应为

[DEFAULT]
# 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名
# 用于指定哪些地址可以忽略 fail2ban 防御
ignoreip = 127.0.0.1
# 客户端主机被禁止的时长(秒)
bantime = 86400
# 客户端主机被禁止前允许失败的次数 
maxretry = 3 
# 查找失败次数的时长(秒)
findtime = 1800 

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=2222, protocol=tcp]
# Debian 系的发行版 
#logpath = /var/log/auth.log
# Red Hat 系的发行版
#logpath = /var/log/secure
# ssh 服务的最大尝试次数 
maxretry = 2
bantime = 2592000

[wordpress-hard]
enabled = true
filter = wordpress-hard
# 日志目录
logpath = 日志目录
maxretry = 3
action = iptables[name=Http, port=80, protocol=tcp]
action = iptables[name=Https, port=443, protocol=tcp]
findtime = 1800
bantime = 3600

[wordpress-soft]
enabled = true
filter = wordpress-soft
# 日志目录
logpath = 日志目录
maxretry = 10
action = iptables[name=Http, port=80, protocol=tcp]
action = iptables[name=Https, port=443, protocol=tcp]
findtime = 1800
bantime = 3600

附注:
每次修改 fail2ban 均需重启服务

部分 fail2ban 命令:

fail2ban-client ping //显示 fail2ban 状态
fail2ban-client status //显示所有监狱状态
fail2ban-client status 监狱名 //显示指定监狱状态(可以查看被封禁的ip)
fail2ban-client set 监狱名 unbanip 指定ip //解封指定 ip

6 条评论

发表评论

*