实战sshd服务防止暴力破解

实战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 发送告警邮件,请确保系统的邮件服务能够正常发送邮件!

你可能感兴趣的:(linux,linux)