0


【安全-SSH】SSH安全设置

今天发现自己的公有云服务器被攻击了
在这里插入图片描述
然后查看了登录日志,如上图

  1. ls-sh /var/log/secure
  2. vim /var/log/secure

然后增加了安全相关的设置
具体可以从以下方面增加安全性:

  1. 修改默认SSH端口
  2. 公有云修改安全组策略及防火墙端口
  3. 设置登录失败次数锁定用户及限制多久之后才能登录
  4. 限制IP登录
  5. 设置失败自动将IP加入SSH黑名单

考虑自己有时候要登陆,目前我采用了方法1、2。
先修改公有云的安全组策略,增加一个端口Port 54321
在这里插入图片描述
开放防火墙端口54321

  1. firewall-cmd --zone=public --add-port=54321/tcp --permanent
  2. firewall-cmd --reload

修改默认SSH端口22改为端口54321。

  1. vim /etc/ssh/sshd_config

在这里插入图片描述
重启sshd

  1. systemctl restart sshd

删掉公有云安全组中的22端口
移除防火墙22端口

  1. firewall-cmd --zone=public --remove-port=22/tcp --permanent

改完之后,发现没有人攻击了。等下次被攻击再学着弄自动IP封锁。

改完之后,下午又有人攻击了,然后找了半天方案,找到一个脚本确实能把攻击的IP和攻击次数列出来,放到/etc/hosts.deny文件中。脚本如下:

  1. cat /shell_script/hosts_deny.sh
  1. #!/bin/bash#Host.deny Shell Script#2013-08-24cat /var/log/secure |awk'/Failed/{print $(NF-3)}'|sort|uniq-c|awk'{print $2 "=" $1;}'> /tmp/black_ip.txt
  2. DEFINE=10foriin`cat /tmp/black_ip.txt`doIP=`echo $i |awk-F='{print $1}'`NUM=`echo $i |awk-F='{print $2}'`if[$NUM-gt$DEFINE]thengrep$IP /etc/hosts.deny > /dev/null
  3. if[$?-gt0]thenecho"sshd:$IP:deny">> /etc/hosts.deny
  4. fifidone
  1. crontab-e# 将下面脚本加进去, 定时检测.# */1 * * * * sh /shell_script/hosts_deny.sh

但是该在centos7下一直报错如下:
在这里插入图片描述
提示是缺少模块,而且原本/etc/目录下也没有hosts.deny文件,因此干脆换种方案,即找了好久的fail2ban和denyhosts。这里denyhosts是0几年的,要下载文件并且安装python,所以直接就用fail2ban了。这个简直不要太好用。

使用fail2ban+firewalld防护

参考:Fail2ban + firewalld 防护doss攻击

安装fail2ban

fail2ban可以监控系统日志,并且根据一定规则匹配异常IP后使用Firewalld将其屏蔽,尤其是针对一些爆破/扫描等非常有效。

  1. #CentOS内置源并未包含fail2ban,需要先安装epel源
  2. yum -yinstall epel-release
  3. #安装fial2ban
  4. yum -yinstall fail2ban

安装成功后fail2ban配置文件位于/etc/fail2ban,其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录,其它目录/文件一般很少用到,如果需要详细了解可自行搜索。

配置规则

新建jail.local来覆盖fail2ban的一些默认规则:

  1. #新建配置vi /etc/fail2ban/jail.local
  2. #默认配置[DEFAULT]
  3. ignoreip =127.0.0.1/8
  4. bantime =86400
  5. findtime =600
  6. maxretry =5#这里banaction必须用firewallcmd-ipset,这是fiewalll支持的关键,如果是用Iptables请不要这样填写
  7. banaction = firewallcmd-ipset
  8. action = %(action_mwl)s

参数说明:

  1. ignoreipIP白名单,白名单中的IP不会屏蔽,可填写多个以(,)分隔
  2. bantime:屏蔽时间,单位为秒(s
  3. findtime:时间范围
  4. maxretry:最大次数
  5. banaction:屏蔽IP所使用的方法,上面使用firewalld屏蔽端口

防止SSH爆破

如果您还在使用默认SSH端口(22),可能每天都会被扫描,我们可以修改端口尽量避免被扫,参考: https://www.moerats.com/archives/394/ ,或者可以使用fail2ban将恶意IP屏蔽。

继续修改jail.local这个配置文件,在后面追加如下内容:

  1. [sshd]
  2. enabled =true
  3. filter = sshd
  4. port =22
  5. action = %(action_mwl)s
  6. logpath = /var/log/secure

参数说明:

  1. [sshd]:名称,可以随便填写
  2. filter:规则名称,必须填写位于filter.d目录里面的规则,sshdfail2ban内置规则
  3. port:对应的端口
  4. action:采取的行动
  5. logpath:需要监视的日志路径

完整版:

  1. [DEFAULT]
  2. ignoreip =127.0.0.1/8
  3. bantime =86400
  4. findtime =600
  5. maxretry =5
  6. banaction = firewallcmd-ipset
  7. action = %(action_mwl)s
  8. [sshd]
  9. enabled =true
  10. filter = sshd
  11. port =22
  12. action = %(action_mwl)s
  13. logpath = /var/log/secure

禁止ping

服务器攻击一般是从ping开始的,黑客攻击网站前会先ping下服务器看其是否在线,如果服务器禁止ping,可以一定程度的减少服务器被攻击次数。Centos系统默认是允许ping的,可使用root账户修改Centos系统内核参数永久禁止ping。

  1. vim /etc/sysctl.conf

在文件末尾加上一行:

  1. net.ipv4.icmp_echo_ignore_all=1

保存后执行使配置生效

  1. sysctl-p

配置生效后,ping服务器收不到任何响应,ping被永久禁止。如果需要允许ping,修改该文件去掉

  1. net.ipv4.icmp_echo_ignore_all=1

这行或者修改为

  1. net.ipv4.icmp_echo_ignore_all=0

即可。

这是几天后的效果,不仅来攻击我的人少了,而且攻击我的人直接自动被BAN了,哈哈哈~~
在这里插入图片描述
在这里插入图片描述

参考:

  1. 修改ssh默认的22端口号
  2. CentOS7设置ssh服务以及修改默认22端口
  3. linux防火墙常用命令
  4. Centos下限制SSH登录次数详解
  5. ssh 安全配置 锁定次数
  6. Centos下限制SSH登录次数详解
  7. 防止服务器被外网的IP地址ssh连接或扫描试探等
  8. centos7添加ip黑名单禁止某个ip访问
  9. Fail2ban + firewalld 防护doss攻击
  10. Centos7 安装fail2ban基于iptables
  11. CentOS 7 使用 denyhosts 防范暴力破解
  12. Centos禁止ping的设置方法
标签: 安全 ssh 运维

本文转载自: https://blog.csdn.net/qq_34291570/article/details/134683060
版权归原作者 Japathy 所有, 如有侵权,请联系我们删除。

“【安全-SSH】SSH安全设置”的评论:

还没有评论