[email protected]   15826058953
B2B外贸网站建设与运营,WEB服务器运维,始于2016。

CentOS 7 系统安全加固方案(十七条)

2022-05-27     网络    

一、密码长度与有效期

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