学习目标
- 理解本节涉及的核心主题:Linux 安全管理、日志审计与入侵检测、配置和管理安全日志、使用
fail2ban防止暴力破解。 - 掌握重点命令或工具:
fail2ban。 - 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:Linux 安全管理、日志审计与入侵检测、配置和管理安全日志、使用
fail2ban防止暴力破解、SSH 配置与加固、配置密钥认证 - 重点命令:
fail2ban - 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
Linux 安全管理
日志审计与入侵检测
日志审计与入侵检测是系统安全管理的重要组成部分,通过记录和分析系统日志,可以及时发现并应对潜在的安全威胁和入侵行为。
配置和管理安全日志
安全日志记录了系统的关键事件和活动,是审计和安全监控的基础。合理配置日志记录级别和权限,确保日志的完整性和可用性。
设置日志记录级别
日志记录级别决定了系统记录哪些类型的事件和信息。不同的日志记录级别适用于不同的安全需求。
步骤:
- 编辑
rsyslog配置文件sudo nano /etc/rsyslog.conf - 配置不同级别的日志记录
示例:# 记录所有紧急级别及以上的日志到 /var/log/critical.log *.emerg /var/log/critical.log # 记录警告级别及以上的日志到 /var/log/warnings.log *.warn /var/log/warnings.log # 记录所有信息级别及以上的日志到 /var/log/syslog *.* /var/log/syslog - 重启
rsyslog服务sudo systemctl restart rsyslog
常用日志级别:
emerg:紧急,系统不可用。alert:需要立即采取措施。crit:严重错误。err:错误。warning:警告。notice:正常但重要的信息。info:信息。debug:调试信息。
管理日志文件权限
确保日志文件的所有者和权限设置正确,防止未授权的访问和篡改。
设置日志文件的所有者与权限
sudo chown root:adm /var/log/syslog
sudo chmod 640 /var/log/syslog
说明:
root:adm:设置所有者为root,所属组为adm(通常用于管理日志的用户组)。640:所有者具有读写权限,组用户具有读取权限,其他用户无权限。
使用 chown 与 chmod 修改权限
sudo chgrp adm /var/log/auth.log
sudo chmod 640 /var/log/auth.log
最佳实践:
- 仅授权的用户和组能够读取和管理日志文件。
- 定期审查日志文件的权限,确保其符合安全策略。
使用 fail2ban 防止暴力破解
fail2ban 是一个入侵防御软件,监控日志文件中的可疑活动(如多次失败的登录尝试),并自动采取措施(如封禁IP地址),防止暴力破解攻击。
安装与启用 fail2ban
在Debian/Ubuntu上安装 fail2ban
sudo apt update
sudo apt install fail2ban
在CentOS/RHEL上安装 fail2ban
sudo yum install epel-release
sudo yum install fail2ban
启用并启动 fail2ban 服务
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
配置监控规则
fail2ban 使用「监狱」(jails)来定义监控规则,每个监狱对应一个服务(如SSH、HTTP)。
步骤:
-
复制默认配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local -
编辑
jail.local文件sudo nano /etc/fail2ban/jail.local -
配置监控服务(如
sshd)
示例:配置sshd监狱[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 600 -
配置防护参数
maxretry:允许的最大失败尝试次数。bantime:封禁时间(秒)。 示例:
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 600 -
重启
fail2ban服务应用更改sudo systemctl restart fail2ban
应用场景与案例
防止 SSH 暴力破解
通过配置 fail2ban 监控 sshd 日志,可以自动封禁多次失败的SSH登录尝试,防止暴力破解攻击。
示例:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 600
防止 HTTP 暴力破解
同样,可以为Web服务器(如Apache、Nginx)配置 fail2ban 监控特定的日志文件,防止HTTP暴力破解攻击。
示例:配置 nginx 监狱
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 600
步骤:
-
创建
nginx-http-auth过滤器sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf内容:
[Definition] failregex = no user/password was provided for basic authentication.*client: <HOST> ignoreregex = -
编辑
jail.local文件sudo nano /etc/fail2ban/jail.local添加以下内容:
[nginx-http-auth] enabled = true port = http,https filter = nginx-http-auth logpath = /var/log/nginx/error.log maxretry = 3 bantime = 600 -
重启
fail2ban服务sudo systemctl restart fail2ban
应用场景:
- 增强远程访问安全:通过自动封禁可疑IP地址,减少暴力破解攻击的成功率。
- 保护Web应用:防止针对Web应用的暴力登录尝试,确保应用程序的安全性。
SSH 配置与加固
SSH(Secure Shell)是Linux系统中常用的远程访问协议,通过合理配置和加固,可以显著提升系统的远程访问安全性,防止未授权的访问和潜在的安全威胁。
配置密钥认证
密钥认证提供了一种比密码更安全的SSH登录方式,防止密码泄露和暴力破解攻击。
生成 SSH 密钥对
使用 ssh-keygen 命令生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
说明:
-t rsa:指定密钥类型为RSA。-b 4096:生成4096位密钥。-C "comment":为密钥添加注释(通常为电子邮件)。
示例输出:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/alice/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/alice/.ssh/id_rsa
Your public key has been saved in /home/alice/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
| |
| . |
| o + |
| o + + |
| . + = S |
| + + * |
| . = = . |
| . + . |
| E |
+-----------------+
配置服务器端与客户端
将公钥复制到服务器
使用 ssh-copy-id 命令将公钥复制到远程服务器的 authorized_keys 文件中:
ssh-copy-id username@remote_host
示例:
ssh-copy-id alice@192.168.1.100
手动复制公钥
如果 ssh-copy-id 不可用,可以手动复制公钥:
- 复制公钥内容
cat ~/.ssh/id_rsa.pub - 在服务器上创建
~/.ssh目录并设置权限ssh username@remote_host mkdir -p ~/.ssh chmod 700 ~/.ssh - 将公钥添加到
authorized_keys文件echo "your_public_key_contents" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
配置 ~/.ssh/authorized_keys 文件权限
确保 authorized_keys 文件和 .ssh 目录的权限正确,以防止未授权的访问。
设置权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
示例:
ssh username@remote_host
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
测试密钥认证
使用私钥进行登录
ssh username@remote_host
验证无密码登录
如果配置正确,应该无需输入密码即可登录。
示例:
ssh alice@192.168.1.100
输出:
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-104-generic x86_64)
...
alice@remote_host:~$
禁用密码登录,配置防火墙
通过禁用密码登录,只允许使用密钥认证,可以显著提升SSH登录的安全性,防止密码暴力破解攻击。
编辑 SSH 配置文件 /etc/ssh/sshd_config
步骤:
-
打开配置文件
sudo nano /etc/ssh/sshd_config -
禁用密码认证
找到并修改以下行:PasswordAuthentication no -
禁用 Root 用户登录
找到并修改以下行:PermitRootLogin no -
禁用不必要的SSH选项
禁用 X11 转发X11Forwarding no限制特定用户登录
AllowUsers alice bob
保存并关闭文件。
配置防火墙规则允许 SSH 连接
确保防火墙允许SSH端口(默认22)的流量,以便远程访问。
使用 ufw 配置
sudo ufw allow ssh
使用 firewalld 配置
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
使用 iptables 配置
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
保存 iptables 规则
sudo iptables-save | sudo tee /etc/iptables/rules.v4
重启 SSH 服务应用更改
命令:
sudo systemctl restart sshd
验证配置:
重新连接SSH,确保只允许密钥认证:
ssh username@remote_host
禁用不必要的 SSH 选项
禁用 X11 转发
在 /etc/ssh/sshd_config 文件中设置:
X11Forwarding no
限制用户登录
在 /etc/ssh/sshd_config 文件中设置:
AllowUsers alice bob
其他安全选项:
- 更改默认端口
步骤:-
编辑配置文件
sudo nano /etc/ssh/sshd_config -
更改端口号
Port 2222 -
更新防火墙规则
使用ufw:sudo ufw allow 2222/tcp sudo ufw delete allow ssh使用
firewalld:sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --permanent --remove-service=ssh sudo firewall-cmd --reload -
重启 SSH 服务
sudo systemctl restart sshd
-
- 启用 TCP Wrappers
步骤:-
编辑
/etc/hosts.allow文件sudo nano /etc/hosts.allow添加规则:
sshd: 192.168.1.0/24 -
编辑
/etc/hosts.deny文件sudo nano /etc/hosts.deny添加规则:
sshd: ALL
-
应用场景:
- 高安全性服务器:通过仅允许特定用户和IP地址访问SSH,增强服务器安全性。
- 分布式系统:在多个服务器间实施严格的SSH访问控制,确保只有授权用户能够访问关键节点。
总结
Linux安全管理是确保系统稳定性和数据安全的关键环节。通过合理配置用户认证与授权、防火墙、SELinux/AppArmor、安全日志审计以及SSH加固,系统管理员可以构建一个安全、可靠的Linux环境。以下是基于具体实例的应用总结:
-
配置
sudo权限
将用户alice添加到sudo组:sudo usermod -aG sudo alice sudo visudo # 添加以下行以赋予sudo组成员权限 %sudo ALL=(ALL:ALL) ALL -
创建并管理用户组
创建developers组并将用户bob添加到该组:sudo groupadd developers sudo usermod -aG developers bob groups bob # 输出:bob : bob developers sudo -
设置文件组权限
修改/var/www/html/index.html文件的所属组为developers并设置组权限:sudo chgrp developers /var/www/html/index.html sudo chmod 750 /var/www/html/index.html -
使用 ACL 赋予用户特定权限
为用户charlie赋予/var/www/html/index.html的读取和写入权限:sudo setfacl -m u:charlie:rw /var/www/html/index.html getfacl /var/www/html/index.html -
配置
iptables允许SSH和HTTP流量sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -j DROP sudo iptables-save | sudo tee /etc/iptables/rules.v4 -
使用
ufw设置防火墙规则sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow http sudo ufw allow https sudo ufw enable -
启用并配置 SELinux
查看SELinux状态:sestatus将SELinux模式设置为
enforcing:sudo setenforce 1 sudo nano /etc/selinux/config # 设置 SELINUX=enforcing sudo systemctl restart sshd -
配置 AppArmor 保护Nginx
创建/etc/apparmor.d/usr.sbin.nginx文件:/usr/sbin/nginx { #include <abstractions/base> #include <abstractions/nginx> /var/www/** r, /var/log/nginx/** rw, /etc/nginx/** r, /usr/share/nginx/html/** r, /usr/sbin/nginx mr, }加载并启用配置:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx sudo systemctl reload apparmor -
配置并管理
fail2ban防止暴力破解
安装并启用fail2ban:sudo apt install fail2ban sudo systemctl enable fail2ban sudo systemctl start fail2ban配置
sshd监狱:[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 600重启
fail2ban服务:sudo systemctl restart fail2ban -
配置SSH密钥认证并禁用密码登录
生成密钥对并复制公钥到服务器:ssh-keygen -t rsa -b 4096 -C "alice@example.com" ssh-copy-id alice@192.168.1.100编辑
/etc/ssh/sshd_config文件:PasswordAuthentication no PermitRootLogin no X11Forwarding no AllowUsers alice bob重启SSH服务:
sudo systemctl restart sshd
本节总结
- 本节主要围绕 Linux 安全管理、日志审计与入侵检测、配置和管理安全日志、使用
fail2ban防止暴力破解、SSH 配置与加固 展开。 - 需要重点掌握的命令或工具包括:
fail2ban。 - 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
- 可优先复习这些高频命令:
fail2ban。