云服务器安全防护不容小觑,本篇文章就从SSH默认端口修改、禁止root用户登录、修改最大进程数、auditd审计、fail2ban来设置一些基础的防护措施。

新增用户

禁止root用户登录前需要先新建一个用户,否则没有可用于登录的用户,只能重装系统了。

新建dev用户并设置密码:高强度密码生成

1
2
useradd dev
passwd dev

授予root权限,在 /etc/sudoers 文件中找到 root ALL=(ALL) ALL 行:

1
2
3
4
5
vi /etc/sudoers

# 新增dev用户root权限
root ALL=(ALL) ALL
tommy ALL=(ALL) ALL

修改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
2
echo "kernel.pid_max=1000000 " >> /etc/sysctl.conf
sysctl -p

查看当前进程数

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
2
cd /etc/fail2ban
vi fail2ban.local

文件中新增自定义 Jail 块,如deny-badcrawl:

1
2
3
4
5
6
7
8
9
10
11
[deny-badcrawl]
enabled = true
port = http,https
filter = deny-badcrawl
action = iptables[name=Http, port=80, protocol=tcp]
action = iptables[name=Https, port=443, protocol=tcp]
logpath = /home/wwwlogs/*.log
maxretry = 4
findtime = 3600
bantime = 3600
#ignoreip = 127.0.0.1

然后我们新增上面配置中 filter 项对应的文件,进入 filter.d 目录 cd /etc/fail2ban/filter.d,新增文件 vi deny-badcrawl.conf,写入以下内容:

1
2
3
[Definition]
failregex = <HOST> -.*- .*HTTP/1.* 404 .*$
ignoreregex =

这样,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
2
3
service fail2ban start
service fail2ban stop
service fail2ban restart

设置开机启动:

1
2
3
4
5
# centos6
chkconfig fail2ban on

# centos7
systemctl enable fail2ban

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
2
vi /etc/audit/audit.rules
-w /var/www/index.txt -p rwxa -k www

保存配置文件后重启 auditd 审计程序 /etc/init.d/auditd restart

这样就完成了一条审计规则的创建。

如果想查看授权失败的审计事件,使用 aureport -au

如果想查看所有用户相关的审计事件,使用 aureport -m