linux 安全与防护,全方向讲解
一、 核心安全理念
最小权限原则: 用户、进程、服务只拥有其完成任务所必需的最小权限。绝不使用 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 安全防护是一个持续的过程,而非一劳永逸的任务。它要求管理员具备纵深防御的思维,从物理层到应用层,从预防到检测响应,建立多层、立体的防御体系。始终保持对系统的好奇心和警惕性,定期审查日志和更新策略,才能有效地保护你的服务器免受威胁。