linux下 iptables配置防火墙

netfilter的工作原理

我们以系统缺省的表为“filter”为例进行讲解。该表中包含了INPUT、 FORWARD和OUTPUT 3个链。每一条链中可以有一条或数条规则,每一条规则都是这样定义的“如果数据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件: 如果满足,系统 根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略(policy)来处理该数据包。当有数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链,则可能有以下三种情况:
(1)如果数据包的目的地址是本机,则系统将数据包送往INPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉;
(2)如果数据包的目的地址不是本机,也就是说,这个包将被转发,则系统将数据包送往FORWARD链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉;
(3)如果数据包是由本地系统进程产生的,则系统将其送往OUTPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉。

1、iptables有关的重要名词解释

netfilter提供了一系列的表,每个表由若干条链组成,而每条链又是由一条或数条规则组成。下面介绍一下在应用iptables会碰到的一些名词。
(1)规则:设置过滤数据包的具体条件,如IP地址、端口、协议、网络接口等。
(2)动作:当netfilter检测数据包符合制定的规则后,则会对该数据包进行相应的处理,处理的方式如下:

动作 说明
ACCEPT 允许数据包通过
DROP 丢弃数据包
REJECT 丢弃数据包并返回错误信息
LOG 将符合该规则的数据写入日志
QUEUE 传送给应用程序处理该数据包

(3)链:数据包在传递过程中,不同情况下所要遵循的规则组合形成了链。链可以分为内置链和用户自定义链。我们常用的是内置链,它一共有5个链,如下所示:

链名 相关的动作
PREROUTING 数据包进入路由表之前
INPUT 通过路由表后目的地为本机
FORWARD 通过路由表后,目的地不为本机
OUTPUT 由本机产生,向外转发
POSTROUTIONG 发送到网卡接口之前

(4)表:Netfileter根据处理数据的需要设计了三张表,表名分别是filter(该表为netfilter默认的表)、nat和mangle,这三张表的相关功能及分别对应的内置链如下所示:

表名 作用 内置链
filter netfilter默认的表,用于过滤设置 INPUT、FORWARDING、OUTPUT
nat 完成地址转换 ORWARDING、OUTPUT、POSTROUTIONG
mangle 用在数据包特殊变更操作 全部的内置链
3、iptables的基本语法格式及分析

iptables的基本语法格式如下:
iptables [-t table] command [match] -j [target/jump ]
–t参数来设置对哪一张表生效,默认是filter表。如果是要对nat操作,则需要注明-t nat。
Command告诉程序该做什么,如:插入、或删除一个规则。如-A是代表在所选择的链的最后添加一条规则;而-D则是从所选的链中删除规则。
Match是用来指定过滤数据包所参照的条件。如源IP地址、网络接口、端口、协议类型等。如-p tcp代表针对TCP协议;-s 10.0.0.1是指针对源地址
为10.0.0.1的数据包;-i eth0是针对本地所使用的eth0网络接口。
Target/jump:通过对数据包与所有规则的匹配结果,内核将做出相应的处理动作。如-j ACCEPT表示当信息包与具有ACCEPT目标的规则完全匹配时会被接受(允许它前往目的地)。

猜你喜欢

转载自blog.csdn.net/qj6837/article/details/84798099