一 什么是iptables?
- iptables其实是一个命令行工具,位于用户空间,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter。
- netfilter是Linux操作系统核心层的一个数据包处理模块,位于内核空间。工作在OSI七层网络参考模型的第三层,网络层。
二 iptables能做什么?
- 网络地址转换(Network Address Translate)。
- 修改数据包内容。
- 过滤数据包。
三 iptables中四表五链指的是什么?
如果我们想要防火墙能够达到”防火”的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止。
链接: iptables关卡流程图.
如图所示,iptables设置了5个关卡,每个关卡可以有N条规则,这N条规则按照一定的顺序排列,这样就形成了iptables的5链。规则一般的定义为”如果数据包头符合这样的条件,就这样处理这个数据包”。
规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
我们对每个”链”上都放置了一串规则,但是这些规则有些很相似,比如,A类规则都是对IP或者端口的过滤,B类规则是修改报文。我们把具有相同功能的规则的集合叫做”表”,所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能,而我们定义的规则也都逃脱不了这4种功能的范围。
- filter表:负责过滤功能,防火墙;内核模块:iptables_filter
- nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
- mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
- raw表:关闭nat表上启用的连接追踪机制;iptable_raw
四 表和链的关系
我们需要注意的是,某些”链”中注定不会包含”某类规则”,就像某些”关卡”天生就不具备某些功能一样,比如,A”关卡”只负责打击陆地敌人,没有防空能力,B”关卡”只负责打击空中敌人,没有防御步兵的能力,C”关卡”可能比较NB,既能防空,也能防御陆地敌人,D”关卡”最屌,海陆空都能防。
链 | 表 |
---|
prerouting | raw、mangle、nat | input | mangle、nat、filter | output | raw、mangle、nat、filter | forward | mangle、filter | postrouting | mangle、nat |
表的优先级为 raw、mangle、nat、filter
五 规则的概念
规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理。
匹配条件: 由基本匹配条件(如源IP地址,目标IP地址)和扩展匹配条件(源端口、目标端口等)组成。
处理动作:处理动作在iptables中被称为target(这样说并不准确,我们暂且这样称呼),动作也可以分为基本动作和扩展动作。此处列出一些常用的动作,之后的文章会对它们进行详细的示例与总结:
- ACCEPT:允许数据包通过。
- DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
- REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
- SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
- MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
- DNAT:目标地址转换。
- REDIRECT:在本机做端口映射。
- LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
|