实战sshd服务防止暴力破解
登录系统需要 ip+用户名+密码+端口 防止破解 就只有更改默认的端口 设置复杂的密码和用户名
方法一:配置安全的sshd服务
1.设置密码,密码的长度为8-20位,密码的复杂度尽量有大小写字母,数字和特殊符号混合而成
2.修改端口号
在sshd配置文件中修改 vim /etc/ssh/sshd_config 将port 修改
修改成功后重启ssh服务
查询端口号 可以通过nmap扫描端口 nmap 127.0.0.1 扫描本地端口
netstat -tlunp |grep sshd 过滤sshd服务
3.不允许root登录系统 ,添加普通用户,使其拥有**root的权限 **
id 普通用户名 可以看到uid 为0
[root@itzfl-5 ~]# id zfl
uid=0(zfl) gid=0(root) 组=0(root)
[root@itzfl-5 ~]# ssh [email protected]
[email protected]'s password:
Last login: Sat Jul 30 16:54:03 2022 from itzfl-5
This account is currently not available.
Connection to 192.168.140.5 closed.
[root@itzfl-5 ~]# ssh [email protected]
[email protected]'s password:
[root@itzfl-5 ~]#
4.不使用密码登录 直接使用密钥认证实现sshd认证
破解的是密码 不使用密码 怎么也破解不开
**方法二:使用开源的防护软件 fail2ban来保护 **
实战背景:
最近公网网站一直被别人暴力破解SSHD服务密码。虽然没有成功,但会导致系统负载很高,原因是
在暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢。
fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好、很实用、很强大!简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp列表一定时间。
注:重启iptables服务的话,所有DORP将重置。下载软件包: 官方地址:http://www.fail2ban.org
我们使用fail2ban-0.8.14.tar.gz版本
centos 7
**1.安装 fail2ban
**配置 epel源 yum install -y epel-release.noarch
yum install -y fail2ban
systemctl enable fail2ban # 开机启动
systemctl start fail2ban # 启动
systemct restart fail2ban # 重启
fail2ban-client reload # 重新加载配置
fail2ban-client status # 查看状态
[root@itzfl-5 fail2ban]# ls
action.d fail2ban.d jail.conf paths-common.conf
fail2ban.conf filter.d jail.d paths-fedora.conf
[root@itzfl-5 fail2ban]#
- /etc/fail2ban/action.d/ //采取相对应措施的目录
- /etc/fail2ban/fail2ban.conf //fail2ban的配置文件
- /etc/fail2ban/fail2ban.d/ //fail2ban的配置文件目录
- /etc/fail2ban/filter.d/ //具体过滤规则文件目录
- /etc/fail2ban/jail.conf //阻挡设定文件
- /etc/fail2ban/jail.d/ //阻挡设定文件的目录
jail 监狱
2.修改配置文件
vim /etc/fail2ban/jail.conf 修改配置文件
[ssh-iptables]
968 enabled = true 启动
969
970 filter = sshd 规则是ssh 用ssh中的服务中的日志,过滤规则
971
972 action = iptables[name=SSH, port=ssh, protocol=tcp] 动作 用防火墙屏蔽掉
973 sendmail-whois[name=SSH, dest=root, [email protected]]
974
975 logpath = /var/log/secure
976
977 maxretry = 3
978 findtime = 300
979 bantime = 3600
980
#是否激活此项(true/false)
enabled = true
#过滤规则filter的名字,对应filter.d目录下的sshd.conf
filter = sshd
#动作的相关参数
action = iptables[name=SSH, port=ssh, protocol=tcp]
#触发报警的收件人
# sendmail-whois[name=SSH, dest=root, [email protected], sendername="Fail2Ban"]
#检测的系统的登陆日志文件
logpath = /var/log/secure
#最大尝试次数
maxretry = 3
root@itzfl-5 fail2ban]# systemctl restart fail2ban
[root@itzfl-5 fail2ban]# systemctl enable fail2ban.service
Created symlink from /etc/systemd/system/multi-user.target.wants/fail2ban.service to /usr/lib/systemd/system/fail2ban.service.
[root@itzfl-5 fail2ban]#
进入日志 var/log/secure
清空日志 > /var/log/secure
3.从另外一台服务器远程
[root@itzfl ~]# ssh 192.168.140.5
The authenticity of host '192.168.140.5 (192.168.140.5)' can't be established.
RSA key fingerprint is 33:37:c8:a6:79:b0:1c:69:44:39:19:2e:ca:40:6f:57.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.140.5' (RSA) to the list of known hosts.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@itzfl ~]# ssh 192.168.140.5
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Connection closed by 192.168.140.5
[root@itzfl ~]# ssh 192.168.140.5
ssh: connect to host 192.168.140.5 port 22: Connection refused
查询结果iptables -L -n
fail2ban-client status ssh-iptables查询被ban掉的ip
fail2ban-client set ssh-iptables unbanip 192.168.140.133 移除被ban掉的ip
[root@itzfl-5 fail2ban]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.122.0/24 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68
Chain f2b-SSH (1 references)
target prot opt source destination
REJECT all -- 192.168.140.133 0.0.0.0/0 reject-with icmp-port-unreachable
RETURN all -- 0.0.0.0/0 0.0.0.0/0
[root@itzfl-5 fail2ban]#
[root@itzfl-5 fail2ban]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: ssh-iptables
[root@itzfl-5 fail2ban]# fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- Filter
| |- Currently failed: 0
| |- Total failed: 4
| `- File list: /var/log/secure
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 192.168.140.133
[root@itzfl-5 fail2ban]#
三、centos6安装fail2ban
tar -xf fail2ban-0.8.14.tar.gz 解压安装包
cd fail2ban-0.8.14
cat README.md
this case, you should use it instead.**
Required:
- [Python >= 2.4](http://www.python.org)
Optional:
- [pyinotify >= 0.8.3](https://github.com/seb-m/pyinotify)
- Linux >= 2.6.13
- [gamin >= 0.0.21](http://www.gnome.org/~veillard/gamin)
To install, just do:
tar xvfj fail2ban-0.8.12.tar.bz2
cd fail2ban-0.8.12
python setup.py install
python -V 查询python版本
python setup.py install 安装
[root@itzfl fail2ban-0.8.14]# cd /etc/fail2ban/
[root@itzfl fail2ban]# ls
action.d fail2ban.conf fail2ban.d filter.d jail.conf jail.d
启动fail2ban
一个新的软件包,后期怎么可以知道哪个文件是启动脚本文件?
chkconfig 是 RedHat 系统 Linux 特有的服务启动配置命令,我们可以作为关键字来进行过滤
[root@itzfl fail2ban-0.8.14]# grep chkconfig ./* -R --color
./files/redhat-initd:# chkconfig: - 92 08
启动脚本里都包含 chkconfig 字段
源码方式 可以通过自带的脚本启动,但是重启服务器不能开机自动启动下面的方式可以用 yum 在线安装,生成系统启动脚本加入开机启动拷贝到启动脚本:
[root@itzfl fail2ban-0.8.14]# cp ./files/redhat-initd /usr/sbin/fail2ban
[root@itzfl fail2ban-0.8.14]# chmod +x !$
chmod +x /usr/sbin/fail2ban
[root@itlaoxin-17 fail2ban-0.8.14]#
启动方式
[root@itzfl fail2ban-0.8.14]# /usr/sbin/fail2ban start
启动fail2ban: [确定]
[root@itzfl fail2ban-0.8.14]#
实战
设置条件:SSH 远程登录 5 分钟内 3 次密码验证失败,禁止用户 IP 访问主机 1 小时,1 小时该限制
自动解除,用户可重新登录。
因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默
认存在的。基本不用做任何修改。所有主要需要设置的就只有 jail.conf 文件。启用 SSHD 服务的日志分析,指定动作阀值即可。
[root@laoxin17 ~]# vim /etc/fail2ban/jail.conf #配置文件说明
[DEFAULT] #全局设置
ignoreip = 127.0.0.1/8 #忽略的 IP 列表,不受设置限制 bantime = 3600 #屏蔽时间,单位:秒 findtime = 300#这个时间段内超过规定次数会被 ban 掉
maxretry = 3 #最大尝试次数
backend = auto #日志修改检测机制(gamin、polling 和 auto 这三种)
[root@laoxin17 ~]# vim /etc/fail2ban/jail.conf #改以下红色标记内容
false: 美 [fɔls]
96enabled = true
97filter = sshd
98action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, [email protected], sender=fail2ba
100 logpath = /var/log/secure
findtime = 300 maxretry = 3 bantime = 3600
注释:
enabled = true #是否激活此项(true/false)修改成 true logpath = /var/log/secure #检测的系统的登陆日志文件。这里要写 sshd 服务日志文件。 #完成:5 分钟内 3 次密码验证失败,禁止用户 IP 访问主机 1 小时。 配置如下
findtime = 300 #在 5 分钟内内出现规定次数就开始工作,默认时间单位:秒 maxretry = 3 #3 次密码验证失败 bantime = 3600 #禁止用户 IP 访问主机 1 小时
测试:
[root@itlaoxin-17 ~]# /usr/sbin/fail2ban restart
Stopping fail2ban: [ 确定 ]
Starting fail2ban: [ 确定 ]
[root@itlaoxin-17 ~]#
[root@laoxin17 fail2ban]# > /var/log/secure #清日志。 从现在开始
启动服务:
[root@itlaoxin-17 fail2ban-0.8.14]# ./files/redhat-initd start
Starting fail2ban: [ 确定 ]
[root@itlaoxin-17 fail2ban-0.8.14]#
[root@laoxin17 fail2ban]# iptables -L –n #会多生成一个规则链
测试:在 laoxin18 上故意输入错误密码 3 次,再进行登录时,会拒绝登录
[root@itlaoxin18 ~]# ssh 192.168.1.17 [email protected]'s password: Permission denied, please try again. [email protected]'s password: Permission denied, please try again. [email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). [root@itlaoxin18 ~]# ssh 192.168.1.17
ssh: connect to host 192.168.1.17 port 22: Connection refused
[[email protected] ~]# iptables -L |tail -4 Chain fail2ban-SSH (1 references)
target prot opt source destination DROP all -- 192.168.12.64 anywhere
RETURN all -- anywhere anywhere
[root@laoxin17 fail2ban]# fail2ban-client status#配置好之后我们检测下 fail2ban 是否工作。
Status
|- Number of jail: 1
`- Jail list: ssh-iptables
#具体看某一项的状态也可以看,如果显示被 ban 的 ip 和数目就表示成功了,如果都是 0,说明没有成功。
[root@itlaoxin-17 fail2ban-0.8.14]# fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- filter
| |- File list: /var/log/secure
| |- Currently failed: 0
| `- Total failed: 3
`- action
|- Currently banned: 1
| `- IP list: 192.168.1.18
`- Total banned: 1
[root@itlaoxin-17 fail2ban-0.8.14]#
查看 fail2ban 的日志能够看到相关的信息
[root@laoxin17 fail2ban]# tail /var/log/fail2ban.log
2015-03-03 19:43:59,233 fail2ban.actions[12132]: WARNING [ssh-iptables] Ban
192.168.12.64
需要注意的四点:
(1)如果做错了,想清空一下记录,还原:只需要把 > /var/log/secure清空就可以了。
service fail2ban restart
(2)另外如果后期需要把 iptables 清空后或 iptables 重启后,也需要把 fail2ban 重启一下。
如果想要使用 fail2ban 发送告警邮件,请确保系统的邮件服务能够正常发送邮件!