iptables,iptableslinux


规则:网络管理员预定义的数据包过滤条件

链:数据包传播路径,每条链中可以有多个规则,从第一条规则检查起

表:内置第三张表

   filter:主要用于包过滤,只允许对数据报进行接收和丢弃,无法对数据包进行更改,

  nat:主要用于网络地址转换,

Mangle:对指定包进行修改

iptables介绍

iptables对数据包的处理过程

iptables介绍

Iptables 指令语法:iptables 【-t tables】  command  【match】【-j target/jump】

 

【-t tables】

指定规则表,默认filter

 

Command  常用命令列表:

 

-A :新增一条规则到某个规则链,默认添加到链尾。

-D:删除一条规则,可输入完整命令,也可输入规则编号

-R:取代现行规则,规则取代后不会改变顺序

-I:插入一条规则,原本位置上的规则向后移动一个位置

-L:列出规则连中所有规则

   iptables -t nat -L  列出nat 表中所有规则

-F:删除规则

  iptables -F input 删除filter中input链中所有规则

 

【match】

 常用封包匹配参数

-P:匹配协议类型,也可加!反向匹配,使用all可以匹配所有

-S:用来匹配封包来源ip,-s 192.168.1.0/24 可用来匹配一个段

-D:匹配封包的目的ip,同上。

-O:匹配数据包的出网卡。

--sport:匹配数据包的源端口,匹配一个范围可以设置成20:80

--dport:同上。

--tcp-flags:匹配tcp中的标志位

 

【-j target/jump】

 常用的处理动作

   -j:用来指定处理动作

     ACCEPT :将数据包放行

     REJECT:拦阻数据包

    DROP:丢弃数据包不予处理

iptables介绍

  实例:lan:1.1.1.1 wan:192.168.2.159
              内网主机:1.1.1.2
      内网中的1.1.1.2主机的22端口映射到公网地址192.168.2.159的88端口
     1,在nat表中的PREROUTING中添加一条
    iptables -t nat -A PREROUTING -d 192.168.2.159 -p tcp --dport 88 -j DNAT --to 1.1.1.2:22
   若1.1.1.2主机的网关在做iptables的服务器上就可以了,如果不在
    2,需要在POSTROUTING的链中添加一条
  iptables -t nat -A POSTROUTING  -d 1.1.1.2 -p tcp --dport 22  -j SNAT --to 1.1.1.1

SNAT一般用于到外网,出去 

SNAT的目的是进行源地址转换,应用于POSTROUTING规则链.在路由决定之后应用.SNAT与出站接口相关,而不是入站接口


DNAT用于从外面进来的

 目的地址NAT有2种形式: DNAT和REDIRECT. REDIRECT是目的地址转换的特殊形式,将数据包重定向到NAT设备的输入或回环接口. 目的地址NAT应用于nat表的PREROUTING和OUTPUT规则链,在做出路由决定前对目的地址进行修改.在PREROUTING中,DNAT和REDIRECT规则与用来接受通过本地路由转发或送到主机的入站接口的数据包的入站接口有关.在OUTPUT中,DNAT和REDIRECT规则用来处理来自NAT主机本身生成的出站数据包.

 

SNAT eg:

iptables -t nat -I POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source 192.168.0.5

将内网10.1网段映射为192.168.0.5出去

也可以这样:

iptables -t nat -I POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source 192.168.0.5-192.168.0.245

将本地映射到一段IP地址上(可以做攻击用^^)

上述例子的同样功能:iptables -t nat -I POSTROUTING -s 10.1.0.0/24 -j NETMAP --to 192.168.0.0/24

 

DNAT eg:

iptables -t nat -A PREROUTING -d ROUTEIP -p tcp --dport 80 -j DNAT --to-destination WEBIP

ROUTEIP表示防火墙(路由器)的公网IP 

WEBIP 表示内网WEB服务器IP

这条规则表示当外网访问本地的HTTP80端口时,自动转到内网的WEB服务器上。等于是把web服务器做了个映射到公网上。

当仅仅需要从外网访问内网时,这样是足够了,

但是如果需要从内网机器,通过WEB服务器的外网IP访问WEB服务器的话,还需要加条SNAT规则:

 iptables -t nat -A POSTROUTING -p tcp -d WEBIP --dport 80 -j SNAT --to ROUTEIP

将访问WEB服务器的数据包的源IP地址强制改为网关IP。否则会出现无法访问的问题。

 简单分析下原因:

 假设内网   192.168.0.10->需要从外部IP访问WEB的主机         

                  192.168.0.254->WEB服务器内部IP地址          

                 192.168.0.1->网关 (外部IP为202.96.22.22)

 当192.168.0.10访问202.96.22.22的WEB服务时,

根据网关上的DNAT,数据包的目的IP由202.96.22.22被转为192.168.0.254。254收到数据包后,发现是10发送过来的,

那么他会直接回数据包给192.168.0.10,但是10收到包后发现包的来源不是自己想要的202.96.22.22,

那这个包就会被直接丢弃。

解决办法就是在254不要直接发包给10,而是返回给网关,让网关原路返回给10机器。这样,只要将发往254请求WEB服务的数据包的源IP都改为网关的IP,192.168.0.1,就可以解决这个问题。 即

iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.254 --dport 80 -j SNAT --to 192.168.0.1

 

一局域网192.168.1.0/24,

web服务器:192.168.1.10

ftp服务器:192.168.1.11

网关linux,

内网eth0,IP为192.168.1.1

外网eth1,IP为a.b.c.d

 

怎样作NAT能使内外网都能访问公司的服务器?

A:# web

# 用DNAT作端口映射

iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10

# 用SNAT作源地址转换(关键),以使回应包能正确返回

iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1

 

# 一些人经常忘了打开FORWARD链的相关端口,特此增加

iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT

iptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT

 

# ftp

modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT

modprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块

# 用DNAT作端口映射

iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11

iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT

iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT

iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT

iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT

# 用SNAT作源地址转换(关键),以使回应包能正确返回

iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1

 

 

 

详细参考:

http://blog.csdn.net/huguohu2006/article/details/6453522

 

相关内容

    暂无相关文章