Linux下netfilter/iptables使用(V3.0)
2014-04-18 18:05
295 查看
官方文档/usr/share/doc/iptables/html/NAT-HOWTO.html
参考http://os.51cto.com/art/201103/249046.htm
http://os.51cto.com/art/201103/249054_all.htm http://www.server110.com/linux/201309/1417.html
1.概念
NAT网络地址转换,分为SNAT,DNAT,即源地址转换和目标地址转换,分别用于上行链路和下行链路。
netfilter是Linux 核心中一个通用架构,它提供了一系列的"表"(tables),每个表由若干"链"(chains)组成,而每条链中可以有一条或数条规则(rule)组成。并且系统缺省的表是"filter"。但是在使用NAT的时候,我们所使用的表不再是"filter",而是"nat"表,所以我们必须使用"-t nat"选项来显式地指明这一点。
nat表也有三条缺省的"链"(chains),这三条链也是规则的容器,它们分别是:
PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT;
POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。
OUTPUT:定义对本地产生的数据包的目的NAT规则。
2.命令
一般语法如下:
iptables [-t table] command [match] [target]
-j MASQUERADE
用于外网口public地址是DHCP动态获取的(如ADSL)
3.处理流程
PREROUTING DNAT翻译——>再过滤(FORWARD)——>最后路由
路由——>再过滤(FORWARD)——>最后才进行POSTROUTING SNAT地址翻译
_____ _____
/ \ / \
PREROUTING -->[Routing ]----------------->POSTROUTING----->
\D-NAT/ [Decision] \S-NAT/
| ^
| |
| |
| |
| |
| |
| |
--------> Local Process ------
4.linux下nat定义与网络协议中的nat/pat协议的对应关系为
静态NAT协议,一个内网ip对应一个外网ip。
动态NAT协议,若干个内网ip,对应一个外网IP。
5.命令举例
# 删除刷新缺省表如”filter”, 其它表如”nat”需清楚标明:
iptables --flush # 刷新所有过滤规则和NAT表.
iptables --table nat --flush
iptables --delete-chain
#删除所有非缺省的规则链和nat表
iptables --table nat --delete-chain
配置静态NAT协议
该ISP分配给A单位www服务器的ip为:
伪ip:192.168.1.100
真实ip:202.110.123.100
iptables -A PREROUTING -i eth0 -d 202.110.123.100 -j DNAT --to 192.168.1.100
iptables -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT --to 202.110.123.100
动态NAT协议
1.地址池建议参考http://www.server110.com/linux/201309/1417.html
上行
更改所有来自192.168.1.0/24(子网)的数据包的源ip地址为1.2.3.4-1.2.3.6(外网IP地址池)
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6
下行
将所有目的地址为1.2.3.4-1.2.3.6的数据转发给192.168.1.0/24子网
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 192.168.1.1-192.168.1.254
2.上联口为动态ip的情况(DHCP / PPPoE)
## Masquerade everything out ppp0.
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
注意:
MASQUERADE只能用于postRouting链,那么下行的时候,数据该怎么办呢
另外,该选项如果增加对端口的要求,则只能适用与TCP或者UDP。
3.PAT
此协议是思科私有协议,中移动不要求。目前依靠IPtablse不能实现。因为针对端口的映射
iptablse命令为
## Change source addresses to 1.2.3.4, ports 1-1023
# iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023
要求必须为UDP或者TCP协议。
但实际业务需求超出此范围,因此不实现。
参考http://os.51cto.com/art/201103/249046.htm
http://os.51cto.com/art/201103/249054_all.htm http://www.server110.com/linux/201309/1417.html
1.概念
NAT网络地址转换,分为SNAT,DNAT,即源地址转换和目标地址转换,分别用于上行链路和下行链路。
netfilter是Linux 核心中一个通用架构,它提供了一系列的"表"(tables),每个表由若干"链"(chains)组成,而每条链中可以有一条或数条规则(rule)组成。并且系统缺省的表是"filter"。但是在使用NAT的时候,我们所使用的表不再是"filter",而是"nat"表,所以我们必须使用"-t nat"选项来显式地指明这一点。
nat表也有三条缺省的"链"(chains),这三条链也是规则的容器,它们分别是:
PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT;
POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。
OUTPUT:定义对本地产生的数据包的目的NAT规则。
2.命令
一般语法如下:
iptables [-t table] command [match] [target]
-j MASQUERADE
用于外网口public地址是DHCP动态获取的(如ADSL)
3.处理流程
PREROUTING DNAT翻译——>再过滤(FORWARD)——>最后路由
路由——>再过滤(FORWARD)——>最后才进行POSTROUTING SNAT地址翻译
_____ _____
/ \ / \
PREROUTING -->[Routing ]----------------->POSTROUTING----->
\D-NAT/ [Decision] \S-NAT/
| ^
| |
| |
| |
| |
| |
| |
--------> Local Process ------
4.linux下nat定义与网络协议中的nat/pat协议的对应关系为
静态NAT协议,一个内网ip对应一个外网ip。
动态NAT协议,若干个内网ip,对应一个外网IP。
5.命令举例
# 删除刷新缺省表如”filter”, 其它表如”nat”需清楚标明:
iptables --flush # 刷新所有过滤规则和NAT表.
iptables --table nat --flush
iptables --delete-chain
#删除所有非缺省的规则链和nat表
iptables --table nat --delete-chain
配置静态NAT协议
该ISP分配给A单位www服务器的ip为:
伪ip:192.168.1.100
真实ip:202.110.123.100
iptables -A PREROUTING -i eth0 -d 202.110.123.100 -j DNAT --to 192.168.1.100
iptables -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT --to 202.110.123.100
动态NAT协议
1.地址池建议参考http://www.server110.com/linux/201309/1417.html
上行
更改所有来自192.168.1.0/24(子网)的数据包的源ip地址为1.2.3.4-1.2.3.6(外网IP地址池)
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6
下行
将所有目的地址为1.2.3.4-1.2.3.6的数据转发给192.168.1.0/24子网
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 192.168.1.1-192.168.1.254
2.上联口为动态ip的情况(DHCP / PPPoE)
## Masquerade everything out ppp0.
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
注意:
MASQUERADE只能用于postRouting链,那么下行的时候,数据该怎么办呢
另外,该选项如果增加对端口的要求,则只能适用与TCP或者UDP。
3.PAT
此协议是思科私有协议,中移动不要求。目前依靠IPtablse不能实现。因为针对端口的映射
iptablse命令为
## Change source addresses to 1.2.3.4, ports 1-1023
# iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023
要求必须为UDP或者TCP协议。
但实际业务需求超出此范围,因此不实现。
相关文章推荐
- 如何使用netfilter/iptables构建Linux防火墙
- 使用 netfilter/iptables 为 Linux(内核 2.4.x)配置防火墙
- linux netfilter/iptables 架构分析及nelink的使用
- netfilter/iptables 简介--使用 netfilter/iptables 为 Linux(内核 2.4.x)配置防火墙
- 使用 netfilter/iptables 为 Linux(内核 2.4.x )配置防火墙
- netfilter/iptables 简介使用 netfilter/iptables 为 Linux(内核 2.4.x)配置防火墙
- (四)洞悉linux下的Netfilter&iptables:包过滤子系统iptable_filter
- (十一)洞悉linux下的Netfilter&iptables:iptables命令行工具源码解析【上】
- (十四)洞悉linux下的Netfilter&iptables:开发一个match模块【实战】
- linux下的Netfilter&iptables
- (六)洞悉linux下的Netfilter&iptables:如何理解连接跟踪机制?【中】
- (一)洞悉linux下的Netfilter&iptables:什么是Netfilter?
- (十)洞悉linux下的Netfilter&iptables:网络地址转换原理之SNAT
- 洞悉linux下的Netfilter&iptables
- (十)洞悉linux下的Netfilter&iptables:网络地址转换原理之SNAT
- (一)洞悉linux下的Netfilter&iptables:什么是Netfilter?
- (十)洞悉linux下的Netfilter&iptables:网络地址转换原理之SNAT
- 洞悉linux下的Netfilter&iptables:网络地址转换原理之DNAT
- (九)洞悉linux下的Netfilter&iptables:网络地址转换原理之DNAT
- Linux-Netfilter&iptables实现机制的分析及应用