自学内容网 自学内容网

Linux防火墙

iptables

iptables详解
  1. iptables 架构

    • iptables 使用规则链(rule chains)来过滤网络数据包。主要包括三个默认链:INPUT、OUTPUT 和 FORWARD。
    • 数据包经过这些链,根据规则进行匹配和处理。可以在每个链中添加自定义规则。
  2. iptables 规则

    • iptables 规则由匹配条件和动作组成。当数据包满足匹配条件时,将执行相应的动作。
    • 常见的匹配条件包括源 IP、目标 IP、协议、端口等;常见的动作包括 ACCEPT(接受)、DROP(丢弃)、REJECT(拒绝)等。
  • -A:在指定链的末尾添加规则。
  • -I:在指定链的开头或指定位置插入规则。
  • -D:删除指定链中的规则。
  • -R:替换指定链中的规则。
  • -F:清空指定链中的所有规则。
  • -P:设置指定链的默认策略。
  • -N:创建自定义链。
  • -s:指定源 IP 地址或 IP 段。
  • -d:指定目标 IP 地址或 IP 段。
  • -p:指定协议。
  • --sport:指定源端口。
  • --dport:指定目标端口。
  • -j:指定动作,如 ACCEPT、DROP、REJECT 等。
  • -m:指定匹配模块,如 state、tcp、udp 等。
  • -i:指定输入接口。
  • -o:指定输出接口。
  • -c:显示匹配的数据包数量和字节数。
  • -v:显示详细信息。
  • -n:显示数字格式的 IP 地址和端口号。
  • -L:列出规则。
  • -Z:清空数据包和字节计数。
  • -E:重命名自定义链。
  1. iptables 配置示例

    • 允许 SSH 访问:
      iptables -A INPUT -p tcp --dport 22 -j ACCEPT
      
    • 允许 HTTP 访问:
      iptables -A INPUT -p tcp --dport 80 -j ACCEPT
      
    • 拒绝 ICMP 数据包:
      iptables -A INPUT -p icmp -j DROP
      
  2. iptables 持久化

    • iptables 规则默认在系统重启后会被清空,为了保持规则持久化,可以使用工具如 iptables-saveiptables-restore 将规则保存到文件并在启动时加载。
  3. 注意事项

    • 在配置 iptables 规则时,务必小心,避免阻止合法流量导致网络服务不可用。
    • 建议在修改 iptables 规则前备份当前规则,以便出现问题时能够恢复。

iptables 是一个强大而灵活的工具,可以根据具体需求配置各种复杂的网络规则,保护系统免受网络攻击。深入了解 iptables 可以帮助管理员更好地管理和保护系统。

iptables的filter表

  1. 默认链

    • filter 表包含三个默认链:INPUT、OUTPUT 和 FORWARD。
      • INPUT 链用于处理进入系统的数据包。
      • OUTPUT 链用于处理从系统发出的数据包。
      • FORWARD 链用于处理通过系统转发的数据包。
  2. 规则顺序

    • iptables 规则按照添加顺序逐条匹配,一旦匹配成功,将执行相应的动作并停止后续规则的匹配。
    • 可以使用 -I 选项插入规则,使用 -A 选项添加规则。
  3. 常见规则

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT   #    允许特定端口的数据包通过
    iptables -A INPUT -s 192.168.1.100 -j DROP  # 拒绝特定 IP 地址的数据包
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许已建立的连接通过
    
  4. 默认策略

    • 可以使用 -P 选项设置默认策略,即当数据包不匹配任何规则时的动作。
      iptables -P INPUT DROP
      
  5. 连接状态

    • 可以使用 -m state 模块来匹配数据包的连接状态,如已建立的连接、相关连接等。
  6. 日志记录

    • 可以使用 --log-prefix 选项将匹配的数据包记录到系统日志中,方便跟踪和分析网络流量。
  7. 清空规则

    • 可以使用 -F 选项清空指定链的所有规则,使用 -X 选项删除自定义链。
  8. 持久化

    • 为了保持规则持久化,可以使用 iptables-save 将当前规则保存到文件,并在系统启动时使用 iptables-restore 加载规则。

iptables -t filter -vnL

[oracle@localhost ~]$ sudo iptables -t filter -vnL
[sudo] password for oracle:
Chain INPUT (policy ACCEPT 29929 packets, 2522K bytes)   # 处理进入系统的数据包。
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53   # 第一条规则允许来自 virbr0 接口的 UDP 数据包目标端口为 53 的通过。
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53   #第二条规则允许来自 virbr0 接口的 TCP 数据包目标端口为 53 的通过。
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67   #第三条规则允许来自 virbr0 接口的 UDP 数据包目标端口为 67 的通过。
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67   #第四条规则允许来自 virbr0 接口的 TCP 数据包目标端口为 67 的通过。

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)   # 于处理通过系统转发的数据包
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED   #第一条规则允许所有经过 virbr0 接口并与 192.168.122.0/24 子网相关或已建立的连接的数据包通过。
    0     0 ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0                                          #第二条规则允许所有从 virbr0 接口发送到 192.168.122.0/24 子网的数据包通过。
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0                                          #第三条规则允许所有在 virbr0 接口之间传输的数据包通过。
    0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable  #第四条规则拒绝所有经过 virbr0 接口并目标不可达的数据包,并发送 ICMP 不可达消息。
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable  #第五条规则拒绝所有从 virbr0 接口发送到目标不可达的数据包,并发送 ICMP 不可达消息。

Chain OUTPUT (policy ACCEPT 47720 packets, 5861K bytes)   # 处理从系统发出的数据包。
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68    # 第一条规则允许从系统发送到 virbr0 接口的 UDP 数据包目标端口为 68 的通过。
# 0.0.0.0/0:表示所有 IP 地址,即任意来源或目标 IP 地址。
# 0.0.0.0/0:表示所有端口,即任意来源或目标端口。

iptables的nat表

iptables 的 nat 表是用于网络地址转换(Network Address Translation,NAT)的表之一,用于修改数据包的源 IP 地址、目标 IP 地址或端口号,以实现网络地址的映射和转换。

  1. 功能

    • nat 表主要用于实现网络地址转换,包括源地址转换(SNAT)、目标地址转换(DNAT)和端口转换(Port Forwarding)等功能。
    • 通过 nat 表,可以将内部私有网络的 IP 地址映射为外部公共 IP 地址,实现内部主机与外部网络的通信。
    • nat 表包含三个主要链:PREROUTING、POSTROUTING 和 OUTPUT。
      • PREROUTING 链用于在数据包进入路由之前进行转换。
      • POSTROUTING 链用于在数据包离开路由之后进行转换。
      • OUTPUT 链用于对本地生成的数据包进行转换。
  2. 常见用法

    • 实现源地址转换(SNAT):
      iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
      
    • 实现目标地址转换(DNAT):
      iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
      
    • 实现端口转换(Port Forwarding):
      iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.200:80
      
  3. 其他选项

    • -j 选项用于指定转换动作,如 SNAT、DNAT、MASQUERADE 等。
    • --to-destination 选项用于指定转换后的目标地址和端口。
    • --to-source 选项用于指定转换后的源地址。
    • -s 选项用于指定源 IP 地址。
    • -d 选项用于指定目标 IP 地址。

nat 表在网络环境中起着重要作用,能够实现内部网络与外部网络之间的通信和地址转换。

eg:
sudo iptables -t nat -A PREROUTING -i eth0 -d 114.115.111.111 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1
  • -t nat:指定操作的表为 nat 表,即网络地址转换表。
  • -A PREROUTING:向 PREROUTING 链中添加一条规则,该链用于在数据包进入路由之前进行转换。
  • -i eth0:指定数据包进入的网络接口为 eth0
  • -d 114.115.111.111:指定目标 IP 地址为 114.115.111.111,即匹配目标 IP 地址为该地址的数据包。
  • -p tcp:指定协议为 TCP。
  • --dport 80:指定目标端口为 80,即匹配目标端口为 80 的 TCP 数据包。
  • -j DNAT:指定动作为目标地址转换(DNAT)。
  • --to-destination 10.0.0.1:将匹配的数据包的目标地址转换为 10.0.0.1,即将数据包转发到内部主机 10.0.0.1 上。

综合起来,这条规则的作用是将来自 eth0 接口、目标 IP 地址为 114.115.111.111、目标端口为 80 的 TCP 数据包进行目标地址转换,将其转发到内部主机 10.0.0.1 上处理。这样可以实现端口转发,将外部访问 114.115.111.111:80 的请求转发到内部主机 10.0.0.1:80 上。

iptables-save

要将修改后的 iptables 规则写入配置文件,可以使用 iptables-save 命令将当前的规则保存到文件中。

iptables-save在centos7中没安装
sudo yum install iptables-services

  1. 保存当前 iptables 规则到文件
    运行以下命令将当前的 iptables 规则保存到文件中(例如 iptables_rules.conf):

    iptables-save > iptables_rules.conf
    
  2. 查看保存的规则文件
    您可以使用文本编辑器打开保存的规则文件,查看其中包含的 iptables 规则内容。

  3. 恢复保存的规则
    如果需要恢复保存的规则,可以使用 iptables-restore 命令加载保存的规则文件:

    iptables-restore < iptables_rules.conf
    

原文地址:https://blog.csdn.net/yuanymnl/article/details/143834960

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!