CentOS 7 系统安全加固方案(十七条)
一、密码长度与有效期
cat /etc/login.defs |grep PASS_ |grep -v '#' PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7
二、密码复杂度
1.备份配置文件:
cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth.default
2.编辑配置文件
vi /etc/pam.d/system-auth
将password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=注释并在其下面新增1行
password requisite pam_cracklib.so try_first_pass minlen=8 difok=5 dcredit=-1 lcredit=-1 ocredit=-1 retry=1 type=
3.保存配置文件
三、设置会话超时(5分钟)
1.备份配置文件:
cp -a /etc/profile /etc/profile.default
2.编辑配置文件:
vi /etc/profile
在文件的末尾添加参数
export TMOUT=300
四、设置history命令时间戳
1.备份配置文件
cp /etc/profile /etc/profile-bak
2.编辑配置文件:
vi /etc/profile
在文件的末尾添加参数,显示历史命令的时间与管理员
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S `whoami` "
五、设置登陆失败锁定(终端登录)
1.备份配置文件
cp /etc/pam.d/system-auth /etc/pam.d/system-auth-bak
2.编辑配置文件:
vi /etc/pam.d/system-auth
在# User changes will be destroyed the next time authconfig is run.行的下面,添加
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
六、禁止root通过ssh远程登录
1.备份配置文件
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.default
2.编辑配置文件
vi /etc/ssh/sshd_config
将配置参数#PermitRootLogin yes 改成
PermitRootLogin no
3.创建普通用户
useradd admin passwd admin
4.重启sshd服务
systemctl restart sshd.service
七、SSH 配置参数增强
1.备份配置文件
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.default
2.编辑配置文件
vi /etc/ssh/sshd_config
(1)禁止空密码登录
将#PermitEmptyPasswords no参数的注释符号去掉,改成
PermitEmptyPasswords no
(2)关闭ssh的tcp转发
将#AllowTcpForwarding yes参数改成
AllowTcpForwarding no
(3)关闭S/KEY(质疑-应答)认证方式
将#ChallengeResponseAuthentication yes参数,改成
ChallengeResponseAuthentication no
(4)关闭基于GSSAPI 的用户认证
将GSSAPIAuthentication yes参数,改成
GSSAPIAuthentication no
3.保存配置文件
4.重启ssh服务
systemctl restart sshd
八、设置SSH登录警告语
1.备份配置文件
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.default2
2.编辑配置文件
vi /etc/ssh/sshd_config
找到#Banner none参数,在其下一行,增加
Banner /etc/ssh/alert
3.保存配置文件
4新增告警信息文件
vi /etc/ssh/alert
文件内容,设置成
******************************************************* 这里的内容自己定义,可以提示一下登录的用户引起运维人员重视 Warning!!!Any Access Without Permission Is Forbidden!!! *******************************************************
5.保存后重启ssh服
九、设置umask值
1.备份配置文件
cp -a /etc/bashrc /etc/bashrc.default
2.编辑配置文件
vi /etc/bashrc
在文件末尾增加参数
umask 027
3.保存配置文件
4. 备份配置文件
cp -a /etc/profile /etc/profile.default
5.编辑配置文件
vi /etc/profile
在文件末尾增加参数
umask 027
6.保存配置文件
十、禁止Control-Alt-Delete 键盘重启系统命令
1.备份配置文件
cp -a /usr/lib/systemd/system/ctrl-alt-del.target /usr/lib/systemd/system/ctrl-alt-del.target.default
2.移除该原源文件
rm -rf /usr/lib/systemd/system/ctrl-alt-del.target
十一、隐藏系统版本信息
执行以下命令:
mv /etc/issue /etc/issue.bak mv /etc/issue.net /etc/issue.net.bak
十二、最大文件打开数(文件句柄数)
1.备份配置文件
cp -a /etc/security/limits.conf /etc/security/limits.conf.default
2.修改该文件最后两行
* soft nofile 65535 * hard nofile 65535
十三、用户最大进程数
1.备份配置文件
cp -a /etc/security/limits.d/20-nproc.conf /etc/security/limits.d/20-nproc.conf.default
2.修改配置文件vim /etc/security/limits.d/20-nproc.conf
* soft nproc 65535 * hard nproc 65535
十四、系统参数调优
1.备份配置文件
cp -a /etc/sysctl.conf /etc/sysctl.conf.default
2.对应以下参数到该文件中
net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.route.gc_timeout = 20 net.ipv4.tcp_retries2 = 5 net.ipv4.tcp_fin_timeout = 30 #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。 net.ipv4.tcp_wmem = 8192 131072 16777216 net.ipv4.tcp_rmem = 32768 131072 16777216 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.core.somaxconn = 262144 net.core.netdev_max_backlog = 262144 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.route.gc_timeout = 20 net.ipv4.ip_local_port_range = 1024 65535 #表示用于向外连接的端口范围。缺省情况下过窄:32768到61000,改为1024到65535。 net.ipv4.tcp_retries2 = 5 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_tw_recycle = 1 #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_tw_reuse = 1 #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。 net.ipv4.tcp_keepalive_time = 120 #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_wmem = 8192 131072 16777216 net.ipv4.tcp_rmem = 32768 131072 16777216 net.ipv4.tcp_mem = 94500000 915000000 927000000 fs.file-max = 65535 kernel.pid_max = 65536 net.ipv4.tcp_wmem = 4096 87380 8388608 net.core.wmem_max = 8388608 net.core.netdev_max_backlog = 5000 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_max_syn_backlog = 10240 #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。 net.core.netdev_max_backlog = 262144 net.core.somaxconn = 262144 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syncookies = 1 #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭。 net.ipv4.tcp_max_tw_buckets = 36000 #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,可适当增大该值,但不建议减小。对于Apache、Nginx等服务器,以上几行参数的设置可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
3.其他参数优化
echo 873200 > /proc/sys/net/core/wmem_max #最大socket写buffer,可参考的优化值:873200 echo 873200 > /proc/sys/net/core/rmem_max #最大socket读buffer,可参考的优化值:873200 echo 32768 436600 873200 > /proc/sys/net/ipv4/tcp_wmem #TCP写buffer,可参考的优化值:32768 436600 873200 echo 32768 436600 873200 > /proc/sys/net/ipv4/tcp_rmem #TCP读buffer,可参考的优化值:32768 436600 873200 echo 786432 1048576 1572864 > /proc/sys/net/ipv4/tcp_mem #同样有3个值,意思是: #net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力. #net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段. #net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket. #上述内存单位是页,而不是字节.可参考的优化值是:786432 1048576 1572864 echo 16384 > /proc/sys/net/core/netdev_max_backlog #进入包的最大设备队列.默认是1000,对重负载服务器而言,该值太低,可调整到16384. echo 8192 > /proc/sys/net/core/somaxconn #listen()的默认参数,挂起请求的最大数量.默认是128.对繁忙的服务器,增加该值有助于网络性能.可调整到8192. echo 20480 > /proc/sys/net/core/optmem_max #socket buffer的最大初始化值,默认10K(10240).也可调整到20k(20480).但建议保留不变 echo 16384 > /proc/sys/net/ipv4/tcp_max_syn_backlog #进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处.可调整到16384. echo 5 > /proc/sys/net/ipv4/tcp_retries2 #TCP失败重传次数,默认值15,意味着重传15次才彻底放弃.可减少到5,以尽早释放内核资源. echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time echo 3 > /proc/sys/net/ipv4/tcp_keepalive_intvl echo 30 > /proc/sys/net/ipv4/tcp_keepalive_probes #这3个参数与TCP KeepAlive有关.默认值是: tcp_keepalive_time = 7200 seconds (2 hours) tcp_keepalive_probes = 9 tcp_keepalive_intvl = 75 seconds #意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效.对服务器而言,显然上述值太大. 可调整到: /proc/sys/net/ipv4/tcp_keepalive_time 1800 /proc/sys/net/ipv4/tcp_keepalive_probes 3 /proc/sys/net/ipv4/tcp_keepalive_intvl 30 echo 1024 65500 > /proc/sys/net/ipv4/ip_local_port_range #指定端口范围的一个配置,默认是32768 61000.可调整为1024 65500.
十五、关闭不必要的服务
使用 systemctl list-unit-files 可以查看启动项
命令下输入:
systemctl list-unit-files | grep enabled
abrt-ccpp.service enabled abrt为auto bug report的缩写 用于bug报告 关闭 abrt-oops.service enabled ---------------------- abrt-vmcore.service enabled ---------------------- abrt-xorg.service enabled ---------------------- abrtd.service enabled ---------------------- auditd.service enabled 安全审计 保留 [email protected] enabled 登陆相关 保留 crond.service enabled 定时任务 保留 dbus-org.freedesktop.NetworkManager.service enabled 桌面网卡管理 关闭 dbus-org.freedesktop.nm-dispatcher.service enabled ----------------- [email protected] enabled tty控制台相关 保留 irqbalance.service enabled 优化系统中断分配 保留 kdump.service enabled 内核崩溃信息捕获 自定 microcode.service enabled 处理器稳定性增强 保留 NetworkManager-dispatcher.service enabled 网卡守护进程 关闭 NetworkManager.service enabled ---------------------- postfix.service enabled 邮件服务 关闭 rsyslog.service enabled 日志服务 保留 snmpd.service enabled snmp监控 数据抓取 保留 sshd.service enabled ssh登陆 保留 systemd-readahead-collect.service enabled 内核调用--预读取 保留 systemd-readahead-drop.service enabled ---------------------- systemd-readahead-replay.service enabled ---------------------- tuned.service enabled default.target enabled 默认启动项 multi-user.target的软连接 保留 multi-user.target enabled 启动用户命令环境 保留 remote-fs.target enabled 集合远程文件挂载点 自定 runlevel2.target enabled 运行级别 用于兼容6的SysV 保留 runlevel3.target enabled ---------------------- runlevel4.target enabled ----------------------
十六、安装相关工具与补丁(视情况而定)
yum install -y tree vim wget bash-completion bash-completion-extras lrzsz net-tools sysstat iotop iftop htop unzip nc nmap telnet bc psmisc
十七、开启防火墙
systemctl enable firewalld.service