- 论坛徽章:
- 4
|
错误之处,还请前辈多多指点
iptables将通信数据分为3个处理点,分别是filter,nat,mangle
filter代表过滤操作.
nat代表转址
mangle代表拆分,其实也是转址的一种.
filter是过滤入站,出站包的检查站(可以叫检查站)
nat是转址之用,当你只有一个IP地址,而有数个电脑时.就需要用到NAT.
nat分为SNAT,DNAT.下面分别解释一下SNAT与DNAT
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单选80与85
--sport(代表源端口) --sport 80 | --dport 80-85(80.81一直到85) 80:85单选80与85
-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,google是245,freebsd.org是53,kernel.org是51 设置过高浪费占用带宽.最高不要超过255
MASQUERADE 也是地址转换的一种,只不过是应用在动态地址上.它与网络接口存在着某种关系
SNAT与DNAT已经讲过了
-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,操作为拒绝
第三条命令是:本地请求internet的80数据为允许
第四条命令是:去往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没有,留你个问题,你想去吧
继续编写中........
感谢哪些与我争执shorewall与iptables问题的人,因为你们我才学习了iptables,要不然我还在用shorewall
http://linux.chinaunix.net/bbs/thread-1022759-1-1.html
[ 本帖最后由 3645636 于 2008-10-9 18:07 编辑 ] |
|