文章目录

  • 1、Iptables
  • 1.1 简述
  • 1.2 四表五链
  • 1.2.1 表 table
  • 1.2.2 链 chain
  • 1.3 流量转发过程
  • 1.3 服务配置
  • 1.4 常用操作
  • 1.4.1 表操作
  • 1.4.2 链操作
  • 1.4.2.1 管理类
  • 1.4.2.2 查看类
  • 1.4.2.3 规则操作类
  • 1.4.2.4 链操作
  • 1.5 匹配条件
  • 1.5.1 基本匹配条件
  • 1.5.2 扩展匹配条件
  • 1.5.2.1 隐式扩展
  • 1.5.2.1.1 TCP协议扩展
  • 1.5.2.1.2 UDP协议扩展
  • 1.5.1.3 ICMP协议的扩展选项
  • 1.5.2.2 显示扩展
  • 1.5.2.2.1 multiport扩展
  • 1.5.2.2.2 iprange扩展
  • 1.5.2.2.3 mac扩展
  • 1.5.2.2.4 string扩展
  • 1.5.2.2.5 time扩展
  • 1.5.2.2.6 connlimit扩展
  • 1.5.2.2.7 limit扩展
  • 1.5.2.2.8 state扩展
  • 1.5.2.2.9 comment扩展
  • 1.5.3 自定义链执行动作
  • 1.6 处理动作
  • 1.7 优化规范
  • 1.8 规则保存
  • 1.8.1 持久化保存
  • 1.8.2 加载规则
  • 1.8.3 开机自动加载
  • 1.9 内外网络流量控制
  • 1.9.1 SNAT
  • 1.9.1.1 SNAT
  • 1.9.1.2 MASQUERADE
  • 1.9.2 DNAT
  • 1.9.3 REDIRECT转发


1、Iptables

Iptables是Linux内核集成的包过滤防火墙系统,几乎所有的Linux发行版本都支持Iptables的功能,如果Linux系统连接到Internet或LAN、服务器、代理服务器,则iptables有利于在Linux系统上更好的控制IP信息包过滤和防火墙配置。

注意:Centos8支持三种防火墙服务iptables(6版本及其以下版本)、firewalld(7版本及其以上版本)、nftables(8版本新服务)

1.1 简述

Netfilter/Iptables过滤防火墙系统是一种强大的拦截工具,可以新增、修改、删除其规则,这些规则在包过滤中起决定性作用,虽然Netfilter/Iptables包过滤系统是一个单个实体,但是其由两部分组成,前者为Netfilter,后者为Iptables;

1.2 四表五链

1.2.1 表 table

  • filter表:主要用于过滤数据包,该表根据系统管理员预定义的一组规则过滤符合条件的数据包,对于防火墙而言,主要利用filter表中指定的规则来实现对数据包的过滤,filter表是默认的表,如果没有指定那个表,则iptables默认使用filter表来执行所有的命令,filter表包含了INPUT链(处理进入的数据包)、FORWARD链(处理转发的数据包)、OUTPUT链(处理本地生成的数据包),在filter表中只能允许对数据包进行接收(ACCEPT)、丢弃(DROP)的操作,而无法对数据包进行更改;
  • nat表:主要用于网络地址转换NAT,该表可以实现一对一、一对多、多对多等NAT操作,iptables就是使用该表实现共享上网的,NAT表包含了PREROUTING链(修改即将到来的数据包),POSTROUTING链(修改即将出去的数据包)、OUTPUT链(修改路由之前本地生成的数据包);
  • mangle表:主要用于对指定数据包进行更改,在内核版本2.4.18后的Linux版本中该表包含的链有INPUT链(处理进入的数据包)、FORWARD链(处理转发的数据包)、OUTPUT链(处理本地生成的数据包)、POSTROUTING链(修改即将输出的数据包)、PREROUTING链(修改即将到来的数据包);
  • raw表:只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理,一旦用户使用了raw表,在某个链上,将跳过nat表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。

表优先级由高到低:security --> raw --> mangle --> nat --> filter

1.2.2 链 chain

内置链:每个内置链都对应一个钩子函数;

自定义链:用户可以自定义设置链。

  • INPUT链:处理进入的数据包;
  • OUTPUT链:处理出去的数据包;
  • FORWARD链:处理转发的数据包;
  • PREROUTING链:修改即将进入的数据包;
  • POSTROUTING链:修改即将出去的数据包。

1.3 流量转发过程

  • 入站数据流

从外界到达防火墙的数据包,先被PERROUTING链处理(是否修改即将到来的数据包),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标地址是防火墙本机器,那么内核将其传给INPUT链(是否允许通过)进行处理,通过后交给系统上传的应用程序进行响应;

  • 转发数据流

来自外界的数据包达到防火墙后,首先被PERROUTING链规则进行处理,之后会进行路由选择,如果数据包的目的地址是其他的外部地址,则内核将其传递给FORWARD链(确认转发或拦截)进行处理,然后交给POSTROUTING链(是否修改数据包的地址)处理;

  • 出站数据流

防火墙本机器向外部地址发送的数据包,首先被OUTPUT链处理,之后进行路由选择,然后传递给POSTROUTING链进行处理;

1.3 服务配置

Iptables是CentOS 7/Redhat 7及其以下版本的防火墙服务,若要开启iptables服务需先关闭firewalld服务。

# 关闭firewalld
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl mask firewalld					
Created symlink /etc/systemd/system/firewalld.service → /dev/null.
# 附:恢复firewalld服务配置
[root@localhost ~]# systemctl unmask firewalld
[root@localhost ~]# systemctl restart/start firewalld

# 安装并打开iptables
[root@localhost ~]# yum -y install iptables-services
[root@localhost ~]# systemctl restart/start iptables			

# 查看配置文件
[root@localhost ~]# rpm -qc iptables-services
/etc/sysconfig/ip6tables
/etc/sysconfig/iptables
[root@localhost ~]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

# 帮助查询
[root@localhost ~]# iptables --help

# 查看版本
[root@localhost ~]# iptables --version
iptables v1.8.2 (nf_tables)

# 查看命令执行文件位置与权限
[root@localhost ~]# which iptables
/usr/sbin/iptables
[root@localhost ~]# ll /usr/sbin/iptables
lrwxrwxrwx 1 root root 17 Jun 15  2021 /usr/sbin/iptables -> xtables-nft-multi

# 查看表内链
[root@localhost ~]# iptables -vnL -t [table]
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

1.4 常用操作

命令格式:

[root@localhost ~]# iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]

1.4.1 表操作

  • [-t table]指定表,默认为filter表。

1.4.2 链操作

1.4.2.1 管理类

  • -N:new,自定义一条chain
  • -E:重命名自定义chain
  • -X:delete,自定义的空白chain
  • -P:policy,设置默认策略,对filter表而言,默认策略有ACCEPT:接受, DROP:丢弃

1.4.2.2 查看类

  • -L:list,列表查看chain上所有规则,滞后选项
  • -n:number,以数字格式显示地址和端口号
  • -v:verbose,详细信息
  • -vv:更加详细
  • -x:exactly,显示计数器结果的精确值,而非单位转换的易读值
  • –line-numbers:显示规则序号
  • -S:selected,以iptables-save命令格式显示链上规则

1.4.2.3 规则操作类

  • -A:append,追加
  • -I:insert,插入,需要指明插入至的规则编号,默认为第一条
  • -D:delete,删除,可以指明规则序号或本身
  • -R:replace,替换指定chain上的规则编号
  • -F:flush,清空指定的chain
  • -Z:zero,置零,iptables有两个计数器,匹配到的报文个数 + 匹配到的报文大小之和

1.4.2.4 链操作

PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING + 自定义链

1.5 匹配条件

1.5.1 基本匹配条件

  • -s, --source address[/mask][,…]:源IP地址或者不连续的IP地址
  • -d, --destination address[/mask][,…]:目标IP地址或者不连续的IP地址
  • -p, --protocol protocol:指定协议,可使用数字如0(all),protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“,可以参考:/etc/protocols
  • -i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链
  • -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链

1.5.2 扩展匹配条件

扩展操作需加载特殊模块(/usr/lib64/xtables/*.so)后方可使用。

1.5.2.1 隐式扩展

iptables在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块。

1.5.2.1.1 TCP协议扩展
  • –source-port, –sport port[:port]:匹配报文源端口,可为端口连续范围
  • –destination-port, –dport port[:port]:匹配报文目标端口,可为连续范围
  • –tcp-flags mask comp
  • mask:需检查的标志位列表,用,分隔,例如 SYN,ACK,FIN,RST
  • comp:在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔tcp协议的扩展选项
  • -syn:用于匹配第一次握手, 相当于:–tcp-flags SYN,ACK,FIN,RST SYN
1.5.2.1.2 UDP协议扩展
  • –source-port, --sport port[:port]:匹配报文的源端口或端口范围
  • –destination-port, --dport port[:port]:匹配报文的目标端口或端口范围
1.5.1.3 ICMP协议的扩展选项
  • –icmp-type {type[/code]|typename}
    type/code(icmp报文内type/code字段内标识)
    0/0 echo-reply icmp应答
    8/0 echo-request icmp请求

1.5.2.2 显示扩展

使用-m选项指明要调用的扩展模块名称,需手动加载对应扩展模块,如[-m matchname [per-match-options]]

1.5.2.2.1 multiport扩展

以离散方式定义多端口匹配,最多指定15个端口。

  • –source-ports, --sports port[,port|,port:port]…:指定多个源端口
  • –destination-ports, --dports port[,port|,port:port]…:指定多个目标端口
  • –ports port[,port|,port:port]…:多个源或目标端
[root@localhost ~]# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT
1.5.2.2.2 iprange扩展

指明连续的(但一般不是整个网络)ip地址范围。

  • –src-range from[-to]:源IP地址范围
  • –dst-range from[-to]:目标IP地址范围
[root@localhost ~]# iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP
1.5.2.2.3 mac扩展

指明源MAC地址,适用于:PREROUTING, FORWARD,INPUT chains。

  • –mac-source XX:XX:XX:XX:XX:XX
[root@localhost ~]# iptables -A INPUT -s 172.16.0.100 -m mac  --mac-source  00:50:56:12:34:56 -j ACCEPT
1.5.2.2.4 string扩展

对报文中的应用层数据做字符串模式匹配检测。

  • –algo {bm|kmp} 字符串匹配检测算法
  • bm:Boyer-Moore
  • kmp:Knuth-Pratt-Morris
  • –from offset:开始偏移
  • –to offset:结束偏移
  • –string pattern:要检测的字符串模式
  • –hex-string pattern:要检测字符串模式,16进制格式
[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62  --string   "google" -j REJECT
1.5.2.2.5 time扩展

根据将报文到达的时间与指定的时间范围进行匹配(CentOS 8 此模块有问题)。

  • –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
  • –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
  • –timestart hh:mm[:ss] 时间
  • –timestop hh:mm[:ss]
  • –monthdays day[,day…] 每个月的几号
  • –weekdays day[,day…] 星期几,1 – 7 分别表示星期一到星期日
  • –kerneltz:内核时区(当地时间),不建议使用,CentOS 7 系统默认为 UTC

注: centos6 不支持kerneltz ,–localtz指定本地时区(默认配置)

[root@localhost ~]# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP
1.5.2.2.6 connlimit扩展

根据每个客户端IP做并发连接数数量匹配,可防止Dos攻击;

  • –connlimit-upto #连接的数量小于等于时匹配;
  • –connlimit-above #连接的数量大于时匹配。
[root@localhost ~]# iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
1.5.2.2.7 limit扩展

基于收发报文的速率做匹配(令牌桶过滤器);

  • –limit #[/second|/minute|/hour|/day] # 速率限制;
  • –limit-burst number #前多少个包不限制。
[root@localhost ~]# iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
1.5.2.2.8 state扩展

state扩展模块可以根据”连接追踪机制“去检查连接的状态,较耗资源;

conntrack机制:追踪本机上的请求和响应之间的关系。

状态类型

  • -NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求;
  • -ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态;
  • -RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系;
  • -INVALID:无效的连接,如flag标记不正确;
  • -UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪。
# 已经追踪到的并记录下来的连接信息库
[root@localhost ~]# cat /proc/net/nf_conntrack
ipv4     2 tcp      6 299 ESTABLISHED src=192.168.70.1 dst=192.168.70.134 sport=14362 dport=22 src=192.168.70.134 dst=192.168.70.1 sport=22 dport=14362 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4     2 tcp      6 431987 ESTABLISHED src=192.168.70.1 dst=192.168.70.134 sport=14378 dport=22 src=192.168.70.134 dst=192.168.70.1 sport=22 dport=14378 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4     2 udp      17 10 src=192.168.70.134 dst=185.209.85.222 sport=51394 dport=123 src=185.209.85.222 dst=192.168.70.134 sport=123 dport=51394 mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
# 调整连接追踪功能所能够容纳的最大连接数量
[root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
65536
[root@localhost ~]# cat /proc/sys/net/nf_conntrack_max
65536
# 查看连接跟踪有多少条目
[root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_count
4
# 不同的协议的连接追踪时长
[root@localhost ~]# ll /proc/sys/net/netfilter/

连接跟踪,需要加载模块modprobe nf_conntrack_ipv4,当服务器连接多于最大连接数时dmesg 可以观察到 :kernel: ip_conntrack: table full, dropping packet错误,并且导致建立TCP连接很慢,各种状态的超时后,链接会从表中删除。

连接过多的解决方法两个:

# 加大nf_conntrack_max值
[root@localhost ~]# vim /etc/sysctl.conf
net.nf_conntrack_max = 393216
net.netfilter.nf_conntrack_max = 393216
# 降低nf_conntrack timeout时间
[root@localhost ~]# vim /etc/sysctl.conf
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
iptables -t nat -L -n

格式:-m --state state

[root@localhost ~]# iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
1.5.2.2.9 comment扩展

comment扩展是一种用于添加注释的扩展,它允许在iptables规则中添加注释,以便在以后查看或修改规则时更容易理解规则的目的。

[root@localhost ~]# iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT -m comment --comment "Allow SSH from local network"
# "Allow SSH from local network"是注释,它描述了此规则的目的


# 显示所有INPUT链中的规则,包括它们的注释
[root@localhost ~]# iptables -L INPUT -n -v -x --line-numbers

1.5.3 自定义链执行动作

在iptables中,-J选项用于指定应该执行哪个目标(target)动作,允许用户定义自己的目标动作。

# 创建一个名为MYACTION的新链
[root@localhost ~]# iptables -N MYACTION
# 将所有通过MYACTION链的流量记录到系统日志中,并添加一个前缀“MYACTION:”
[root@localhost ~]# iptables -A MYACTION -j LOG --log-prefix "MYACTION: "
# 将所有通过MYACTION链的流量丢弃
[root@localhost ~]# iptables -A MYACTION -j DROP

# 将所有来自192.168.1.0/24网络的TCP流量重定向到MYACTION链中,以执行MYACTION链中定义的动作
[root@localhost ~]# iptables -A INPUT -s 192.168.1.0/24 -p tcp -j MYACTION

1.6 处理动作

target类型:

  • ACCEPT:接受;
  • DROP:丢弃;
  • REJECT:–reject-with:icmp-port-unreachable默认;
  • RETURN:返回调用链;
  • REDIRECT:端口重定向;
  • LOG:记录日志,非中断target,本身不拒绝和允许,放在拒绝和允许规则前,并将日志记录在/var/log/messages系统日志中;
  • –log-level level:级别: debug,info,notice, warning, error, crit, alert,emerg;
  • –log-prefix prefix:日志前缀,用于区别不同的日志,最多29个字符;
  • MARK:做防火墙标记;
  • DNAT:目标地址转换;
  • SNAT:源地址转换;
  • MASQUERADE:地址伪装。
[root@localhost ~]# iptables -I INPUT  -s 10.0.1.0/24 -p tcp -m multiport --dports 80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections: "
[root@localhost ~]# iptables -R INPUT 2 -p tcp --dport 21 -m state --state NEW -j LOG --log-prefix "ftp new link: "

1.7 优化规范

  • 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高;
  • 谨慎放行入站的新请求;
  • 有特殊目的限制访问功能,要在放行规则之前加以拒绝;
  • 同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理;
  • 不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更高;
  • -s 10.0.0.6 -p tcp --dport 3306 -j REJECT;
  • -s 172.16.0.0/16 -p tcp --dport 80 -j REJECT;
  • 应该将那些可由一条规则能够描述的多个规则合并为一条;
  • 设置默认策略,建议白名单(只放行特定连接);
  • -iptables -P,不建议,容易出现“自杀现象”;
  • -规则的最后定义规则做为默认策略,推荐使用,放在最后一条。

1.8 规则保存

1.8.1 持久化保存

[root@localhost ~]# iptables-save > /PATH/TO/SOME_RULES_FILE

1.8.2 加载规则

[root@localhost ~]# iptables-restore < /PATH/FROM/SOME_RULES_FILE
  • -n, –noflush:不清除原有规则;
  • -t, –test:仅分析生成规则集,但不提交。

1.8.3 开机自动加载

在/etc/rc.d/rc.local文件添加加载规则即可。

1.9 内外网络流量控制

iptables/netfilter利用filter表的FORWARD链,可以充当网络防火墙(FORWARD链实现内外网络的流量控制)。

  • 请求-响应报文均会经由FORWARD链,要注意规则的方向性;
  • 如果要启用conntrack机制,建议将双方向的状态为ESTABLISHED的报文直接放行
    NAT表。
[root@localhost ~]# iptables -A FORWARD -d 10.1.1.0/24 -m state --state NEW -j ACCEPT
[root@localhost ~]# iptables -I FORWARD -d 10.1.2.0/24 -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -vnL FORWARD --line-numbers
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            10.1.2.0/24          tcp dpt:80
2        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
3        0     0 ACCEPT     all  --  *      *       0.0.0.0/0            10.1.1.0/24          state NEW

1.9.1 SNAT

source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文:修改源IP。

1.9.1.1 SNAT

SNAT:基于nat表的target,适用于固定的公网IP。

格式:iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP

  • –to-source [ipaddr[-ipaddr]][:port[-port]]
  • –random
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j SNAT --to-source 172.18.1.6-172.18.1.9

1.9.1.2 MASQUERADE

基于nat表的target,适用于动态的公网IP,如:拨号网络。

格式:iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j MASQUERADE

  • –to-ports port[-port]
  • –random
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.0.1.0/24  ! –d 10.0.1.0/24 -j MASQUERADE

1.9.2 DNAT

destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP;

nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端口,但不支持多目标,即不支持负载均衡功能。

格式:iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]

  • –to-destination [ipaddr[-ipaddr]][:port[-port]]
[root@localhost ~]# iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 22 -j DNAT --to-destination 10.0.1.22

1.9.3 REDIRECT转发

REDIRECT,是NAT表的 target,通过改变目标IP和端口,将接受的包转发至同一个主机的不同端口,可用于PREROUTING OUTPUT链。

  • —to-ports port[-port]
iptables -t nat -A PREROUTING -d 172.16.100.10 -p tcp --dport 80 -j REDIRECT --to-ports 8080