本文目录导读:

- 通用安全加固操作流程(方法论)
- 针对 Linux 服务器(CentOS/RHEL/Ubuntu)的加固实操
- 针对 Web 应用(Nginx / Apache / Tomcat)的加固
- 针对数据库(MySQL / MariaDB)的加固
- 网络与端点安全(辅助加固)
- 最佳实践清单(Checklist)
- 重要提示
“安全加固”是一个系统性工程,而不是单一的操作,它的核心目标是:减少攻击面、提升防御能力、确保数据机密性/完整性/可用性。
由于你没有指定具体的加固对象(如Windows服务器、Linux服务器、Web应用、数据库、网络设备等),我将提供一个通用且主流的操作框架,并重点针对最常见的Linux服务器和Web应用给出具体步骤。
通用安全加固操作流程(方法论)
在任何场景下,建议遵循以下步骤(PDCA循环):
- 资产梳理:先搞清楚要加固的是什么(IP、端口、服务、版本)。
- 基线建立:查阅并遵循行业标准(如等保2.0、CIS Benchmarks)。
- 风险最小化:关闭不用的服务,删除不用的账户。
- 权限收紧:最小权限原则。
- 日志与监控:确保所有操作可追溯。
- 定期更新:打补丁是性价比最高的加固。
针对 Linux 服务器(CentOS/RHEL/Ubuntu)的加固实操
这是最常见的场景,以下为核心命令和配置:
账户与认证安全
- 禁用Root直接登录:
# 编辑SSH配置文件 vim /etc/ssh/sshd_config # 修改或添加: PermitRootLogin no # 重启服务 systemctl restart sshd
- 使用密钥登录,禁用密码登录:
vim /etc/ssh/sshd_config PasswordAuthentication no PubkeyAuthentication yes
- 创建普通用户并赋予sudo权限:
useradd your_admin passwd your_admin usermod -aG wheel your_admin # CentOS # 或 usermod -aG sudo your_admin # Ubuntu
- 修改SSH默认端口(减少扫描攻击):
vim /etc/ssh/sshd_config Port 2222 # 改为非标准端口
系统服务与补丁
-
关闭不必要的服务:
systemctl stop <service_name> systemctl disable <service_name>
cups(打印服务)、avahi-daemon(自动发现)通常可以关闭。 -
定期自动更新安全补丁:
# CentOS yum install -y yum-cron vim /etc/yum/yum-cron.conf apply_updates = yes # Ubuntu apt install unattended-upgrades dpkg-reconfigure --priority=low unattended-upgrades
防火墙与网络
- 使用Firewalld或iptables默认拒绝入站:
systemctl start firewalld firewall-cmd --set-default-zone=drop firewall-cmd --permanent --add-port=2222/tcp # 放行SSH新端口 firewall-cmd --reload
- 禁止ICMP重定向和IP转发(除非必要):
vim /etc/sysctl.conf net.ipv4.conf.all.accept_redirects = 0 net.ipv4.ip_forward = 0 # 应用 sysctl -p
文件系统与权限
- 检查关键文件权限:
chmod 600 /etc/shadow # 只有root能读 chmod 644 /etc/passwd # 普通用户可读但不可写 chmod 700 /root # 只有root能访问root家目录
- 设置umask(防御性权限):
# 编辑 /etc/profile 或 /etc/bashrc umask 027
针对 Web 应用(Nginx / Apache / Tomcat)的加固
隐藏版本号与错误信息
- Nginx:
server_tokens off;
- Apache:
ServerSignature Off ServerTokens Prod
HTTP头安全(防点击劫持、MIME嗅探、XSS)
在 Nginx/Apache 配置中添加:
add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
目录权限与权限控制
- 禁止目录遍历:
location / { autoindex off; } - 限制上传目录的执行权限(防止WebShell):
location /uploads { location ~ \.(php|jsp|asp)$ { deny all; } } - 文件权限:
chmod 644 /var/www/html/*.php chmod 755 /var/www/html
输入与输出过滤(防SQL注入、XSS)
- 使用WAF(如ModSecurity)或云WAF。
- 代码层:使用预编译语句(PreparedStatement)、对用户输入进行HTML实体编码。
针对数据库(MySQL / MariaDB)的加固
-
运行安全初始化脚本:
mysql_secure_installation
它会引导你设置root密码、删除匿名账户、禁止root远程登录、删除测试数据库。
-
绑定地址到本地(数据库与应用同机时):
# 修改 /etc/my.cnf [mysqld] bind-address = 127.0.0.1 skip-networking # 极端安全时使用,禁止TCP连接
-
最小化权限:
-- 绝不给予 super, process, file 权限给非管理账户 GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'appuser'@'localhost';
-
数据加密:
- 开启SSL/TLS连接。
- 对敏感字段(如身份证、密码)使用 AES_ENCRYPT 或哈希加盐存储。
网络与端点安全(辅助加固)
- 部署堡垒机:所有运维操作通过堡垒机审计。
- 主机入侵检测:安装
Fail2ban(封禁暴力破解IP)或Ossec/Wazuh。# Fail2ban 示例 yum install fail2ban vim /etc/fail2ban/jail.local [sshd] enabled = true bantime = 1h maxretry = 3 systemctl start fail2ban
- 系统日志审计:
# 配置 rsyslog 发送到远程日志服务器 vim /etc/rsyslog.conf *.* @remote-log-server:514 systemctl restart rsyslog
最佳实践清单(Checklist)
| 类别 | 检查项 | 状态 |
|---|---|---|
| 身份与访问 | 禁用root密码登录 | |
| 启用sudo日志 | ||
| 修改默认SSH端口 | ||
| 系统安全 | 内核参数加固 | |
| 最小化安装软件包 | ||
| 关闭非必要服务 | ||
| 网络安全 | 防火墙默认拒绝入站 | |
| 限制出站规则 | ||
| 启用SELinux/AppArmor | ||
| 应用安全 | 隐藏指纹信息 | |
| 添加安全响应头 | ||
| 文件上传目录禁止执行脚本 | ||
| 数据安全 | 数据库仅监听本地 | |
| 敏感数据加密存储 | ||
| 定期备份并异地容灾 |
重要提示
- 先备份:在进行任何加固操作前,建议先备份配置文件或做快照。
- 分步进行:不要一次性操作所有步骤,修改SSH端口时,先保持旧端口开放,新端口测试成功后再关闭旧端口,以免被锁在服务器外。
- 环境差异:开发、测试、生产环境的加固策略可以不同,生产环境建议严格遵循合规标准(如等保二级/三级、PCI-DSS等)。
- 自动化工具:
- OpenSCAP:用于Linux系统的合规性扫描。
- Lynis:开源安全审计工具,可以自动生成加固建议。
- CIS-CAT:CIS官方提供的基线检查工具。
如果你能提供更具体的环境信息(Windows Server 2019、某款Web框架、云平台如阿里云/AWS),我可以给出更有针对性的操作步骤。