1.摘要
本文基于实际项目中的安全整改经验,记录适用于 CentOS 7.9 等 Linux 发行版的系统与中间件的安全加固。
2. 系统加固
2.1 禁止 root 用户直接登录
编辑/etc/ssh/sshd_config配置文件,将PermitRootLogin修改为no。
sed-i's/PermitRootLogin yes/PermitRootLogin no/'/etc/ssh/sshd_configgrepPermitRootLogin /etc/ssh/sshd_config# 检查2.2 只允许 wheel 组用户使用 su
建议提前将一个普通用户加入 wheel 组。
sed-i's/^#\s*\(auth\s\+required\s\+pam_wheel.so use_uid\)/\1/'/etc/pam.d/su# 取消 auth required pam_wheel.so use_uid 这行的注释greppam_wheel.so /etc/pam.d/su# 检查2.3 设置账号有效期为 90 天
sed-i's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS\t90/'/etc/login.defsgrepPASS_MAX_DAYS /etc/login.defs2.4 设置过期前 10 天提醒
sed-i's/^PASS_WARN_AGE.*/PASS_WARN_AGE\t10/'/etc/login.defsgrepPASS_WARN_AGE /etc/login.defs2.5 设置密码复杂度
关于用户密码方面的配置会涉及到两个类似功能的配置文件,分别为/etc/pam.d/password-auth和/etc/pam.d/system-auth。
它们的核心区别:
password-auth:管理远程认证服务的策略。system-auth:管理远程认证和本地认证的策略。
编辑/etc/pam.d/system-auth文件,定位到pam_pwquality.so行,在后面添加minlen、minclass参数。
password requisite pam_pwquality.so try_first_pass local_users_onlyretry=3authtok_type=minlen=12minclass=3参数说明:
minlen=8:密码最小长度(此配置经过测试,会受minclass配置影响)。minclass=3:密码最少包含的字符类别数(数字、大写、小写、特殊符号)。retry=3:用户最多尝试输入密码的次数。difok=5:新密码与旧密码相比,至少需要修改的字符数。dcredit=-1:密码中至少需要包含的数字个数。ucredit=-1:密码中至少需要包含的大写字母个数。lcredit=-1:密码中至少需要包含的小写字母个数。ocredit=-1:密码中至少需要包含的特殊字符个数。maxrepeat=0:密码中连续相同字符的最大允许次数。0 表示不限制。maxclassrepeat=0:密码中同一类字符连续出现的最大次数。0 表示不限制。gecoscheck:是否检查密码与 GECOS 字段(全名)的相似。0 表示不限制。dictpath:字典文件路径。用于字典攻击检查。
2.6 配置登录超时时间
编辑/etc/profile文件,添加TMOUT=300。
vim/etc/profileTMOUT=3003. Nginx 安装加固
3.1 限制客户端并发数
在http块中定义共享内存区域。
http{# 定义一个名为 addr 的共享内存区域,大小 10m,用于存储键值(如客户端 IP)limit_conn_zone$binary_remote_addrzone=addr:10m;}在server块中添加以下配置。
server{limit_conn addr10;}3.2 限制客户端传输速率
在server块中添加以下配置。
server{limit_rate 500k;}3.3 自定义 Nginx 返回的错误信息
在server配置中添加以下配置。
server{error_page404400/40x.html;# 指定 404、400 的错误页面为 40x.html 文件error_page500502503504/50x.html;# 与上同理location=/50x.html{root /usr/share/nginx/html;# 自定义错误信息页面存放位置}3.4 隐藏 Nginx 版本信息
在http块中添加以下配置。
http{server_tokens off;}3.5 配置超时时间
在http块中添加以下配置。
http{client_body_timeout 30s;client_header_timeout 30s;}Nginx 全部超时时间参数解释:
client_body_timeout:设置客户端向服务器发送请求体的超时时间,单位为秒。client_header_timeout:设置客户端向服务器发送请求头的超时时间,单位为秒。send_timeout:设置服务器向客户端发送响应的超时时间,单位为秒。keepalive_timeout:设置服务器与客户端之间保持连接的超时时间,单位为秒。proxy_connect_timeout:设置代理服务器与后端服务器建立连接的超时时间,单位为秒。proxy_read_timeout:设置代理服务器从后端服务器读取数据的超时时间,单位为秒。proxy_send_timeout:设置代理服务器向后端服务器发送数据的超时时间,单位为秒。