2008年10月9日星期四

linux网络管理员指南读后对iptables的理解


iptables将通信数据分为3个处理点,分别是filter,nat,mangle

filter代表过滤操作.
nat代表转址
mangle代表拆分,其实也是转址的一种.

filter是过滤入站,出站包的检查站(可以叫检查站)
nat是转址之用,当你只有一个IP地址,而有数个电脑时.就需要用到NAT.
nat分为SNAT,DNAT.下面分别解释一下SNATDNAT
SNAT意思为源地址转换,如果只有一个合法地址,其它主机得用保留地址.保留地址是无法与外部通信的.保留地址为10.0.0.0/8  172.16-31.0.0/16  192.168.1.0/24  
保留地址的主机要与外部通信,必须要有一个合法的网络IP地址.为什么不行,原因很简单,因特网没有到这些地址的路由.
SNAT流程:
保留地址的主机---->执行源网络地址转换的主机---->将源地址改为合法地址,目的地址不变---->网关主机用合法地址去请求源码要请求的数据---->接着将数据返回给源地址.
实例:iptables
-t nat -A POSTROUTING -o eth0 -s 192.168.100.0/24 -p tcp  -j
SNAT --to 218.84.9.X

将源络192.168.100/24访问internet转址成218.84.9.X
-p
参数为协议,只有ip标头为tcp的才执行转址,如果是udp,icmp就不干活了.可以将tcp改为ALL

DNAT意思是目的地址转换,这是地址转换的另一种,只不过用处不同.与保留地址也脱不了干系.这种转址也是为保留地址开发的
既然保留地址无法与外界通信,哪么外界主机要想与保留地址的主机通信,哪也得执行转址.
源地址:internet
目的地址:本地  端口:80  内部主机要提供http服务.internet主机的请求并不能进入内部主机.这时可在网关主机上执行DNAT.
实例:
iptables -t nat -A PREROUTING -p tcp -d 218.84.9.X --dport 80 -j DNAT
--to-destination
192.168.1.20

将外部请求218.84.9.X应答的HTTP服务转交给内部主机192.168.1.20
. -p
[tcp|udp|icmp|ALL]

nat正是iptables的拿手好戏,只需要几个命令,就可以实现一台路由器的功能.简单吧.

检查站的五个检查兵(应该可以这么理解的,他们与filter.net.mangle有着某着从属关系)
INPUT
OUTPUT FORWARD PREROUTING POSROUTING

input 
 internet
连接本地,意为输入.本地进程监听远程的连接
output  本地连接internet,意为输出.是本地进程所产生的包。
forward
这个命令应用在机器存在二块以上网卡的情形中.意思是当数据进入一块网卡,又离开,或者进入了别一块网卡.
prerouting
进入系统的有效包.说明在本地主机已经找到目的地址了.一般应用在SNAT/DNAT转址上.
posrouting
数据包已经进入,但马上要离开.该命令应用在ip伪装及snat.



防火墙规则匹配条件
iptables内置了osi协议模形.所以支持tcp/ip标头匹配条件.每个数据包里都有目的地址,源地址,源端口,目的端口.使用的协议等,讲到这,相信你也明白为什么防火必须在网络层了吧.防火墙对应用层的程序是一无所知的,应用层的程序如果发生网络应用,则要经过网络层,iptables就是内置在网络层的拦路虎,对过往数据按照规则逐一进行检查.如果匹配,放过.不匹配,拒绝.或者按默认设定的政策进行处理.

-s
(
代表源地址
 -s
 www.g.cn |
-s 191.1.2.4   
支持域名IP,0/0表示所有地址
-d
(
代表目的地址)
-d
 www.g.cn |
-d 218.84.9.251
支持域名IP,0/0表示所有地址
--dport(代表目的端口)
--dport 80 | --dport 80-85(80.81
一直到85)
80:85
单选8085 
--sport(代表源端口)
--sport 80 | --dport 80-85(80.81
一直到85)
80:85
单选8085

-p
(protocol
协议)
-p
[TCP | UDP | ICMP | ALL] ALL
选项表示匹配所有协议

-j
(operating
操作,对数据判断之后的后续操作)
-j
[ACCEPT | DROP | LOG | MARK | REJECT | TTL | MASQUERADE | SNAT |
DNAT]

-j的操作选项还有很多,这里并没有一一列出.挑选几个重要的说
ACCEPT
允许,让数据包继续进入下一检查点.
DROP 
 
拒绝,数据包在此检查点消失
LOG 
  LOG
当然是日志了,log还有许多选项的,比喻info
REJECT
抵抗,抵抗与拒绝不同,抵抗还表示与敌方有通话.DROP则表示不理睬你了.REJECT会给对方一个拒绝的回应
TTL 
 
数据包的生期周期,随你的爱好设置,微软的是64,google245,freebsd.org53,kernel.org51  设置过高浪费占用带宽.最高不要超过255
MASQUERADE
也是地址转换的一种,只不过是应用在动态地址上.它与网络接口存在着某种关系
SNATDNAT已经讲过了

-o
output  eth0
内网接口
-i  input 
   eth1
去往internet的接口


来几条命令吧,让你对iptables有点感觉
iptables
-P INPUT DROP

iptables
-t filter -a INPUT -s 0/0 -p tcp --dport 22 -j DROP

iptables
-t filter -a OUTPUT -d 0/0 --dport 80 -p tcp -j ACCEPT

iptables
-t filter -a FORWARD -d
 www.microsoft.com -p
ALL -j
DROP

第一条命令是设置INPUT检查点的缺省规则为拒绝
第二条命令是过滤internet来本地的22端口,协议为tcp,操作为拒绝
第三条命令是:本地请求internet80数据为允许
第四条命令是:去往www.microsoft.com的数据包全部拒绝


语法及用法FAQ:
问我写好了规则,我想保存规则怎么办
:/etc/init.d/iptables
save     //[stop | start]


问我想清空所有规则
iptables
-F       //
清空所有规则
iptables
-t nat -F   //
清空nat表规则

开机启动iptables
/etc/rc.d/rc.local 
 
添加/etc/init.d/iptables
start
或者chkconfig 

寻求帮助
iptables
-p tcp --help     //
单项帮助
iptables
--help          
   //
整项帮助
iptables
-s --help         
//
举一反三

实现路由器功能
将此行echo
"1" >
/proc/sys/net/ipv4/ip_forward
加入开机启动项或者去/etc/sysctl.conf更改
因定IP加此行,原理上面有
iptables
-t nat -A POSTROUTING -o eth0 -s 192.168.100.0/24 -p tcp  -j
SNAT --to 218.84.9.X

动态ip加此行,原理上面有  iptables
-t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -j MASQUERADE
看到这行有个PPP0没有,留你个问题,你想去吧







继续编写中........ 
   
小弟并没有电脑,只有凭以前从书上看到的及偶尔能摸一次linux的机会去回忆这些命令,所以并不能保证命令的正确,这些命令并没有在实例中证实是否可行,如果哪位兄弟的机器不是生产用机。希望能提供个ssh环境,非常感谢
QQ:3645636
近期在研究squid
. Vs/dr









没有评论: