马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Linux包过滤的发展史
l Ipfw 1994, coming from BSD, 内核2.0,工具ipfwadm
l Ipchains 1998, based on the ipfw, 内核 2.2,工具ipchains
l Netfilter 1999, based on the ipchains, 内核2.3.15~2.4, 工具iptables
(包过滤源代码直接嵌入在内核中,工具iptables作为一个模块,可以嵌入,也可以不)
Iptables
新一代的工具,比ipchains和ipfwadm更加强大,对IPv6的支持更好。
Iptables快速指南
大多数人只有一个单独的PPP连接到Internet,但是不想任何人访问他们的内部网络或者放火墙,可以如下设置:
## Insert connection-tracking modules (not needed if built into kernel).
# insmod ip_conntrack
# insmod ip_conntrack_ftp
## Create chain which blocks new connections, except if coming from inside.
# iptables -N block
# iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A block -m state --state NEW -i ! ppp0 -j ACCEPT
# iptables -A block -j DROP
## Jump to that chain from INPUT and FORWARD chains.
# iptables -A INPUT -j block
# iptables -A FORWARD -j block
包如何通过netfilter
内核在过滤表中维持了3个规则列表,这些列表叫做firewall chains。这3个chains分别叫做INPUT, OUTPUT 和FORWARD。如下图:
Incoming /---------\ Outgoing
----------->[Routing ]--->|FORWARD|------------->
[Decision] \_____/ ^
| |
v ____
___ / \
/ \ |OUTPUT|
|INPUT| \____/
\___/ ^
| |
-----> Local Process -----------
当包经过相应的chain时,这个chain将决定这个包的命运。如果chain认为DROP,就丢弃这个包;如果认为ACCEPT就继续在图中旅行。每一个chain是众多规则的检查表。规则的格式为:“如果包头部看起来象某个东西,然后对这个包做某个动作”。如果一条规则与包头部不匹配,继续检查chain中的下一条规则。一旦找到匹配的,执行相应的动作。否则,一条匹配的都没有,就检查chain的安全策略。通常是DROP。过程如下:
l 当一个包到达(如以太网接口),内核首先检查包的目的地址,这叫做“路由”
l 如果包的目的地址是本机,包将继续在上图中旅行,到达INPUT chain,如果通过了这个chain,那么任何需要这个包的进程都可以收到
l 目的地不是本机,如果内核不允许包转发,或者不知道如何转发,DROP这个包;如果内核允许转发,并且包需要经过另一块网络接口(在您的机器上至少有两个网络接口),那么包将在图中旅行到FORWARD chain,如果通过这个chain,包就可以送出了
l 本机程序发出的包必须经过OUTPUT chain,如果能够通过这个chain,那么这个包就可以送到相应的网络接口并发出
使用iptables
iptables有一个非常详细的帮助文件(man iptables),跟ipchains有很多类似之处。
下面列出管理chain的一些参数:
Create a new chain (-N). 产生一个新的chain
Delete an empty chain (-X). 删除一个空的chain
Change the policy for a built-in chain. (-P). 修改安全策略
List the rules in a chain (-L). 列出chain的规则
Flush the rules out of a chain (-F). 清空所有规则
Zero the packet and byte counters on all rules in a chain (-Z). 所有规则包和字节数清零
管理一个chain内部的规则:
Append a new rule to a chain (-A). 加入一个新的规则
Insert a new rule at some position in a chain (-I). 在一个chain的某个位置加入新的规则
Replace a rule at some position in a chain (-R). 在一个chain的某个位置替换规则
Delete a rule at some position in a chain (-D). 在一个chain的某个位置删除规则
Delete the first rule that matches in a chain (-D). 删除与chain匹配的第一条规则
[emb6][emb6]
[本贴已被 网路游侠 于 2003-10-29 17:25:41 修改过][/COLOR][/ALIGN] |