iptables简介及规则设置

iptables规则设置
由于作为web服务器来使用,所以对外要开放 80 端口,另外肯定要通过ssh进行服务器管理,22 端口也要对外开放。

第一步:清空所有规则。 [root@linux ~]#** iptables -F** [root@linux ~]#** iptables –X** [root@linux ~]#** iptables –Z** 第二步:设置规则。 允许来自于lo接口的数据包,如果没有此规则,你将不能通过127.0.0.1访问本地服务。 [root@linux ~]#** iptables -A INPUT -i lo -j ACCEPT** 开放TCP协议22端口,以便能ssh。 [root@linux ~]#** iptables -A INPUT -p tcp --dport 22 -j ACCEPT** 开放TCP协议80端口供web服务。 [root@linux ~]#** iptables -A INPUT -p tcp --dport 80 -j ACCEPT** 接受ping。 [root@linux ~]#** iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT** 让本机主动向外要求而响应的封包可以进入本机。 [root@linux ~]#** iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT** 屏蔽上述规则以外的所有请求,不可缺少,否则防火墙没有任何过滤的功能。 [root@linux ~]#** iptables -P INPUT DROP** 查看规则是否生效。 [root@linux ~]#** iptables -L -n** 我们需要做的最后一件事情,就是存储我们的规则,好让它们在下次开机时会自动被重新装入。 [root@linux ~]#** /etc/init.d/iptables save**
**iptables简介CentOS**

iptables 是由 Linux 核心所提供利用封包过滤的机制,由于直接经过核心来处理,因此效能非常好!他会分析封包的表头数据。根据表头数据与定义的规则来决定该封包是否可以进入主机或者是被丢弃。 意思就是说:根据封包的分析资料 “比对” 你预先定义的规则内容, 若封包数据与规则内容相同则进行动作,否则就继续下一条规则的比对!

封包过滤的规则动作及分析流程

当一个网络封包要进入到主机之前,会先经由 NetFilter 进行检查,那就是 iptables 的规则了。 检查通过则接受 (ACCEPT) 进入本机取得资源,如果检查不通过,则可能予以丢弃 (DROP) !iptables规则是有顺序的!例如当网络封包进入 Rule 1 的比对时, 如果比对结果符合 Rule 1 ,此时这个网络封包就会进行 Action 1 的动作,而不会理会后续的 Rule 2, Rule 3…. 等规则的分析了。

而如果这个封包并不符合 Rule 1 的比对,那就会进入 Rule 2 的比对了!如此一个一个规则去进行比对就是了。 那如果所有的规则都不符合怎办?此时就会透过预设动作 (封包政策, Policy) 来决定这个封包的去向。

iptables 的表格与相关链示意图

而预设的情况下,Linux 的 iptables 至少就有三个表格,包括管理本机进出的 filter 、管理后端主机 (防火墙内部的其他计算机) 的 nat 、管理特殊旗标使用的 mangle (较少使用) 。每个表格与其中链的用途分别是这样的:

filter (过滤器):主要跟进入 Linux 本机的封包有关,这个是预设的 table 喔!

INPUT:主要与想要进入我们 Linux 本机的封包有关;

OUTPUT:主要与我们 Linux 本机所要送出的封包有关;

FORWARD:这个咚咚与 Linux 本机比较没有关系, 他可以『转递封包』到后端的计算机中,与下列 nat table 相关性较高。

nat (地址转换):是 Network Address Translation 的缩写, 这个表格主要在进行来源与目的之 IP 或 port 的转换,与 Linux 本机较无关,主要与 Linux 主机后的局域网络内计算机较有相关。

PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)

POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)

OUTPUT:与发送出去的封包有关

mangle (破坏者):这个表格主要是与特殊的封包的路由旗标有关, 早期仅有 PREROUTING 及 OUTPUT 链,不过从 kernel 2.4.18 之后加入了 INPUT 及 FORWARD 链。 由于这个表格与特殊旗标相关性较高,所以像咱们这种单纯的环境当中,较少使用 mangle 这个表格。

所以说,如果你的 Linux 是作为 www 服务,那么要开放客户端对你的 www 要求有响应,就得要处理 filter 的 INPUT 链;

iptables 内建各表格与链的相关性

iptables 可以控制三种封包的流向:

封包进入 Linux 主机使用资源 (路径 A): 在路由判断后确定是向 Linux 主机要求数据的封包,主要就会透过 filter 的 INPUT 链来进行控管;

封包经由 Linux 主机的转递,没有使用主机资源,而是向后端主机流动 (路径 B): 在路由判断之前进行封包表头的修订作业后,发现到封包主要是要透过防火墙而去后端,此时封包就会透过路径 B 来跑动。 也就是说,该封包的目标并非我们的 Linux 本机。主要经过的链是 filter 的 FORWARD 以及 nat 的 POSTROUTING, PREROUTING。

封包由 Linux 本机发送出去 (路径 C): 例如响应客户端的要求,或者是 Linux 本机主动送出的封包,都是透过路径 C 来跑的。先是透过路由判断, 决定了输出的路径后,再透过 filter 的 OUTPUT 链来传送的!当然,最终还是会经过 nat 的 POSTROUTING 链。

由于 mangle 这个表格很少被使用,如果将mangle 拿掉的话,那就容易看的多了:

iptables 内建各表格与链的相关性(简图)

事实上与本机最有关的其实是 filter 这个表格内的 INPUT 与 OUTPUT 这两条链。