当你的linux服务器暴露在外网当中时,服务器就极有可能会遭到互联网上的扫描软件进行扫描,然后试图连接ssh端口进行暴力破解(穷举扫描)。如果遇到这个问题,一款非常有用的工具DenyHosts可以阻止试图猜测SSH登录口令。DenyHosts是用Python写的一个程序,它会分析SSHD的日志文件(Redhat为/var/log/secure等),当发现同一IP在进行多次SSH密码尝试时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽该IP的目的。
另外,建议修改默认的ssh, mysql等常用的服务的默认端口号
1) 判断系统安装的sshd是否支持tcp_wrappers(默认都支持),命令如下:
ldd /usr/sbin/sshd |grep libwrap.so.0
如果有输出:libwrap.so.0 => /lib64/libwrap.so.0 则为支持
2)判断是否有python(centos默认都有):
python -V
只要系统Python版本不小于2.3版本即可(本机版本为Python 2.6.5)。
1)下载DenyHosts-2.6.tar.gz并上传到服务器,
wget http://imcat.in/down/DenyHosts-2.6.tar.gz
2)安装
①解压
tar -zxvf DenyHosts-2.6.tar.gz
②安装
cd DenyHosts-2.6 python setup.py install
程序脚本自动安装在:/usr/share/denyhosts目录
库文件安装在:/usr/lib/python2.6/site-packages/DenyHosts目录下
denyhosts.py默认安装在:/usr/bin/目录下
3)设置启动脚本
cd /usr/share/denyhosts/ cp daemon-control-dist daemon-control chown root daemon-control chmod 700 daemon-control
##将denyhosts.cfg-dist中不是以"#"开头的行,写入denyhosts.cfg文件, 命令: grep -v "^#" denyhosts.cfg-dist > denyhosts.cfg
编辑denyhosts.cfg 命令: vi denyhosts.cfg
具体配置项可参考以下的配置:
############ THESE SETTINGS ARE REQUIRED ############
##分析源文件
SECURE_LOG = /var/log/secure
##禁止sshd登陆的IP存放文件
HOSTS_DENY = /etc/hosts.deny
##过多久后清除已经禁止的IP
PURGE_DENY = 7d
##监控的服务名
BLOCK_SERVICE = sshd
##表示允许无效用户登录失败的次数
DENY_THRESHOLD_INVALID = 3
##表示允许普通用户登录失败的次数
DENY_THRESHOLD_VALID = 3
##表示允许root用户登录失败的次数
DENY_THRESHOLD_ROOT = 3
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /usr/share/denyhosts/data
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
##是否做域名反解
HOSTNAME_LOOKUP=NO
LOCK_FILE = /var/lock/subsys/denyhosts
4)将denyhosts添加到系统服务并自动启动
①自启动
vi /etc/rc.local
在末尾添加以下行
/usr/share/denyhosts/daemon-control start
②添加至系统服务
ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts chkconfig --add denyhosts chkconfig --level 345 denyhosts on
5)启动denyhosts
service denyhosts start
6)查看denyhosts是否运行成功
service denyhosts status
显示:DenyHosts is running with pid = XXXX,即运行成功。
7)至此,denyhosts也就配置完成了;此外将sshd的默认端口修改掉,再结合denyhosts可以防止大部分sshd的暴力破解了。
3、将自己的IP加入白名单
如果自己的IP曾经登陆失败过,并且超过了你配置文件中的阀值,安装好denyhosts后,只要一登陆, 自己的IP就会被加到/etc/hosts.deny里。所以可以将IP加入白名单hosts.allow,当hosts.allow和 host.deny相冲突时,以hosts.allow设置优化。
加入白名单:
vim /etc/hosts.allow
添加 sshd:127.0.0.1(冒号后跟要加入的IP)
在网上还看到另一种方法,亲测可行:https://www.cnblogs.com/jackrebel/p/3935592.html
如果修改了配置,重启命令: /usr/share/denyhosts/daemon-control restart
攻击者一般首先通过ping命令检测此主机或者IP是否处于活动状态 ,如果能够ping通 某个主机或者IP,那么攻击者就认为此系统处于活动状态,继而进行攻击或破坏。如果没有人能ping通机器并收到响应,那么就可以大大增强服务器的安全性,linux下可以执行如下设置,禁止ping请求:
修改文件 /etc/sysctl.conf,在文件末尾增加一行:
net.ipv4.icmp_echo_ignore_all = 1
如果已经有 net.ipv4.icmp_echo_ignore_all 这一行了,直接修改 = 号后面的值即可的 0 表示允许,1 表示禁止。
修改完成后执行 sysctl -p 使新配置生效(重要)。