Iptables小述

最近在看Neutron里路由服务的时候,租户内部网络假如没有独立外网的时候,需要通过router来进行转发,而这里的实现其实是通过iptables来NAT映射出去,这部分NAT用法不是太熟,大部分iptables都是围绕filter来用,因此有必要再了解下iptables的一些基本用法

通常我们都是直接调用iptables命令来修改防火墙规则,可见我们修改规则这部分是工作在用户态当中,这本身也并不是防火墙,只是指明了一些规则,规则修改了之后,内核态中的netfilter会来读取这些规则,进而执行防火墙的责任,而netfilter在TCP/IP协议栈经过的地方,能够实现读取规则

网上比较权威的说法,在内核空间中,iptables选择了五个位置

1:数据包从一个网络接口进来,到另一个网络接口出去
2:数据包从内核流入用户空间的
3:数据包从用户空间流出的
4:进入/离开本机的外网接口
5:进入/离开本机的内网接口

前面三个貌似容易理解,基本上能将路线全部封死了,但在进出口设置了关卡之后还要设置内部关卡,网上有这么一种说法:由于数据包尚未进行路由决策,还不知道数据要走向哪里,所以在进出口是没办法实现数据过滤的,所以要在内核空间里设置转发的关卡,进入用户空间关卡,从用户空间出去的关卡,那么既然他们没什么用,为什么还要设置他们呢,原因是在做NAT和DNAT的时候,目标地址转换必须在路由之前来进行转换,所以必须在外网和内网的接口处进行设置关卡

同时,这五个位置也成为五个规则链,hook functions钩子函数

1:FORWARD(转发)
2:INPUT(数据包入方向)
3:OUTPUT(数据包出方向)
4:PREROUTING(路由前)
5:POSTROUTING(路由后)

因此,任何一个数据包,只要经过了本机,就会经过其中一个链

NewImage

 

 

 

 

 

 

 

 

 

iptables的规则:

iptables [-t table] COMMAND chain CRETIRIA -j ACTION

这里参数分别:

-t table可以缺省,一般可以指定为三个参数:filter,nat,mangle

1:filter 定义允许或者不允许的
2:nat 定义地址转换的
3:mangle修改报文原数据

而这三个分别对应的链为:

filter:INPUT ,FORWARD ,OUTPUT
nat:PREROUTING ,OUTPUT ,POSTROUTING
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

COMMAND:定义管理规则

Commands:
Either long or short options are allowed.
  --append  -A chain		Append to chain
  --check   -C chain		Check for the existence of a rule
  --delete  -D chain		Delete matching rule from chain
  --delete  -D chain rulenum
				Delete rule rulenum (1 = first) from chain
  --insert  -I chain [rulenum]
				Insert in chain as rulenum (default 1=first)
  --replace -R chain rulenum
				Replace rule rulenum (1 = first) in chain
  --list    -L [chain [rulenum]]
				List the rules in a chain or all chains
  --list-rules -S [chain [rulenum]]
				Print the rules in a chain or all chains
  --flush   -F [chain]		Delete all rules in  chain or all chains
  --zero    -Z [chain [rulenum]]
				Zero counters in chain or all chains
  --new     -N chain		Create a new user-defined chain
  --delete-chain
            -X [chain]		Delete a user-defined chain
  --policy  -P chain target
				Change policy on chain to target
  --rename-chain
            -E old-chain new-chain
				Change chain name, (moving any references)

 

chain:链,也就是指定的规则是在哪个链上来进行操作

CRETIRIA:匹配各种内容,比如-s源IP地址,-d目的IP地址,-p协议,-i网卡流入,-o网卡流出等等

-j ACTION:处理方式,比如ACCEPT,DROP,REJECT

DROP:悄悄丢弃,一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
REJECT:明示拒绝
ACCEPT:接受
DNAT
SNAT
MASQUERADE:源地址伪装
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回,在自定义链执行完毕后使用返回,来返回原规则链。

 

发表回复