方法一:

  1. 密码足够复杂

    密码的长度要大于8位,最好大于14位。密码的复杂度是密码要尽可能有数字、大小写字符和特殊字符混合组成。

  2. 修改默认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, [email protected], [email protected], 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



下面针对其他服务进行防暴力破解

[pop3] 

enabled = true 

filter   = courierlogin 

action   = iptables[name=pop3port=110protocol=tcp

logpath = /var/log/maillog 

bantime = 1800 

findtime = 300 

maxretry = 30 

 

[webmail] 

enabled = true 

filter   = webmail 

action   = iptables[name=httpdport=httpprotocol=tcp

logpath = /var/log/maillog 

bantime = 900 

findtime = 300 

maxretry = 5 




更详细的查看http://www.poluoluo.com/server/201404/269766.html