Linux安全技术与iptables防火墙

一.安全技术:

  • 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署(默默的看着你)方式。

  • 入侵防御系统(Intrusion Prevention System):以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)。

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

防水墙:

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

二.防火墙:

bash 复制代码
应用层     进程 程序
表示层
会话层



传输层           端口          防火墙
网络层           ip            路由器 三层 
数据链路层        mac          交换机



物理层      定义标准

1.防火墙概念:

防火墙(Firewall)技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。

2.防火墙的分类:

按保护范围划分:

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

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

按实现方式划分:

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

  • 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront

按网络协议划分:

  • 网络层防火墙:OSI模型下四层,又称为包过滤防火墙

  • 应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层

包过滤防火墙:

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

优点:对用户来说透明,处理速度快且易于维护

缺点:无法检查应用层数据,如病毒等

应用层防火墙:

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

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

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

缺点:增加防火墙的负载

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

三.Linux防火墙的基本认识:

Linux系统的防火墙:IP信息包过滤系统,它实际上由两个组件 netfilter 和**iptables**组成。

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

1.Netfilter:

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

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

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

2.防火墙工具介绍:

iptables:

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

诉内核如何去处理信息包

firewalld:

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

软件包:

firewalld

firewalld-config

管理工具:

firewall-cmd 命令行工具

firewall-config 图形工作

nftables:

此软件是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中的所有其他工具。从体系结构的角度来看,它还替换了内核中处理数据包过滤规则集运行时评估的那些部分。

netfilter/iptables关系

netfilter:

位于Linux内核中的包过滤功能体系

称为Linux防火墙的"内核态"(内核空间)

是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。
iptables:

位于/sbin/iptables

用来管理防火墙规则的工具称为Linux防火墙的"用户态"

它使插入、修改和删除数据包过滤表中的规则变得容易
netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。

表中所有规则配置后,立即生效,不需要重启服务。

3.iptables防火墙默认规则表、链结构:

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

数据包到达防火墙时,规则表之间的优先顺序: raw > mangle > nat > filter

四.iptables的四表五链:

1.四表:

raw表 ∶ 确定是否对该数据包进行状态跟踪

mangle表 ∶为数据包设置标记

nat表 ∶ 负责网络地址转换,用来修改数据包中的源、目标IP地址或端口

filter表 : 负责过滤数据包, 确定是否放行该数据包(过滤

2.五链:

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

OUTPUT处理出站数据包,一般不在此锌上,做配置。

FORWARD处理转发数据包,匹配流经本机的数据包。

PREROUTING链 ∶ **在进行路由选择前处理数据包,用来修改目的地址,**用来做DNAT。相当于把内网服务器的工P和端口映射到路由器的外网IP和端口上。

POSTROUTING链 ∶ **在进行路由选择后处理数据包,用来修改源地址,**用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网工P地址上网。

3.四表五链总结:

规则表的作用∶容纳各种规则链

规则链的作用∶容纳各种防火墙规则

表里有链,链里有规则

3.1 规则链之间的匹配顺序:

  • 入站数据(来自外界的数据包,且目标地址是防火墙本机)∶ PREROUTING --> INPUT --> 本机的应用程序
  • 出站数据(从防火墙本机向外部地址发送的数据包)∶ 本机的应用程序 --> OUTPUT --> POSTROUTING网络型防火墙∶
  • 转发数据(需要经过防火墙转发的数据包)∶ PREROUTING --> FORWARD -->POSTROUTING

3.2 规则链内的匹配顺序:

  • 自上向下按顺序依次进行检查,找到相匹配的规则即停 止 (LoG策略例外, 表示记录相关日志)
  • 若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)

4.内核中数据包的传输过程:

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

5.三种报文流向:

流入本机:PREROUTING --> INPUT-->用户空间进程(访问我的服务)

流出本机:用户空间进程 -->OUTPUT--> POSTROUTING(穿过我)

转发:PREROUTING --> FORWARD --> POSTROUTING(分摊流量)

五.iptables的配置:

1.iptables的安装:

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

bash 复制代码
systemctl stop firewalld. service				关闭firewalld防火墙
systemctl disable firewalld. service			取消firewalld防火墙开机自启动
yum -y install iptables iptables-services		安装iptables和iptables-services
systemctl start iptables.service				启动iptables-services
systemctl status iptables.service               查看iptables-services状态

2.iptables防火墙的配置方法:

2.1 使用图形化来管理 system-config-firewall(centos 6)
2.2 使用iptables命令行管理:
bash 复制代码
命令格式:
iptables  [-t 表名]  管理选项  [链名] [匹配条件] [-j 控制类型]

注意事项:

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

不指定链名时,默认指表内的所有链

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

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

语法总结:

常见的管理选项:
管理选项 用法示例
-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 看链的所有规则或者某个链的规则/某个具体规则后面跟编号

常用控制类型:

|------------|-------------------------------------------------------------------|
| 控制类型 | 作用 |
| ACCEPT | 允许数据包通过(默认) |
| DROP | 直接丢弃数据包,不给出任何回应信息 |
| REJECT | 拒绝数据包通过,会给数据发送端一个响应信息 |
| SNAT | 修改数据包的源地址 |
| DNAT | 修改数据包的目的地址 |
| MASQUERADE | 伪装成一个非固定公网IP地址 |
| LOG | 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助动作,并没有真正处理数据包 |

通用匹配:

|---------|-----------------------------|
| 匹配的条件 | 作用 |
| -p | 指定要匹配的数据包的协议类型 |
| -s | 指定要匹配的数据包的源IP地址 |
| -d | 指定要匹配的数据包的目的IP地址 |
| -i | 指定数据包进入本机的网络接口(入站网卡) |
| -o | 指定数据包离开本机做使用的网络接口(出站网卡) |
| --sport | 指定源端口号 |
| --dport | 指定目的端口号 |

六. iptables操作:

1.查看 iptables 的规则:

bash 复制代码
[root@localhost ~]#iptables -vnL
 
-L 与 -vn 一起使用时,L 要在最后面,否则会报错
 
[root@localhost ~]#iptables -vnL --line-number
 
#显示各条规则在链内的顺序号
 

2.指定表查看:

bash 复制代码
iptables -t filter -vnL
bash 复制代码
iptables -t filter -vnL INPUT (在最后面加入链的名称,可以只显示该表
该链的规则)

3.删除规则:

bash 复制代码
[root@localhost ~]#iptables -D INPUT 1
#指定链  并且指定链的序号
 
 
[root@localhost ~]#iptables -D INPUT -s 172.16.195.3 -j DROP 
#指定链  并且指定源地址
 
 
[root@localhost ~]#iptables -F     
#清除链中所有的规则

删除指定链:

指定删除:

删除全部:

注意:

① 若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条

② 按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错

③ 按内容匹配删数时,确保规则存在,否则报错

4.添加新规则:

bash 复制代码
[root@localhost ~]#iptables -I INPUT  -s 172.16.195.3 -j ACCEPT
#在INPUT链中插入一条新的,未指定序号,默认加在第一条
bash 复制代码
[root@localhost ~]#iptables -I INPUT 2  -s 172.16.195.3 -j ACCEPT 
#指定序号  加在第2条的位置
bash 复制代码
[root@localhost ~]#iptables -A INPUT   -s 192.168.44.4 -j ACCEPT 
#在INPUT链的末尾加上
bash 复制代码
[root@localhost ~]#iptables -A INPUT -s 172.16.195.3/24 -j REJECT 
 
#当我们输入这个,并敲下回车,出问题了
#拒绝192.168.44.0这个段接入
 
[root@localhost gg]#iptables -I INPUT 2 -s 172.16.195.4/24 -j ACCEPT 
 
#在这条规则之前,允许本机接入,可以解决问题
不允许其他主机ping本机,给响应信息REJECT,ping所使用的协议为icmp
bash 复制代码
iptables -t filter -A INPUT -p icmp -j REJECT
#不允许其他主机ping本机,给响应信息REJECT,ping所使用的协议为icmp
 
iptables -nL 
#使用数字形式(fliter)表所有链
不允许其他主机ping本机,不给响应信息 DROP, ping所使用的协议为icmp:
bash 复制代码
iptables -t filter -A INPUT -p icmp -j DROP
#不允许其他主机ping本机,不给响应信息DROP,ping所使用的协议为icmp

小问题:

在拒绝所有之后,连自己也无法ping通,怎么办?

bash 复制代码
iptables -nvL 
#拒绝所有
iptables -I INPUT 2 -i lo -j ACCEPT 
#-i 指定入站网卡 lo   回环网卡   接受

5.设置默认策略:

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

bash 复制代码
[root@localhost ~]#iptables -P  INPUT ACCEPT
#指定默认规则  ACCEPT
bash 复制代码
[root@localhost ~]#iptables -A INPUT -s 172.16.195.3 -j ACCEPT 
#在 INPUT 链末尾加入自己
 
 
[root@localhost ~]#iptables -A INPUT -j DROP 
#在 INPUT 链末尾  拒绝所有,相当于白名单了
 
 
这样操作,相当于自己不在拒绝之外,相当于白名单,其他人需要进来需要添加进白名单

注意:

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

6.修改、替换规则:

规则通式:

bash 复制代码
iptables  -t 表名  -R 链名  编号  规则
bash 复制代码
[root@localhost ~]#iptables -R INPUT 3 -s 172.16.195.3/24 -j ACCEPT 

7.自定义链:

bash 复制代码
-N  自定义一条新的规则链
-E  重命名自定义链   :引用计数不为0的自定义链,也就是被使用的自定义链,不能够被重命名,也不能被删除
-X  删除自定义的空的规则链
bash 复制代码
iptables -A xyl -p tcp --dport 8080 -j ACCEPT
bash 复制代码
[root@localhost ~]#iptables -X lxc
 
注意:引用计数为0才可以删除
bash 复制代码
[root@localhost ~]#iptables -E gg lxc
#重命名自定义链

8.通用匹配:

可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。

  • 协议匹配:-p 协议名
  • 地址匹配:-s 源地址、-d 目的地址 可以是IP、网段、域名、空(任何地址)
  • 接口匹配:-i 入站网卡、-o出站网卡
bash 复制代码
iptables -A INPUT -s 172.16.195.3 -j DROP
#不允许192.168.79.220 ping通本机

9.隐含匹配:

要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类 型等条件。

bash 复制代码
端口匹配∶ --sport 源端口、--dport 目的端口

9.1 端口匹配: --sport 源端口、--dport 目的端口,可以是个别端口、端口范围

  • --sport 1000 匹配源端口是1000的数据包
  • --sport 1000:3000 匹配源端口是1000-3000的数据包
  • --sport :3000 匹配源端口是3000及以下的数据包
  • --sport 1000: 匹配源端口是1000及以上的数据包
  • --sport和--dport 必须配合 -p <协议类型> 使用
bash 复制代码
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
#指定tcp协议目标端口20:21同意访问
 
iptables-I FORWARD -d 192.168.80.0/24 -p tcp --dport 24500:24600 -j DROP
#不转发 目标网段是 192.168.80段 tcp协议的24500到24600
 
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -jACCEPT
#丢弃SYN请求包,放行其他包

9.2 ICMP类型匹配:

bash 复制代码
格式:--icmp-type ICMP类型,可以是字符串、数字代码
  • "Echo-Request"(代码为8)表示请求
  • "Echo- -Reply"(代码为0)表示回显
  • "Dest ination-Unreachable" (代码为3)表示目标不可达
  • 关于其它可用的ICMP 协议类型,可以执行"iptables -P icmp -h"命令,查看帮助信息
bash 复制代码
iptables -A INPUT -p icmp --icmp-type 8 -j DROP	
#禁止其它主机ping本机
 
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT 
#允许本机ping其它主机
 
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT	 
#当本机ping不通其它主机时 提示目标不可达

10.显示匹配:

要求以"-m扩展模块"的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件

10.1 多端口匹配:

  • -m multiport --sport 源端口列表
  • -m multiport --dport 目的端口列表
bash 复制代码
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -i ACCEPT 
#允许访问tcp的80,22,21,20,53端口
 
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
#允许访问udp的53端口

10.2 ip范围匹配:

bash 复制代码
iptables -A FORWARD -p udp -m iprange --src-range 192.168.52.100-192.168.52.200 -j DROP
# 禁止转发源地址位于192.168.52.100------192.168.52.200的udp数据包

10.3 MAC地址匹配:

格式:-m mac --mac -source MAC地址

bash 复制代码
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
禁止来自某MAC地址的数据包通过本机转发

10.4 状态匹配:

格式:-m state --state 连接状态

常见连接状态:

  • NEW:主机连接目标主机,在目标主机上看到的第一个想要连接的包
  • ESTABLISHED:主机已与目标主机进行通信,判断标准只要目标主机回应了第一个包,就进入该状态
  • RELATED:主机已与目标主机进行通信,目标主机发起新的链接方式,一般与ESTABLISHED 配合使用
  • INVALID ∶ 无效的封包,例如数据破损的封包状态
bash 复制代码
iptables -I INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -P udp -m multiport --dport 53 -j ACCEPT
iptables -A INPUT -P tcp -m state --state ESTABLISHED, RELATED -j ACCEPT
#对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过简j单来说就是只允许所有自己发出去的包进来
相关推荐
Johny_Zhao17 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
用户962377954481 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954481 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star1 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954481 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
YuMiao1 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端