Bootstrap

Linux安全加固

Linux安全加固

作者:MappleZF
版本:1.0.0
简介:当时因运维工作所需,基于CentOS 7 进行部分内容的整理。

文章目录

一、账户和口令管理

1.1 口令锁定策略
1.1.1 设置system-auth
[root@kvm-100:/etc/pam.d]# vim system-auth#%PAM-1.0下面的一行追加内容:
auth        required      pam_tally2.so onerr=fail  deny=3  unlock_time=180 even_deny_root root_unlock_time=180
account     required      pam_tally2.so

在这里插入图片描述

PS即:三次登陆(如sudo)等操作,密码错误,即锁定账户,解锁时间是180秒。(root用户也一样)
1.1.2 设置password-auth
[root@kvm-100:/etc/pam.d]# vim password-auth#%PAM-1.0下面的一行追加内容:
auth        required      pam_tally2.so onerr=fail  deny=3  unlock_time=180 even_deny_root root_unlock_time=180
account     required      pam_tally2.so
补充解析:
查询语句
pam_tally2 -u <username>
解锁用户语句
pam_tally2 -u <username> -r --reset
[root@kvm-100:/etc/pam.d]# pam_tally2 -u root
Login           Failures Latest failure     From
root                3    12/14/20 15:23:36  192.168.7.156
[root@kvm-100:/etc/pam.d]# pam_tally2 -u root -r --reset
Login           Failures Latest failure     From
root                0    

1.2 口令生成期
1.2.1 设置login.defs
[root@kvm-100:/etc]# vim /etc/login.defs
修改 约在25-28行之间
PASS_MAX_DAYS   90
PASS_MIN_DAYS   10
PASS_MIN_LEN    12
PASS_WARN_AGE   7

PS即:新建用户的密码最长使用天数不大于90;新建用户的密码最短使用天数为10;新建用户的密码到期提前提醒天数为7;新建用户的密码最小长度12
1.3 口令复杂度
1.3.1 设置system-auth

设定新密码的复杂度

[root@kvm-100:/etc/pam.d]# vim system-auth
修改
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

在这里插入图片描述

参数含义:
difok        定义新密码中必须要有几个字符和旧密码不同
minlen       定义新密码的最小长度
ucredit      定义新密码中可以包含的大写字母的最大数目(-1代表最少1个)
lcredit      定义新密码中可以包含的小写字母的最大数目(-1代表最少1个)
dcredit      定义新密码中可以包含的数字的最大数目 (-1代表最少1个)
ocredit		 定义新密码中可以包含的特殊字符的最大数目 (-1代表最少1个)
1.3.2 设置password-auth

设定新密码的复杂度

[root@kvm-100:/etc/pam.d]# vim password-auth
修改
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
1.4 删除无关账户
1.4.1 检测/etc/shadow文件
查看/etc/shadow文件,确认以下用户(lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody)的密码列字段是否以*或者!!开头:

egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/shadow|awk -F: '($2!~/^*/) && ($2!~/^!!/) {print $1":"}'

[root@kvm-100:/root]# egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/shadow|awk -F: '($2!~/^*/) && ($2!~/^!!/) {print $1":"}'
[root@kvm-100:/root]# 

1.4.2 检测/etc/passwd文件
查看/etc/passwd文件确认以下用户(lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody)的shell域字段值是否为/bin/false

egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/passwd|awk -F: '($7!~/bin\/false/) {print $1":"$7}'
[root@kvm-100:/root]# egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/passwd|awk -F: '($7!~/bin\/false/) {print $1":"$7}'
lp:/sbin/nologin
sync:/bin/sync
halt:/sbin/halt
operator:/sbin/nologin
games:/sbin/nologin
nobody:/sbin/nologin
nfsnobody:/sbin/nologin
1.4.3 判定依据
判定依据
    1、lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody用户不存在或/etc/shadow文件中对应密码字段以*或者!!开头
    2、lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody用户不存在或者/etc/passwd文件中对应shell域为/bin/false
    以上二者均满足则合规,否则不合规。
1.4.4 删除或修改无关用户shell域
加固参考方案:
参考配置操作
1、如果以下用户(lp|sync|halt|news|uucp|operator|games|gopher|smmsp|nfsnobody|nobody)没有被删除或锁定,可以使用如下命令对其进行操作:
    (1)、删除用户:
        #userdel username
    (2)、锁定用户:
        #passwd -l username        #锁定用户,只有具备超级用户权限的使用者方可使用。
        #passwd –d username      #解锁用户,解锁后原有密码失效,登录设置新密码才能登录。
        #passwd -u username       #解锁用户后,原密码仍然有效。
    (3)、修改用户shell域为/bin/false
        #usermod -s /bin/false username        #命令来更改相应用户的shell为/bin/false,其中[name]为要修改的具体用户名。
[root@kvm-100:/root]# usermod -s /bin/false lp && usermod -s /bin/false sync 
[root@kvm-100:/root]# usermod -s /bin/false halt && usermod -s /bin/false operator
[root@kvm-100:/root]# usermod -s /bin/false games && usermod -s /bin/false nobody
[root@kvm-100:/root]# usermod -s /bin/false nfsnobody

[root@kvm-100:/root]#  egrep "^lp:|^sync:|^halt:|^news:|^uucp:|^operator:|^games:|^gopher:|^smmsp:|^nfsnobody:|^nobody:" /etc/passwd|awk -F: '($7!~/bin\/false/) {print $1":"$7}'
[root@kvm-100:/root]# 
1.5 设置账户组
1.5.1 检测login.defs
查看系统中是否存在用户id>=GID_MIN且<=GID_MAX的用户:
grep -v ^# /etc/login.defs |grep "^GID_MIN"|awk '($1="GID_MIN") {print $2}'
grep -v ^# /etc/login.defs |grep "^GID_MAX"|awk '($1="GID_MAX") {print $2}'
UP_GIDMIN=`(grep -v ^# /etc/login.defs |grep "^GID_MIN"|awk '($1="GID_MIN") {print $2}')`
UP_GIDMAX=`(grep -v ^# /etc/login.defs |grep "^GID_MAX"|awk '($1="GID_MAX") {print $2}')`

egrep -v "oracle|sybase|postgres" /etc/passwd|awk -F: '($4>='$UP_GIDMIN' && $4<='$UP_GIDMAX') {print $1":"$3":"$4}'
[root@kvm-100:/root]# grep -v ^# /etc/login.defs |grep "^GID_MIN"|awk '($1="GID_MIN") {print $2}'
1000
[root@kvm-100:/root]# grep -v ^# /etc/login.defs |grep "^GID_MAX"|awk '($1="GID_MAX") {print $2}'
60000
[root@kvm-100:/root]# UP_GIDMIN=`(grep -v ^# /etc/login.defs |grep "^GID_MIN"|awk '($1="GID_MIN") {print $2}')`
[root@kvm-100:/root]# UP_GIDMAX=`(grep -v ^# /etc/login.defs |grep "^GID_MAX"|awk '($1="GID_MAX") {print $2}')`
[root@kvm-100:/root]# egrep -v "oracle|sybase|postgres|mysql" /etc/passwd|awk -F: '($4>='$UP_GIDMIN' && $4<='$UP_GIDMAX') {print $1":"$3":"$4}'
kvm:1000:1000
prometheus:1001:1000

1.5.2 判定依据
判定依据
    存在组id>=GID_MIN且<=GID_MAX的用户则合规,否则不合规。
    系统中存在用户自定义的组账号个数,需要至少大于等于1
1.6 禁止空密码的账户存在
1.6.1 检测/etc/shadow文件
查看系统中是否存在空口令账号
awk -F: '( $2 == "" ) { print $1 }' /etc/shadow
[root@kvm-100:/root]# awk -F: '($2 == "") {print $1}' /etc/shadow
[root@kvm-100:/root]#
1.6.2 判定依据
判定依据
    系统中口令为空的账号个数为0则合规,否则不合规。
1.7 避免账户共享
1.7.1 检测login.defs文件
grep -v ^# /etc/login.defs |grep "^UID_MIN"|awk '($1="UID_MIN"){print $2}'
grep -v ^# /etc/login.defs |grep "^UID_MAX"|awk '($1="UID_MAX"){print $2}'
UP_UIDMIN=`(grep -v ^# /etc/login.defs |grep "^UID_MIN"|awk '($1="UID_MIN"){print $2}')`
UP_UIDMAX=`(grep -v ^# /etc/login.defs |grep "^UID_MAX"|awk '($1="UID_MAX"){print $2}')`

egrep -v "oracle|sybase|postgres|mysql" /etc/passwd|awk -F: '($3>='$UP_UIDMIN' && $3<='$UP_UIDMAX') {print $1":"$3}'
[root@kvm-100:/root]# awk -F: '($2 == "") {print $1}' /etc/shadow
[root@kvm-100:/root]# awk -F: '( $2 == "" ) { print $1 }' /etc/shadow
[root@kvm-100:/root]# grep -v ^# /etc/login.defs |grep "^UID_MIN"|awk '($1="UID_MIN"){print $2}'
1000
[root@kvm-100:/root]# grep -v ^# /etc/login.defs |grep "^UID_MAX"|awk '($1="UID_MAX"){print $2}'
60000
[root@kvm-100:/root]# UP_UIDMIN=`(grep -v ^# /etc/login.defs |grep "^UID_MIN"|awk '($1="UID_MIN"){print $2}')`
[root@kvm-100:/root]# UP_UIDMAX=`(grep -v ^# /etc/login.defs |grep "^UID_MAX"|awk '($1="UID_MAX"){print $2}')`
[root@kvm-100:/root]# egrep -v "oracle|sybase|postgres|mysql" /etc/passwd|awk -F: '($3>='$UP_UIDMIN' && $3<='$UP_UIDMAX') {print $1":"$3}'
kvm:1000
prometheus:1001
1.7.2 判定依据
判定依据
    存在用户id>=UID_MIN且<=UID_MAX的用户则合规,否则不合规。
1.8 限制口令重复次数
1.8.1 设置system-auth
[root@kvm-100:/etc/pam.d]# vim system-auth
追加remember=5
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

在这里插入图片描述

PS即:remember=N     保存每个用户使用过的N个密码,强制密码不能跟历史密码重复
1.8.2 设置password-auth
[root@kvm-100:/etc/pam.d]# vim password-auth
追加remember=5
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
1.9 处理隐患账户
1.9.1 检测passwd文件
awk -F ':' '($3==0){print $1}' /etc/passwd   |grep -v root 
查看除了root用户,UID为0的账号(UID为0的用户会自动切换到root,通常对此用户删除)
[root@kvm-100:/root]# awk -F ':' '($3==0){print $1}' /etc/passwd   |grep -v root

二、文件权限

2.1 文件与目录缺省权限控制
2.1.1 检测/etc/profile
awk '{print $1":"$2}' /etc/profile|grep umask|tail -n1
[root@kvm-100:/root]# awk '{print $1":"$2}' /etc/profile|grep umask|tail -n1
umask:027

2.1.2 判定依据
检测方法
    查看文件/etc/profile的末尾是否设置umask值:
        #awk '{print $1":"$2}' /etc/profile|grep umask|tail -n1
判定依据
    /etc/profile文件末尾存在umask 027,则合规,否则为不合规。
2.1.3 加固建议
编辑文件/etc/profile,在文件末尾加上如下内容:
umask 027
执行以下命令让配置生效:
source  /etc/profile
2.2 账户文件权限设置
2.2.1 检测文件权限
ls -alL /etc/passwd /etc/shadow /etc/group
[root@mysql-s01:/root]# ls -alL /etc/passwd /etc/shadow /etc/group
-rw-r--r--. 1 root root  622 Dec 12 18:05 /etc/group
-rw-r--r--. 1 root root 1262 Dec 12 18:05 /etc/passwd
----------. 1 root root  785 Dec 12 18:05 /etc/shadow

2.2.2 判定依据
判定依据
    1、/etc/passwd文件的权限<=644 (所有用户必须要有读权限,只有root用户有写的权限)
    2、/etc/shadow文件的权限<=600 (只有root用户拥有该文件的读写权限)
    3、/etc/group文件的权限<=644  (所有用户必须要有读权限,只有root用户有写的权限)
    以上三个条件同时满足则合规,否则不合规。
2.3 删除潜在危险文件
2.3.1 检测方式
find / -maxdepth 3 -name .netrc 2>/dev/null|wc -l
find / -maxdepth 3 -name .rhosts 2>/dev/null|wc -l
find / -maxdepth 3 -name hosts.equiv 2>/dev/null|wc -l
[root@mysql-s01:/root]# find / -maxdepth 3 -name .netrc 2>/dev/null|wc -l
0
[root@mysql-s01:/root]# find / -maxdepth 3 -name .rhosts 2>/dev/null|wc -l
0
[root@mysql-s01:/root]# find / -maxdepth 3 -name hosts.equiv 2>/dev/null|wc -l
0

如有有此类文件,又无相关应用,删除相应的文件

三、日志管理

3.1 记录安全事件日志
3.1.1 配置/etc/rsyslog.conf
★★★★★
[root@mysql-s01:/var/adm]# vim /etc/rsyslog.conf
追加如下内容:
*.err;kern.debug;daemon.notice                          /var/adm/messages

[root@mysql-s01:/var/adm]# touch /var/adm/messages
[root@mysql-s01:/var/adm]# chmod 666 /var/adm/messages
注:个人建议尝试权限  chmod 640 /var/adm/messages
[root@mysql-s01:/var/adm]# systemctl restart rsyslog
3.2 记录账户登入日志
3.2.1 配置/etc/rsyslog.conf
[root@mysql-s01:/var/adm]# vim /etc/rsyslog.conf
如果没有,需要追加如下内容:CentOS7 系统中一般在第70行
authpriv.*                                              /var/log/secure

如果没有追加后需要创建文件
touch /var/log/secure
chmod 640 /var/log/secure
追加后需要重启rsyslog服务
3.3 日志文件安全
3.3.1 查看日志文件的权限
LOGDIR=`cat /etc/rsyslog.conf | grep -v "^[[:space:]]*#"|awk '{print $2}'|sed 's/^-//g'|grep '^\s*\/'`;
ls -l $LOGDIR 2>/dev/null|grep -v "[r-][w-]-[r-]-----"|awk '{print $1" "$8" "$9}';
unset LOGDIR
3.3.2 判定依据
判定依据
    是否存在权限>640的日志文件,并根据实际进行相关权限设置。(正常是不存在权限>640的日志文件)
3.4 记录CRON行为日志
3.4.1 配置/etc/rsyslog.conf
[root@mysql-s01:/var/adm]# vim /etc/rsyslog.conf
如果没有,需要追加如下内容:CentOS7 系统中一般在第63行
cron.*                                                  /var/log/cron

如果没有追加后需要创建文件
touch /var/log/cron
chmod 640 /var/log/cron
追加后需要重启rsyslog服务

四、系统服务

4.1 限制root用户SSH远程登陆
4.1.1 配置/etc/ssh/sshd_config
★★★★★
grep -v "^[[:space:]]*#" /etc/ssh/sshd_config|grep "PermitRootLogin no"
grep  -v "^[[:space:]]*#" /etc/ssh/sshd_config|egrep "^protocol\s*2|^Protocol\s*2"
[root@mysql-s01:/root]# grep -v "^[[:space:]]*#" /etc/ssh/sshd_config|grep "PermitRootLogin no"
PermitRootLogin no
[root@mysql-s01:/root]# grep  -v "^[[:space:]]*#" /etc/ssh/sshd_config|egrep "^protocol\s*2|^Protocol\s*2"
Protocol 2
4.1.2 判定依据
判定依据
    /etc/ssh/sshd_config文件存在PermitRootLogin no(表示禁止root用户通过ssh协议远程登录)且ssh协议为protocol 2(表示ssh协议版本为2)则合规,否则不合规。
4.1.3 加固建议
1.新建一个普通用户,用于远程登陆
2.禁止root用户远程登录系统
  编辑文件/etc/ssh/sshd_config 修改PermitRootLogin值为no并去掉注释;并修改Protocol的值为2并去掉注释。
  PermitRootLogin no
  Protocol 2
  
3.重启服务:systemctl restart sshd

补充:简单检测SSH协议
如果远程SSH服务器只支持SSH2,那么第一个带“-1”的选项就会出现像下面的错误信息:
[root@elk:/root]# ssh -1 [email protected]
Protocol major versions differ: 1 vs. 2
也有出息这种反馈的
C:\Users\MappleZF>ssh -1 root@192.168.20.100
SSH protocol v.1 is no longer supported


4.2 限制Telnet远程登陆
4.2.1 检测方式
查看文件/etc/securetty中是否有配置有(pts/*)这样的内容
cat /etc/securetty|grep -v "^[[:space:]]*#"|grep "pts/*"

4.2.2 判定依据
判定依据
    如果TELNET服务未开启,则合规;或者TELNET服务开启,但文件/etc/securetty中不存在pts/* 也合规,否者不合规。(*为数字)
4.2.3 加固建议
编辑文件/etc/securetty  注释掉pts/*这样的内容并保存。
4.3 修改SNMP的默认Community
4.3.1 检测方式
systemctl list-unit-files | grep -i snmpd
查看是否有开启SNMPD服务,如有有开启还需要查看/etc/snmp/snmpd.conf下找到以rocommunity或rwcommunity开头的行,如:rocommunity public 127.0.0.1其中的第二个字段(public)即为团体名,用新的团体名称替换该字段 
然后重启服务
4.4 禁止root用户登录FTP
4.4.1 检测方式
如果是vsftp服务器,查看如下配置文件/etc/pam.d/vsftpd、/etc/vsftpd/vsftpd.conf
1. 检查/etc/pam.d/vsftpd中指定了ftpusers,且对应的ftpusers中存在root用户或者在配置文件/etc/vsftpd/vsftpd.conf配置了userlist_enable=YES、userlist_deny=NO、userlist_file=<file path>,且<file path>中不存在root用户。 
列如我们的FTP服务器:
[root@files:/etc/vsftpd]# vim /etc/pam.d/vsftpd
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

#其中file=/etc/vsftpd/ftpusers即为当前系统上的ftpusers文件
2.修改file对应的文件在文件中增加以下用户,则该用户均不允许通过FTP登录(每隔用户占一行):
[root@files:/etc/vsftpd]# cat ftpusers 
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
listen
nobody
noaccess

3.FTP服务器安全配置比较多样,需已具体情况来进行安全加固。比如我们使用的是虚拟用户模式
4.5 禁止存在心血漏洞
4.5.1 检测方式
★★★★★
执行如下命令查看openssl版本。
openssl version
或
openssl version -a
[root@mysql-s01:/root]# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

4.5.2 判定依据
判定依据  	
    检查openssl版本,判断设备是否存在心血漏洞。
    openssl版本不在以下列表的则合规,否则不合规:
        1.0.0、1.0.1f、1.0.1e、1.0.1d、1.0.1c、1.0.1b、1.0.1a、1.0.1、1.0.2-beta、1.0.2-beta1
4.5.3 加固建议
升级openssl版本。由于升级有风险,因此需要根据漏扫情况,进行相应处理。
4.6 设置登陆超时时间
4.6.1 检测方式
★★★★★
cat /etc/profile |grep -i TMOUT
[root@mysql-s02:/root]# cat /etc/profile |grep -i TMOUT
TMOUT=300
export TMOUT

4.6.2 加固建议
1./etc/profile文件增加以下两行
TMOUT=300
export TMOUT

2. 生效命令 source /etc/profile
注:现在较多的终端工具会自动发送数据包给服务端,因此此命令未必会达到如期效果。但是会提示:timed out waiting for input: auto-logout  然:实际可能未退出
4.7 禁用Core Dump状态
4.7.1 检测方式
检测方法
    1、查看/etc/security/limits.conf文件中是否配置如下内容:
        * soft  core 0
        * hard  core 0
    2、查看/etc/profile文件中是否存在如下配置,存在则注释掉:
        ulimit -S -c 0 > /dev/null 2>&1
4.7.2 判定依据
判定依据
设置* soft  core、* hard core为0,且注释掉ulimit -S -c 0 > /dev/null 2>&1行则合规,否则不合规。
4.7.3 加固建议
1.编辑文件/etc/security/limits.conf 
[root@mysql-s01:/root]# vim /etc/security/limits.conf  
加入如下两行(存在则修改,不存在则新增)* soft core   0
* hard core   0

2.编辑文件/etc/profile
注释掉如下行:(如存在则注释掉)
 #ulimit -S -c 0 > /dev/null 2>&1
4.8 配置NFS服务限制
4.8.1 检测方式
[root@mysql-s01:/root]# systemctl list-unit-files | grep nfs
nfs-rquotad.service                           disabled
[root@mysql-s01:/root]# ps -ef | grep -i nfs

如果系统运行相关NFS进程。需要对NFS的访问进行ip等限制
如运行了nfs服务,必须设置限制能够访问NFS服务的IP范围:
编辑文件/etc/hosts.allow增加一行:
    nfs:允许访问的IP
    编辑文件/etc/hosts.deny增加一行:
    nfs:all或者all:all
4.9 禁止ICMP重定向
4.9.1 检测方式
★★★★★
sysctl -n net.ipv4.conf.all.accept_redirects
4.9.2 判定条件
net.ipv4.conf.all.accept_redirects的值为0则合规(0表示:禁止icmp重定向),否则不合规

PS:处于对网络的安全考虑关闭 ICMP 路由重定向
4.9.3 加固建议
1.编辑文件 /etc/sysctl.conf,将net.ipv4.conf.all.accept_redirects的值改为0
2.使配置生效#sysctl  -p
4.10 禁止wheel组之外的用户su为root
4.10.1 检测方式
执行命令cat /etc/pam.d/su,查看文件中是否存在如下配置:
        auth		sufficient	pam_rootok.so 
        auth		required	pam_wheel.so group=wheel

#注意auth与sufficient之间由两个tab建隔开,sufficient与动态库路径之间使用一个tab建隔开
4.10.2 判定条件
使用pam_rootok.so认证模块认证且配置了只允许wheel组的用户才能su为root则合规,否则不合规。
4.10.3 加固建议
1. 编辑文件vim /etc/pam.d/su
auth            sufficient      pam_rootok.so
auth            required        pam_wheel.so use_uid
2. 只有wheel组中的用户可以使用su命令成为root用户。你可以把用户添加到wheel组,以使它可以使用su命令成为root用户
#usermod -G wheel username            #username为需要添加至wheel组的账户名称
4.11 打开syncookie缓解syn flood攻击
4.11.1 检测方式
★★★★★
查看参数tcp_syncookies的值
cat /proc/sys/net/ipv4/tcp_syncookies
4.11.2 判定依据
判定依据
    tcp_syncookies的值为1则合规,否则为不合规
4.11.3 加固方式
1.编辑 vim /etc/sysctl.conf (或相关下级配置文件)
在文件中查找net.ipv4.tcp_syncookies修改为:
    net.ipv4.tcp_syncookies = 1
    如果没找到,则在单独一行添加即可。
2.生效配置 sysctl -p
4.12 禁止存在bash安全漏洞
4.12.1 检测方式
★★★★★
查看设备是否存在bash安全漏洞
env -i  X='() { (a)=>\' bash -c '/dev/stdout echo vulnerable'  2>/dev/null
4.12.2 判定依据
判定依据
    如果以上命令的输出为以下内容则不合规:
        vulnerable
4.12.3 加固建议
官网升级bash
4.13 禁用ICMP timestamp(13和14)的ICMP报文
4.13.1 查看方式
iptables -p icmp -h | grep timestamp
[root@elk:/root]# iptables -p icmp -h | grep timestamp
timestamp-request
timestamp-reply
4.13.2 加固建议
firewall-cmd --add-icmp-block=timestamp-request
firewall-cmd --add-icmp-block=timestamp-reply
firewall-cmd --reload

补充查看:
[root@elk:/usr/lib/firewalld/icmptypes]# iptables -nvL 
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
20921 4778K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
   29  6188 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
   18  2591 INPUT_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0
   18  2591 INPUT_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0
   18  2591 INPUT_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID
   14  2359 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 FORWARD_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 FORWARD_IN_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 FORWARD_IN_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 FORWARD_OUT_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 FORWARD_OUT_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 ......(省略)

4.14 禁用Time Exceeded 的ICMP报文
4.14.1 查看方式
iptables -p icmp -h | grep time-exceeded
[root@elk:/usr/lib/firewalld/icmptypes]# iptables -p icmp -h | grep time-exceeded
time-exceeded (ttl-exceeded)
4.14.2 加固建议
firewall-cmd  --permanent  --add-icmp-block=time-exceeded
firewall-cmd --reload
补充查看:
[root@elk:/usr/lib/firewalld/icmptypes]# iptables -nvL | grep icmp
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 11 reject-with icmp-host-prohibited
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 11 reject-with icmp-host-prohibited
4.15 禁用ICMP协议
需要对icmp_echo_ignore_all进行配置
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

1表示禁用
0表示开启

查看ICMP状态(0为启动  1为关闭)
cat /proc/sys/net/ipv4/icmp_echo_ignore_all

抓包检测:
tcpdump -i eno1 host 192.168.7.102 -XvvennS

0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 REJECT all – * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 ACCEPT icmp – * * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT icmp – * * 0.0.0.0/0 0.0.0.0/0 icmptype 11 reject-with icmp-host-prohibited
0 0 ACCEPT icmp – * * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT icmp – * * 0.0.0.0/0 0.0.0.0/0 icmptype 11 reject-with icmp-host-prohibited


#### 4.15 禁用ICMP协议

```powershell
需要对icmp_echo_ignore_all进行配置
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

1表示禁用
0表示开启

查看ICMP状态(0为启动  1为关闭)
cat /proc/sys/net/ipv4/icmp_echo_ignore_all

抓包检测:
tcpdump -i eno1 host 192.168.7.102 -XvvennS
;