Bootstrap

iptables防火墙配置及Netfilter框架

iptables防火墙配置

iptables 是 Linux 系统中的一个强大且灵活的命令行工具,用于配置和管理网络防火墙。通过 iptables,用户可以定义复杂的规则来控制进出系统的数据包流量。以下是 iptables 的基本配置和使用指南。

一、iptables 基本概念

  1. 表(Tables)

    • 描述iptables 使用多个表来分类不同类型的规则,每个表包含多个链(Chains)。
    • 主要表
      • filter:默认表,用于过滤数据包。
      • nat:用于网络地址转换(NAT)。
      • mangle:用于修改数据包。
      • raw:用于配置数据包的状态跟踪。
  2. 链(Chains)

    • 描述:链是规则的集合,每个链包含一系列的规则。
    • 主要链
      • INPUT:处理所有进入本地系统的数据包。
      • OUTPUT:处理所有本地系统发出的数据包。
      • FORWARD:处理所有转发的数据包。
      • PREROUTING:在数据包路由前处理。
      • POSTROUTING:在数据包路由后处理。
  3. 规则(Rules)

    • 描述:每条规则定义了条件和相应的动作,当数据包匹配条件时,执行相应的动作。
    • 主要动作
      • ACCEPT:接受数据包。
      • DROP:丢弃数据包。
      • REJECT:拒绝数据包并发送响应信息。
      • LOG:记录数据包日志。

二、基本命令

  1. 查看当前规则

    sudo iptables -L
    sudo iptables -L -t nat
    
  2. 添加规则

    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
  3. 删除规则

    sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT
    
  4. 插入规则

    sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
    
  5. 保存规则

    sudo iptables-save > /etc/iptables/rules.v4
    
  6. 加载规则

    sudo iptables-restore < /etc/iptables/rules.v4
    

三、基本配置示例

  1. 允许特定端口(如SSH)的入站流量

    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
  2. 允许本地回环接口的流量

    sudo iptables -A INPUT -i lo -j ACCEPT
    sudo iptables -A OUTPUT -o lo -j ACCEPT
    
  3. 允许已建立的连接和相关流量

    sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    
  4. 拒绝所有其他入站流量

    sudo iptables -A INPUT -j DROP
    
  5. 允许HTTP和HTTPS流量

    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    
  6. 配置NAT规则进行端口转发

    sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
    sudo iptables -t nat -A POSTROUTING -j MASQUERADE
    

四、高级配置示例

  1. 限制SSH登录尝试(防止暴力破解)

    sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
    sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP
    
  2. 记录丢弃的数据包

    sudo iptables -A INPUT -j LOG --log-prefix "iptables: "
    sudo iptables -A INPUT -j DROP
    
  3. 允许特定IP地址的访问

    sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
    
  4. 限制每秒钟的ICMP请求数量

    sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
    sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
    

五、持久化配置

为了在系统重启后保留 iptables 规则,需要将其持久化。以下是几种常见的方法:

  1. 使用iptables-save和iptables-restore

    sudo iptables-save > /etc/iptables/rules.v4
    sudo iptables-restore < /etc/iptables/rules.v4
    
  2. 使用iptables-persistent(Debian/Ubuntu)

    sudo apt-get install iptables-persistent
    sudo netfilter-persistent save
    sudo netfilter-persistent reload
    
  3. 使用systemd服务(CentOS/RHEL)

    sudo systemctl enable iptables
    sudo service iptables save
    

六、管理工具

  1. ufw(Uncomplicated Firewall)

    • 描述ufw 是一个简化 iptables 配置的工具,适用于大多数用户。
    • 基本用法
      sudo ufw enable
      sudo ufw allow ssh
      sudo ufw deny 22/tcp
      sudo ufw status
      
  2. firewalld

    • 描述firewalld 提供动态管理 iptables 规则的工具和服务。
    • 基本用法
      sudo systemctl start firewalld
      sudo firewall-cmd --add-service=http --permanent
      sudo firewall-cmd --reload
      sudo firewall-cmd --list-all
      

总结

iptables 是一个功能强大且灵活的防火墙工具,通过定义和管理规则,可以有效地控制和保护网络流量。了解并掌握 iptables 的基本概念、命令和配置示例,可以帮助管理员在多种网络环境下构建安全的防火墙策略。对于更简化的管理,可以考虑使用 ufwfirewalld 等工具。

Netfilter框架

Netfilter是Linux内核中的一个框架,用于实现网络数据包过滤、网络地址转换(NAT)和数据包的修改。它为防火墙、NAT和其他网络数据包处理提供了基础设施。Netfilter与iptables一起工作,通过定义规则来控制网络流量的行为。

一、Netfilter框架的组成

  1. 钩子点(Hooks)

    • 描述:Netfilter框架在数据包处理路径上提供了五个钩子点,允许模块在这些点上注册回调函数来处理数据包。
    • 主要钩子点
      • NF_INET_PRE_ROUTING:数据包进入网络栈时最先到达的钩子点,用于预处理。
      • NF_INET_LOCAL_IN:数据包在路由决策之后,确定是本地接收的数据包。
      • NF_INET_FORWARD:数据包被转发之前。
      • NF_INET_LOCAL_OUT:数据包从本地主机发出之前。
      • NF_INET_POST_ROUTING:数据包离开网络栈之前,用于后期处理。
  2. 表(Tables)

    • 描述:Netfilter使用表来组织规则集,每个表用于不同的网络操作。
    • 主要表
      • filter:用于过滤数据包,包含常用的INPUTOUTPUTFORWARD链。
      • nat:用于网络地址转换,包含PREROUTINGOUTPUTPOSTROUTING链。
      • mangle:用于修改数据包,包含所有五个链。
      • raw:用于数据包处理的前期阶段,主要用于状态跟踪。
  3. 链(Chains)

    • 描述:链是按顺序排列的规则集,用于决定如何处理数据包。每个表包含多个链,每个链可以包含多个规则。
    • 主要链
      • INPUT:处理进入本地系统的数据包。
      • OUTPUT:处理本地系统发出的数据包。
      • FORWARD:处理通过本地系统转发的数据包。
      • PREROUTING:在数据包路由决策之前处理。
      • POSTROUTING:在数据包离开网络栈之前处理。
  4. 规则(Rules)

    • 描述:规则定义了特定条件和相应的操作。当数据包匹配规则的条件时,执行相应的操作。
    • 主要操作
      • ACCEPT:接受数据包。
      • DROP:丢弃数据包。
      • REJECT:拒绝数据包并发送ICMP响应。
      • SNAT:源地址转换。
      • DNAT:目的地址转换。
      • LOG:记录数据包日志。

二、Netfilter工作原理

  1. 数据包流动

    • 当数据包到达网络接口时,它会依次经过Netfilter的五个钩子点。这些钩子点分别处理数据包的不同阶段,并根据定义的规则决定如何处理数据包。
  2. 钩子函数

    • 在每个钩子点,Netfilter会调用已注册的钩子函数。钩子函数可以对数据包进行过滤、修改、转发或记录日志。
  3. 规则匹配

    • 每个钩子点上的钩子函数会依次检查数据包是否匹配某个规则。如果匹配,执行相应的操作,并可能终止进一步的规则检查。
  4. 状态跟踪

    • Netfilter框架还提供了状态跟踪功能,能够根据连接状态(如新建、已建立、相关等)来过滤数据包,提高防火墙规则的灵活性和准确性。

三、Netfilter与iptables的关系

  • Netfilter:提供了数据包过滤、修改和NAT的核心框架,以及钩子点、表、链和规则的基础设施。
  • iptables:用户空间工具,提供了配置和管理Netfilter规则的命令行接口。管理员通过iptables定义规则,并将这些规则传递给Netfilter框架。

四、Netfilter框架的使用示例

  1. 允许特定端口(如SSH)的入站流量

    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
  2. 配置NAT规则进行端口转发

    sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
    sudo iptables -t nat -A POSTROUTING -j MASQUERADE
    
  3. 记录丢弃的数据包

    sudo iptables -A INPUT -j LOG --log-prefix "iptables: "
    sudo iptables -A INPUT -j DROP
    
  4. 限制每秒钟的ICMP请求数量

    sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
    sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
    

五、Netfilter模块

Netfilter框架支持各种模块,这些模块扩展了Netfilter的功能,使其能够处理更复杂的网络操作。例如:

  1. conntrack模块

    • 描述:用于状态跟踪,能够跟踪每个连接的状态(如新建、已建立、相关)。
    • 用法
      sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
      
  2. LOG模块

    • 描述:用于记录数据包日志,帮助管理员进行网络诊断和分析。
    • 用法
      sudo iptables -A INPUT -j LOG --log-prefix "iptables: "
      
  3. NAT模块

    • 描述:用于网络地址转换,支持SNAT、DNAT和MASQUERADE操作。
    • 用法
      sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
      

六、Netfilter框架的高级特性

  1. 连接跟踪

    • 描述:Netfilter可以跟踪网络连接的状态,允许基于连接状态的过滤和处理。
    • 示例
      sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
      
  2. 状态同步

    • 描述:在多台防火墙设备上同步连接状态,确保高可用性和负载均衡。
    • 工具:使用conntrackd工具进行状态同步。
  3. 扩展模块

    • 描述:Netfilter支持各种扩展模块,增强数据包处理能力,如IPset、u32等。
    • 示例:使用IPset模块创建和管理IP地址集合,提高规则匹配效率。

总结

Netfilter框架是Linux内核中强大且灵活的网络数据包处理框架,通过钩子点、表、链和规则的组合,实现复杂的网络过滤、地址转换和数据包修改功能。用户可以通过iptables命令行工具配置和管理Netfilter规则,从而构建灵活、高效的网络防火墙策略。了解和掌握Netfilter框架的工作原理和使用方法,可以帮助网络管理员有效地保护和管理网络安全。

;