[Linux] linux防火墙

 一、防火墙是什么

防火墙(FireWall):隔离功能,工作在网络或主机的边缘,数据包的匹配规则与由一组功能定义的操作组件处理的规则相匹配,根据特定规则检查网络或主机的入口和出口 当要这样做时,基本上默认情况下执行的是关闭所有通过访问类型的访问,只开放允许访问的策略,外网访问的主机希望位于网络中的 DMZ(非军事区)。

1.1 防火墙的分类

按网络协议划分:

网络层防火墙:OSI模型下四层

应用层防火墙/代理服务器

按保护范围划分:

主机防火墙:服务范围为当前一台主机

网络防火墙:服务范围为防火墙一侧的局域网

按实现方式划分:

硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为, 山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet, Cisco, Checkpoint, NetScreen

软件防火墙:运行于通用硬件平台之上的防火墙的应用软件

1.2 Linux防火墙

1.2.1 基本认识

Linux防火墙是由netfilter提供,集成在Linux内核中

1.2.2 防火墙工具

1. firewalld

从CentOS 7 版开始引入了新的前端管理工具

软件包:

firewalld

firewalld-config

管理工具:

firewall-cmd 命令行工具

firewall-config 图形工作

2. iptables

由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告

诉内核如何去处理信息包

3.nftables

nftables 是新的数据包分类框架,旨在替代现存的 {ip,ip6,arp,eb}_tables

         简而言之:

  • 它在 Linux 内核版本高于 3.13 时可用。
  • 它有一个新的命令行工具 ntf,它的语法与 iptables 不同。
  • 它也包含了一个兼容层,让你在新的 nftables 内核框架之上运行 iptables 命令。
  • 它提供了通用的集合基础允许你建立映射和关联。你可以使用这个新特性把你的规则集分类到多维树中,这大大地减少了找到包最终的行为之前需要检查的规则的数量。
1.2.3 netfilter 的钩子函数

内核中的 Netfilter 会选择五个位置放置五个钩子(hook)函数(INPUT、OUTPUT、FORWARD、 PEROUTING、POSTROUTING),这五个钩子函数暴露给用户,用户可以使用命令工具(iptables) (iptables)编写规则。 iptables 由一个信息过滤器表组成,其中包含控制 IP 数据包处理的规则,规则以链的形式分组。 提示:自 Linux 内核 4.2 版起,Netfilter 在预路由前增加了入口钩子功能。可以使用 这个新的入口钩子早于预路由,基本上取代了 tc 命令(流量控制工具)。 这个新的钩子早于预路由,基本上取代了 tc 命令(流量控制工具)。

[Linux] linux防火墙_第1张图片

四表五链

四表:

RAW表:跟踪数据包

MAGLE表:标记优先级 

NAT表:地址转换

FILTER表:流量过滤,筛选哪些数据包可以通过哪些数据包不可以

五链:

INPUT:进入本机的流量

OUTPUT:出去本机的流量

FORWARD:转发数据包

PREROUTING:路由选择前

POSTROUTING:路由选择后

链的作用是:控制流量的时机

表的作用是:如何控制流量

表中有链,链中有规则

二、iptables

2.1 iptables的组成

iptables 是 Linux 中用于配置和管理防火墙规则的工具。它由一系列表、链和规则组成,以实现网络数据包的过滤和转发。

  1. 表 (Tables):

    • filter 表:默认表,用于过滤数据包。大多数防火墙规则都是在这个表上配置的。
    • nat 表:用于网络地址转换 (NAT)。它用于修改数据包的源或目标地址,通常用于实现网络地址转换。
    • mangle 表:用于修改数据包的特定字段。可以用于修改 TOS (Type of Service) 字段等。
  2. 链 (Chains):

    • INPUT:处理到达本地系统的数据包。
    • OUTPUT:处理从本地系统发出的数据包。
    • FORWARD:处理通过系统的路由功能转发的数据包。
    • PREROUTING:在数据包进入本地系统之前应用的规则(仅适用于 nat 表和 mangle 表)。
    • POSTROUTING:在数据包离开本地系统之前应用的规则(仅适用于 nat 表和 mangle 表)。
  3. 规则 (Rules):

    • iptables 规则是用户定义的规则,用于指定数据包的处理方式。
    • 规则通常包括匹配条件和动作。例如,匹配源 IP 地址并拒绝或允许数据包。
  4. 匹配条件 (Matches):

    iptables 允许您在规则中使用匹配条件,以确定是否应用该规则。常见的匹配条件包括源 IP 地址、目标 IP 地址、端口号等。
  5. 动作 (Targets):

    当规则匹配时,可以指定要执行的动作。常见的动作包括 ACCEPT(接受数据包)、DROP(丢弃数据包)、REJECT(拒绝数据包并发送拒绝通知)等。

 ​​​​​​[Linux] linux防火墙_第2张图片

2.2 配置操作及语法

iptables防火墙的配置方法:
1、使用iptables命令行。
2、使用firewalld
语法:
iptables [选项] 命令 [链名] 规则规范

选项:用于指定一些额外的配置参数。

命令:表示对 iptables 进行的操作,如 -A(追加规则)、-D(删除规则)、-I(插入规则)等。链名:表示要操作的防火墙链的名称,如 INPUT、OUTPUT、FORWARD 等。

规则规范:定义要添加或操作的规则的规范。

iptables 规则规范:

规则规范由匹配条件和动作两部分组成。

匹配条件:

-p:指定协议,如 tcp、udp、icmp 等。

--sport--dport:指定源端口和目标端口。

-s-d:指定源地址和目标地址。

-i-o:指定进入和离开的网络接口。

动作:

-j:指定动作,如 ACCEPT(允许数据包通过。)、DROP(直接丢弃数据包,不给出任何回 应信息)、REJECT(拒绝数据包通过,必要时会给数据发送端一个响应信息)、LOG(在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则) 等。

常见的 iptables 命令:

指令 作用
-A 追加
-I 插入
-D 删除
-P 修改默认策略
-F 清空策略
-R 替换策略

iptables语法总结:

[Linux] linux防火墙_第3张图片

 2.3 添加新的防火墙规则

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

[Linux] linux防火墙_第4张图片

这条规则的含义是:禁止66主机ping通自己

[Linux] linux防火墙_第5张图片

 2.4 查看规则表

格式:
iptables [-t表名] -n -L [链名] |[-- line-numbers]
或
iptables - [vn]L

2.5 删除、清空、替换规则

格式:
删除:iptables -D INPUT 序号 -s -j
清空:iptables -F 
替换:iptables -I INPUT 序号 -s -j

主意:
1.若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条
2.按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错
3.按内容匹配删数时,确保规则存在,否则报错 

[Linux] linux防火墙_第6张图片2.6 设置默认策略

格式:
iptables [-t表名] -P <链名> <控制类型>

[Linux] linux防火墙_第7张图片

2.7 通用匹配

直接使用,不依赖于其他条件或扩展,如网络协议、IP 地址或网络接口。
协议匹配:-p 协议名称
地址匹配:-s 源地址,-d 目标地址
#IP、网段、域名、NULL(任意地址)。
接口匹配:-i 入站网卡,-o 出站网卡  

白名单的创建

[Linux] linux防火墙_第8张图片

可以ping通真机和自己 

[Linux] linux防火墙_第9张图片 不可以让其他人png自己

[Linux] linux防火墙_第10张图片

2.8 隐含扩展

iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块

要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。
端口匹配: --sport 源端口、--dport 目的端口
#可以是个别端口、端口范围

要求:主机cxk可以ping通cxk2,cxk2不可以ping通cxk

[Linux] linux防火墙_第11张图片

[Linux] linux防火墙_第12张图片[Linux] linux防火墙_第13张图片

有点不符合要求,可以稍加改进一下,在后面指定ip地址即可 

[Linux] linux防火墙_第14张图片

[Linux] linux防火墙_第15张图片[Linux] linux防火墙_第16张图片

 2.9 显示 扩展模块

显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块
格式:
[-m matchname [per-match-options]]
2.9.1 multiport扩展

以离散方式定义多端口匹配,最多指定15个端口

[!] --source-ports,--sports port[,port|,port:port]...
#指定多个源端口 逗号隔开
[!] --destination-ports,--dports port[,port|,port:port]...
# 指定多个目标端口 逗号隔开
[!] --ports port[,port|,port:port]...
#多个源或目标端

例子:

[Linux] linux防火墙_第17张图片 2.9.2 iprange扩展

指明连续的(但一般不是整个网络)ip地址范围

[!] --src-range from[-to] 源IP地址范围
[!] --dst-range from[-to] 目标IP地址范围

例子:

[Linux] linux防火墙_第18张图片 [Linux] linux防火墙_第19张图片

2.9.3 time模块

 根据将报文到达的时间与指定的时间范围进行匹配

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]       时间
--timestop hh:mm[:ss]
[!] --monthdays day[,day...]   每个月的几号
[!] --weekdays day[,day...]   星期几,1 – 7 分别表示星期一到星期日
--kerneltz:内核时区(当地时间),不建议使用,CentOS 7版本以上系统默认为 UTC
注意: centos6 不支持kerneltz ,--localtz指定本地时区(默认)

例子:

[Linux] linux防火墙_第20张图片

 按下确认键就失效了,解决办法就是把时间改掉,注意要关掉时间同步,不然一会又失效了

[Linux] linux防火墙_第21张图片 xshell恢复正常

[Linux] linux防火墙_第22张图片

 2.9.4 connlimit扩展

根据每客户端IP做并发连接数数量匹配

可防止Dos(Denial of Service,拒绝服务)攻击

--connlimit-upto N #连接的数量小于等于N时匹配
--connlimit-above N #连接的数量大于N时匹配

[Linux] linux防火墙_第23张图片

[Linux] linux防火墙_第24张图片

2.9.5 state

 状态类型:

NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
INVALID:无效的连接,如flag标记不正确
UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪
格式:
 --state state

例子:

要求:服务器维护,需要禁止新访问,已经在访问的用户无影响

ipatables  -A INPUT -m state --state   NEW            -j  REJECT
ipatables  -A INPUT  -m state --state  ESTABLISHED    -j   ACCEPT

[Linux] linux防火墙_第25张图片 [Linux] linux防火墙_第26张图片

你可能感兴趣的:(Linux,linux,运维,服务器,安全)