http://www.cnblogs.com/davidwang456/p/3540837.html
http://lesca.me/archives/iptables-examples.html
http://blog.chinaunix.net/uid-29442-id-2134000.html
对linux而言tcp/ip协议栈是在内核当中,意味着报文的处理是在内核中处理的,也就是说防火墙必须在工作在内核中,防火墙必须在内核中完成tcp/ip报文所流进的位置,用规则去检查,才真正能工作起来。
iptables用来衡量tcp/ip报文的属性:源ip、目标ip、源端口、目标端口;
1. 表:
mangle: 改变包的(TOS/TTL/MARK)属性。建议不加任何过滤。
nat: 用于转换包的源地址和目标地址。流的第一个包会进行匹配,后面的包会做按第一个包一样处理。包括DNAT/SNAT/MASQUERADE。
filter: 用于过滤,对包的抉择ACCEPT或者DROP。
2. 链:
PREROUTING: 所有进入的包最先进入的链
POSTROUTING: 所有发送包最后通过的链
INPUT: 进入本地的链
OUTPUT: 本地发送出去的链
FORWARD: 转发的链,不进入本地
通常有三种状态:
a) 进入本地的包:NETWORK-->(mangle)PREROUTING-->(nat)PREROUTING-->-->(mangle)INPUT-->(filter)INPUT-->
b) 从本地发出的包:-->(mangle)OUTPUT-->(nat)OUTPUT-->(filter)OUTPUT-->(mangle)POSTROUTING-->(nat)POSTROUTING-->NETWORK
c) 路由的包:NETWORK-->(mangle)PREROUTING-->(nat)PREROUTING-->-->(mangle)FORWARD-->(filter)FORWARD-->(mangle)POSTROUTING-->(nat)POSTROUTING-->NETWORK
iptables基本概念
对linux来说,是能够实现主机防火墙的功能组件,如果部署在网络边缘,那么既可以扮演网络防火墙的角色,而且是纯软件的
网络数据走向:
请求报文à网关à路由à应用程序(等待用户请求)à内核处理à路由à发送报文
iptables规则功能
表:
filter主要和主机自身有关,主要负责防火墙功能 过滤本机流入流出的数据包是默认使用的表;
input :负责过滤所有目标地址是本机地址的数据包,就是过滤进入主机的数据包;
forward :负责转发流经主机但不进入本机的数据包,和NAT关系很大;
output :负责处理源地址的数据包,就是对本机发出的数据包;
NAT表:
负责网络地址转换,即来源于目的IP地址和端口的转换,一般用于共享上网或特殊端口的转换服务
snat :地址转换
dnat :标地址转换
pnat :标端口转换
mangle 表:
将报文拆开来并修改报文标志位,最后封装起来
5个检查点(内置链)
·PREROUTING
·INPUT
·FORWORD
·OUTPUT
·POSTROUTING
多条链整合起来叫做表,比如,在input这个链,既有magle的规则也可能有fileter的规则。因此在编写规则的时候应该先指定表,再指定链
netfilter主要工作在tcp/ip协议栈上的,主要集中在tcp报文首部和udp报文首部
具体实践:
1、先打开IP转发功能:
echo "1">/proc/sys/net/ipv4/ip_forward
通过以下命令可以查到返回值为1,表示打开成功
有些机器如果是DHCP PPPOE的话还要打开
echo "1" >/proc/sys/net/ipv4/ip_dynaddr
cat /proc/sys/net/ipv4/ip_forward
2、之后执行iptables命令,执行iptables命令需要在root权限下,所以在此之前先将模式切换至root
iptables -F
iptables -F -t nat
iptables -X
iptables -P FORWARD ACCEPT
3、路由转发规则设置
iptables -t nat -A PREROUTING -d 42.156.141.75 -p 6 --dport 80 -j DNAT--to 10.1.8.171:80
iptables -A FORWARD -p 6 -d 10.1.8.171 --dport 80 -j ACCEPT
iptables -nL 查看普通表规则
(iptables-t nat -L 查看NAT表规则)
iptables -nL 查看普通表规则
(iptables-t nat -L 查看NAT表规则)