目录
前言
在Internet中,通过架设各种服务器为用户提供各种网络服务,怎样保护这些服务器,过滤恶意的访问、入侵呢?这里主要介绍Linux系统中的防火墙——netfilter和iptables,包括防火墙的结构和匹配流程,以及如何编写防火墙规则 。
一、概述
Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包进行过滤和限制,属于典型的包过滤防火墙。它基于内核编码实现,具有非常稳定的性能和高效率,也因此得到了广泛的应用。netfilter和iptables都可以用来指Linux防火墙,它们的区别如下:
netfilter:在Linux内核中实现防火墙的内部结构,不以文件或程序的形成存在,属于“内核态”的防火墙功能体系。
iptables:用来管理Linux防火墙的命令程序,通常位于/sbin/iptables目录下,属于“用户态”的防火墙管理体系。
二、 iptables 的表、链结构
1、概念
iptables的作用是为包过滤机制的实现提供规则,通过各种不同的规则,告诉netfilter对来自某些源,前往某些目的或具有某些协议特征的数据包应该如何处理,为了更加方便的组织和管理防火墙规则,iptables采用了表和链的分层结构。
2、四表(规则表)
raw:主要用来决定是否对数据包进行状态跟踪 包含两个规则链,OUTPUT、PREROUTING。
mangle : 修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING。
nat:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。
filter:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个链,即PREROUTING、POSTROUTING、OUTPUT。
规则表的作用:容纳各种规则链;
表的划分依据:防火墙规则的作用相似。
3、五链(规则链)
INPUT: 处理入站数据包,匹配目标IP为本机的数据包。
OUTPUT: 处理出站数据包,一般不在此链上做配置。
FORWARD: 处理转发数据包,匹配流经本机的数据包。
PREROUTING链: 在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。
POSTROUTING链: 在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。
规则链的作用:容纳各种防火墙规则;
规则的作用:对数据包进行过滤或处理 ;
链的分类依据:处理数据包的不同时机
4、数据包过滤的匹配流程
4.1 规则表应用顺序
raw→mangle→nat→filter
4.2 规则链之间的顺序
入站数据:当外界的数据包到达防火墙时,首先被PREROUTING链处理,然后进行路由选择,如果数据包的目标地址是本机,那么就将其传递给INPUT链进行处理,通过以后交给上层的应用程序进行响应。(PREROUTING --> INPUT --> 本机的应用程序)
转发数据:当外界的数据包到达防火墙时,首先被PREROUTING链处理,然后进行路由选择,如果数据包的目标地址是其他外部地址,则将其传递给FORWARD链进行处理,最后交给POSTROUTING链进行处理。(PREROUTING --> FORWARD --> POSTROUTING)
出站数据:防火墙本机向外部发送数据包时,首先被OUTPUT链处理,然后进行路由选择,再交给POSTROUTING链进行处理。(本机的应用程序-->OUTPUT-.>POSTROUTING)
4.3 规则链内的匹配顺序
自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志),
若在该链内找不到相匹配的规则,则按该链的默认策略处理。
三、编写防火墙规则
1、iptables 命令基本语法
基本的命令格式:
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
表名、链名:用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表;
管理选项: 表示iptables规则的操作方式,如插入、增加、删除、查看等;
匹配条件: 用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理;
控制类型:指的是数据包的处理方式,如允许、拒绝、丢弃等。
2、数据包的常见控制类型
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给出任何回 应信息。
REJECT:拒绝数据包通过,必要时会给数据发送端一个