一、 核心安全理念
-
最小权限原则: 用户、进程、服务只拥有其完成任务所必需的最小权限。绝不使用 root 账户进行日常操作。
-
攻击面最小化: 关闭所有不必要的端口、服务、功能。系统暴露的越少,被攻击的可能性就越低。
-
防御纵深: 不依赖单一的安全措施,而是建立多层防御。即使一层被突破,还有其他层提供保护。
-
永不信任,始终验证: 对所有内部和外部的请求都进行身份验证和授权。
二、 物理安全与访问控制(第一道防线)
如果攻击者能物理接触服务器,那么绕过所有软件安全措施只是时间问题。
-
机房安全: 限制对服务器机房的物理访问(门禁、监控、日志)。
-
BIOS/UEFI 安全:
-
设置 BIOS/UEFI 密码,防止从外部设备(如U盘)启动。
-
禁用不必要的硬件接口(如USB端口)。
-
-
引导加载程序安全:
-
GRUB 加密: 为 GRUB 引导加载程序设置密码,防止用户进入单用户模式(无需密码即可获得 root 权限)或修改启动参数。
-
示例 : 在
/etc/grub.d/00_header
或/etc/grub.d/40_custom
中设置set superusers="root"
和password_pbkdf2 root ...
。
-
三、 系统级安全加固
1. 用户、权限与认证
-
sudo 机制:
-
日常使用普通用户账户,仅在需要时使用
sudo
执行特权命令。 -
通过
visudo
命令编辑/etc/sudoers
文件,精细控制 sudo 权限,而不是简单地将用户加入wheel
组。遵循最小权限原则。
-
-
强密码策略:
-
修改
/etc/login.defs
设置密码最长有效期、最短长度等。 -
使用
/etc/security/pwquality.conf
(或pam_pwquality
模块) 强制密码复杂性(最小长度、包含数字、大小写等)。
-
-
禁止 root 远程登录:
- 编辑
/etc/ssh/sshd_config
,设置PermitRootLogin no
。这是必须做的!
- 编辑
-
限制历史命令记录 : 设置
HISTFILESIZE
和HISTSIZE
环境变量,避免密码等敏感信息被记录在.bash_history
中。
2. 服务与端口管理(攻击面最小化)
-
服务管理:
-
停止并禁用 所有不需要的服务:
systemctl stop <service-name> && systemctl disable <service-name>
。 -
使用
ss -tulnp
或netstat -tulnp
查看所有监听端口,弄清楚每一个端口的作用。
-
-
防火墙(iptables/nftables/firewalld):
-
iptables/nftables: Linux 内核自带的 netfilter 防火墙,功能强大但配置复杂。
-
firewalld(推荐): 更现代、动态的管理工具,简化了 zone 和 service 的管理。
-
策略 : 默认拒绝所有入站流量 (
drop
),只放行明确允许的端口(如 22, 80, 443)。同样要限制不必要的出站流量。 -
示例 (firewalld):
bash
sudo firewall-cmd --permanent --add-service=ssh # 放行SSH sudo firewall-cmd --permanent --add-service=http # 放行HTTP sudo firewall-cmd --permanent --add-service=https # 放行HTTPS sudo firewall-cmd --permanent --remove-service=dhcpv6-client # 移除不需要的服务 sudo firewall-cmd --reload
-
3. 安全增强式 Linux (SELinux/AppArmor)
-
SELinux (RedHat/CentOS/Fedora): 一种强制访问控制(MAC)系统,为进程和文件提供细粒度的安全策略。即使攻击者拿到了 root 权限,其行为也会受到 SELinux 策略的限制。
-
模式 :
enforcing
(强制),permissive
(仅记录不拦截),disabled
(禁用)。 -
建议 : 在生产服务器上设置为
enforcing
模式。遇到权限问题时,首先查看/var/log/audit/audit.log
日志,使用audit2why
和audit2allow
进行分析和解决,而不是直接禁用。
-
-
AppArmor (Debian/Ubuntu/SUSE): 另一种 MAC 系统,通过路径限制来配置策略,相对 SELinux 更易用。
4. 系统更新与漏洞管理
-
定期更新 : 建立流程,定期使用
yum update
,apt update && apt upgrade
安装安全补丁和软件更新。 -
自动化更新 : 对于不重要的测试环境,可配置
yum-cron
或unattended-upgrades
进行自动安全更新。生产环境建议先测试再手动更新。 -
漏洞扫描 : 使用
lynis
(一款优秀的开源安全审计工具)定期对系统进行安全扫描,并根据建议进行加固。
四、 网络安全防护
1. SSH 安全加固
SSH 是进入服务器的门户,必须重点防护。
-
修改默认端口 : 编辑
/etc/ssh/sshd_config
,将Port 22
改为一个高端口(如 2345),减少自动化扫描攻击。 -
密钥认证 : 完全禁用密码登录,强制使用 SSH 密钥对进行认证。
-
PubkeyAuthentication yes
-
PasswordAuthentication no
-
PermitEmptyPasswords no
-
-
禁止其他用户 : 使用
AllowUsers
或AllowGroups
指令明确指定允许通过 SSH 登录的用户。 -
使用 Fail2ban : 一款非常有效的防暴力破解工具。它监控系统日志(如
/var/log/secure
),当发现多次失败登录尝试后,会自动调用防火墙封锁源 IP 一段时间。-
安装:
yum install fail2ban
或apt install fail2ban
-
配置: 通常复制
/etc/fail2ban/jail.conf
为jail.local
并进行修改。
-
2. 服务本身的安全
-
以非特权用户运行服务: 如 Nginx、MySQL 等,应创建专用低权限用户来运行,并在配置文件中指定。
-
加密通信 : 对所有网络服务使用 TLS/SSL 加密(如 HTTPS),避免明文传输敏感数据。使用 Let's Encrypt 获取免费证书。
-
安全响应头: 在 Web 服务器(Nginx/Apache)上配置安全头,如:
-
Strict-Transport-Security
(HSTS): 强制浏览器使用 HTTPS 连接。 -
X-Content-Type-Options
: 防止 MIME 类型混淆攻击。 -
X-Frame-Options
: 防止点击劫持。
-
五、 主动防御与监控
1. 入侵检测系统 (IDS)
-
文件完整性检查 (FIM):
- AIDE 或 Tripwire : 这些工具会为系统文件创建一个数据库(哈希值、权限等),定期扫描并与数据库对比,一旦发现文件被篡改(如木马、后门)就发出警报。这是检测入侵的关键手段。
-
网络入侵检测系统 (NIDS):
- Suricata 或 Zeek (Bro): 实时监控网络流量,基于规则库(如 Emerging Threats)检测恶意活动、扫描行为和漏洞利用尝试。
2. 日志管理与分析
"日志告诉你发生了什么",但海量的日志需要集中分析。
-
集中式日志 : 使用 Rsyslog 或 Syslog-ng 将所有服务器的日志发送到一个中央日志服务器,避免攻击者在本机擦除日志。
-
日志分析平台 : 使用 ELK Stack (Elasticsearch, Logstash, Kibana) 或 Graylog 对日志进行索引、搜索和可视化,以便快速发现安全事件(如多次登录失败、异常进程行为)。
3. 安全审计
-
auditd: Linux 内核的审计框架,用于记录系统调用和文件访问。
-
可以配置规则来监控重要文件的访问 (如
/etc/passwd
)、特权命令的执行 (如su
,sudo
)等。 -
日志存储在
/var/log/audit/audit.log
,需配合ausearch
和aureport
工具使用。
-
六、 数据安全与备份
这是最后一道防线,用于灾难恢复。
-
加密:
-
静态加密 : 使用 LUKS 对磁盘分区进行全盘加密,防止服务器丢失或硬盘被窃导致数据泄露。
-
传输加密 : 使用
scp
,rsync over ssh
,sftp
等工具安全地传输数据。
-
-
备份策略:
-
3-2-1 规则 : 至少 3 个副本,使用 2 种不同介质,其中 1 份放在异地。
-
定期测试恢复: 备份的有效性必须通过定期恢复演练来验证!否则备份可能毫无意义。
-
七、 安全实践 Checklist(自查清单)
-
PermitRootLogin no
-
使用 SSH 密钥登录,
PasswordAuthentication no
-
配置了防火墙,默认策略为
DROP
,只开放必要端口 -
systemctl list-unit-files | grep enabled
检查并禁用无用服务 -
SELinux/AppArmor 处于
enforcing
模式 -
已设置强密码策略和用户密码过期时间
-
已安装并配置
fail2ban
-
已配置
sudo
权限,遵循最小权限原则 -
已安装并初始化
aide
,建立了文件完整性数据库 -
已配置日志转发(Rsyslog -> 中央日志服务器)
-
建立了有效且经过测试的备份恢复流程
-
设置了定期的(如每周)安全更新检查机制
总结
Linux 安全防护是一个持续的过程,而非一劳永逸的任务。它要求管理员具备纵深防御的思维,从物理层到应用层,从预防到检测响应,建立多层、立体的防御体系。始终保持对系统的好奇心和警惕性,定期审查日志和更新策略,才能有效地保护你的服务器免受威胁。