网络访问控制

教学目标

  • 掌握网络访问控制的基本概念和作用
  • 熟悉 Linux 系统中的防火墙技术
  • 学会使用 iptables 配置网络访问规则
  • 学会使用 firewalld 管理网络访问控制
  • 了解 nftables 的基本用法
  • 掌握网络服务的访问控制配置
  • 学会网络访问控制的审计和监控
  • 能够根据实际需求制定合理的网络访问控制策略

主要知识点

1. 网络访问控制基础

  • 网络访问控制的概念:限制网络流量的传输和接收,防止未授权的访问和攻击
  • 网络访问控制的作用
    • 保护网络资源和数据安全
    • 防止网络攻击和入侵
    • 控制网络流量,优化网络性能
    • 实现网络隔离和分段
    • 满足合规性要求
  • 网络访问控制的层次
    • 网络层访问控制:基于 IP 地址和端口
    • 传输层访问控制:基于 TCP/UDP 协议
    • 应用层访问控制:基于应用协议和内容
  • 网络访问控制的实现方式
    • 防火墙:过滤网络流量
    • 访问控制列表(ACL):限制网络设备的访问
    • 网络服务配置:限制服务的访问范围
    • VPN 和隧道:加密和隔离网络通信

2. Linux 防火墙技术

  • Linux 防火墙的概念:运行在 Linux 系统上的网络安全设备,用于过滤进出网络的流量
  • Linux 防火墙的类型
    • 主机防火墙:保护单个主机
    • 网络防火墙:保护整个网络
  • Linux 防火墙的演进
    • ipchains:早期的 Linux 防火墙
    • iptables:广泛使用的 Linux 防火墙
    • firewalld:动态防火墙管理器
    • nftables:新一代 Linux 防火墙

3. iptables 防火墙

  • iptables 的概念:基于内核的防火墙工具,用于过滤和修改网络数据包

  • iptables 的组成

    • 表(tables):包含不同功能的规则集
    • 链(chains):数据包处理的路径
    • 规则(rules):定义数据包的处理方式
  • iptables 的表

    • filter 表:默认表,用于过滤数据包
    • nat 表:用于网络地址转换
    • mangle 表:用于修改数据包的字段
    • raw 表:用于处理未经过连接跟踪的数据包
    • security 表:用于强制访问控制
  • iptables 的链

    • INPUT:处理进入本机的数据包
    • OUTPUT:处理从本机发出的数据包
    • FORWARD:处理通过本机转发的数据包
    • PREROUTING:在路由前处理数据包(nat 表)
    • POSTROUTING:在路由后处理数据包(nat 表)
  • iptables 的基本语法

    # 查看 iptables 规则
    iptables -L -n -v
    
    # 添加规则
    iptables -A CHAIN -m MATCH -j TARGET
    
    # 删除规则
    iptables -D CHAIN RULE_NUM
    
    # 修改规则
    iptables -R CHAIN RULE_NUM -m MATCH -j TARGET
    
    # 插入规则
    iptables -I CHAIN RULE_NUM -m MATCH -j TARGET
    
    # 清空规则
    iptables -F
    
    # 保存规则
    iptables-save > /etc/iptables/rules.v4
    
    # 恢复规则
    iptables-restore < /etc/iptables/rules.v4
  • iptables 的匹配条件

    • 源 IP 地址:-s 192.168.1.0/24
    • 目标 IP 地址:-d 10.0.0.1
    • 协议:-p tcp-p udp
    • 源端口:--sport 22
    • 目标端口:--dport 80
    • 接口:-i eth0(入站)或 -o eth0(出站)
    • 状态:-m state --state NEW,ESTABLISHED
  • iptables 的目标

    • ACCEPT:允许数据包通过
    • DROP:丢弃数据包
    • REJECT:拒绝数据包并返回错误信息
    • LOG:记录数据包信息
    • MASQUERADE:网络地址转换
    • DNAT:目标地址转换
    • SNAT:源地址转换

4. firewalld 防火墙

  • firewalld 的概念:动态防火墙管理器,提供更灵活的防火墙配置

  • firewalld 的优势

    • 支持动态更新规则,无需重启服务
    • 支持区域(zones)概念,简化配置
    • 提供图形化和命令行界面
    • 支持服务和端口的管理
  • firewalld 的区域

    • trusted:允许所有流量
    • home:适合家庭网络,允许常用服务
    • internal:适合内部网络,限制更多
    • work:适合工作网络,允许特定服务
    • public:默认区域,适合公共网络,限制较严格
    • external:适合外部网络,启用 NAT
    • dmz:适合非军事区,限制较多
    • block:拒绝所有传入流量
    • drop:丢弃所有传入流量,不返回错误
  • firewalld 的基本命令

    # 查看 firewalld 状态
    systemctl status firewalld
    
    # 启动 firewalld
    systemctl start firewalld
    
    # 启用 firewalld 开机自启
    systemctl enable firewalld
    
    # 查看默认区域
    firewall-cmd --get-default-zone
    
    # 查看所有区域
    firewall-cmd --get-zones
    
    # 查看区域详情
    firewall-cmd --zone=public --list-all
    
    # 设置默认区域
    firewall-cmd --set-default-zone=public
    
    # 允许服务
    firewall-cmd --zone=public --add-service=http --permanent
    
    # 允许端口
    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    
    # 允许源 IP
    firewall-cmd --zone=public --add-source=192.168.1.0/24 --permanent
    
    # 重新加载配置
    firewall-cmd --reload

5. nftables 防火墙

  • nftables 的概念:新一代 Linux 防火墙框架,替代 iptables
  • nftables 的优势
    • 更简洁的语法
    • 更好的性能
    • 更灵活的规则集
    • 支持更复杂的匹配条件
  • nftables 的基本语法
    # 查看 nftables 规则
    nft list ruleset
    
    # 添加表
    nft add table inet filter
    
    # 添加链
    nft add chain inet filter input { type filter hook input priority 0 \; }
    
    # 添加规则
    nft add rule inet filter input tcp dport 22 accept
    
    # 删除规则
    nft delete rule inet filter input handle <handle>
    
    # 清空规则
    nft flush ruleset
    
    # 保存规则
    nft list ruleset > /etc/nftables.conf
    
    # 恢复规则
    nft -f /etc/nftables.conf

6. 网络服务访问控制

  • 网络服务访问控制的概念:限制网络服务的访问范围和权限

  • 网络服务访问控制的方法

    • 基于主机的访问控制:通过 hosts.allow 和 hosts.deny
    • 基于服务的访问控制:通过服务配置文件
    • 基于用户的访问控制:通过认证和授权
    • 基于网络的访问控制:通过防火墙和 ACL
  • 使用 hosts.allow 和 hosts.deny

    # 编辑 /etc/hosts.allow
    vi /etc/hosts.allow
    # 添加允许的主机
    sshd: 192.168.1.
    
    # 编辑 /etc/hosts.deny
    vi /etc/hosts.deny
    # 添加拒绝的主机
    sshd: ALL
  • SSH 服务访问控制

    # 编辑 SSH 配置文件
    vi /etc/ssh/sshd_config
    
    # 限制登录用户
    AllowUsers user1 user2
    
    # 限制登录组
    AllowGroups sshusers
    
    # 限制登录地址
    AllowTcpForwarding yes
    
    # 重启 SSH 服务
    systemctl restart sshd
  • Web 服务访问控制

    # 编辑 Apache 配置文件
    vi /etc/apache2/apache2.conf
    
    # 添加访问控制
    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require ip 192.168.1.
    </Directory>
    
    # 重启 Apache 服务
    systemctl restart apache2

7. 网络访问控制列表(ACL)

  • 网络 ACL 的概念:在网络设备上配置的访问控制规则,用于过滤网络流量

  • 网络 ACL 的类型

    • 标准 ACL:基于源 IP 地址
    • 扩展 ACL:基于源 IP、目标 IP、协议和端口
  • 网络 ACL 的应用

    • 应用在路由器接口
    • 应用在交换机端口
    • 应用在防火墙
  • Linux 系统中的网络 ACL

    • 使用 tc 命令配置流量控制 ACL
    • 使用 ip 命令配置路由 ACL
    • 使用 ebtables 配置以太网桥 ACL

8. 网络访问控制审计

  • 网络访问控制审计的概念:监控和记录网络访问控制的配置和效果

  • 网络访问控制审计的内容

    • 防火墙规则的变更
    • 网络服务的访问记录
    • 网络访问控制的效果评估
    • 网络安全事件的分析
  • 使用 auditd 审计防火墙规则变更

    # 添加审计规则
    auditctl -w /etc/iptables/ -p wa -k firewall_config
    auditctl -w /etc/firewalld/ -p wa -k firewalld_config
    
    # 查看审计日志
    ausearch -k firewall_config
    ausearch -k firewalld_config
  • 使用 rsyslog 记录网络访问

    # 编辑 rsyslog 配置
    vi /etc/rsyslog.conf
    
    # 添加网络访问日志配置
    :msg, contains, "DROP" /var/log/firewall.log
    & stop
    
    # 重启 rsyslog
    systemctl restart rsyslog

9. 网络访问控制最佳实践

  • 基本原则

    • 遵循最小权限原则:只允许必要的网络流量
    • 采用默认拒绝策略:默认拒绝所有流量,只允许特定流量
    • 分层防御:使用多层网络访问控制
    • 定期审查规则:确保规则的有效性和安全性
    • 记录和审计:监控网络访问控制的效果
  • 防火墙配置最佳实践

    • 配置默认拒绝策略
    • 只开放必要的端口和服务
    • 使用状态检测过滤
    • 限制源 IP 地址
    • 定期备份防火墙配置
  • 网络服务访问控制最佳实践

    • 使用 hosts.allow 和 hosts.deny 限制访问
    • 配置服务的访问控制列表
    • 使用 TLS/SSL 加密网络通信
    • 启用服务的日志记录
    • 定期更新服务软件
  • 网络分段最佳实践

    • 根据功能和安全级别划分网络段
    • 使用 VLAN 隔离不同网络
    • 在网络段之间使用防火墙
    • 限制网络段之间的通信

10. 网络访问控制工具

  • iptables:传统的 Linux 防火墙工具
  • firewalld:动态防火墙管理器
  • nftables:新一代 Linux 防火墙框架
  • tcpdump:网络数据包捕获工具
  • wireshark:图形化网络数据包分析工具
  • netstat:网络状态查看工具
  • ss:更快速的网络状态查看工具
  • nmap:网络扫描和安全评估工具
  • hping3:网络数据包生成和分析工具
  • traceroute:网络路由跟踪工具
  • mtr:网络诊断工具

实用案例分析

案例 1:使用 iptables 配置基本防火墙规则

场景:为 Linux 服务器配置基本的防火墙规则,保护服务器安全。

分析步骤

# 1. 查看当前 iptables 规则
iptables -L -n -v

# 2. 清空现有规则
iptables -F
iptables -X
iptables -Z

# 3. 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 4. 允许回环接口
iptables -A INPUT -i lo -j ACCEPT

# 5. 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 6. 允许 SSH 访问(22 端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 7. 允许 HTTP 访问(80 端口)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 8. 允许 HTTPS 访问(443 端口)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 9. 允许 ICMP 回显请求(ping)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# 10. 记录被拒绝的数据包
iptables -A INPUT -j LOG --log-prefix "iptables denied: " --log-level 4

# 11. 查看配置后的规则
iptables -L -n -v

# 12. 保存规则
iptables-save > /etc/iptables/rules.v4

# 13. 测试防火墙规则
# 测试 SSH 访问
ssh user@server_ip

# 测试 HTTP 访问
curl http://server_ip

# 测试 HTTPS 访问
curl https://server_ip

# 测试 ping
ping server_ip

# 测试被拒绝的端口
telnet server_ip 21  # 应该被拒绝

使用 iptables 配置基本防火墙规则总结

  • 默认策略:设置 INPUT 和 FORWARD 为 DROP,OUTPUT 为 ACCEPT
  • 必要服务:只允许 SSH、HTTP、HTTPS 等必要服务
  • 状态检测:允许已建立的连接,提高安全性
  • 日志记录:记录被拒绝的数据包,便于审计
  • 规则保存:保存规则到配置文件,确保重启后生效

案例 2:使用 firewalld 配置网络访问控制

场景:使用 firewalld 管理 Linux 服务器的网络访问控制,允许特定服务和端口。

分析步骤

# 1. 查看 firewalld 状态
systemctl status firewalld

# 2. 启动 firewalld(如果未启动)
systemctl start firewalld
systemctl enable firewalld

# 3. 查看默认区域
firewall-cmd --get-default-zone

# 4. 查看区域详情
firewall-cmd --zone=public --list-all

# 5. 添加 HTTP 服务到 public 区域
firewall-cmd --zone=public --add-service=http --permanent

# 6. 添加 HTTPS 服务到 public 区域
firewall-cmd --zone=public --add-service=https --permanent

# 7. 添加 SSH 服务到 public 区域
firewall-cmd --zone=public --add-service=ssh --permanent

# 8. 添加自定义端口(8080/tcp)到 public 区域
firewall-cmd --zone=public --add-port=8080/tcp --permanent

# 9. 允许特定 IP 地址访问
firewall-cmd --zone=public --add-source=192.168.1.0/24 --permanent

# 10. 重新加载配置
firewall-cmd --reload

# 11. 验证配置
firewall-cmd --zone=public --list-all

# 12. 测试服务访问
# 测试 SSH 访问
ssh user@server_ip

# 测试 HTTP 访问
curl http://server_ip

# 测试 HTTPS 访问
curl https://server_ip

# 测试自定义端口访问
curl http://server_ip:8080

# 测试特定 IP 访问
# 从 192.168.1.0/24 网段访问
curl http://server_ip

# 从其他网段访问(应该被拒绝)
# 在另一台机器上执行
curl http://server_ip

使用 firewalld 配置网络访问控制总结

  • 区域管理:使用不同区域管理不同网络环境的访问控制
  • 服务管理:直接添加服务,简化配置
  • 端口管理:支持添加自定义端口
  • 源 IP 限制:可以限制特定 IP 地址的访问
  • 动态更新:支持动态更新规则,无需重启服务

案例 3:使用 nftables 配置高级防火墙规则

场景:使用 nftables 配置高级防火墙规则,实现更灵活的网络访问控制。

分析步骤

# 1. 查看 nftables 状态
systemctl status nftables

# 2. 启动 nftables(如果未启动)
systemctl start nftables
systemctl enable nftables

# 3. 查看现有规则
nft list ruleset

# 4. 清空现有规则
nft flush ruleset

# 5. 创建表和链
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }
nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }

# 6. 允许回环接口
nft add rule inet filter input iifname lo accept

# 7. 允许已建立的连接
nft add rule inet filter input ct state established,related accept

# 8. 允许 SSH 访问
nft add rule inet filter input tcp dport 22 accept

# 9. 允许 HTTP 和 HTTPS 访问
nft add rule inet filter input tcp dport { 80, 443 } accept

# 10. 允许 ICMP 回显请求
nft add rule inet filter input icmp type echo-request accept

# 11. 记录被拒绝的数据包
nft add rule inet filter input log prefix "nftables denied: " level info

# 12. 保存规则
nft list ruleset > /etc/nftables.conf

# 13. 验证配置
nft list ruleset

# 14. 测试服务访问
# 测试 SSH 访问
ssh user@server_ip

# 测试 HTTP 访问
curl http://server_ip

# 测试 HTTPS 访问
curl https://server_ip

# 测试 ping
ping server_ip

# 测试被拒绝的端口
telnet server_ip 21  # 应该被拒绝

使用 nftables 配置高级防火墙规则总结

  • 简洁语法:使用更简洁的语法配置防火墙规则
  • 灵活匹配:支持更复杂的匹配条件,如端口范围
  • 性能优化:比 iptables 性能更好
  • 统一框架:整合了 iptables、ip6tables、arptables 等功能

案例 4:网络服务访问控制配置

场景:配置 SSH 和 Web 服务的访问控制,限制特定用户和 IP 地址的访问。

分析步骤

# 1. 配置 SSH 服务访问控制
# 编辑 SSH 配置文件
vi /etc/ssh/sshd_config

# 添加以下配置
# 限制登录用户
AllowUsers user1 user2

# 限制登录组
AllowGroups sshusers

# 限制登录地址
Match Address 192.168.1.*
    AllowUsers user1

# 重启 SSH 服务
systemctl restart sshd

# 2. 配置 hosts.allow 和 hosts.deny
# 编辑 /etc/hosts.allow
vi /etc/hosts.allow

# 添加允许的主机
sshd: 192.168.1., 10.0.0.
httpd: 192.168.1., 10.0.0.

# 编辑 /etc/hosts.deny
vi /etc/hosts.deny

# 添加拒绝的主机
sshd: ALL
httpd: ALL

# 3. 配置 Apache 服务访问控制
# 编辑 Apache 配置文件
vi /etc/apache2/apache2.conf

# 添加访问控制配置
<Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require ip 192.168.1. 10.0.0.
</Directory>

# 重启 Apache 服务
systemctl restart apache2

# 4. 测试 SSH 访问控制
# 从允许的 IP 地址访问
ssh user1@server_ip  # 应该成功

# 从禁止的 IP 地址访问
# 在另一台机器上执行
ssh user1@server_ip  # 应该失败

# 测试不允许的用户访问
ssh user3@server_ip  # 应该失败

# 5. 测试 Web 服务访问控制
# 从允许的 IP 地址访问
curl http://server_ip  # 应该成功

# 从禁止的 IP 地址访问
# 在另一台机器上执行
curl http://server_ip  # 应该失败

网络服务访问控制配置总结

  • SSH 访问控制:通过 sshd_config 限制登录用户、组和 IP 地址
  • 基于主机的访问控制:通过 hosts.allow 和 hosts.deny 限制访问
  • Web 服务访问控制:通过 Apache 配置文件限制访问 IP 地址
  • 多层控制:结合多种访问控制方法,提高安全性

课后练习

  1. 基本防火墙配置练习

    • 使用 iptables 配置基本防火墙规则
    • 使用 firewalld 配置网络访问控制
    • 使用 nftables 配置高级防火墙规则
    • 测试防火墙规则的有效性
  2. 网络服务访问控制练习

    • 配置 SSH 服务的访问控制
    • 配置 Web 服务的访问控制
    • 配置基于主机的访问控制
    • 测试网络服务的访问控制效果
  3. 网络访问控制审计练习

    • 配置 auditd 审计防火墙规则变更
    • 配置 rsyslog 记录网络访问
    • 分析网络访问日志
    • 评估网络访问控制的效果
  4. 网络访问控制策略练习

    • 设计企业网络的访问控制策略
    • 实现网络分段和隔离
    • 配置不同安全区域的访问控制
    • 测试网络访问控制策略的有效性
  5. 网络访问控制故障排查练习

    • 模拟网络访问控制故障
    • 分析网络访问控制问题
    • 解决网络访问控制故障
    • 优化网络访问控制配置

总结

本章节详细介绍了 Linux 系统中网络访问控制的原理和方法,包括:

  • 网络访问控制的基本概念和作用
  • Linux 系统中的防火墙技术(iptables、firewalld、nftables)
  • 网络服务的访问控制配置
  • 网络访问控制列表(ACL)的应用
  • 网络访问控制的审计和监控
  • 网络访问控制的最佳实践

通过学习本章节,您应该能够全面了解 Linux 网络访问控制的原理和方法,掌握各种网络访问控制技术和工具,制定合理的网络访问控制策略,确保网络和系统的安全。在实际应用中,建议根据网络环境的特点和安全需求,结合多种网络访问控制技术,制定多层次、细粒度的访问控制方案,同时定期进行网络访问控制的审计和监控,及时发现和修复安全问题,提高网络的安全性和可靠性。

扩展阅读

« 上一篇 进程访问控制 下一篇 » SELinux 基础