
1.摘要本文基于实际项目中的安全整改经验记录适用于 CentOS 7.9 等 Linux 发行版的系统与中间件的安全加固。2. 系统加固2.1 禁止 root 用户直接登录编辑/etc/ssh/sshd_config配置文件将PermitRootLogin修改为no。sed-is/PermitRootLogin yes/PermitRootLogin no//etc/ssh/sshd_configgrepPermitRootLogin /etc/ssh/sshd_config# 检查2.2 只允许 wheel 组用户使用 su建议提前将一个普通用户加入 wheel 组。sed-is/^#\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-is/^PASS_MAX_DAYS.*/PASS_MAX_DAYS\t90//etc/login.defsgrepPASS_MAX_DAYS /etc/login.defs2.4 设置过期前 10 天提醒sed-is/^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_onlyretry3authtok_typeminlen12minclass3参数说明minlen8密码最小长度此配置经过测试会受minclass配置影响。minclass3密码最少包含的字符类别数数字、大写、小写、特殊符号。retry3用户最多尝试输入密码的次数。difok5新密码与旧密码相比至少需要修改的字符数。dcredit-1密码中至少需要包含的数字个数。ucredit-1密码中至少需要包含的大写字母个数。lcredit-1密码中至少需要包含的小写字母个数。ocredit-1密码中至少需要包含的特殊字符个数。maxrepeat0密码中连续相同字符的最大允许次数。0 表示不限制。maxclassrepeat0密码中同一类字符连续出现的最大次数。0 表示不限制。gecoscheck是否检查密码与 GECOS 字段全名的相似。0 表示不限制。dictpath字典文件路径。用于字典攻击检查。2.6 配置登录超时时间编辑/etc/profile文件添加TMOUT300。vim/etc/profileTMOUT3003. Nginx 安装加固3.1 限制客户端并发数在http块中定义共享内存区域。http{# 定义一个名为 addr 的共享内存区域大小 10m用于存储键值如客户端 IPlimit_conn_zone$binary_remote_addrzoneaddr: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设置代理服务器向后端服务器发送数据的超时时间单位为秒。