方法一:
密码足够复杂
密码的长度要大于8位,最好大于14位。密码的复杂度是密码要尽可能有数字、大小写字符和特殊字符混合组成。
修改默认ssh端口
使用iptables关闭不需要使用的端口
sshd 默认端口号:22
vim /etc/ssh/sshd_config
#Port 22
Port 81
service sshd restart
3.使用扫描工具,对主机查看开放哪些端口。
yum install nmap
nmap 192.168.103.117
4.不使用root用户名登录,这样可以黑客猜不到你的用户名,也就无法暴力破解
不使用root用户,但需要拥有root权限,下面有两种方法:
前提是不让root用户登录,root用户的/bin/bash 改成 /sbin/nologin
(1)把bob用户的uid和gid都改成0,让bob用户拥有root权限。这样bob用户也拥有root权限,但和root本身的区别是,他们的家目录不一样,登录进去都是#,权限是一样的。
(2)也可以给用户拥有sudo权限
visudo 或者 vi /etc/sudoers
root ALL=(ALL) ALL
bob ALL=(ALL) ALL
5.用户登录可以让他们使用密钥登录,密钥上也设置密码。
使用方法在本人博文里面查找。
6.防止暴力破解
案例:最近公司网络一直被人暴力破解sshd服务密码,虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断认证用户,从而增加了系统资源额外开销,导致公司网络很慢。
工具介绍:fail2ban可以监视你的系统日志,然而匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般下是防火墙),而且可与i发送email通知系统管理员,功能很强大。
fail2ban运行机制:简单来说其功能就是防止暴力破解,工作原理是通过分析一定时间内的相关服务日志,将满足动作的相关ip利用iptables加入到dorp(丢弃)列表一定时间。
设置条件:ssh远程登录5分钟内3次密码验证失败,禁止用户ip访问主机1小时,1小时后该限制自动解除。
一般服务器安装好后,只需要启动服务,并开启sshd的enabled=true即可正常使用。如需添加其他的,即需要修改其他文件。
软件包下载:
https://github.com/fail2ban/fail2ban/archive/0.9.4.tar.gz
安装步骤:
wget https://github.com/fail2ban/fail2ban/archive/0.9.4.tar.gz
tar zxvf 0.9.4.tar.gz
cd fail2ban-0.8.14
一般安装步骤在README.md里面能找到。
vim README.md
To install, just do:
tar xvfj fail2ban-0.9.4.tar.bz2
cd fail2ban-0.9.4
python setup.py install
需要安装python开发环境,并且版本要大于2.4的
查看python版本
python -V
安装:
phthon setup.py install
将服务启动脚本复制到开机启动
cp files/redhat-initd /etc/init.d/fail2ban
设置开机启动
chkconfig fail2ban on
chkconfig --add fail2ban
service fail2ban start
设置防暴力破解
设置条件:ssh远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。
vim /etc/fail2ban/fail2ban.conf
默认fail2ban.conf里面就三个参数,而且都有注释。
loglevel = 3 #默认日志的级别
logtarget = /var/log/fail2ban.log #日志的存放路径
socket = /var/run/fail2ban/fail2ban.sock #socket的位置
vim /etc/fail2ban/jail.conf
[DEFAULT] #全局设置
ignoreip = 127.0.0.1/8 10.10.10.0/24 #忽略的IP列表,不受设置限制 如果有二组以上用空白做为间隔
bantime = 600 #屏蔽时间,单位:秒(设置IP被封锁的时间)
findtime = 600 #这个时间段内超过规定次数会被ban掉(设定多长时间内达到最大次数就解锁。)
maxretry = 3 #最大尝试次数
backend = auto #日志修改检测机制(gamin、polling和auto这三种)
设置发送邮件
[ssh-iptables] #单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置。
enabled = true #是否激活此项(true/false)修改成 true
filter = sshd #过滤规则filter的名字,对应filter.d目录下的sshd.conf
action = iptables[name=SSH, port=ssh, protocol=tcp] #动作的相关参数,对应action.d/iptables.conf文件
sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]
#触发报警的收件人
dest=收件者电邮地址, sender=寄件者电邮地址
logpath = /var/log/secure #检测的系统的登陆日志文件。这里要写sshd服务日志文件。 默认为logpath = /var/log/sshd.log
#5分钟内3次密码验证失败,禁止用户IP访问主机1小时。 配置如下
bantime = 3600 #禁止用户IP访问主机1小时
findtime = 300 #在5分钟内内出现规定次数就开始工作
maxretry = 3 #3次密码验证失败
查看登录被拒绝的相关信息
1. 我们可以用iptables查看连接被屏蔽的情况:iptables -L
iptables -L |tail -4
2. 还可以通过fail2ban-client status来查看被屏蔽的情况:
fail2ban-client status
fail2ban-client status ssh-iptables
说明: 如果fail2ban-client status ssh-iptables 显示被ban的ip和数目就表示成功了,如果都是0,说明没有成功
3.也可以查看日志,
tail /var/log/faile2ban.log
解锁特定的ip地址
fail2ban-client set ssh-iptables unbanip 192.168.1.72