Linux系统——防火墙

目录

一、防火墙的认识

1.防火墙定义

2.防火墙分类

二、Linux系统防火墙

1.Netfilter

2.防火墙工具介绍

2.1iptables

2.2firewalld

2.3nftables

2.4netfilter的五个勾子函数和报文流向

2.4.1五个勾子

2.4.2三种报文流向

3.1iptables概述

3.2iptables和netfilter

3.3包过滤的工作层次

4.iptables的表、链结构——四表五链(实际为五表五链)

4.1规则表

4.1.1规则表内容

4.2规则链

4.2.1规则链内容

5.实际操作

5.1前提准备工作

5.2基本语法

5.3数据包的常见控制类型

5.4管理选项

5.4.1-A 添加新的防火墙规则

5.4.2查看防火墙规则

5.4.3删除清空替换规则

清空规则

删除规则 -D

替换规则

5.4.4设置默认策略

白名单

5.5语法总结

6.通用匹配

6.1不允许另一台主机通过icmp协议来ping本机

7.模块

7.1隐含扩展

7.1.1实验 控制目的主机  不想让其访问本机的httpd服务

192.168.241.11主机操作 

192.168.241.22主机操作 

7.1.2如何实现主机1可以ping主机2,但是主机2无法ping主机1

7.2显式扩展

 7.2.1multiport扩展

举例——主机1拒绝主机2的远程登录和访问页面服务

7.2.2iprange扩展

举例——指明具体主机不可以访问本机

 7.2.3mac地址

7.2.4string字符串

举例——如果想拒绝主机2来访问本机的地址


一、防火墙的认识

引言

安全技术

  • 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署(默默的看着你)方式。
  • 入侵防御系统(Intrusion Prevention System):以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)
  • 防火墙( FireWall ):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中.

广泛意义上的防水墙:防水墙(Waterwall),与防火墙相对,是一种防止内部信息泄漏的安全产品。   网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。防水墙针对这四种泄密途径,在事前、事  中、事后进行全面防护。其与防病毒产品、外部安全产品一起构成完整的网络安全体系。

1.防火墙定义

隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中。

简单理解为是筛选和过滤流量,对需要的流量进行放行,对不需要或者有威胁的流量进行拒绝

2.防火墙分类

保护范围划分:

  • 主机防火墙:服务范围为当前一台主机
  • 网络防火墙:服务范围为防火墙一侧的局域网

实现方式划分:

  • 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为, 山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet, Cisco, Checkpoint, NetScreen(Juniper2004年40亿美元收购)等
  • 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront

网络协议划分:

  • 网络层防火墙:OSI模型下四层,又称为包过滤防火墙(协议端口号  ip  mac)
  • 应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层

防火墙是一个解包和重新装包的过程

包过滤防火墙

网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否 允许该数据包通过

  • 优点:对用户来说透明,处理速度快且易于维护
  • 缺点:无法检查应用层数据,如病毒等

应用层防火墙

应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)

将所有跨越防火墙的网络通信链路分为两段

内外网用户的访问都是通过代理服务器上的“链接”来实现优点:在应用层对数据进行检查,比较安全

  • 缺点:增加防火墙的负载
  • 提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用 层去检查

二、Linux系统防火墙

1.Netfilter

Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中

Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作

Netfilter官网文档:https://netfilter.org/documentation/

2.防火墙工具介绍

2.1iptables

由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包

2.2firewalld

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

软件包

  • firewalld
  • firewalld-config

管理工具

  • firewall-cmd 命令行工具
  • firewall-config 图形工作

2.3nftables

  • 此软件是CentOS 8 新特性,Nftables最初在法国巴黎的Netfilter Workshop 2008上发表,然后由长期的netfilter核心团队成员和项目负责人Patrick McHardy于2009年3月发布。它在2013年末合并到Linux内核中,自2014年以来已在内核3.13中可用。
  • 它重用了netfilter框架的许多部分,例如连接跟踪和NAT功能。它还保留了命名法和基本iptables设计的几个部分,例如表,链和规则。就像iptables一样,表充当链的容器,并且链包含单独的规则,这些规则可以执行操作,例如丢弃数据包,移至下一个规则或跳至新链。从用户的角度来看,nftables添加了一个名为nft的新工具,该工具替代了iptables,arptables和ebtables中的所有其他工具。从体系结构的角度来看,它还替换了内核中处理数据包过滤规则集运行时评估的那些部分。

2.4netfilter的五个勾子函数和报文流向

2.4.1五个勾子
  • Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则。
  • 由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上
  • 提示:从 Linux kernel 4.2 版以后,Netfilter 在prerouting 前加了一个 ingress 勾子函数。可以使用这个新的入口挂钩来过滤来自第2层的流量,这个新挂钩比预路由要早,基本上是 tc 命令(流量控制工具)的替代品。

链chain:

内置链:每个内置链对应于一个勾子函数

自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook勾子可以调用,用自定义链使才生效。 

2.4.2三种报文流向

Linux系统——防火墙_第1张图片

内核中数据包传输过程

  1. 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要 转送出去
  2. 如果数据包是进入本机的,数据包就会沿着图向上移动,到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达postrouting
  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出

三种报文流向

  • 流入本机:PREROUTING --> INPUT-->用户空间进程(访问我的服务)
  • 流出本机:用户空间进程 -->OUTPUT--> POSTROUTING(穿过我)
  • 转发:PREROUTING --> FORWARD --> POSTROUTING(分摊流量)

用户空间进程:例如,用户通过http协议来访问我的80端口,实际上访问我的httpd服务 

3.iptables

3.1iptables概述

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

3.2iptables和netfilter

netfilter/iptables:IP 信息包过滤系统,它实际上由两个组件 netfilter 和 iptables组成。 主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口等信息的处理。

netfilter

  • 位于Linux内核中的包过滤功能体系
  • 称为Linux防火墙的“内核态”

属于“内核态”又称内核空间(kernel space)的防火墙功能体系。linux 好多东西都是内核态 用户态,那我们运维人员关注的是用户态, 内核我们关注不是很多,内核基本是我们开发人员关心的事情是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

iptables :

  • 位于/sbin/iptables,用来管理防火墙规则的工具
  • 称为Linux防火墙的“用户态”

属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。 netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。

3.3包过滤的工作层次

  • 主要是网络层,针对IP数据包
  • 体现在对包内的IP地址、端口等信息的处理上

Linux系统——防火墙_第2张图片

4.iptables的表、链结构——四表五链(实际为五表五链)

4.1规则表

  • 表的作用:容纳各种规则链
  • 表的划分依据:防火墙规则的作用相似
4.1.1规则表内容
  • raw表:确定是否对该数据包进行状态跟踪(关闭启用的连接跟踪机制,加快封包穿越防火墙速度)
  • mangle表:为数据包设置标记(修改数据标记位规则表)
  • nat(network address translation)表:修改数据包中的源、目标IP地址或端口
  • filter:确定是否放行该数据包(过滤规则表根据定义的规则过滤符合条件的数据包,默认表)
  • security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SElinux)实现

总结:

raw 跟踪数据包mangle 标记数据包nat 地址转换(公网私网地址转换);filter 地址过滤(允许/拒绝) 

security  >  raw  >  mangle  >  nat  >filter 

4.2规则链

  • 规则的作用:对数据包进行过滤或处理
  • 链的作用:容纳各种防火墙规则
  • 链的分类依据:处理数据包的不同时机
4.2.1规则链内容
  • INPUT:处理入站数据包
  • OUTPUT:处理出站数据包
  • FORWARD:处理转发数据包
  • POSTROUTING:在进行路由选择后处理数据包
  • PREROUTING:在进行路由选择前处理数据包

总结:

INPUT 入站数据OUTPUT 出站数据FORWARD 转发数据POSTROUTING 路由选择后PREROUTING 路由选择前

iptables由五个表table和五个链chain以及一些规则组成

Linux系统——防火墙_第3张图片

raw:主要用来决定是否对数据包进行状态跟踪 包含两个规则链,OUTPUT、PREROUTING

mangle : 修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING

nat:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。

filter:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个链,即PREROUTING、POSTROUTING、OUTPUT

注:在iptables 的四个规则表中,mangle 表 和raw表的应用相对较少

INPUT: 处理入站数据包,匹配目标IP为本机的数据包。

  • OUTPUT: 处理出站数据包,一般不在此链上做配置。
  • FORWARD: 处理转发数据包,匹配流经本机的数据包。
  • PREROUTING链: 在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。
  • POSTROUTING链: 在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。

5.实际操作

CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables

5.1前提准备工作

[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#yum -y install iptables iptables-services
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.nju.edu.cn
 * epel: mirror.nju.edu.cn
 * extras: mirrors.nju.edu.cn
 * updates: mirrors.nju.edu.cn
软件包 iptables-1.4.21-35.el7.x86_64 已安装并且是最新版本
正在解决依赖关系
--> 正在检查事务
---> 软件包 iptables-services.x86_64.0.1.4.21-35.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=============================================================================
 Package                 架构         版本                  源          大小
=============================================================================
正在安装:
 iptables-services       x86_64       1.4.21-35.el7         base        52 k

事务概要
=============================================================================
安装  1 软件包

总下载量:52 k
安装大小:23 k
Downloading packages:
iptables-services-1.4.21-35.el7.x86_64.rpm              |  52 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : iptables-services-1.4.21-35.el7.x86_64                   1/1 
  验证中      : iptables-services-1.4.21-35.el7.x86_64                   1/1 

已安装:
  iptables-services.x86_64 0:1.4.21-35.el7                                   

完毕!
[root@localhost ~]#systemctl status iptables.service 
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[root@localhost ~]#systemctl start iptables.service 
[root@localhost ~]#systemctl status iptables.service 
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
   Active: active (exited) since 四 2024-02-01 14:51:09 CST; 1s ago
  Process: 3274 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
 Main PID: 3274 (code=exited, status=0/SUCCESS)

2月 01 14:51:09 localhost.localdomain systemd[1]: Starting IPv4 firewall ...
2月 01 14:51:09 localhost.localdomain iptables.init[3274]: iptables: Appl… ]
2月 01 14:51:09 localhost.localdomain systemd[1]: Started IPv4 firewall w...
Hint: Some lines were ellipsized, use -l to show in full.

5.2基本语法

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

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

  • 管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等;
  • 匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理;
  • 控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。 

注意事项

  • 不指定表名时,默认指filter表
  • 不指定链名时,默认指表内的所有链
  • 除非设置链的默认策略,否则必须指定匹配条件
  • 选项、链名、控制类型使用大写字母,其余均为小写

iptables 指定表(-t filter/-t nat) 如何在链中插入规则  指定链(-A INPUT)条件/规则(-s 192.168.0.1 -j DROP)

  • -t filter 指定表;默认是filter
  • A append 附加  在末尾追加
  • I  插队  I 2表示第二条规则;I默认排在第一条
  • -s 规则
  • -j 跳转

5.3数据包的常见控制类型

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

选项 定义
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不会做任何回应
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应信息
LOG 在/var/log/message 文件中记录日志信息,然后将数据包传递给下一条视频
SNAT 修改数据包的源地址
DNAT 修改数据包的目的地址
MASQUERADE 伪装成一个非固定公网IP地址

防火墙规则的“匹配即停止”对于 LOG 操作来说是一个特例,因为 LOG 只是一种辅助 动作,并没有真正处理数据包。;

控制类型必须使用大写!!!

5.4管理选项

选项 用法详解
-A 在指定链末尾追加一条 iptables -A INPUT (操作)
-I 在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作)
-P 指定默认规则 iptables -P OUTPUT ACCEPT (操作)
-D 删除 iptables -t nat -D INPUT 2 (操作)
-p 服务名称 icmp tcp
-R 修改、替换某一条规则 iptables -t nat -R INPUT (操作)
-L 查看 iptables -t nat -L (查看)
-n 所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名) iptables -L -n,iptables -nL,iptables -vnL (查看)
-v 查看时显示更详细信息,常跟-L一起使用 (查看)
--line-number 规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number
-F 清除链中所有规则 iptables -F (操作)
-N 新加自定义链
-X 清空自定义链的规则,不影响其他链 iptables -X
-Z 清空链的计数器(匹配到的数据包的大小和总和)iptables -Z
-S 看链的所有规则或者某个链的规则/某个具体规则后面跟编号
5.4.1-A 添加新的防火墙规则

清空防火墙规则

Linux系统——防火墙_第4张图片

当前无任何防火墙规则

Linux系统——防火墙_第5张图片

当前192.168.241.22主机还可以ping通192.168.241.11主机

Linux系统——防火墙_第6张图片

添加一条防火墙规则,不允许任何主机通过icmp协议ping本机

Linux系统——防火墙_第7张图片

此时,无法通过icmp协议通过ping来检测与192.168.241.11主机的网络连通性 

5.4.2查看防火墙规则

查看已有的防火墙规则时,使用管理选项“-L”,结合“--line-numbers”选项还可显示各条规则在链内的顺序号。例如,若要查看 filter 表 INPUT 链中的所有规则,并显示规则序号, 可以执行以下操作

Linux系统——防火墙_第8张图片

-v详细信息;-t查看nat表;-n规则数字化显示 

5.4.3删除清空替换规则
清空规则

Linux系统——防火墙_第9张图片

清空指定链或表中的所有防火墙规则,使用管理选项“-F”。例如,若要清空 filter 表 INPUT  

删除规则 -D

Linux系统——防火墙_第10张图片

替换规则

Linux系统——防火墙_第11张图片

注意:

  • 若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条
  • 按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错
  • 按内容匹配删数时,确保规则存在,否则报错
5.4.4设置默认策略

iptables 的各条链中,默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为 ACCEPT(允许)、DROP(丢弃)两种。例如,执行以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃, OUTPUT 链的默认策略设为允许。

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

设置只有192.168.241.11的主机可以接受登录

Linux系统——防火墙_第12张图片

如果输入该命令,则拒绝所有192.168.241.0网段的主机连接

 会生成如下情况

Linux系统——防火墙_第13张图片

解决办法,进入真机查看防火墙规则

Linux系统——防火墙_第14张图片

在真机插入一条防火墙规则,置于拒绝规则之前 

Linux系统——防火墙_第15张图片

插播  如果一直删除第三条规则,最后只会留下两条规则

Linux系统——防火墙_第16张图片

Xshell是通过真机来使用的,所以要把本机的ip添加进去,使得真机被接受通过 

Linux系统——防火墙_第17张图片

Xshell连接成功

Linux系统——防火墙_第18张图片

需要注意的是,当使用管理选项“-F”清空链时,默认策略不受影响。因此若要修改默认 策略,必须通过管理选项“-P”重新进行设置。另外,默认策略并不参与链内规则的顺序编排, 因此在其他规则之前或之后设置并无区别。

白名单

-P设置默认规则为DROP   拒绝之后  会拒绝所有连接

Linux系统——防火墙_第19张图片

如果在生产环境中建议使用这个白名单,白名单要放在所有规则之后;

如果想设置白名单,默认拒绝所有之前,先把自己加进来

先设置自己的地址进来,接收真机的地址 

Linux系统——防火墙_第20张图片

然后设置白名单 所有的流量都拒绝  此时看到不会影响Xshell的连接

默认白名单

Linux系统——防火墙_第21张图片

5.5语法总结

iptables table command chain parameter target
-t filter

-A
-D
-I
-R
-L
-F

-Z

-N
-X
-P

INPUT

FORWARD

OUTPUT

PREROUTING

POSTROUTING

-p

-s

-d

-i

-o

--sport

--dport

-j ACCEPT

-j DROP

-j REJECT

6.通用匹配

  • 直接使用:不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件
  • 协议匹配: -p协议名
  • 地址匹配: -s 源地址、-d目的地址
  • 接口匹配: -i入站网卡、-o出站网卡  

6.1不允许另一台主机通过icmp协议来ping本机

准备工作,目前192.168.241.22可以通过icmp协议来ping通192.168.241.11

Linux系统——防火墙_第22张图片

设置拒绝192.168.241.22主机通过icmp协议来ping本机

Linux系统——防火墙_第23张图片

此时看到192.168.241.22主机无法通过icmp协议来ping192.168.241.11主机

Linux系统——防火墙_第24张图片

但是通过ssh命令可以连接本机

Linux系统——防火墙_第25张图片

7.模块

Linux系统——防火墙_第26张图片

.so结尾的均为模块,也就是说在使用配置防护墙规则的时候,调用的是.so结尾的配置文件 

Linux系统——防火墙_第27张图片

如果想禁用tco协议防火墙配置,那么必须要有tcp模块才可以使用限制功能

7.1隐含扩展

  • iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
  • 要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。 端口匹配: --sport 源端口、--dport 目的端口(可以是个别端口、端口范围)
[root@localhost ~]#man iptables-extensions

Linux系统——防火墙_第28张图片

隐含扩展可以通过man iptables-extension查看扩展帮助

  • --source-port,--source port[:port]     可为报文源端口,可为端口连续范围
  • --destination-port,--dport port[:port]   匹配报文目标端口,可为连续范围
  • --tcp-flags mask comp(mask 需检查的标志位列表,用","分隔;例如SYN ACK FIN RST等。comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用“,”分隔tcp协议的扩展选项)

--tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0,第一次握手;

--tcp-flags SYN,ACK,FIN,RST SYN,ACK 第二次握手。——错误包

  • --tcp-flags ALL ALL  
  • --tcp_flags ALL NONE
  • --sport 1000              匹配源端口是1000的数据包
  • --sport 1000:3000     匹配源端口是1000-3000的数据包
  • --sport :3000             匹配源端口是3000及以下的数据包
  • --sport 1000:             匹配源端口是1000及以上的数据包

注意: --sport和--dport 必须配合-p <协议类型>使用

(dport目的;sport源目的)

7.1.1实验 控制目的主机  不想让其访问本机的httpd服务
192.168.241.11主机操作 
[root@localhost ~]#rpm -q httpd
未安装软件包 httpd 
[root@localhost ~]#yum install httpd -y
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.nju.edu.cn
 * epel: mirror.nju.edu.cn
 * extras: mirrors.nju.edu.cn
 * updates: mirrors.nju.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 httpd.x86_64.0.2.4.6-99.el7.centos.1 将被 安装
--> 正在处理依赖关系 httpd-tools = 2.4.6-99.el7.centos.1,它被软件包 httpd-2.4.6-99.el7.centos.1.x86_64 需要
--> 正在处理依赖关系 /etc/mime.types,它被软件包 httpd-2.4.6-99.el7.centos.1.x86_64 需要
--> 正在处理依赖关系 libaprutil-1.so.0()(64bit),它被软件包 httpd-2.4.6-99.el7.centos.1.x86_64 需要
--> 正在处理依赖关系 libapr-1.so.0()(64bit),它被软件包 httpd-2.4.6-99.el7.centos.1.x86_64 需要
--> 正在检查事务
---> 软件包 apr.x86_64.0.1.4.8-7.el7 将被 安装
---> 软件包 apr-util.x86_64.0.1.5.2-6.el7_9.1 将被 安装
---> 软件包 httpd-tools.x86_64.0.2.4.6-99.el7.centos.1 将被 安装
---> 软件包 mailcap.noarch.0.2.1.41-2.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=============================================================================
 Package          架构        版本                        源            大小
=============================================================================
正在安装:
 httpd            x86_64      2.4.6-99.el7.centos.1       updates      2.7 M
为依赖而安装:
 apr              x86_64      1.4.8-7.el7                 base         104 k
 apr-util         x86_64      1.5.2-6.el7_9.1             updates       92 k
 httpd-tools      x86_64      2.4.6-99.el7.centos.1       updates       94 k
 mailcap          noarch      2.1.41-2.el7                base          31 k

事务概要
=============================================================================
安装  1 软件包 (+4 依赖软件包)

总下载量:3.0 M
安装大小:10 M
Downloading packages:
(1/5): httpd-tools-2.4.6-99.el7.centos.1.x86_64.rpm     |  94 kB   00:00     
(2/5): apr-1.4.8-7.el7.x86_64.rpm                       | 104 kB   00:00     
(3/5): apr-util-1.5.2-6.el7_9.1.x86_64.rpm              |  92 kB   00:00     
(4/5): mailcap-2.1.41-2.el7.noarch.rpm                  |  31 kB   00:00     
(5/5): httpd-2.4.6-99.el7.centos.1.x86_64.rpm           | 2.7 MB   00:01     
-----------------------------------------------------------------------------
总计                                            2.7 MB/s | 3.0 MB  00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : apr-1.4.8-7.el7.x86_64                                   1/5 
  正在安装    : apr-util-1.5.2-6.el7_9.1.x86_64                          2/5 
  正在安装    : httpd-tools-2.4.6-99.el7.centos.1.x86_64                 3/5 
  正在安装    : mailcap-2.1.41-2.el7.noarch                              4/5 
  正在安装    : httpd-2.4.6-99.el7.centos.1.x86_64                       5/5 
  验证中      : httpd-2.4.6-99.el7.centos.1.x86_64                       1/5 
  验证中      : mailcap-2.1.41-2.el7.noarch                              2/5 
  验证中      : apr-1.4.8-7.el7.x86_64                                   3/5 
  验证中      : httpd-tools-2.4.6-99.el7.centos.1.x86_64                 4/5 
  验证中      : apr-util-1.5.2-6.el7_9.1.x86_64                          5/5 

已安装:
  httpd.x86_64 0:2.4.6-99.el7.centos.1                                       

作为依赖被安装:
  apr.x86_64 0:1.4.8-7.el7                                                   
  apr-util.x86_64 0:1.5.2-6.el7_9.1                                          
  httpd-tools.x86_64 0:2.4.6-99.el7.centos.1                                 
  mailcap.noarch 0:2.1.41-2.el7                                              

完毕!
[root@localhost ~]#systemctl start httpd
[root@localhost ~]#systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 四 2024-02-01 18:46:41 CST; 3s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 7938 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           ├─7938 /usr/sbin/httpd -DFOREGROUND
           ├─7939 /usr/sbin/httpd -DFOREGROUND
           ├─7940 /usr/sbin/httpd -DFOREGROUND
           ├─7941 /usr/sbin/httpd -DFOREGROUND
           ├─7942 /usr/sbin/httpd -DFOREGROUND
           └─7943 /usr/sbin/httpd -DFOREGROUND

2月 01 18:46:41 localhost.localdomain systemd[1]: Starting The Apache HTT...
2月 01 18:46:41 localhost.localdomain httpd[7938]: AH00558: httpd: Could ...
2月 01 18:46:41 localhost.localdomain systemd[1]: Started The Apache HTTP...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]#iptables -A INPUT -p tcp --dport 80 -j REJECT 
#拒绝任何主机通过tcp协议来连接本机的80端口的httpd服务
[root@localhost ~]#iptables -A INPUT -p tcp --dport 22 -j REJECT 
#拒绝任何主机通过tcp协议来连接22端口
192.168.241.22主机操作 
[root@node2 ~]#curl 192.168.241.11:80


		Apache HTTP Server Test Page powered by CentOS
		

    
    
    




  

Testing 123..

This page is used to test the proper operation of the Apache HTTP server after it has been installed. If you can read this page it means that this site is working properly. This server is powered by CentOS.

Just visiting?

The website you just visited is either experiencing problems or is undergoing routine maintenance.

If you would like to let the administrators of this website know that you've seen this page instead of the page you expected, you should send them e-mail. In general, mail sent to the name "webmaster" and directed to the website's domain should reach the appropriate person.

For example, if you experienced problems while visiting www.example.com, you should send e-mail to "[email protected]".

Are you the Administrator?

You should add your website content to the directory /var/www/html/.

To prevent this page from ever being used, follow the instructions in the file /etc/httpd/conf.d/welcome.conf.

Promoting Apache and CentOS

You are free to use the images below on Apache and CentOS Linux powered HTTP servers. Thanks for using Apache and CentOS!

[ Powered by Apache ] [ Powered by CentOS Linux ]

[root@node2 ~]#curl 192.168.241.11:80 curl: (7) Failed connect to 192.168.241.11:80; Connection refused #此时无法登录192.168.241.11主机的httpd服务,但是还可以通过ssh进行连接192.168.241.11主机 #如果想断掉ssh服务 需要在192.168.241.11主机再新加一条规则 [root@node2 ~]#ssh 192.168.241.11 The authenticity of host '192.168.241.11 (192.168.241.11)' can't be established. ECDSA key fingerprint is SHA256:k/dmSIE+ic90gNaqecVvZT0PdW+9hJf9EwJQDXY1f7w. ECDSA key fingerprint is MD5:e1:61:2b:5d:fe:10:a9:72:1f:c2:7e:2b:5b:51:f4:7c. Are you sure you want to continue connecting (yes/no)? ^C #将192.168.241.11主机的规则新加入后 此时无法通过ssh命令通过22端口进行远程连接192.168.241.11主机 [root@node2 ~]#ssh 192.168.241.11 ssh: connect to host 192.168.241.11 port 22: Connection refused

Linux系统——防火墙_第29张图片

如果想设置拒绝22-80所有端口

Linux系统——防火墙_第30张图片

7.1.2如何实现主机1可以ping主机2,但是主机2无法ping主机1

实验开始前,双方可以互相ping

Linux系统——防火墙_第31张图片

Linux系统——防火墙_第32张图片

添加规则之后,双方不能互相ping

Linux系统——防火墙_第33张图片

Linux系统——防火墙_第34张图片

通过控制INPUT icmp协议 拒绝192.168.241.22的8包

此时主机1可以ping通主机2  主机2ping不通主机1 

Linux系统——防火墙_第35张图片

Linux系统——防火墙_第36张图片

如果再修改OUTPUT 拒绝192.168.241.22的0包

Linux系统——防火墙_第37张图片

也是可以使主机2无法向主机1回包

Linux系统——防火墙_第38张图片

7.2显式扩展

显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块

Linux系统——防火墙_第39张图片

 7.2.1multiport扩展

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

[!] --source-ports,--sports port[,port|,port:port]...
#指定多个源端口 逗号隔开
[!] --destination-ports,--dports port[,port|,port:port]...
# 指定多个目标端口 逗号隔开
[!] --ports port[,port|,port:port]...
#多个源或目标端
举例——主机1拒绝主机2的远程登录和访问页面服务

主机2目前可以连接主机1

Linux系统——防火墙_第40张图片

还可以访问主机1的httpd服务 

Linux系统——防火墙_第41张图片

此时,如果给主机1添加一条规则,把来源于主机2的22和80端口拒绝访问

[root@localhost ~]#iptables -A INPUT -s 192.168.241.22 -p tcp -m multiport --dport 22,80 -j REJECT

此时,主机2就无法访问主机1的httpd服务,也不可以远程登录主机1

7.2.2iprange扩展

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

[!] --src-range from[-to] 源IP地址范围
[!] --dst-range from[-to] 目标IP地址范围
举例——指明具体主机不可以访问本机

目前,主机2和主机3均可以通过icmp协议通过ping来检测与主机1的网络连通性

Linux系统——防火墙_第42张图片

Linux系统——防火墙_第43张图片

如果给主机1设置一条拒绝主机2和主机3地址的防火墙规则

[root@localhost ~]#iptables -A INPUT  -m iprange --src-range 192.168.241.22-192.168.241.23 -j REJECT
#指定(src)源地址为192.168.241.22-192.168.241.23 两个地址无法访问当前主机

此时发现,主机2和主机3无法通过icmp协议通过ping来检测与主机1的网络连通性

Linux系统——防火墙_第44张图片

Linux系统——防火墙_第45张图片

 7.2.3mac地址

mac 模块可以指明源MAC地址,,适用于:PREROUTING, FORWARD,INPUT chains

-m   mac    [!] --mac-source XX:XX:XX:XX:XX:XX

 

[root@localhost ~]#ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:51:4b:b5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.241.11/24 brd 192.168.241.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::de6f:32c8:5a64:a6b2/64 scope link 
       valid_lft forever preferred_lft forever
3: virbr0:  mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:53:c1:45 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic:  mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:53:c1:45 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]#iptables -A INPUT -m mac --mac-source 00:0c:29:51:4b:b5 -j REJECT

7.2.4string字符串

对报文中的应用层数据做字符串模式匹配检测

--algo {bm|kmp} 字符串匹配检测算法
 bm:Boyer-Moore           算法
 kmp:Knuth-Pratt-Morris   算法

--from offset 开始查询的地方
--to offset   结束查询的地方


[!] --string pattern 要检测的字符串模式
[!] --hex-string pattern要检测字符串模式,16进制格式
8  BYEE  前导信息 dest mac 6 byte src mac 6 byte type 2byte IP 20 TCP 20 http data FCS
举例——如果想拒绝主机2来访问本机的地址

主机1操作

[root@localhost ~]#cd /var/www/html/
[root@localhost html]#vim cxk.html

cxk

[root@localhost html]#vim wyb.html

wyb

主机2操作

[root@node2 ~]#curl 192.168.241.11/cxk.html
cxk
[root@node2 ~]#curl 192.168.241.11/wyb.html
wyb

以上操作主机2还可以访问主机1的网页服务

如果想使主机2不能访问主机1的页面服务

主机1操作——新增一条防火墙规则

[root@localhost html]#iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "cxk" -j REJECT
#增加一条防火墙规则  限制任何主机通过80端口 通过algo bm算法 从62字节开始检查 涉及cxk的 进行拒绝

主机2操作

[root@node2 ~]#curl 192.168.241.11/wyb.html
wyb
[root@node2 ~]#curl 192.168.241.11/cxk.html

#cxk页面无法访问

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