- 论坛徽章:
- 0
|
本文A部分是从iptables-HOWTO翻译过来的,已经用红字标注,觉得很有用,截过来了。蓝色部分是需要注意的问题.
这里仅仅是filter table 其他的高级路由的时候再研究。。。
PS:有朝一日,我们会让前辈们看到,我们是以何种姿态对待后来者...............^_^
A:iptables基本。
1,网络基础
网络上的数据以包为单位传输,包的头一部分包含了源地址,目的地址,还有一些管理的细节,这一部分成为header.包的剩下的部分包括传输的文件,成为body.
有一些协议,比如tcp,会在数据传输之前建立一个链接,这些特殊的包会有特殊的头部来表明他的身份,请求,确认,或应答.
2,什么是包过滤器?
包过滤器是一系列的软件B,这些软件,可以检查包的头部,来确定包的命运。
在linux下,包过滤器是建立在内核的基础上的,也就是说作为模块存在于内核中。
3,为什么我们需要包过滤?
控制,保密,watchfulness(警觉)。
控制:对进出主机的数据包进行控制。
保密:你可以控制对主机的访问,这些访问有些是可能存在潜在威胁的。
watchfulness(警觉):不时会有错误的设定的主机,大量的向外发包(很可能已经被控制),包过滤可以解决这样的问题,避免本地主机被控制对外地主机进行的侵害。
4,包是怎么样通过过滤器的
过程:
1),当一个包通过网卡过来的时候,kernel首先检查他的目的地址,这个过程称作"routing"。
2),如果确定是本机的那么,包会通过INPUT链,如果包被accept,那么所有等待包的本机进程会去接受他。
3),反之,如果本机主机没有设定forward,包会被丢弃,如果本地主机设定了forward,并且包被forward链accept,那么包会被扔到另一个网络接口(网卡,或者串口),转发出去。
4),本地主机的进程同样可以发送包,如果包被output链accept,那么他会被扔到特定的接口转发出去(这个接口可以是任意的)。
由以上的规则,我们可以明白一些在做iptables时所必须注意的问题。
5,使用iptables.
input,output,forward这3个表是不能被删除的。
-N 创建一个新链。
-X 删除一个空链。
-P 改变一个已经存在的链的策略。
-L 列出一个链中的所有规则。
-F 清空一个链中的所有规则
有几种在链里操作规则的方法。
-A 在链里添加一条规则。
-I 在链的某个位置插入一条规则。
-R 在链的某一位置清空这条规则。
-D 在链的某一位置删除这条规则。
在默认的情况下,input和output的策略是accept,forward是0,表示关闭。
以上内容转自iptables-HOWTO
你可以提供内核参数forward=1来改变这一点。^_^,好用的哦,他其实是个内核参数。
6,用户自定义链。
这个链可以相当于一个自定义的target,嘿嘿,方便你做更严谨的设定,比如你想要接受所有的TCP包,但是你缺要检查一下他的握手包syn,那么这个可以很好的用到
B:iptables相关。
在linux下如果要使用iptables,那么必须要关闭另一个放火墙软件ipchains(嘿嘿,听过吧>_
注意:这个两个工具都是要加载模块的,关闭服务,不等于卸载了模块。
services ipchains stop
modprobe -r ipchains (嘿嘿,-r是卸载哦^_^)
iptables是通过加载模块的方法来运行的,当你更改iptables规则的时候,相应的模块会被加载,所以,当你使用iptables命令的时候,要看看完成相应功能的模块有灭有被加载,有的模块是自动的有的则不是,这点很麻烦吧^_^.
lsmod | grep ip
查看IPtables加载的模块,模块的后面是有注释的,你可以自己看。
/etc/sysconfig/iptables是配置文件,很可能没有,没有的话自己建。这个文件的内容可以看的懂的,嘿嘿,可以自己试试。
用nat和IP伪装的时候要注意哦^_^,/etc/sysconfig/sysctl.conf中的net_ipv4_forward=1,也就是说ipv4的转发要打开哦>
C:使用iptables,做些例子.
首先我们想考虑一个情况。
就是lan网中有一个主机做服务器,如下图。
![]()
karon 192.168.0.1
xeno 192.168.0.2
mars 192.168.0.3
eth1 192.168.0.4
eth0 123.66.88.77
主机 192.168.0.4做DNS,FTP,MAIL,WEB服务器,嘿嘿蛮多的>_
恩恩,我们要实现的功能是:
目的:在默认策略都是drop的情况下,我要上网>_
第一步:确定基本策略,由于我们是很严谨的,对对对,我们是很严谨的^_&,所有的默认策略都是扔掉
iptables -P INPUT DROP
iptables -P OUTPUT DROP
第二步: 先在大的方向来确定包的处理方式,我们先不谈端口,一步一步来,简化分析。
lan部分。
先考虑一下,局域网的包究竟可以从那里过来?从本机主机192.168.0.0/254发过来的,他们的共同特点是他们的源地址是192.168.0.0/24网段,至于目的地址,这个恐怕天知道。
还有就是lan的广播包,他们的源地址是不一定的,但是他们的目的地址都是192.168.0.255,以上两种情况的接口都是eth1.这还不够,你的这台服务器,还有他的回环地址,这个破服务器有一点不同,他在局域网中的地址是192.168.0.4,回环地址是127.0.0.1,外网地址是123.66.88.77,接口都是lo,注意的是:外网中发到局域网的包的入站控制,应该是以123.66.88.77为目的地址的包,这也是进网的
iptables -A INPUT -p ALL -i eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p ALL -i eth1 -d 192.168.0.255 -j ACCEPT
iptables -A INPUT -p ALL -i lo -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p ALL -i lo -s 192.168.0.4 -j ACCEPT
iptables -A INPUT -p ALL -i lo -d 123.66.88.77 -j ACCEPT
然后是internet部分,这里我们只检查状态是已经连接的包。在这个命令中防火墙检查的不仅仅是目的地址和源地址,而是其他的一些细节信息,这里的是包的状态。
iptables -A INPUT -p ALL -i eth0 -d 123.66.88.77 -m state --state ESTABLISHED,RELATED -j ACCEPT
ESTABLISHED表明这是一个已经建立链接之后的包,RELATED证明这是个试图链接的包。
这个命令很可能不可用 这个时候你要加载相应的state模块。
然后我们来确定关于协议的部分.
iptables -A INPUT -p TCP -i eth0 -dport 21 -j ACCEPT
iptables -A INPUT -p TCP -i eth0 -dport 22 -j ACCEPT
iptables -A INPUT -p TCP -i eth0 -dport 80 -j ACCEPT
iptables -A INPUT -p UDP -i eth0 -dport 53 -j ACCEPT
iptables -A INPUT -p ICMP -i eth0 --icmp-type 8 -j ACCEPT
iptables -A INPUT -p ICMP -i eth0 --icmp-type 11 -j ACCEPT
这里需要注意的是关于icmp一定要注释这2个,8是用来让别人可以ping到你的机器,11是用来可以返回信息,这个不注意的话会倒霉的,明明可以ping到,但是你收不到信息的>_
还有最后一项使用确定output文件的.
iptables -A OUTPUT -s 123.66.88.77 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -s 192.168.0.4 -j ACCEPT
这里所有的出站包都是自己转发的
这里问为什么这么写,很简单,防止本机主机的伪IP包,嘿嘿,别忘了 ,能够去控制本来不就是你的乐趣么?
问题:这个网络不可以在土豆网看视频>_
嘿嘿,搞定收工
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/36086/showart_321589.html |
|