Linux防火墙机制Netfilter/iptables简介

本文详细介绍了Linux的Netfilter防火墙机制,包括Netfilter与Linux的关系、工作位置、命令结构和filter、NAT、Mangle机制。重点讲解了iptables工具的使用,如规则语法、连接跟踪功能,以及NAT的分类和Mangle机制的应用。通过实例展示了如何配置和管理防火墙规则,帮助读者理解Netfilter/iptables在网络安全中的作用。
摘要由CSDN通过智能技术生成

Netfilter是什么?

Netfilter是Linux的第三代防火墙,因其比之前的两种防火墙ipfwadm及ipchains出色而被Linux组织作为默认的防火墙。Netfilter是自由软件,但在各方面均不逊于商业版的防火墙。

Netfilter与Linux的关系

Netfilter与Linux是两个相互独立的组织,在Linux 2.4早期的版本,并没有包含Netfilter的功能,到后期的版本,才收录了Netfilter的功能。
在这里插入图片描述

Netfilter工作的位置

Netfilter以模块的形式存在于linux中,当网卡有数据包传入传出时,出入的数据包都会经由Netfilter穿过。所以Netfilter作为防火墙,能够起到数据包拦截的作用
在这里插入图片描述

Netfilter的命令结构

Netfilter要针对数据包进行过滤,就必须要人为制定一些规则,这些规则指示什么样的数据包可以放行,什么样的数据包是危险的,应该丢弃掉,这些规则越来越多之后,就会对其进行分类存储在内存块中,内存就被分为四个表(Table),分别是filter、nat、mangle及raw表,这也是目前Netfilter机制所提供的四大功能。

描述
filter INPUT
FORWARD
OUTPUT
filter是Netfilter中最重要的机制,其任务是执行数据包的过滤操作,也就是起到防火墙的作用
nat PREROUTING
POSTROUTING
OUTPUT
nat(Network Address Translation, NAT)也是防火墙上一个不可或缺的重要机制,比较通俗的方式来说,其功能就是IP分享器
mangle PREROUTING
INPUT
FORWARD
POSTROUTING
通过mangle机制来修改经过防火墙内数据包的内容
raw PREROUTING
OUTPUT
负责加快数据包穿过防火墙机制的速度,由此提高防火墙的性能

Netfilter的filter机制

filter对数据包的分类如下:

  • INPUT类型:网络上其他主机发送给本机进程的数据包就是INPUT类型的数据包
  • OUTPUT类型:本机进程所生成的数据包即为OUTPUT类型数据包
  • FORWARD类型:数据包对本机而言只是路过而已,那么这就属于FORWARD类型

filter表结构图如下 在这里插入图片描述
filter机制的结构图如下:
在这里插入图片描述

规则的匹配方式

每条链上都有N条被制定的规则,这些规则该如何匹配呢?first match优先匹配采用的方式为从INPUT链中的rule-1逐一向下匹配,如果rule-1指明要丢弃数据包,则数据包马上被丢弃,不再执行后面的规则,相反,如果rule-1指明允许数据包进来,则数据包立即进入到本机程序的位置,当前,不管后面的规则内容是什么也都不再重要,这就是优先匹配
在这里插入图片描述
不过万一该数据包的特征从INPUT链的rule-1匹配到rule-6均没有匹配成功,该数据包是丢弃还是放行?这就涉及到默认策略(Default Policy)的问题了,请注意,不管链中有多少条规则,默认策略永远在每个链的最底端,而且每个链的默认策略各自独立。linux的默认策略的默认状态是ACCEPT

Netfilter与iptables的关系

Netfilter所需要的规则是存放在内存中的,但是我们如何对这些规则进行添加、删除、修改及查询等操作呢,这个时候必须要有一个针对规则的编辑工具提供给网络管理人员,这个工具就是iptables

iptables工具使用方法

iptables命令可以划分为两个部分,一个是“iptables命令参数”,另一个则是“规则语法”

iptables命令参数

在这里插入图片描述

  • iptables的命令结构
iptables -t TABLE -操作方式 规则条件
语法 说明
-t TABLE 内置filter、nat、mangle及raw四个表,即Netfilter的四大功能。-t参数的含义是选择我们要操作的功能,如果没有输入,默认则是filter表
-操作方式 当我们选择好所要使用的表之后,接下来要决定如何操作这个表,在iptables工具中有很多不同的操作方式,在此仅列出必须了解的操作方式,如下:
-L: 将所选择的表内容列出
-A: 在指定的链中添加新规则
-F: 将所选择的表内容清除掉
-P: 设置某个链的默认策略
规则条件 实例规则:
-p tcp -j ACCEPT
-p udp -j ACCEPT
-p icmp -j ACCEPT

iptables规则语法

  • 接口的匹配参数
    在这里插入图片描述
  • 上层协议(upper layer protocol)的匹配参数
    在这里插入图片描述
    在这里插入图片描述
  • 匹配来源/目的的IP地址
    在这里插入图片描述
  • 匹配来源/目的的端口:使用此参数时,必须指明传输层协议是tcp还是udp,不能单独使用
    在这里插入图片描述
  • 处理方式
    在这里插入图片描述

使用iptables机制来构建简单的单机防火墙

本节将以下图为例来构建一个简单的单机防火墙。
在这里插入图片描述
我们再192.168.0.1主机上分别启用SSH、TELNET、SMTP、WEB以及POP3五项服务。本实例的需求如下:

  • 网络上的任何主机都能正常访问192.168.0.1主机上的SSH及TELNET以外的服务。
  • 网络上只有192.168.0.200这台主机可正常访问192.168.0.1主机上的所有服务

有了需求后,我们将这些需求转换成iptables看得懂的语法,而在转换成iptables语法时,务必谨记防火墙的原则:先拒绝所有连接,再逐一开放对外提供的服务
单机版防火墙的规则列表:

No. Commands Notes
1 iptables -P INPUT DROP 拒绝所有连接。默认策略最后执行
2 iptables -A INPUT -p tcp -d 192.168.0.1 --dport 25 -j ACCEPT 放开任何主机对SMTP服务的访问
3 iptables -A INPUT -p tcp -d 192.168.0.1 --dport 80 -j ACCEPT 放开任何主机对WEB服务的访问
4 iptables -A INPUT -p tcp -d 192.168.0.1 --dport 110 -j ACCEPT 放开任何主机对POP3服务的访问
5 iptables -A INPUT -p tcp -s 192.168.0.200 -d 192.168.0.1 --dport 22 -j ACCEPT 只允许192.168.0.200访问SSH
6 iptables -A INPUT -p tcp -s 192.168.0.200 -d 192.168.0.1 --dport 23 -j ACCEPT 只允许192.168.0.200访问TELNET

Netfilter/iptables的连接跟踪

根据上面的单机防火墙规则,我们让外部所有的主机均能够成功访问SMTP/WEB/POP3服务,只允许192.168.0.200主机访问SSH/TELNET服务。看起来比较完美,但是当单机防火墙作为SSH客户端时,去访问外部主机时可能会失败。因为单机防火墙虽然没有在OUTPUT上设置限制规则,可以让端口号为12345的SSH客户端程序发出连接请求,但当SSH服务器回复数据报时,会因为INPUT链的规则限制(不允许其他主机访问SSH/TELNET)而遭遇拦截。
在这里插入图片描述
Netfilter/iptables的连接跟踪功能就可以解决此问题。这个功能有内核xt_state.ko模块所提供。
这个模块在iptables的使用叫做state,称为state模块。state模块定义了数据包的连接状态。分别为ESTABLISHEDNEWRELATEDINVALID

  1. ESTABLISHED: 只要数据包能够成功穿过防火墙,那么之后的所有数据包(包括反向的所有数据包),其状态都会是ESTABLISHED.

    iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
    语法
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值