首页 > 代码库 > 数据包与IPTABLE关系

数据包与IPTABLE关系

#数据包传输以本地为目标----------------------------------------------------------------------------------------------------Step		Table		Chain			Comment1 	  	  					在线路上传输(比如,Internet)2 	  	  					进入接口 (比如, eth0)	3 			mangle 		PREROUTING 	这个链用来mangle数据包,比如改变TOS等4 			nat 		PREROUTING 	这个链主要用来做DNAT。不要在这个链做过虑操作,							因为某 些情况下包会溜过去。5 	  	  					路由判断,比如,包是发往本地的,还是要转发的。6 			mangle 		INPUT 		在路由之后,被送往本地程序之前,mangle数据包。7 			filter 		INPUT 		所有以本地为目的的包都要经过这个链,							不管它们从哪儿来,对这些包的过滤条件就设在这里。8 	  	  					到达本地程序了(比如,服务程序或客户程序)------------------------------------------------------------------------------------------------------以本地为源的包------------------------------------------------------------------------------------------------------Step 		Table 		Chain 			Comment1 	  	  					本地程序(比如,服务程序或客户程序)2 	  	  					路由判断,要使用源地址,外出接口,还有其他一些信息。3 			mangle 		OUTPUT 		在这儿可以mangle包。建议不要在这儿做过滤,可能有副作用哦。4 			nat 		OUTPUT 		这个链对从防火墙本身发出的包进行DNAT操作。5 			filter 		OUTPUT 		对本地发出的包过滤。6 			mangle 		POSTROUTING 	这条链主要在包DNAT之后(译者注:作者把这一次DNAT称作实际的路由,							虽然在前面有一次路由。对于本地的包,一旦它被生成,							就必须经过路由代码的处理,但这个 包具体到哪儿去,							要由NAT代码处理之后才能确定。所以把这称作实际的路由。),							离开本地之前,对包 mangle。有两种包会经过这里,							防火墙所在机子本身产生的包,还有被转发的包。7 			nat 		POSTROUTING 	在这里做SNAT。但不要在这里做过滤,因为有副作用,							而且有些包是会溜过去的,即使你用了DROP策略。8 	  	  					离开接口9 	  	  					在线路上传输-------------------------------------------------------------------------------------------------------被转发的包-------------------------------------------------------------------------------------------------------Step 		Table 		Chain 			Comment1 	  	  					在线路上传输2 	  	  					进入接口(比如, eth0)3 			mangle 		PREROUTING 	mangle数据包,,比如改变TOS等。4 			nat 		PREROUTING 	这个链主要用来做DNAT。不要在这个链做过虑操作,							因为某些情况下包会溜过去。稍后会做SNAT。5 	  	  					路由判断,比如,包是发往本地的,还是要转发的。6 			mangle 		FORWARD 	包继续被发送至mangle表的FORWARD链,这是非常特殊的情 况才会用到的。							在这里,包被mangle(还记得mangle的意思吗)。							这次mangle发生在最初的路由判断之后, 在最后一次更改包的目的之前							(译者注:就是下面的FORWARD链所做的,因其过滤功能,							可能会改变一些包 的目的地,如丢弃包)。7 			filter 		FORWARD 	包继续被发送至这条FORWARD链。只有需要转发的包才会走 到这里,							并且针对这些包的所有过滤也在这里进行。注意,所有要转发的包都要经过这里,							不管是外网到内 网的还是内网到外网的。在你自己书写规则时,要考虑到这一点。8 			mangle 		POSTROUTING 	这个链也是针对一些特殊类型的包(译者注:参考第6步,							我们可以发现,在转发包时,mangle表的两个链都用在特殊的应用上)。							这一步mangle是在所有更改包的目 的地址的操作完成之后做的,但这时包还在本地上。9 			nat 		POSTROUTING 	这个链就是用来做SNAT的,当然也包括Masquerade(伪装)。							但不要在这儿做过滤,因为某些包即使不满足条件也会通过。10 	  	  					离开接口(比如: eth0)11 	  	  					又在线路上传输了(比如,LAN)-------------------------------------------------------------------------------------------------------#IPTABLE 语法语法:iptables [-t table] command [match] [target/jump]table:	nat 网络地址转换	mangle 数据包修改 改变不同的包及包头的内容,比如 TTL,TOS或MARK	filter 数据包过滤 对包进行DROP、LOG、ACCEPT和REJECT等操作 command:	-A, --append 加  例: iptables -A INPUT ...	-D, --delete 删  例: iptables -D INPUT --dport 80 -j DROP || iptables -D INPUT 1	-R, --replace 替换 例: iptables -R INPUT 1 -s 192.168.0.1 -j DROP	-I, --insert 插入  例: iptables -I INPUT 1 --dport 80 -j ACCEPT	-L, --list 列出  例: iptables -L INPUT	-F, --flush 清空  例: iptables -F INPUT	-Z, --zero 链表归零 例: iptables -Z INPUT	-N, --new-chain 建立链表 例: iptables -N allowed	-X, --delete-chain 删除链表 例: iptables -X allowed	-P, --policy 设置默认的target  	例: iptables -P INPUT DROP	-E, --rename-chain 重命名链表  	例: iptables -E allowed disallowed	match:	-p, --protocol 匹配协议 /etc/protocols 定义 ALL 指 TCP UDP ICMP  例: iptables -A INPUT -p tcp		隐含匹配:		TCP matches		 	--sport, --source-port  TCP包的源端口来匹配包 例: iptables -A INPUT -p tcp --sport 22 || [22:80]			--dport, --destination-port TCP包的目的端口来匹配包 例: iptables -A INPUT -p tcp --dport 22			--tcp-flags 匹配指定的TCP标记:SYN,FIN,ACK SYN			--tcp-option 根据匹配包 		UDP matches			--sport, --source-port 类似TCP			--dport, --destination-port 类似TCP		ICMP matches			--icmp-type 	-s, --src, --source IP源地址匹配 取反 --source ! 192.168.0.0/24  例: iptables -A INPUT -s 192.168.1.1	-d, --dst, --destination IP目的地址匹配 类似 -s	-i, --in-interface 匹配进入网卡 取反 -i ! eth0  例: iptables -A INPUT -i eth0	-o, --out-interface 匹配出去网卡 取反 -i ! eth0  例: iptables -A INPUT -i eth0	-f, --fragment 匹配一个被分片的包	-m 		显式匹配:		Limit match			--limit iptables -A INPUT -m limit --limit 3/hour			--limit-burst iptables -A INPUT -m limit --limit-burst 5		MAC match 			--mac-source 还只能在PREROUTING,FORWARD 和INPUT链里使用 例: iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01		Multiport match 多端口			--source-port iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110			--destination-port iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110			--port iptables -A INPUT -p tcp -m multiport --port 22,53,80,110		Owner match 包生产者匹配			--uid-owner 指定用户 例: iptables -A OUTPUT -m owner --uid-owner 500			--gid-owner 指定组			--pid-owner 指定进程			--sid-owner 会话ID		State match 包状态匹配			--state 例:iptables -A INPUT -m state --state RELATED,ESTABLISHED		TOS match TOS字段匹配			--tos 例: iptables -A INPUT -p tcp -m tos --tos 0x16		TTL match TTL值匹配			--ttl 例: iptables -A OUTPUT -m ttl --ttl 60target/jump:	--jump 跳转到指定表 iptables -A INPUT -p tcp -j tcp_packets (前提:iptables -N tcp_packets)	ACCEPT target 		-j ACCEPT 跳出以下匹配,通过IPTABLE	DNAT target		--to-destination  指定要写入IP头的地址,这也是包要被转发到的地方		例: iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10	DROP target 		DROP 另一个方法 REJECT	LOG target 记录日志		--log-level 告诉iptables和 syslog使用哪个记录等级		--log-prefix 告诉iptables在记录的信息之前加 上指定的前缀		--log-tcp-sequence 把包的TCP序列号和其他日志信息一起记录下来		--log-tcp-options 记录TCP包头中的字段大小不变的选项		--log-ip-options  记录IP包头中的字段大小不变的选项	MARK target 只能在本地的mangle表		设置mark值,这个值是一个无符号的整数	MASQUERADE target		是颠倒IP头中的源目地址 	QUEUE target		这个target为用户空间的程序或应用软件管理包队列	REDIRECT target		在防火墙所在的机子内部转发包或流到另一个端口 只能用在nat表的PREROUTING、OUTPUT链和被它们调用的自定义链里		--to-ports 例: iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080	REJECT target		REJECT和DROP基本一样,区别在于它除了阻塞包之外, 还向发送者返回错误信息		--reject-with 指定只针对某些协议返回错误  iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset	RETURN target		它使包返回上一层,就是若包在子链 中遇到了RETURN,则返回父链的下一条规则继续,若在父链,被缺省的策略(一般是ACCEPT或DROP)操作	SNAT target		做源网络地址转换的,就是重写包的源IP地址,SNAT只能用在nat表的POSTROUTING链里		例: iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000	TOS target		TOS是用来设置IP头中的Type of Service字段的 利用包的头部来传递路由信息,TOS是唯 一的办法	TTL target		TTL可以修改IP头中Time To Live字段的值 TTL只能在mangle表内使用		例:iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64	ULOG target		ULOG可以在用户空间记录被匹配的包的信息,这些信息和整个包都会通过netlink socket被多播。		--ulog-nlgroup  指定向哪个netlink组发送包 例:iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-nlgroup 2		--ulog-prefix  使用方法和 LOG的prefix一样		--ulog-cprange 指定每个包要向“ULOG在用户空间的代理”发送的字节数 默认0 iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-cprange 100		--ulog-qthreshold 告诉ULOG在向用户空间发送数据以供记录之前 iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-qthreshold 10