CentOS7-系统优化及安全加固

说明:CentOS7系统基础命令使用变化:(wget与curl经常被用于木马下载,自动挖矿脚本执行,顾将默认的命令进行了rename)

  • wget → mywget
  • curl → mycurl

定时任务添加无法保存时,请执行如下命令解锁相关文件后再次添加定时任务:

[root@CN-localhost ~]# lsattr /var/spool/cron/root  # <--该文件被锁定(文件有i标志位),
# 添加root用户定时任务时,需要先使用命令进行解锁(chattr -i /var/spool/cron/root),解锁后可以使用cront -e命令添加定时任务
----i----------- /var/spool/cron/root

CentOS7系统优化

最大文件打开数/文件句柄优化(推荐)

## 备份配置文件
cp -a /etc/security/limits.conf{,.bak}
## 添加以下两行配置到该文件最后
* soft nofile 65536
* hard nofile 65536

用户最大进程数(推荐)

## 1.备份配置文件
cp -a /etc/security/limits.d/20-nproc.conf{,.bak}
## 2.修改配置文件
vim /etc/security/limits.d/20-nproc.conf
*     soft  nproc   65536
*     hard  nproc   65536
root    soft  nproc   unlimited

关闭防火墙(推荐)

/usr/bin/systemctl stop firewalld.service &> /dev/null
/usr/bin/systemctl disable firewalld.service &> /dev/null
/usr/bin/systemctl mask firewalld.service &> /dev/null

关闭SELinux(推荐)

cp /etc/selinux/config{,.bak}
sed -r -i '/^SELINUX=/s/.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0

操作系统时间同步设置(推荐)

## 解锁配置文件
chattr -i ``/var/spool/cron/root
## 添加定时任务,定时从时间服务器同步时间
echo "*/5 * * * * /usr/sbin/ntpdate 10.137.9.9 >> /home/timedate.log > /dev/null 2>&1" >> /var/spool/cron/root
## 编辑后锁定配置文件
chattr +i /var/spool/cron/root

系统参数调优(需根据实际业务需要进行评估,一般调整参数如下)(可选)

## 备份配置文件
cp -a /etc/sysctl.conf /etc/sysctl.conf.default
## 添加以下调优参数到该文件中
#kernel
    kernel.sysrq = 0
    kernel.core_uses_pid = 1
    kernel.msgmnb = 65536
    kernel.msgmax = 65536
    kernel.shmmax = 68719476736
    kernel.shmall = 4294967296
#socket
    net.ipv4.ip_local_port_range = 1024 65000
    net.ipv4.ip_forward = 0
    net.ipv4.tcp_timestamps = 0
    net.ipv4.tcp_sack = 1
    net.ipv4.tcp_window_scaling = 1
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
#socket mem
    net.ipv4.tcp_mem = 94500000 915000000 927000000
    net.ipv4.tcp_rmem = 4096 87380 4194304
    net.ipv4.tcp_wmem = 4096 16384 4194304   
    net.core.wmem_default = 8388608
    net.core.rmem_default = 8388608
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
#conn
    net.core.netdev_max_backlog = 262144
    net.core.somaxconn = 262144
    net.ipv4.tcp_max_orphans = 3276800
#Timewait
    net.ipv4.tcp_max_tw_buckets = 6000
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_tw_reuse = 1
#sync
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_synack_retries = 1
    net.ipv4.tcp_max_syn_backlog = 262144
    net.ipv4.tcp_syncookies = 1
#fin
    net.ipv4.tcp_fin_timeout = 1
#keepalive
    net.ipv4.tcp_keepalive_time = 30
## 配置生效
/sbin/sysctl -p

2.CentOS7系统安全加固

操作系统密码策略(密码长度与有效期)(推荐)

## 备份配置文件:
cp -a /etc/login.defs /etc/login.defs.default
## 编辑配置文件
vim /etc/login.defs
# 将相关参数值改成如下:
PASS_MAX_DAYS    90    # 密码最长使用天数
PASS_MIN_DAYS    0     # 密码最短使用天数
PASS_MIN_LEN     8     # 密码最短长度
PASS_WARN_AGE    7     # 密码到期前多少天提醒
 
## 修改系统中当前已存在用户的密码策略
chage -m 0 -M 90 -I 5 -W 7 <用户名>
## 表示将此用户的密码最长使用天数设为90,最短使用天数设为0,密码过期后5天之后账户失效,过期前7天提醒用户。

密码复杂度策略(推荐)

## 备份配置文件:
cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth.default## 编辑配置文件
vi /etc/pam.d/system-auth
# 将password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= 修改为:
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

密码重复使用次数限制(可选)

设置密码不能重复前3次使用过的。

## 修改配置文件
/etc/pam.d/system-auth
在password sufficient pam_unix.so xxxxx 一行后添加 remember=3,例如:
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=3

锁定不必要的系统默认帐号(推荐)

## 锁定无用帐号,降低安全风险
usermod -L gdm
usermod -L nobody
## 如有其他的不必要的系统用户,可以用此方法锁定

特殊帐号检查(推荐)

检查系统中是否存在空口令帐号和除了root之外的UID为0的帐号

awk -F: '($2"")' /etc/shadow    ## 查看空口令账号,找到之后,使用passwd命令为其设置密码。
awk -F: '($30)' /etc/passwd     ## 查看UID为零的账号,保证系统中UID为0的帐号只有root。

设置会话超时时间(推荐)

## 备份配置文件:
cp -a /etc/profile /etc/profile.default
## 编辑配置文件:
vi /etc/profile
# 在文件的末尾添加参数
export TMOUT=300

设置历史命令时间戳(可选)

echo "HISTFILESIZE=2000" >> /etc/bashrc
echo "HISTFILESIZE=2000" >> /etc/bashrc
echo "HISTSIZE=2000" >> /etc/bashrc
echo "HISTTIMEFORMAT='<%F %T> : '" >> /etc/bashrc

SSH 服务安全配置(推荐)

## 备份配置文件
cp /etc/ssh/sshd_config{,.bak}
## 编辑配置文件
vi /etc/ssh/sshd_config
# 禁止空密码登录,将#PermitEmptyPasswords no参数的注释符号去掉,改成
PermitEmptyPasswords no
# 关闭ssh的tcp转发,将#AllowTcpForwarding yes参数改成
AllowTcpForwarding no
# 关闭S/KEY(质疑-应答)认证方式,将#ChallengeResponseAuthentication yes参数,改成
ChallengeResponseAuthentication no
# 关闭基于GSSAPI 的用户认证,将GSSAPIAuthentication yes参数,改成
GSSAPIAuthentication no
# 关闭ssh连接DNS查找
UseDNS no
# 修改sshd服务默认端口,推荐改成10000以上的端口,如
Port 12379
## 重启ssh服务

# 重启sshd服务
systemctl restart sshd

禁止root远程登录(可选)

## 备份配置文件
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.default
## 编辑配置文件
vi /etc/ssh/sshd_config
# 将配置参数#PermitRootLogin yes改成
PermitRootLogin no
## 重启ssh服务

登陆失败锁定(可选)

## 配置文件备份
cp /etc/pam.d/sshd{,.bak}
cp /etc/pam.d/login{,.bak}
## 修改配置文件
vim /etc/pam.d/sshd
## 编辑配置文件,在#%PAM-1.0的下面,即第二行,添加内容
auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=10
 
vim /etc/pam.d/login
## 编辑配置文件,在#%PAM-1.0的下面,即第二行,添加内容
auth required pam_tally2.so deny=3 lock_time=600 even_deny_root root_unlock_time=10

设置sshd加密算法(推荐)

## 备份配置文件
cp /etc/ssh/sshd_config{,.bak}
## 修改配置文件,在配置文件末尾加上如下配置
Ciphers aes128-ctr,aes192-ctr,aes256-ctr

设置系统umask值(推荐)

vim /etc/profile
## 在文档末尾加上
umask 027

禁止"Control-Alt-Delete"重启系统快捷键(推荐)

防止误操作按了"Control-Alt-Delete"组合键导致系统重启。

mv /usr/lib/systemd/system/ctrl-alt-del.target /tmp
init q

隐藏系统版本信息(可选)

mv /etc/issue /etc/issue.bak
mv /etc/issue.net /etc/issue.net.bak

关闭不必要的系统服务(推荐)

关闭不必要的服务(如普通服务和xinetd服务),降低风险。

## 停止服务
systemctl stop <服务名>
## 设置服务在开机时不自动启动。
systemctl disable <服务名>
## CentOS7最小化安装,推荐停止的系统服务有:postfix,...

删除潜在的危险文件(推荐)

.rhosts,.netrc,hosts.equiv等文件都具有潜在的危险,如果没有应用,应该删除。

## 操作步骤
find / -name .rhosts 
find / -name .netrc
find / -name hosts.equiv
## 若存在相关文件,加上.bak后缀
mv .rhost .rhost.bak 
mv .netr .netr.bak 
mv hosts.equiv hosts.equiv.bak

记录所有用户的登录和操作日志(可选)

vim /etc/profile      # 打开配置文件,在配置文件末尾加入如下脚本
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
    USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
    mkdir /var/log/history
    chmod 733 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
    mkdir /var/log/history/${LOGNAME}
    chmod 300 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/* 2>/dev/null
## 执行下面命令使配置生效,如果已经接入了堡垒机,该步骤可省略(堡垒机已经有日志审计功能了)
source /etc/profile

人们永远没有足够的时间把它做好,但永远有足够的时间重新来过。 可是,因为并不是总有机会重做一遍,你必须做得更好,换句话说, 人们永远没有足够的时间去考虑到底是不是想要它,但永远有足够的时间去为之后悔。 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 浅掘千口井,不如深挖一口井!当知识支撑不了野心时,那就静下心来学习吧!运维技术交流QQ群:618354452

个人微信公众号,定期发布技术文章和运维感悟。欢迎大家关注交流。

原文地址:https://www.cnblogs.com/miaocbin/p/15245810.html