iptables防火墙

Linux防火墙基础

在Internet中,企业通过架设各种应用系统来为用户提供各种网络服务,例如Web网站,电子邮件系统,FTP服务器,数据库系统等等,而防火墙就是用来保护这些服务器,过滤企业不需要的访问甚至是恶意的入侵。

Linux防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙。Linux防火墙体系基于内核编码实现,具有非常稳定的性能和高效率,也因此获得广泛的应用。

在许多安全技术资料中,netfilter和iptables都用来指Linux防火墙,往往使读者产生迷惑。netfilter和iptables的主要区别如下所述。

netfilter:指的是linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”的防火墙功能体系。

iptables:指的是用来管理Linux防火墙的命令程序,通常位于/sbin/iptables,属于“用户态”的防火墙管理体系。

正确的认识netfilter和iptables的关系,有助于理解Linux防火墙的工作原理。

iptables的表、链结构

iptables的作用在与为包过滤机制的实现提供规则。通过各种不同的规则,告诉netfilter对来自某些源,前往某些目的或具有某些协议特征的数据包应该如何处理。为了更加方便地组织和管理防火墙规则,iptables采用了“表”和“链”的分层结构。

1.规则表

为了从规则集的功能上有所区别,iptables管理着四个不同的规则表,其功能分别由独立的内核模块实现,这四个表的名称,包含的链,各自的用途如下所述。

filter表:filter表用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包。filter表对应的内核模块为iptable_filter,表内包含三个链:INPUT、FORWARD、OUTPUT。

nat表:nat表主要用来修改数据包的IP地址,端口号等信息。nat表对应的内核模块为iptable_nat,表内包含三个链:PREROUTING、POSTROUTING、OUTPUT。

mangle表:mangle表用来修改数据包的TOS,TTL值,或者为数据包设置mark标记,以实现流量整形,策略路由等高级应用。mangle表对应的内核模块为iptable_mangle,表内包含五个链,PREROUTING、POSTROUTING、INPUT、FORWARD、OUTPUT。

raw表:raw用来决定是否对数据包进行状态追踪。raw表对应的内核模块为iptable_raw,表内包含二个链:OUTPUT、PREROUTING。

2.规则链

在处理各种数据包时,根据防火墙规则的不同介入时机,iptables默认划分为五种不同的规则链。这五种链的名称,各自的介入时机如下所述。

INPUT:当收到访问防火墙本机地址的数据包(入站)时,应用此链。

OUTPUT:当防火墙本机向外发送数据包(出站)时,应用此链。

FORWARD:当接受到需要通过防火墙中转发送给其他地址的数据包(转发)时,应用此链。

PREROUTING:在对数据包作路由选择之前,应用此链。

POSTROUTING:在对数据包作路由选择之后,应用此链。

数据包过滤的匹配流程

1.规则表之间的顺序

iptables管理着四个默认表和五种链,当数据包抵达防火墙时,将依次应用raw、mangle、nat、和filter表中对应链内的规则,应用顺序为:raw -> mangle -> nat -> filter

2.规则链之间的顺序

根据规则链的划分原则,不同链的处理时机是比较固定的,因此规则链之间的应用顺序取决于数据包的流向,具体如下。

入站数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING链处理,然后进行路由选择;如果数据包的目标地址是防火墙本机,那么内核将其传递给INPUT链进行处理,通过以后再交给系统上层的应用程序进行相应。

转发数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING链处理,然后再进行路由选择;如果数据包的目标地址是外部地址,则内核将其传递给FORWARD链进行处理,最后交给POSTROUTING链进行处理。

出站数据流向:防火墙本机向外部地址发送的数据包,首先被OUTPUT链处理,然后进行路由选择,再交给POSTROUTING链进行处理。

3.规则链内部各条防火墙规则之间的顺序

当数据包经过每条规则时,依次按第1条规则、第2条规则、……的顺序进行匹配和处理。链内的过滤遵循“匹配即停止”的原则,一旦找到一条相匹配的规则,则不再检查本链内后续的其他规则。如果比对完整个链,也找不到和数据包相匹配的规则,就按照该规则链的默认策略进行处理。

编写防火墙规则

基本语法、控制类型

iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

其中,表名、链名用来指定iptables命令所操作的表和链,未指定表名时将默认使用filter表;管理选项表示iptables规则的操作方式,如插入、增加、删除、查看等;匹配规则用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理;控制类型指得是数据包的处理方式,如允许、拒绝、丢弃等。

对于防火墙来说,数据包的控制类型非常关键,直接关系到数据包的房型。封堵以及做相应的日志记录等。在iptables防火墙体系中,最常用的几种控制类型如下所述。

ACCEPT:允许数据包通过。

DROP:直接丢弃数据包,不给出任何回应信息。

REJECT:拒绝数据包,必要时会给数据发送端一个响应信息。

LOG:在/var/log/messages文件中记录日志信息,并没有真正的处理数据包。

示例:在filter表(-t filter)的INPUT链中插入一个(-I)一条规则,拒绝(-j REJECT)发送给本机的使用ICMP协议的数据包(-p icmp)

iptables -t filter -I INPUT -p icmp -j REJECT

添加、查看、删除等基本操作

-A:在指定链中末尾添加一条新的规则

-d:删除指定链中的某一条规则,可指定规则序号或具体内容

-I:在指定链中插入一条新的规则,未指定序号时默认作为第1条规则

-R:修改、替换指定链中的某一条规则,可指定序号或具体内容

-L:列出指定链中的所有规则,若未指定链名,则列出表中所有链

-F:清空指定链中的所有规则,若未指定链名,则列出表中所有链

-P:设置指定链的默认策略

-n:使用数字性格是显示输出结构,如显示IP地址而不是主机名

-v:查看规则列表是显示详细的信息

–line-numbers:查看规则列表时,同时显示规则在链中的顺序号

添加新的规则示例:

iptables -t filter -A INPUT -p tcp -j ACCEPT

iptables -I INPUT -p udp -j ACCEPT

iptables -I INPUT 2 -p icmpp -j ACCEPT

查看规则列表:

iptables -L INPUT –line-numbers

iptables -ln

删除、清空的规则示例:  

iptables -D INPUT 3

iptables -F INPUT

#在使用选项“-F”时,允许省略链名而清空制定表所有链的规则。

设置默认策略示例:

iptables -t filter -P FORWARD DROP

规则的匹配条件

协议匹配,例如若要丢弃通过icmp协议访问防火墙本机的数据包,允许转发经过防火墙的除icmp协议以外的数据包。

iptables -I INPUT -p -icmp -j DROP

iptables -A INPUT -p !icmp -j ACCEPT     #感叹号表示取反

地址匹配,使用“-s 原地址”“-d 目标地址”形式指定,例如:

iptables -A FORWARD -s 192.168.1.11 -j REJECT

iptables -A FORWARD -d 192.168.7.0/24 -j ACCEPT

网络接口匹配,使用“-i 接口名”和“-o 接口名”的形式,例如:

iptables -A INPUT -i eth1 -s 172.16.0.0/16 -j DROP

端口匹配

iptables -A INPUT -p tcp –dport 20:21 -j ACCEPT

显示匹配:这种匹配需要有额外的内核模块提供支持,必须手动以“-m 模块名称”的形式调用模块,以下都是显示匹配。

多端口匹配:iptables -A INPUT -p tcp -m multiport –dport 80,25,143 -j ACCEPT

IP范围匹配:iptables -A FORWARD -P tcp -m iprange –src-range 192.168.1.10-192.168.1.20 -j ACCEPT

状态匹配:常见的链接状态包括NEW、ESTABLISHED和RELATED,例如:

iptables -A FORWARD -m state –state NEW -p tcp !–syn -j DROP

iptables -I INPUT -p tcp -m state –state  ESTABLISHED -j ACCEPT

原创文章,作者:Anhur,如若转载,请注明出处:http://www.178linux.com/66363

(0)
AnhurAnhur
上一篇 2017-01-10
下一篇 2017-01-11

相关推荐

  • N21沉舟-第八周作业

    1、  请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 #网桥:链接层设备,基于MAC地址过滤。 #集线器:物理层设备,基本都属于半双工模式。集线器与网桥在现在的局域网中基本都不用了。 #二层交换机:工作在数据链路层,基本MAC转发数据,功能齐全的可支持VLAN等功能。常见的有100/1000M、16口/24口/48口。…

    Linux干货 2016-08-24
  • 第六周作业

    请详细总结vim编辑器的使用并完成以下练习题 基本模式:     编辑模式,命令模式     输入模式     末行模式         内置的命令行接口 打开…

    Linux干货 2017-02-14
  • CA和证书

    A与B双方通信,需要通过签证机构CA颁发证书,才可以互相信任,从而安全的进行数据传输。想要获取证书,除了付费购买认证机构的证书,还可以自签名获取证书。 openssl命令可以搭建CA,实现自签名证书。下面以三台主机为例,模拟根CA、子CA的搭建,以及客户端申请证书的过程。 一、搭建根CA /etc/pki/tls/openssl.cnf文件是openssl的…

    2017-09-10
  • LVM2

    1、逻辑卷     逻辑卷为何物:逻辑,是从人的角度出发的,合乎人类的思维的,所以逻辑卷相对于其它磁盘分区高级一些。主要作用就是可以进行动态扩展缩减,不像其它分区大小固定了要想变动就必须重新格式化。 在实际工作环境中,LVM更适用于现实复杂多变的环境。 现在使用的是LVM2,Logical Volume Manager,Version 2…

    Linux干货 2016-08-30
  • 探索处理文本工具“sed”的相关奥妙

    一:sed工具 1,set的介绍:sed是一种流编辑器,它一次处理一行内容。处理时,把当前 处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断…

    2017-08-26
  • vim实用技能

    vim编辑器 简介 vi: Visual Interface,文本编辑器 文本:ASCII, Unicode 文本编辑种类: 行编辑器: sed 全屏编辑器:nano, vi VIM – Vi IMproved 使用 vim:模式化的编辑 基本模式: 编辑模式,命令模式 输入模式 末行模式: 内置的命令行接口 打开文件: # vim [OPTIO…

    Linux干货 2018-01-16