Linux安全加固
作者:MappleZF
版本:1.0.0
简介:当时因运维工作所需,基于CentOS 7 进行部分内容的整理。
文章目录
- Linux安全加固
- 一、账户和口令管理
- 二、文件权限
- 三、日志管理
- 四、系统服务
- 4.1 限制root用户SSH远程登陆
- 4.2 限制Telnet远程登陆
- 4.3 修改SNMP的默认Community
- 4.4 禁止root用户登录FTP
- 4.5 禁止存在心血漏洞
- 4.6 设置登陆超时时间
- 4.7 禁用Core Dump状态
- 4.8 配置NFS服务限制
- 4.9 禁止ICMP重定向
- 4.10 禁止wheel组之外的用户su为root
- 4.11 打开syncookie缓解syn flood攻击
- 4.12 禁止存在bash安全漏洞
- 4.13 禁用ICMP timestamp(13和14)的ICMP报文
- 4.14 禁用Time Exceeded 的ICMP报文
- 4.15 禁用ICMP协议
一、账户和口令管理
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