linux的防火墙(iptables)

防火墙的作用:

linux防火墙主要是工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或者为网络层防火墙)

linux的防火墙分为两种,分别为netfiter和iptables,这两种都被称为防火墙,但是又有一些区别,

具体的区别在于:

1、netfilter:称为内核空间,是linux内核中实现包过滤的防火墙的内部结构,属于“内核态,又称为内核空间”防火墙功能体系。

2、iptables:管理防火墙的命令程序,它位于/sbin/iptables目录下,属于“用户态”,又称为用户空间,防火墙管理体系。

接着,我们来重点介绍一下iptables防火墙

iptables的表盒链的结构

ipbables采用了“表”和“链”分层的结构。

其中,每一个规则“表”相当于一个内核空间的容器,根据规则集的不同用途划分为4个默认的表,在每个“表”容器当中,包含了不同规则的“链”,根据处理数据包的不同时机,划分为5种“链”

紧接着我们来介绍一下不同的规则表以及他们的作用:

1)RAW表:主要用来决定是否对数据包进行状态跟踪,raw表对应的的内核模块为iptable_raw,表内包含两个链,分别为OUTPUT,PREROUTING.

2)Mangle表:主要是用来修改数据包的TOS(Type Of Service,服务类型),TTL(Time To Live,生存周期),或者为数据包设置Mark标记,以实现流量整形,策略路由等高级应用,mangle表对应的内核模块为iptable_mangle,表内包含5个链,即PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。

3)Nat表:nat(Natwork Address Translation,网络地址转换)主要用来修改数据包的IP地址、端口号等信息,nat表对应的内核模块为iptables_nat,表内包含三个链,即PREROUTING、POSTROUTING、OUTPUT。

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

以上4条为iptables的4个表的作用

注意:当数据包抵达防护墙的时候,讲一次应用raw表,Mangle表,NAT表,与filter表中的对应链内的规则(前提是这个规则存在),应用顺序为raw→mangle→nat→filter。 默认的表是filter表

介绍完了4个表,接着我们来具体介绍一下5个链的内容:

 规则链:

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

1)INPUT:处理入站数据包

2)OUTPUT:处理出站数据包

3)FORWARD:处理转发数据包

4)POSTROUTING:在进行路由选择后处理数据包(内转外,源地址转换)由目标地址转换为源地址

5)PREROUTING:在进行路由选择前处理数据包(外转内,目标地址转换)由源地址转换为目标地址

规则链之间的顺序:

PREROUTING→INPUT→FORWARD→OUTPUT→POSTROUTING

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

1、入站数据包流向:来自外界的数据包到达防火墙以后,首先要被prerouting链来进行路由选择(是否修改数据包的地址等),来决定数据包应该发往何处;如果数据包的目标地址是防火墙本机(如internet用户访问web服务器的端口),那么内核将其传递个input链进行处理(决定是否允许通过等),通过以后交给系统上的应用程序(如httpd服务器等)急性响应。具体的处理数据是(preouting链→input链)

2、转发数据流向:

来自外界的数据包到达防火墙后,首先被prerouting链处理,然后进行路由选择,如果数据包的目标地址是其他外部地址,则内核将其传递给forward链进行处理(允许转发或链接、丢弃),最后交给postrouting链进行路由选择(是否修改数据包地址等)进行处理,(处理顺序:prerouting链→forward链→postrouting链)

3、出站数据流向:防火墙本机向外部地址发送数据包(如在防火墙主机中测试公网DNS服务时),首先output链处理,然后进行路由选择,在交给postrouting链(是否进行路由转换,修改数据包地址等)进行处理。(处理顺序:output链→postrouting链)

以上是一些数据包的流向解析,接着我们来讲一讲规则链内部各条防火墙规则之间的顺序,:

匹配即停止规则:

当数据包经过每条规则链时,依次按第一条规则,第二条规则......的顺序进行匹配和处理,链内的过滤遵循“匹配即停止的原则“,一旦找到一条相匹配的规则(使用LOG日志操作的规则除外),则不在检查本链内后续的其他规则,通过对比完整的链,也找不到与数据包相匹配的规则,就安装在该规则链的默认策略进行处理。

接着来讲一讲如何编写防火墙规则:

1、基本语法、数据包控制类型:

使用iptables命令管理,编写防火墙规则,基本格式如下:iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

表名、链名:用来指定iptables命令所操作的表和链,未指定表名时将默认使用filter表

管理选项:iptables规则操作方式,比如,插入,增加,删除,查看等。

匹配条件:指定要处理的数据包特征,不符合指定条件的数据包将不会处理。

控制类型:指的是数据包的处理方式,比如,允许,拒绝,丢弃等。

对于控制类型,都有什么呢?

1、ACCEPT:允许数据包通过 accept

2、DROP:直接丢弃数据包,不给出任何回应数据 drop

3、REJECT:拒绝数据包通过,必要时可以给数据端发送一个响应信息 reject

4、LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则,防火墙规则的“匹配即停止”对于LOG操作来说是一个特例,因为LOG只是一个辅助动作,并没有真正处理数据包。

下来我们添加一些实际的例子:

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

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

首先是filter表,所以-t 来指定filter表

上述操作产生的结果直接效果是其他主机无法ping通主机  拒绝icmp 所以无法ping通主机。

iptables的命令常用管理选项:

-A:在指定链的末尾添加(-addend)一个新的规则

-D:删除(--delete)指定链中某一条规则,可指定规则序号或者具体内容

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

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

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

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

-P(大写):设置指定链的默认策略(--policy)

-n:使用数字形式(-numeric)显示输出结果,如显示IP地址而不是主机名

-v:查看规则列表的详细(--verbose)的信息

-h:查看命令帮助信息:(--help)

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

添加新的防火墙规则的时候,使用管理选项 “-A“,”-I“,前者用来追加规则,后者用来插入规则

若要在filter表INPUT链的末尾添加一条防火墙规则,可以执行什么操作? (作为匹配条件,选择tcp)iptables -t filter -A INPUT -p tcp -j ACCEPT

若要在filter表INPUT链的末尾添加一条防火墙规则,可以执行什么操作? (作为匹配条件,选择tcp)iptables -t filter -A INPUT -p tcp -j ACCEPT   因为要在末尾添加所以使用-A

使用-I选项时,允许同时自定新添加规则顺序号,未指定序号时默认作为第一条。

例如:添加两条规则分别位于filter表的第一条

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

第二条:

iptables -I INPUT 2 -p icmp -j ACCEPT  (使用数字,指定规则是第几条规则).

删除filter表中INPUT链中的第3条规则

iptables -D INPUT 3

清空指定链或者表中的所有防火墙规则

iptables -F INPUT   (默认清楚filter表中的规则)

设置默认策略:

iptables的各条链中,默认策略是匹配的最后一个环节,当找不到任何一条能够匹配的数据包规则时,则执行默认策略,默认策略的控制类型为ACCEPT、DROP两种。

执行操作可以将filter表中 FORWARD链的默认策略设置为丢弃,OUTPUT链的默认策略为允许

iptables -t fliter -P FORWARD DORP

iptables  -P OUTPUT ACCEPT

这里重点强调两点东西:

不指定表名时,默认指filter表。

不指定链名时,默认指表内的所有链。  切记切记!!

除非设置链的默认策略,否则必须指定匹配条件。

选项,链名,控制类型使用大写字母,其他均为小写。

接下来介绍一下iptables的匹配规则:

防火墙的匹配规则分为三大类:

通用匹配、隐含匹配、显示匹配

他们的作用是:防火墙对符合什么条件的数据包进行处理,避免“误杀”。

1、通用匹配:也称之为 常规匹配,这个匹配方式可以独立使用,不依赖于其他条件或者扩展模块,常见的通用匹配包括,协议匹配,地址匹配,网络接口匹配。

1)协议匹配:

编写防火墙规则的时候,使用“-p”协议名称来指定,用来检查数据包所使用的网络协议。(--protocol)如tcp,udp,icmp和all(针对所有ip数据包)等,可用的协议类型存放于linux系统的/etc/protocol 文件中。

例如:

例如:若要丢弃通过icmp协议访问防火墙本机的数据包,允许转发经过防火墙处理icmp协议之外的数据包

iptables -t filter -A INPUT -p icmp -j DROP

iptables -t filter -A FORWARD -p icmp -j ACCEPT

2)地址匹配:

编写防火墙的时候使用 “-s源地址“或”-d目标地址“的形式指定。用来检查数据包的源地址。

(--source)或(--destination)。IP地址、网络地址等都是可以接受的,但是不建议使用主机名,域名地址(解析过程或影响效率)

例如:若要拒绝转发源地址为192.168.1.11的数据,允许转发源地址位于192.168.7.0/24网段的数据可以执行什么操作?

iptables -A FORWARD -s 192.168.1.11 -j REJECT

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

3)网络接口匹配

编写防火墙规则时,使用 -i 接口名 和-o 接口名的形式,用于检查数据包从防火墙的哪一个接口进入或者发出,分别对应入站网卡(--in-interface),出站网卡(out-interface)。

例如,若要丢弃从外网口 ens36 访问防火墙本机且源地址为私有地址的数据包 ,可以执行什么操作?

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

iptables -A INPUT -i ens36 -s 10.0.0.0/8 -j DROP

iptables -A INPUT -i ens36 -s 192.168.0.0/24 -j DROP

2、隐含匹配:

要求指定协议匹配作为前提条件,相当于子条件,不能独立使用,常见的隐含匹配包括:端口匹配,tcp标记匹配,ICMP类型匹配。

2.1)端口匹配

编写iptables规则时使用“--sport源端口”或者“--dport目标端口”的形式,针对的协议为TCP和UDP,用来检查数据包的源端口(--source-port)或者目标端口(--destination-port)。单个端口或者以冒号“:”分隔的端口范围都是可以接受的,但是不连续的多个端口不能采用这种方法。

若要允许网段为192.168.4.0/24转发DNS查询的数据包可以使用什么操作?

iptables -A FORWARD -s 192.168.4.0/24 -p udp --sport 53 -j ACCEPT

iptables -A FORWARD -d 192.168.4.0/24 -p udp --dport 53 -j ACCEPT  (转发一定是有进有出,所以需要设置sport 和 dport)

2.2)ICMP类型匹配

编写防火墙规则时,使用“--icmp-type ICMP类型”的形式,针对的协议是ICMP 用来检查ICMP数据包的类型(--icmp-type)。ICMP类型使用字符串或者数字代码表示,如“Echo-Request请求(代码为8)”,“Echo-Reply回显(代码为0)“,”Destination-Unreachable目标不可达(代码为3)“,分别对应ICMP协议的请求,回显,目标不可达

3、显示匹配

这种匹配方式要求由额外的内核模块来提供支持,必须手动以“-m 模块名称“的形式调用相应的模块,然后方可设置条件,添加了带有显示匹配条件的规则以后,可以执行”| smod | grep xt_“命令查看到相关的内核扩展模块(如xt_MULTIPORT、xt_mac、xt_iprange、xt_state) 常见显示匹配包括多端口匹配,IP范围匹配,MAC地址匹配,状态匹配。

1)多端口匹配

编写防火墙规则时使用”-m multiport --sport 端口列表“,“-m multiport --dport端口列表”的形式,用来检查数据包的源端口,目标端口,多个端口之间以逗号进行分隔

如:若要允许本机开放25 80 110 443 端口 以便 提供电子邮件服务 可以执行什么操作

iptables -A INPUT -p udp -m mulitiport --sport 25,80,110,443  -j ACCEPT

iptables -A INPUT -p udp -m mulitiport --dport 25,80,110,443  -j ACCEPT

2) ip范围匹配

使用“-m iprange --src-range IP范围”,“-m iprange --dst-range IP范围”的形式,用来检查数据包的源地址、目标地址、其中IP范围采用“起始地址-结束地址”的形式表示

例如:若要允许转发源地址位于192.168.4.21与192.168.4.28之间的数tcp数据包,使用什么操作?

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT

3) MAC地址范围

使用 -m mac --mac-source MAC地址 形式,用来检查数据包的源mac地址,由于mac地址本身的局限性,此类匹配条件只适用于内部网络

例如:若要根据mac地址封锁主机,禁止其访问本机的任何应用,可以用什么操作

iptable -A INPUT -m mac --mac-source mac地址 -j DROP

4) 状态匹配

使用 “-m state --state 连接状态” 的形式,基于iptables的状态跟踪机制,用来检查数据包的链接状态(state),常见的连接状态包括,NEW(与任何连接无关的),ESTABLISHED(响应请求或者已经建立连接) RELATED(与已有连接有相关的,如FTP数据连接)

例如:若要禁止转发与正常TCP连接无关的非--syn请求数据包(如伪造的网络攻击数据包),可以执行什么操作?

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

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

iptables -P INPUT DROP

一些基础的规则的设置方法我们讲完了.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JM丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值