iptables 详解

一,iptables概念

iptables 是一个在 Linux 系统中用于配置网络包过滤规则的工具。它是基于内核的 Netfilter 框架的用户空间命令行程序,用于管理网络流量的转发和过滤。

以下是一些与 iptables 相关的概念:

1.表(Tables): iptables 中的规则被组织在不同的表中,每个表都有特定的目的。常见的表包括:

  • filter: 默认表,用于过滤网络包。
  • nat: 用于网络地址转换(Network Address Translation)规则。
  • mangle: 用于修改网络包的特定字段。
  • raw: 在网络包进入连接跟踪系统之前执行原始数据包处理规则。

2.链(Chains): 每个表由多个链组成,链是规则的集合,用于根据特定条件来处理网络包。常见的链包括:

  •  INPUT: 处理接收到的数据包。

  • OUTPUT: 处理要发送的数据包。

  • FORWARD: 处理通过系统进行转发的数据包。 

3.规则(Rules): 规则是定义在链中的指令,用于匹配和处理网络包。每条规则包含匹配条件和相应的操作。常见的操作包括:

  • ACCEPT: 允许通过规则的数据包。

  • DROP: 丢弃规则匹配的数据包。

  • REJECT: 拒绝规则匹配的数据包并发送拒绝通知。

  • SNAT: 在网络地址转换中修改源 IP 地址。

  • DNAT: 在网络地址转换中修改目标 IP 地址。

4.匹配条件(Match Conditions): 规则使用匹配条件来指定要匹配的网络包的特性。常见的匹配条件包括:

  • 源 IP 地址和目标 IP 地址。

  • TCP/UDP 端口号。

  • ICMP 类型和代码。

  • 协议类型(如 TCP、UDP、ICMP)等。

通过定义适当的表、链和规则,可以使用 iptables 对网络流量进行过滤、重定向、地址转换等操作,以增加系统的安全性和网络管理的灵活性。要正确配置 iptables,需要了解各个概念之间的关系以及相应的命令和选项。

二,命令详解

iptables 命令用于在 Linux 中配置网络包过滤规则,其基本语法如下:

iptables [OPTIONS] COMMAND [ARGUMENTS]

其中,OPTIONS 是可选参数,COMMAND 是要执行的命令,ARGUMENTS 是命令的参数。

以下是一些常见的 iptables 命令和选项:

1.显示策略和规则:

  •  iptables -L: 显示所有表和链的当前策略和规则。
  •  iptables -t 表 -A 指定指定的表。

  • iptables -L -v: 显示所有表和链的详细信息,包括流量统计信息。
  • iptables -L <chain-name>: 显示特定链的当前策略和规则。
  • iptables -S: 以脚本形式显示所有表和链的规则。 

2.添加、删除和修改规则:

  •  iptables -A <chain> [OPTIONS]: 在指定的链末尾添加一条规则。

  • iptables -I <chain> [OPTIONS]: 在指定的链开头插入一条规则。

  • iptables -D <chain> [OPTIONS]: 从指定的链中删除匹配的规则。

  • iptables -R <chain> <rule-number> [OPTIONS]: 用新规则替换指定编号的规则。

  • iptables -E <chain> <old-rule> <new-rule>:替换匹配的规则为新规则。

  • iptables -F <chain>: 清除指定链上的所有规则。

  • iptables -Z <chain>: 将指定链上的所有计数器归零。 

3.选择匹配条件:

  • -p <protocol>: 指定要匹配的协议类型,如 TCP、UDP、ICMP 等。

  • -s <source>: 指定要匹配的源 IP 地址或地址范围。

  • -d <destination>: 指定要匹配的目标 IP 地址或地址范围。

  • -i <input-interface>: 指定要匹配的输入网络接口。

  • -o <output-interface>: 指定要匹配的输出网络接口。

  • -m <module>: 指定要使用的扩展模块。

  • -f <fragment>: 指定是否匹配分段的数据包。

4.设置动作:

  • -j <target>: 指定要执行的目标操作,如 ACCEPT、DROP、REJECT、SNAT、DNAT 等。

  • --to-destination <address[:port]>: 在网络地址转换中修改目标 IP 地址和端口号。

  • --to-source <address[:port]>: 在网络地址转换中修改源 IP 地址和端口号。

  • --uid-owner <username>:<groupname>: 根据用户 ID 或组 ID 匹配数据包。

5.其他选项:

  • -n: 不转换数字为名称或域名。

  • -v: 显示详细的信息,包括流量统计信息。

通过组合使用上述命令和选项,可以创建复杂的过滤规则,以保护系统的安全性和网络管理的灵活性。但是,要注意 iptables 的配置对网络性能的影响和对系统的可能影响,特别是对于具有高网络流量和复杂网络拓扑结构的系统。

三,命令示例

以下是一些 iptables 命令示例,展示了如何使用不同的选项和参数来配置规则:

  1. 显示当前的规则和策略:

    iptables -L                        # 显示所有表和链的规则和策略
    iptables -L -v                     # 显示详细信息,包括流量统计
    iptables -L INPUT                  # 显示 INPUT 链的规则和策略
    iptables -S                        # 以脚本形式显示所有规则
  2. 添加、删除和修改规则:

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT    # 在 INPUT 链末尾添加允许 SSH 连接的规则
    iptables -A INPUT -s 192.168.0.0/24 -j DROP     # 在 INPUT 链末尾添加拒绝指定源 IP 的规则
    iptables -D INPUT 2                              # 删除 INPUT 链中编号为 2 的规则
    iptables -R INPUT 3 -s 10.0.0.0/8 -j DROP        # 替换 INPUT 链中编号为 3 的规则为拒绝指定源 IP 的规则
    iptables -E INPUT -s 192.168.0.0/24 -j DROP      # 替换 INPUT 链中匹配的规则为新的拒绝规则
    iptables -F INPUT                                # 清空 INPUT 链上的所有规则
    iptables -Z INPUT                                # 将 INPUT 链上的计数器归零
  3. 选择匹配条件:

    iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT     # 添加允许 HTTP 连接的规则
    iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 22 -j ACCEPT       # 添加在特定接口间转发 SSH 连接的规则
    iptables -A OUTPUT -s 192.168.0.0/16 -d 10.0.0.0/8 -j DROP            # 添加拒绝指定源 IP 和目标 IP 的规则
    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT          # 允许 ICMP Echo 请求
  4. 设置动作:

    iptables -A INPUT -p tcp --dport 22 -j REJECT --reject-with tcp-reset          # 拒绝 SSH 连接并发送 TCP RST
    iptables -A FORWARD -s 192.168.0.0/24 -j SNAT --to-source 203.0.113.10:8000   # 对指定源 IP 地址进行源 NAT
    iptables -A FORWARD -d 203.0.113.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.10:8080  # 对指定目标 IP 地址进行目标 NAT

这些示例仅提供了一些基本的 iptables 命令用法,实际使用时可以根据具体需求进行灵活配置。请根据自己的网络环境和安全需求,谨慎添加、删除或修改规则。

四,规则持久化

要使 iptables 规则持久化,以便在系统重新启动后仍然有效,可以使用以下方法之一:

1,使用 iptables-saveiptables-restore 命令:

使用

iptables-save 

命令将当前的规则保存到文件中:

iptables-save > /etc/iptables/rules.v4   # 保存 IPv4 规则
ip6tables-save > /etc/iptables/rules.v6  # 保存 IPv6 规则

创建一个系统服务或脚本,在系统启动时使用

iptables-restore

命令加载保存的规则文件:

#!/bin/bash
iptables-restore < /etc/iptables/rules.v4   # 加载 IPv4 规则
ip6tables-restore < /etc/iptables/rules.v6  # 加载 IPv6 规则

将上述脚本保存到 /etc/network/if-pre-up.d/ 目录下,并赋予执行权限。

2,使用 iptables-persistent 包(适用于Debian/Ubuntu 系统):

安装

iptables-persistent

包:

sudo apt-get install iptables-persistent

在配置规则后,使用以下命令将规则保存到磁盘:

sudo netfilter-persistent save

规则将自动保存到 /etc/iptables/rules.v4/etc/iptables/rules.v6 文件中,并且在系统启动时会自动加载。

3,使用 firewalld 服务(适用于 Red Hat/CentOS 系统):

配置适当的规则和区域,在运行时使用

firewall-cmd

命令:

firewall-cmd --zone=public --add-port=80/tcp --permanent   # 添加规则
firewall-cmd --reload                                      # 重新加载防火墙配置

--permanent 选项将规则保存到永久性配置中,以便在系统重新启动后保持不变。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值