
核心要点(TL;DR)
你是否担心服务器被入侵?许多安全事件源于基础配置不当:开放了危险端口、权限过于宽松、内核参数未优化。本文将手把手带你完成服务器加固,通过禁用危险端口、最小化权限与内核参数调优,显著提升系统安全性。以下操作基于Linux,请谨慎执行。
一、禁用危险端口:减少攻击面
服务器每开放一个端口,就多一个潜在入口。首先,使用以下命令查看当前监听端口:
ss -tulnp或
netstat -tulnp输出中,关注0.0.0.0和::的监听项。常见危险端口包括:
- 21 (FTP):明文传输,建议改用SFTP。
- 23 (Telnet):明文,应禁用,使用SSH替代。
- 25 (SMTP):若非邮件服务器,关闭。
- 3306 (MySQL):不应对外网开放。
- 6379 (Redis):未授权访问风险高。
- 11211 (Memcached):易被利用放大攻击。
禁用方法:
- 若服务不需要,直接停止并禁用开机自启:
systemctl stop <服务名> && systemctl disable <服务名>。 - 使用防火墙限制访问。例如,仅允许内网访问3306:
保存规则:iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROPiptables-save > /etc/iptables/rules.v4(需安装iptables-persistent)。 - 对于必须开放的端口(如SSH 22),修改默认端口并限制源IP,可减少扫描攻击。例如修改SSH端口为2222:编辑
/etc/ssh/sshd_config,修改Port 2222,重启sshd。
操作后再次运行ss -tulnp确认。
二、最小化权限:遵循最小权限原则
许多服务以root运行,一旦被攻破,攻击者将获得最高权限。应遵循最小权限原则:
- 为服务创建独立用户:例如运行Nginx,创建
www-data用户,配置Nginx以该用户运行。 - 禁止服务用户登录:
usermod -s /sbin/nologin www-data。 - 文件权限最小化:网站目录设为
755,文件设为644,避免777。使用chmod -R 755 /var/www和find /var/www -type f -exec chmod 644 {} \;。 - sudo权限控制:使用
visudo编辑,仅授予必要命令。例如允许运维重启Nginx:ops ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx。 - 定期审计:检查拥有sudo权限的用户:
grep -Po '^sudo.+:\K.*$' /etc/group;检查空密码账户:awk -F: '( == "") {print }' /etc/shadow。
此外,禁用root远程登录:编辑/etc/ssh/sshd_config,设置PermitRootLogin no,重启sshd。
三、内核参数调优:增强网络与系统安全
Linux内核参数可通过/etc/sysctl.conf调整。以下为关键安全参数:
| 参数 | 建议值 | 作用 |
|---|---|---|
| net.ipv4.tcp_syncookies | 1 | 防御SYN Flood攻击 |
| net.ipv4.conf.all.rp_filter | 1 | 防止IP欺骗 |
| net.ipv4.icmp_echo_ignore_broadcasts | 1 | 忽略广播ICMP,防Smurf攻击 |
| net.ipv4.conf.all.accept_redirects | 0 | 禁止接受ICMP重定向 |
| kernel.randomize_va_space | 2 | 启用ASLR,增加漏洞利用难度 |
| net.ipv4.ip_forward | 0 | 除非需要转发,否则关闭 |
编辑/etc/sysctl.conf,添加或修改上述参数,然后执行:
sysctl -p验证:sysctl net.ipv4.tcp_syncookies。
注意:修改前备份原文件,避免影响业务。
四、加固检查清单与工具推荐
完成上述步骤后,使用以下清单复查:
- 是否仅开放必要端口?使用
nmap -sT -O localhost扫描确认。 - 是否所有服务以非root运行?检查进程:
ps aux | grep -v root。 - 是否禁用root SSH登录?检查
/etc/ssh/sshd_config。 - 内核参数是否生效?运行
sysctl -a | grep ...。 - 是否安装并配置了防火墙?
iptables -L -n或firewall-cmd --list-all。
对于希望自动化加固的团队,可考虑使用AegisX等安全加固工具,它提供一键检测与修复功能,覆盖端口、权限、内核等维度,并生成合规报告。
五、行动建议:持续加固
服务器加固不是一次性任务。建议:
- 每月执行一次安全扫描与配置复查。
- 关注安全公告,及时更新软件。
- 使用配置管理工具(如Ansible)固化安全基线。
- 记录所有变更,便于审计。
立即动手,从禁用危险端口开始,逐步落实最小权限和内核调优,让你的服务器更安全。
常见问题(FAQ)
如何查看服务器上哪些端口正在监听?
使用命令 `ss -tulnp` 或 `netstat -tulnp` 可以列出所有监听端口及对应进程。重点关注0.0.0.0和::表示的对外端口,确认是否均为业务所需。若非必要,应通过防火墙或停止服务来关闭。
怎样安全地禁用危险端口?
首先用 `ss -tulnp` 找出监听端口,然后通过防火墙规则(如iptables或firewalld)拒绝访问,或直接停止对应服务。例如禁用3306端口:`iptables -A INPUT -p tcp --dport 3306 -j DROP`。同时确保SSH端口限制访问IP。
什么是最小化权限原则?如何实施?
最小化权限指仅授予用户或服务完成其任务所必需的最小权限。实施方法:为每个服务创建独立系统用户,禁止其登录shell;使用sudo精细控制命令;文件权限设置为644或750,避免777。定期审计权限。
哪些内核参数对服务器安全至关重要?
关键参数包括:net.ipv4.tcp_syncookies=1(防SYN Flood)、net.ipv4.conf.all.rp_filter=1(防IP欺骗)、net.ipv4.icmp_echo_ignore_broadcasts=1(防Smurf攻击)、kernel.randomize_va_space=2(ASLR)。修改后需执行sysctl -p生效。
服务器加固后如何验证效果?
可从外部使用nmap扫描端口,确认仅开放必要端口;检查用户权限和sudo规则;运行`sysctl -a`查看内核参数。同时监控日志,确保无异常访问。建议定期复查,形成持续加固流程。