CentOS fail2ban 加固 SSH, 防止暴力破解, 并进行钉钉通知

CentOS fail2ban 加固 SSH, 防止暴力破解, 并进行钉钉通知

说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y fail2ban


cat > /etc/fail2ban/action.d/dingding.conf << EOF
[Definition]
# 程序启动时执行
actionstart =
actionstop =
actioncheck =
# IP被封执行
actionban = curl -s -o /dev/null -X POST <api_url> -d 'token=<api_token>' -d 'secret=<api_secret>' -d 'text=<_ban_text>'
actionunban = curl -s -o /dev/null -X POST <api_url> -d 'token=<api_token>' -d 'secret=<api_secret>' -d 'text=<_unban_text>'
_ban_text = <ip> 暴力登录 [<local_ip>] 达到 <failures> 次. 已被封禁
_unban_text = <ip> 在 [<local_ip>] 上已被解禁

[Init]
api_url=https://api.xinac.net/dingtalk
# 此处配置钉钉群机器人的 token
api_token=xxx
# 此处配置钉钉群机器人的 secret
api_secret=xxx
# 本机 IP 地址
local_ip=<fq-hostname>
EOF


local_ip=$(ip -4 addr show ens192 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
sed -i "s/<fq-hostname>/$local_ip/g" /etc/fail2ban/action.d/dingding.conf


tee -a /etc/fail2ban/jail.conf > /dev/null <<EOL

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
dingding
logpath = /var/log/secure
maxretry = 3
bantime = 300d
EOL

systemctl enable fail2ban

systemctl start fail2ban

注意这里我是过滤出 ens192 网卡的 IP, 具体根据实际情况来

其他命令

解封

1
fail2ban-client set ssh-iptables unbanip xxxxxx