技术存在的终级意义,是为了解决问题。

Linux 服务器安全加固(等保 2.0 标准)

概述

我工作中维护了大小很多个网站,涉及等保测评相关问题较多。而最近网络安全越来越受到重视,20 年又新启用了更加严格的等保 2.0 标准,所以在此把安全加固相关的资料都整理汇总一下。

身份鉴别

配置账户密码策略

参考配置操作:

1、

1
2
3
4
5
6
7
# vim /etc/login.defs

修改下列参数为建议值
PASS_MAX_DAYS 30 #密码有效期为30天
PASS_MIN_DAYS 1 #密码最短修改时间为1天
PASS_MIN_LEN 8 #密码最小长度为8位
PASS_WARN_AGE 7 #密码过期提前7天提示修改

2、

1
2
3
4
# vim /etc/pam.d/system-auth

password requisite pam_cracklib.so行替换成如下:
password requisite pam_cracklib.so retry=6 difok=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
参数 说明
retry 尝试次数
difok 最少不同字符
minlen 最小密码长度
ucredit 最少大写字母
lcredit 最少小写字母
dcredit 最少数字
ocredit 最少特殊符号

3、口令至少5次内不能重复

1
2
3
# vim /etc/pam.d/system-auth

password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5

配置登录失败处理策略

参考配置操作:

1、限制本地登录次数

1
2
3
4
# vim /etc/pam.d/login

在第二行增加如下内容:
auth required pam_tally2.so deny=3 unlock_time=1800 even_deny_root root_unlock_time=1800

2、限制ssh本地登录次数

1
2
3
4
# vim /etc/pam.d/sshd

在第二行增加如下内容:
auth required pam_tally2.so deny=3 unlock_time=1800 even_deny_root root_unlock_time=1800

3、查看用户登录失败的次数(以root为例)

1
# pam_tally2 --user root

4、解锁指定用户(以root为例)

1
# pam_tally2 -r -u root

5、上述参数解释

参数 说明
even_deny_root 也限制root用户
deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户
unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒
root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒

注1:必须在 #%PAM-1.0 的下面,即第二行,添加内容,一定要写在前面。如果写在后面,虽然用户被锁定,但是只要用户输入正确的密码,还是可以登录的。

注2:此处使用的是 pam_tally2 模块,如果不支持 pam_tally2 可以使用 pam_tally 模块。另外,不同的pam版本,设置可能有所不同,具体使用方法,可以参照相关模块的使用规则。

双因子身份认证

未整改状态:

当前管理员仅使用用户名+密码方式对服务器进行管理,未使用两种及两种以上组合鉴别方式对管理员身份进行鉴别。

参考配置操作:

建议在系统中配置堡垒机、USB Key、动态口令等,使用两种鉴别技术对系统管理员进行身份鉴别。

访问控制

修改UMASK值

参考配置操作:

1、编辑/etc/profile文件,设置umask值:

1
2
3
# vim /etc/profile

在末尾增加 umask 027。

2、补充操作说明

如果用户需要使用一个不同于默认全局系统设置的 umask,可以在需要的时候通过命令行设置,或者在用户的 shell 启动文件中配置。

3、补充说明

umask 的默认设置一般为 022,这给新创建的文件默认权限755( 777-022=755),这会给文件所有者读、写权限,但只给组成员和其他用户读权限。

umask 的计算:
umask 是使用八进制数据代码设置的,对于目录,该值等于八进制数据代码 777 减去需要的默认权限对应的八进制数据代码值;对于文件,该值等于八进制数据代码 666 减去需要的默认权限对应的八进制数据代码值。

设置关键目录的权限

参考配置操作:

1、对系统中重要文件配置权限:

1
# chmod 600 /etc/security

为不同的管理员分配不同的账号

参考配置操作:

为用户创建账号:

1
2
# useradd username #创建账号
# passwd username #设置密码

修改文件权限:

1
2
# chmod 755 directory
//其中 755 为设置的权限,可根据实际情况设置相应的权限, directory 是要更改权限的目录)使用该命令为不同的用户分配不同的账号,设置不同的口令及权限信息等。

更改文件或目录的所有者和组群所有者:

1
2
# chown [选项] [用户:组群] [文件|目录] 
//例如,#chown username:groupname directory,其中username为文件所有者,groupname为组群所有者,directory为文件或目录。

锁定系统无用账户

参考配置操作:

通过cat /etc/shadow查看当前帐户列表,以下用户lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody密码字段列不是以*或者!!开头的,需要禁用或删除

命令:passwd -l username

注解:禁用无关帐户

开启 SELinux

参考配置操作:

1、开启配置文件

1
2
3
4
#vi etc/selinux/config

修改下列参数为建议值:
SELINUX=enforcing

2、重启操作系统,或使用命令 setenforce 1 在不重启的情况下临时开启。

3、执行命令 /usr/sbin/sestatus -vgetenforce 查看 selinux 运行状态。

注:配置后可能导致系统异常,建议在测试环境中进行验证后再对生产环境进行加固,并在加固前进行完善的系统备份工作。

安全审计

配置日志审计功能

未整改状态:

系统未配置audit功能,没有使用aureport生成审计报告可以生成分析报表。

参考配置操作:

1、安装audit软件包

1
yum install audit

2、开始audit 服务

1
service auditd start

3、根据实际情况,在 /etc/audit/auditd.conf 文件中配置对audit审计工具进行配置。

4、根据实际情况,在 /etc/audit/audit.rules 文件中配置审核规则。

记录设备相关安全事件

参考配置操作

1、修改配置文件

1
2
3
4
5
# vim /etc/syslog.conf,

配置如下类似语句:
*.err;kern.debug;daemon.notice; /var/adm/messages
定义为需要保存的设备相关安全事件。

2、更改日所有志文件属性,使文件只可追加不可修改:

1
2
3
4
# chattr +a /var/log/messages       #如果不存在则忽略
# chattr +a /var/log/secure
# chattr +a -/var/log/maillog
# chattr +a /var/log/cron

3、参数含义:

参数 说明
kern 由kernel产生的信息;
user 由用户进程产生的信息。对那些由程序或不在此列出的工具产生的信息,其缺省类型都是“user”;
mail 邮件系统产生的信息;
daemon 系统守护进程的信息,如in.ftpd、telnetd;
auth 由login, su, getty等进行身份认证时产生的信息;
syslog 由syslogd自己内部产生的信息;
lpr 行打印spooling系统的信息;
news USENET 网络新闻系统的信息;
uucp UUCP系统信息;
cron cron和at工具信息;
local0-7 保留为local使用;
mark syslogd内部产生的时间戳信息;
* 除mark之外的所有其它类型(此符号不可用以代表所有级别)。

保留字段中的“级别”代表信息的重要性,可以是:

参数 说明
emerg 紧急,处于Panic状态。通常应广播到所有用户;
alert 告警,当前状态必须立即进行纠正。例如,系统数据库崩溃;
crit 关键状态的警告。例如,硬件故障;
err 其它错误;
warning 警告;
notice 注意;非错误状态的报告,但应特别处理;
info 通报信息;
debug 调试程序时的信息;
none 通常调试程序时用,指示带有none级别的类型产生的信息无需送出。如*.debug;mail.none表示调试时除邮件信息外其它信息都送出。

配置日志审计系统

建议在网络上部署日志审计系统,采集用户网络中各种不同厂商的安全设备、网络设备、主机、操作系统、以及各种应用系统产生的海量日志信息,并将这些信息汇集到审计中心,进行集中化存储、备份、查询、审计、告警、响应,并出具丰富的审计报表。

1、

1
2
3
4
# vim /etc/rsyslog.conf

*.info;mail.none;authpriv.none;cron.none /var/log/messages
将上一行中的/var/log/messages修改为: @<日志服务器IP>

2、重新读取配置文件:service rsyslog reload

部署网络/数据库安全审计系统

在网络中部署网络/数据库安全审计系统,通过对人员访问系统的行为进行解析、分析、记录、汇报,以帮助用户事前规划预防、事中实时监视、违规行为响应、事后合规报告、事故追踪溯源,加强内外部网络行为监管、促进核心资产(数据库、服务器、网络设备等)的正常运营。

入侵防范

配置防火墙

参考配置操作:

1、启动 iptables:

1
# service iptables start

2、开放端口(根据实际业务需求进行配置):

1
2
3
4
# vim /etc/sysconfig/iptables 

在其中写入配置,例如增加如下一行:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

3、重启防火墙:

1
# service iptables restart

4、检查防火墙策略:

1
#iptables -nvL

部署入侵检测系统(IDS)

准确分析、报告网络中正在发生的各种异常事件和攻击行为,实现对网络的“全面检测”,并通过实时的报警信息和多种格式报表,为用户提供翔实、可操作的安全建议,帮助用户完善安全保障措施。

部署漏洞扫描系统

实现对网络设备、操作系统、应用系统进行全面安全漏洞检测,清晰定性安全风险,给出修复建议和预防措施,及时的发现和修补漏洞隐患。

关闭无用服务

未整改状态:

系统中服务开启均为系统安装时默认状态。

参考配置操作:

取消所有不需要的服务,编辑 /etc/inetd.conf 文件,通过注释取消所有你不需要的服务。

1、更改 /etc/inetd.conf 权限为 600,只允许 root 来读写该文件。

1
# chmod 600 /etc/inetd.conf

2、确定 /etc/inetd.conf 文件所有者为 root。

1
# chown root /etc/inetd.conf

3、编辑 /etc/inetd.conf 文件,取消不需要的服务,如:ftp, telnet, shell, login, exec, talk, ntalk,imap, pop-2, pop-3, finger, auth 等等。把不需要的服务关闭可以使系统的危险性降低很多。

4、给 inetd 进程发送一个 HUP 信号:

1
# killall -HUP inetd

5、把 /etc/inetd.conf 文件设为不可修改。

1
# chattr +i /etc/inetd.conf

注:
/etc/inetd.conf 文件中只开放需要的服务。
对于启用的网络服务,使用 TCP Wrapper 增强访问控制和日志审计功能。
建议使用 xinetd 代替 inetd,前者在访问控制和日志审计方面有较大的增强。这样可以防止对inetd.conf的任何修改(以外或其他原因)。唯一可以取消这个属性的只有root。
如果要修改inetd.conf文件,首先要取消不可修改属性:# chattr -i /etc/inetd.conf
portmap(如果启动使用 nfs 等需要 rpc 的服务,建议关闭portmap 服务)
cups 服务( Common Unix Printing Service,用于打印,建议关闭)
named 服务(除非主机是 dns 服务器,否则关闭 named 服务)
apache( http)服务
xfs( X Font Service)服务
vsftpd
lpd
linuxconf
identd
smb

系统补丁更新

建议定期对系统进行补丁更新,建立内网补丁服务器或由管理员手工将补丁安装到操作系统中。

注:补丁安装应当先在测试机上完成。补丁安装可能导致系统或某些服务无法工作正常。在下载补丁包时,一定要对签名进行核实,防止系统感染病毒。

恶意代码防范

安装杀毒软件

未整改状态:

当前系统未安装杀毒软件,无法防止病毒对内部网络进行感染。

参考配置操作:

在服务器和终端设备上安装网络版杀毒软件,配置防病毒服务器,实现下发病毒扫描策略、更新病毒库、统计报警信息等,便于管理人员对整个网络中的病毒防护状况进行管理。

资源控制

设置访问控制列表

未整改状态:

系统未设置访问控制列表。

参考配置操作:

1、编辑 hosts.deny 文件,加入 (ALL:ALL)

1
2
3
#vi /etc/hosts.deny

sshd: ALL #拒绝一切SSH远程访问,配合文件hosts.allow使用

2、编辑 hosts.allow 文件,加入允许访问的主机列表,比如:

1
2
3
#vi /etc/hosts.allow

sshd:192.168.59.1:allow #允许192.168.59.1访问SSH服务进程

设置登录超时时间

未整改状态:

系统未设置超时时间。系统中 root 账户是具有最高特权的,如果系统管理员在离开系统之前忘记注销 root 账户,那将会带来很大的安全隐患,应该让系统自动注销。

参考配置操作:

通过修改账户中 TMOUT 参数,可以实现此功能。编辑 /etc/profile 文件,在 HISTFILESIZE= 后面加入TMOUT值:

1
2
3
4
5
6
# vim /etc/profile

TMOUT=180 #表示 180 秒
export TMOUT #设置为全局变量

# source /etc/profile #使配置生效

这样,如果系统中登录的用户在 3 分钟内都没有动作,那么系统会自动注销这个账户。

限制用户对资源的访问

参考配置操作:

1、编辑 /etc/security/limits.conf 文件,根据实际使用情况配置参数,限制用户对系统资源的使用限度。

参数 说明
core 限制内核文件的大小
date 最大数据大小
fsize 最大文件大小
memlock 最大锁定内存地址空间
nofile 打开文件的最大数目
rss 最大持久设置大小
stack 最大栈大小
cpu 以分钟为单位的最多 CPU 时间
noproc 进程的最大数目
as 地址空间限制
maxlogins 此用户允许登录的最大数目

2、编辑 /etc/pam.d/login 文件,在其末端添加如下语句

1
session required /lib/security/pam_limits.so

3、编辑 /etc/security/limits.conf 文件,在其中添加如下语句

1
2
3
4
5
* hard rss sizeofmem
* hard nproc maxNumberOfProcesses
* hard as sizeofvirtualmem

#其中sizeofmem和sizeofvirtualmem为数值,其单位为KB;maxNumberOfProcesses也为数值,其单位为个

4、重启服务

1
/etc/init.d/sshd restart

监控服务器资源状态

配置资源监控系统,对服务器的 cpu、内存等资源进行实时监控,且应具有报警功能。管理员可以及时了解网络上各种设备的运行状况,可以及时发现并处理设备资源使用率过高、服务器宕机等异常状况。

打赏猫粮!!!