目录
一、防火墙的认识
1.防火墙定义
2.防火墙分类
二、Linux系统防火墙
1.Netfilter
2.防火墙工具介绍
2.1iptables
2.2firewalld
2.3nftables
2.4netfilter的五个勾子函数和报文流向
2.4.1五个勾子
2.4.2三种报文流向
3.iptables
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删除清空替换规则
清空规则
5.4.4设置默认策略
5.5语法总结
6.通用匹配
6.1不允许另一台主机通过icmp协议来ping本机
编辑7.模块
7.1隐含扩展
7.1.1实验 控制目的主机 不想让其访问本机的httpd服务
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三种报文流向
内核中数据包传输过程
- 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要 转送出去
- 如果数据包是进入本机的,数据包就会沿着图向上移动,到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达postrouting
- 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过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地址、端口等信息的处理上
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以及一些规则组成
- 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 添加新的防火墙规则
清空防火墙规则
当前无任何防火墙规则
当前192.168.241.22主机还可以ping通192.168.241.11主机
添加一条防火墙规则,不允许任何主机通过icmp协议ping本机
此时,无法通过icmp协议通过ping来检测与192.168.241.11主机的网络连通性
5.4.2查看防火墙规则
查看已有的防火墙规则时,使用管理选项“-L”,结合“--line-numbers”选项还可显示各条规则在链内的顺序号。例如,若要查看 filter 表 INPUT 链中的所有规则,并显示规则序号, 可以执行以下操作
-v详细信息;-t查看nat表;-n规则数字化显示
5.4.3删除清空替换规则
清空规则
清空指定链或表中的所有防火墙规则,使用管理选项“-F”。例如,若要清空 filter 表 INPUT
删除规则 -D
替换规则
注意:
- 若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条
- 按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错
- 按内容匹配删数时,确保规则存在,否则报错
5.4.4设置默认策略
iptables 的各条链中,默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为 ACCEPT(允许)、DROP(丢弃)两种。例如,执行以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃, OUTPUT 链的默认策略设为允许。
iptables [-t表名] -P <链名> <控制类型>
设置只有192.168.241.11的主机可以接受登录
如果输入该命令,则拒绝所有192.168.241.0网段的主机连接
会生成如下情况
解决办法,进入真机查看防火墙规则
在真机插入一条防火墙规则,置于拒绝规则之前
插播 如果一直删除第三条规则,最后只会留下两条规则
Xshell是通过真机来使用的,所以要把本机的ip添加进去,使得真机被接受通过
Xshell连接成功
需要注意的是,当使用管理选项“-F”清空链时,默认策略不受影响。因此若要修改默认 策略,必须通过管理选项“-P”重新进行设置。另外,默认策略并不参与链内规则的顺序编排, 因此在其他规则之前或之后设置并无区别。
白名单
-P设置默认规则为DROP 拒绝之后 会拒绝所有连接
如果在生产环境中建议使用这个白名单,白名单要放在所有规则之后;
如果想设置白名单,默认拒绝所有之前,先把自己加进来
先设置自己的地址进来,接收真机的地址
然后设置白名单 所有的流量都拒绝 此时看到不会影响Xshell的连接
默认白名单
5.5语法总结
iptables | table | command | chain | parameter | target |
-t filter | -A -Z -N |
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
设置拒绝192.168.241.22主机通过icmp协议来ping本机
此时看到192.168.241.22主机无法通过icmp协议来ping192.168.241.11主机
但是通过ssh命令可以连接本机
7.模块
.so结尾的均为模块,也就是说在使用配置防护墙规则的时候,调用的是.so结尾的配置文件
如果想禁用tco协议防火墙配置,那么必须要有tcp模块才可以使用限制功能
7.1隐含扩展
- iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
- 要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。 端口匹配: --sport 源端口、--dport 目的端口(可以是个别端口、端口范围)
[root@localhost ~]#man iptables-extensions
隐含扩展可以通过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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Apache HTTP Server Test Page powered by CentOS</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- Bootstrap -->
<link href="/noindex/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="noindex/css/open-sans.css" type="text/css" />
<style type="text/css"><!--
body {
font-family: "Open Sans", Helvetica, sans-serif;
font-weight: 100;
color: #ccc;
background: rgba(10, 24, 55, 1);
font-size: 16px;
}
h2, h3, h4 {
font-weight: 200;
}
h2 {
font-size: 28px;
}
.jumbotron {
margin-bottom: 0;
color: #333;
background: rgb(212,212,221); /* Old browsers */
background: radial-gradient(ellipse at center top, rgba(255,255,255,1) 0%,rgba(174,174,183,1) 100%); /* W3C */
}
.jumbotron h1 {
font-size: 128px;
font-weight: 700;
color: white;
text-shadow: 0px 2px 0px #abc,
0px 4px 10px rgba(0,0,0,0.15),
0px 5px 2px rgba(0,0,0,0.1),
0px 6px 30px rgba(0,0,0,0.1);
}
.jumbotron p {
font-size: 28px;
font-weight: 100;
}
.main {
background: white;
color: #234;
border-top: 1px solid rgba(0,0,0,0.12);
padding-top: 30px;
padding-bottom: 40px;
}
.footer {
border-top: 1px solid rgba(255,255,255,0.2);
padding-top: 30px;
}
--></style>
</head>
<body>
<div class="jumbotron text-center">
<div class="container">
<h1>Testing 123..</h1>
<p class="lead">This page is used to test the proper operation of the <a href="http://apache.org">Apache HTTP server</a> after it has been installed. If you can read this page it means that this site is working properly. This server is powered by <a href="http://centos.org">CentOS</a>.</p>
</div>
</div>
<div class="main">
<div class="container">
<div class="row">
<div class="col-sm-6">
<h2>Just visiting?</h2>
<p class="lead">The website you just visited is either experiencing problems or is undergoing routine maintenance.</p>
<p>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.</p>
<p>For example, if you experienced problems while visiting www.example.com, you should send e-mail to "webmaster@example.com".</p>
</div>
<div class="col-sm-6">
<h2>Are you the Administrator?</h2>
<p>You should add your website content to the directory <tt>/var/www/html/</tt>.</p>
<p>To prevent this page from ever being used, follow the instructions in the file <tt>/etc/httpd/conf.d/welcome.conf</tt>.</p>
<h2>Promoting Apache and CentOS</h2>
<p>You are free to use the images below on Apache and CentOS Linux powered HTTP servers. Thanks for using Apache and CentOS!</p>
<p><a href="http://httpd.apache.org/"><img src="images/apache_pb.gif" alt="[ Powered by Apache ]"></a> <a href="http://www.centos.org/"><img src="images/poweredby.png" alt="[ Powered by CentOS Linux ]" height="31" width="88"></a></p>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="row">
<div class="col-sm-6">
<h2>Important note:</h2>
<p class="lead">The CentOS Project has nothing to do with this website or its content,
it just provides the software that makes the website run.</p>
<p>If you have issues with the content of this site, contact the owner of the domain, not the CentOS project.
Unless you intended to visit CentOS.org, the CentOS Project does not have anything to do with this website,
the content or the lack of it.</p>
<p>For example, if this website is www.example.com, you would find the owner of the example.com domain at the following WHOIS server:</p>
<p><a href="http://www.internic.net/whois.html">http://www.internic.net/whois.html</a></p>
</div>
<div class="col-sm-6">
<h2>The CentOS Project</h2>
<p>The CentOS Linux distribution is a stable, predictable, manageable and reproduceable platform derived from
the sources of Red Hat Enterprise Linux (RHEL).<p>
<p>Additionally to being a popular choice for web hosting, CentOS also provides a rich platform for open source communities to build upon. For more information
please visit the <a href="http://www.centos.org/">CentOS website</a>.</p>
</div>
</div>
</div>
</div>
</div>
</body></html>
[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
如果想设置拒绝22-80所有端口
7.1.2如何实现主机1可以ping主机2,但是主机2无法ping主机1
实验开始前,双方可以互相ping
添加规则之后,双方不能互相ping
通过控制INPUT icmp协议 拒绝192.168.241.22的8包
此时主机1可以ping通主机2 主机2ping不通主机1
如果再修改OUTPUT 拒绝192.168.241.22的0包
也是可以使主机2无法向主机1回包
7.2显式扩展
显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块
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
还可以访问主机1的httpd服务
此时,如果给主机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的网络连通性
如果给主机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的网络连通性
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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <NO-CARRIER,BROADCAST,MULTICAST,UP> 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: <BROADCAST,MULTICAST> 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操作——新增一条防火墙规则文章来源:https://www.toymoban.com/news/detail-834238.html
[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操作文章来源地址https://www.toymoban.com/news/detail-834238.html
[root@node2 ~]#curl 192.168.241.11/wyb.html
wyb
[root@node2 ~]#curl 192.168.241.11/cxk.html
#cxk页面无法访问
到了这里,关于linux系统---防火墙的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!