云服务器安全防护指南
云服务器安全防护不容小觑,本篇文章就从SSH默认端口修改、禁止root用户登录、修改最大进程数、auditd审计、fail2ban来设置一些基础的防护措施。
新增用户
禁止root用户登录前需要先新建一个用户,否则没有可用于登录的用户,只能重装系统了。
新建dev用户并设置密码:高强度密码生成
1 | useradd dev |
授予root权限,在 /etc/sudoers
文件中找到 root ALL=(ALL) ALL
行:
1 | vi /etc/sudoers |
修改ssh端口及禁止root用户登录
然后我们修改ssh登录端口,以及禁止root用户登录,打开编辑文件 vi /etc/ssh/ssh_config
:
取消 #Port 前的 # 注释,将 22 修改为 18222(其中18222可修改为其他数,范围在 0 ~ 65535)。
接着把 PermitRootLogin yes
修改为 PermitRootLogin no
来禁止root用户登录。
然后重启 ssh 服务:
1 | /etc/init.d/sshd restart |
同时还要注意服务器防火墙以及云服务商安全组的放行。
修改最大进程数
关于最大进程数,是曾经掉过这个坑,导致服务器无法登录,所以事先修改最大进程数还是很有必要的。
1 | echo "kernel.pid_max=1000000 " >> /etc/sysctl.conf |
查看当前进程数
1 | ps -eLf | wc -l |
fail2ban
fail2ban 可阻止暴力破解、恶意扫描,以及CC攻击。
centos下安装 fail2ban yum install fail2ban -y
ubuntu下安装 fail2ban apt-get install fail2ban
查看fail2ban运行状态 fail2ban-client status
其中 Jail list 显示当前已启用的 Jail。我们可以在 /etc/fail2ban
下对 fail2ban 进行一些设置。
首先新增自定义配置文件:
1 | cd /etc/fail2ban |
文件中新增自定义 Jail 块,如deny-badcrawl:
1 | [deny-badcrawl] |
然后我们新增上面配置中 filter 项对应的文件,进入 filter.d 目录 cd /etc/fail2ban/filter.d
,新增文件 vi deny-badcrawl.conf
,写入以下内容:
1 | [Definition] |
这样,fail2ban 就会在 /home/wwwroot/*.log
日志文件中匹配 failregex 中规则 <HOST> -.*- .*HTTP/1.* 404 .*$
的字符串,提取其中的 IP 地址,如果该IP地址在 3600 秒(对应配置中的 findtime)内访问失败超过 4 次(对应配置中的 maxretry),将被封禁 3600 秒(对应配置中的 bantime)。
同时我们可以这样检测设置的正则 failregex 是否起作用:
1 | fail2ban-regex /home/wwwlogs/access.log /etc/fail2ban/filter.d/deny-badcrawl.conf |
查看当前被封禁的IP:
1 | iptables -L -n |
解封指定的IP:
1 | fail2ban-client set deny-badcrawl unbanip 8.8.8.8 |
一些其他命令:
1 | service fail2ban start |
设置开机启动:
1 | # centos6 |
auditd审计
Linux中有一个auditd审计程序,我的云服务器是centos7系统,自带了这个程序,这里主要讲如何使用。
查看当前审计规则 auditctl -l
,显示 no rules 表示当前没有审计规则。
我们来新增一条规则:
1 | auditctl -w /var/www/index.txt -p rwxa -k www |
其中
-w 指定文件/夹路径
-p 指出发审计的访问权限:r-读取、w-写入、x-执行、a-属性
-k 指定关键词(可用于查询过滤)
为了便于测试,我们对 /var/www/index.txt 执行写入操作,然后查看审计记录:
1 | ausearch -k www |
其中 -k 是新增规则中指定的过滤关键字。
现在,确认了以上审计规则可正常规则,就可以写入 auditd 规则配置文件中,因为上述的测试是临时规则,即重启 auditd 审计程序后就会消失。
1 | vi /etc/audit/audit.rules |
保存配置文件后重启 auditd 审计程序 /etc/init.d/auditd restart
这样就完成了一条审计规则的创建。
如果想查看授权失败的审计事件,使用 aureport -au
。
如果想查看所有用户相关的审计事件,使用 aureport -m
。