一、CentOS系统优化
1.1最大文件打开数/文件句柄优化
## 备份配置文件
cp -a /etc/security/limits.conf{,.bak}
## 添加以下两行配置到该文件最后
* soft nofile 65536
* hard nofile 65536
1.2用户最大进程数
## 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
1.3关闭防火墙
##依据实际生产情况管理
/usr/bin/systemctl stop firewalld.service &> /dev/null
/usr/bin/systemctl disable firewalld.service &> /dev/null
/usr/bin/systemctl mask firewalld.service &> /dev/null
1.4关闭安全机制SElinux
cp /etc/selinux/config{,.bak}
sed -r -i '/^SELINUX=/s/.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
1.5操作系统时间同步
## 解锁配置文件
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
1.6系统参数优化(依据实际生成环境)
## 备份配置文件
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
二、CentOS系统安全加固
2.1操作系统密码策略(密码长度有效期)
## 备份配置文件:
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天提醒用户。
2.2密码复杂度策略
## 备份配置文件:
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
2.3密码重复使用次数限制
#设置密码重复前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
2.4锁定不必要的系统默认账号
## 锁定无用帐号,降低安全风险
usermod -L gdm
usermod -L nobody
## 如有其他的不必要的系统用户,可以用此方法锁定
2.5特殊账号检查
awk -F: '($2"")' /etc/shadow ## 查看空口令账号,找到之后,使用passwd命令为其设置密码。
awk -F: '($30)' /etc/passwd ## 查看UID为零的账号,保证系统中UID为0的帐号只有root。
2.6设置会话超时时间
## 备份配置文件:
cp -a /etc/profile /etc/profile.default
## 编辑配置文件:
vi /etc/profile
# 在文件的末尾添加参数
export TMOUT=300
2.7设置历史命令时间戳
echo "HISTFILESIZE=2000" >> /etc/bashrc
echo "HISTFILESIZE=2000" >> /etc/bashrc
echo "HISTSIZE=2000" >> /etc/bashrc
echo "HISTTIMEFORMAT='<%F %T> : '" >> /etc/bashrc
2.8SSH服务安全配置
## 备份配置文件
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
2.9禁止root用户远程登录
## 备份配置文件
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.default
## 编辑配置文件
vi /etc/ssh/sshd_config
# 将配置参数#PermitRootLogin yes改成
PermitRootLogin no
## 重启ssh服务
2.10登录失败锁定
## 配置文件备份
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
2.11设置sshd加密算法
## 备份配置文件
cp /etc/ssh/sshd_config{,.bak}
## 修改配置文件,在配置文件末尾加上如下配置
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
2.12设置系统umask值
vim /etc/profile
## 在文档末尾加上
umask 027
2.13禁止"Control-Alt-Delete"重启系统快捷键
#.rhosts,.netrc,hosts.equiv等文件都具有潜在的危险,如果没有应用,应该删除。
mv /usr/lib/systemd/system/ctrl-alt-del.target /tmp
init q
2.14隐藏系统版本信息
mv /etc/issue /etc/issue.bak
mv /etc/issue.net /etc/issue.net.bak
2.15关闭不必要的系统服务
#关闭不必要的服务(如普通服务和xinetd服务),降低风险。
## 停止服务
systemctl stop <服务名>
## 设置服务在开机时不自动启动。
systemctl disable <服务名>
## CentOS7最小化安装,推荐停止的系统服务有:postfix,...
2.16删除潜在的危险文件
#.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
2.17记录所有用户的登录和操作日志
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