我正在使用/sbin/iptables -L -v -n | more命令。但是,我无法列出 NAT 规则。如何使用 iptables 命令查看或列出 NAT 表中存储的 NAT 规则?如何在基于 CentOS / RHEL / Debian / Ubuntu Linux 的服务器下查看 NAT 表中的所有规则?
/sbin/iptables用于 IPv4 数据包过滤和 NAT 的命令。网络地址转换 (NAT) 修改 IP 数据包标头中通过路由设备传输时的 IP 地址信息。
教程详情 | |
---|---|
难度级别 | 简单的 |
根权限 | 是的 |
要求 | Linux终端 |
类别 | 防火墙 |
操作系统兼容性 | Alma • Alpine • Arch • Debian • Fedora • Linux • Mint • openSUSE • Pop!_OS • RHEL • Rocky • Stream • SUSE • Ubuntu |
美东时间。阅读时间 | 2分钟 |
要查看 NAT 规则,请以 root 用户身份在 Linux 中输入iptables 命令或 iptables-save 命令或netstat-nat 命令。让我们详细看看示例和语法。
句法
作为 root 用户显示IPv4 规则的iptables 命令的语法如下:
示例输出:
# iptables -t nat -L
# iptables -t nat -L -n -v | grep 'something'
# iptables -t nat -L -n -v
链 PREROUTING (策略接受867 个数据包,146K 字节) pkts 字节目标 prot 选择输出源目标 0 0删除全部 -- vlan2 * 0.0.0.0/ 0 192.168.1.0/ 24 链 POSTROUTING (策略接受99 个数据包,6875字节) pkts 字节目标 prot 选择输出源目标 0 0伪装所有 -- * vlan2 0.0.0.0/ 0 0.0.0.0/ 0 链输出(策略接受99 个数据包,6875字节) pkts 字节目标 prot 选择输出源目标 链 WANPREROUTING ( 0参考) pkts 字节目标 prot 选择输出源目标 root@tswitch:/tmp/home/root#
了解 iptables nat 规则列出选项
- -t nat:该选项指定命令应操作的数据包匹配表。在此示例中,我正在处理nat表。当遇到创建新连接的数据包时会查阅它。它由四个内置组件组成:
- PREROUTING 用于在数据包进入后立即更改数据包
- INPUT 用于更改发往本地套接字的数据包
- OUTPUT 用于在路由之前更改本地生成的数据包
- POSTROUTING 用于在数据包即将发出时更改数据包
- -L:列出所选链中的所有规则。
- -n : Numeric output. IP addresses and port numbers will be printed in numeric format. By default, the program will try to display them as host names, network names, or services (whenever applicable).
- -v : Verbose output. This option makes the list command show the interface name, the rule options (if any), and the TOS masks. The packet and byte counters are also listed, with the suffix ‘K’, ‘M’ or ‘G’ for 1000, 1,000,000 and 1,000,000,000 multipliers respectively.
Linux Iptables List and Show All NAT IPTables IPv6 Rules Command
IPv6 NAT support is available since the Linux kernel version 3.7. Listing all IPv6 NAT iptables rules as follows:
# ip6tables -t nat -L
# ip6tables -t nat -L -n -v | grep 'something'
# ip6tables -t nat -L -n -v
Outputs:
Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all fd9d:bc11:xxx::/48 anywhere policy match dir out pol none
Here is another command:
$ sudo iptables -t nat -L -n -v
Sample outputs:
Chain PREROUTING (policy ACCEPT 294K packets, 17M bytes) pkts bytes target prot opt in out source destination 165K 9879K DNAT tcp -- * * 0.0.0.0/0 192.168.203.146 tcp dpt:443 to:10.105.28.42:443 166K 9982K DNAT tcp -- * * 0.0.0.0/0 192.168.203.146 tcp dpt:80 to:10.105.28.42:80 0 0 DNAT tcp -- * * 0.0.0.0/0 192.168.203.146 tcp dpt:443 to:10.105.28.42:443 0 0 DNAT tcp -- * * 0.0.0.0/0 192.168.203.146 tcp dpt:80 to:10.105.28.42:80 22034 1322K DNAT tcp -- * * 0.0.0.0/0 192.168.203.146 tcp dpt:444 to:10.105.28.45:444 22073 1324K DNAT tcp -- * * 0.0.0.0/0 192.168.203.146 tcp dpt:81 to:10.105.28.45:81 31328 1880K DNAT tcp -- * * 0.0.0.0/0 192.168.203.146 tcp dpt:445 to:10.105.28.44:445 19424 1165K DNAT tcp -- * * 0.0.0.0/0 192.168.203.146 tcp dpt:82 to:10.105.28.44:82 Chain INPUT (policy ACCEPT 199K packets, 12M bytes) pkts bytes target prot opt in out source destination 链输出(策略接受387 个数据包,24906字节) pkts 字节目标 prot 选择输出源目标 Chain POSTROUTING (策略接受252K数据包,15M字节) pkts 字节目标 prot 选择输出源目标 93223 5593K MASQUERADE all -- * * 10.105.28.0/ 24 !10.105.28.0/ 24 /* 为 LXD 网络 lxdbr0 生成 */
打个招呼 netstat-nat
默认情况下,您的系统上可能未安装netstat-nat命令。因此,在 Alpine Linux 上使用apk 命令,在 RHEL 和 co 上使用 dnf 命令/ yum 命令,在 Debian、Ubuntu 和 co 上使用apt 命令/ apt-get 命令,在 SUSE/OpenSUSE 上使用 zypper 命令,在 Arch Linux 上使用 pacman 命令来安装netstat -nat。
该netstat-nat命令显示 Linux iptable 防火墙上的 natted 连接:
# netstat-nat -n
要显示 SNAT 连接,请运行:
# netstat-nat -S
要显示 DNAT 连接,请键入:
# netstat-nat -D
请注意,您可能会在最新版本的 Linux 上收到以下消息:
无法从内核读取有关连接的信息,请确保在内核中或通过模块启用了 netfilter。
然后使用 conntrack 命令:
$ sudo conntrack -L # List/dump
$ sudo conntrack -L -n # Filter source NAT connections
$ sudo conntrack -L -g # Filter destination NAT connections
$ sudo conntrack -L -j # Filter any NAT connection
加起来
您需要使用 iptables 或 ip6tables 命令,如下所示:
有关详细信息,请参阅使用 man 命令的以下手册页,如下所示:
$ sudo iptables -t nat -L # IPv4 rules
$ sudo ip6tables -t nat -L # IPv6 rules
$ sudo conntrack -L -j
$ man iptables <--#IPv4
$ man ip6tables <--#IPv6