管好你的服务器之防火墙篇

要管好你的服务器,装个防火墙是必须的。所谓防火墙,其实就是网络包过滤功能,在linux中由netfilteriptables组成。netfilter是内核的一部分,由一些包过滤规则表组成。内核会通过这些规则表来对流入和流出的包进行过滤和处理。iptables运行于用户空间,可以修改netfilter的过滤规则表,从而实现对网络包的流向控制。因此,iptables就是linux防火墙的关键部分了,咱们就来看看它的使用方法。

过滤规则介绍

iptables是用来修改内核空间的过滤规则的,那么这些过滤规则都有什么呢?要掌握这些过滤规则,首先得知晓三个词:TableChainRule,对应中文翻译就随缘吧。初学者往往被这三个词搅的昏天黑地,不知所以。

首先Table有四个,分别是rawmanglenatfilter。每个Table下面有相应的Chain,主要有PREROUTINGINPUTOUTPUTPOSTROUTINGFORWARD,要注意的时并非每个表都有这5中Chain。每个Chain下有多条Rule,这些Rule决定了网络包的流向,如是否接受、拒绝或者转发等等。接下来咱们就通过下面这张图来一步一步讲解下这三个词的意义。

iptables_good.png

上图描绘了一个网络包在进入内核空间后将会经过的各个表和其对应的链。一个网路包进入内核后,先进入PREROUTING链,从名字上我们也可以看出,该链是在路由之前可以对包进行操作。所谓路由,就是按照包的目的地址来决定包下一步的去向。网络表依次通过rawmanglenat表的PREROUTING链,如果匹配了其中的Rule,则做出对应的修改,比如可以在nat表中添加修改包目的地址的操作。接下来会进行一个简单地路由判断,如果包是发到本网卡的(根据目的IP地址判断),那么进入INPUT链,否则进入FORWARD链。所谓FORWARD,可以理解为转发,就是说这个包不是给我的,但我知道怎么把这个包转给它的目标地址。该功能默认是关闭的,需要修改/etc/sysctl.conf文件,将net.ipv4.ip_forward设为1才能使用,否则所有forward的包都会被舍弃。INPUTOUTPUT链可以用来限制访问本地的网络包,如放行、拦截等操作。INPUTFORWARD链最终进入POSTROUTING链,即路由后对包进行的操作。当访问lo接口时,不会走natPREROUTING链。

conntrack问题

不再记录conntrack信息

-P PREROUTING ACCEPT
-P OUTPUT ACCEPT
-A PREROUTING -s 10.0.0.0/24 -d 10.0.0.0/24 -j NOTRACK
-A PREROUTING -d 127.0.0.1/32 -j NOTRACK
-A PREROUTING -p tcp -m tcp --dport 80 -j NOTRACK
-A OUTPUT -s 10.0.0.0/24 -d 10.0.0.0/24 -j NOTRACK
-A OUTPUT -d 127.0.0.1/32 -j NOTRACK
-A OUTPUT -p tcp -m tcp --sport 80 -j NOTRACK

Netfilter讲解
http://blog.csdn.net/dog250/article/details/6572779

[参考资料]

  1. 乌云iptables
  2. iptables wiki
  3. 学习使用 iptables

标签: none

添加新评论