一,安全技术定义
- 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署(默默的看着你)方式。
- 入侵防御系统(Intrusion Prevention System):以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)
- 防火墙( FireWall ):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中.
- 防水墙
广泛意义上的防水墙:防水墙(Waterwall),与防火墙相对,是一种防止内部信息泄漏的安全产品。 网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。防水墙针对这四种泄密途径,在事前、事 中、事后进行全面防护。其与防病毒产品、外部安全产品一起构成完整的网络安全体系。
二,防火墙分类
1,按保护范围划分
- 主机防火墙:服务范围为当前一台主机
- 网络防火墙:服务范围为防火墙一侧的局域网
2,按实现方式划分
- 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为, 山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet, Cisco, Checkpoint, NetScreen(Juniper2004年40亿美元收购)等
- 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront
3,按网络协议划分
3.1包过滤防火墙
网络层防火墙:OSI模型下四层,又称为包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否 允许该数据包通过
优点:对用户来说透明,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等
3.2应用层防火墙
proxy 代理网关,OSI模型七层
应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)
将所有跨越防火墙的网络通信链路分为两段
内外网用户的访问都是通过代理服务器上的“链接”来实现优点:在应用层对数据进行检查,比较安全
优点:但能看真实数据 (应对病毒)
缺点:增加防火墙的负载
提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用 层去检查
三,Linux 防火墙的基本认识
(一)Netfilter
Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中
Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作
Netfilter官网文档:https://netfilter.org/documentation/
(二)防火墙工具介绍
1,iptables
本章重点介绍
由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包。
2,firewalld
从CentOS 7 版开始引入了新的前端管理工具
软件包:
firewalld
firewalld-config
管理工具:
firewall-cmd 命令行工具
firewall-config 图形工作
3,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 具体介绍
(一)五表 五链
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 命令(流量控制工具)的替代品。
2,五表优先级
优先级由高到低的顺序为 :
security
raw 跟踪数据包
mangle 标记数据包
nat 地址转换 公网和私网的地址转换
filter 地址过滤 允许 拒绝
3,五链
input 入站数据
output 出站数据
forward 转发数据
postrouting 路由转发后
prerouting 路由转发前
(二)三种报文流向
1,过程
流入本机:PREROUTING --> INPUT-->用户空间进程(访问我的服务)
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING(穿过我)
转发:PREROUTING --> FORWARD --> POSTROUTING(分摊流量)
2,具体理解
这是一台防火墙:收到三种信息
1 垃圾信息 丢弃
2 就是 发给自己
3发给自己 需要转发的数据
路由判决: 看ip 判断是给自己的还是要转发
用户空间进程:上层协议 端口80 对应httpd 或者nginx
五,firewalld服务 具体介绍
(一)归入zone顺序:
- 先根据数据包中源地址,将其纳为某个zone
- 纳为网络接口所属zone
- 纳入默认zone,默认为public zone,管理员可以改为其它zone
- 网卡默认属于public zone,lo网络接口属于trusted zone
(二)firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则
- 已经存在了zone区域
- 使用firewall,就是将特定的流量关联到某个zone中
- 通过源网段关联zone
- 通过网卡关联zone区域
- 如果两者都没有关联的数据报文,那就会去default zone
- 进入到zone以后,开始匹配zone内的规则
(三) firewalld zone 分类
zone名称 | 默认配置 |
trusted | 允许所有流量 |
home | 拒绝除和传出流量相关的,以及ssh,mdsn,ipp-client,samba-client,dhcpv6-client预 定义服务之外其它所有传入流量 |
internal | 和home相同 |
work | 拒绝除和传出流量相关的,以及ssh,ipp-client,dhcpv6-client预定义服务之外的其它所有传入流量 |
public | 拒绝除和传出流量相关的,以及ssh,dhcpv6-client预定义服务之外的其它所有传入流 量,新加的网卡默认属于public zone |
external | 拒绝除和传出流量相关的,以及ssh预定义服务之外的其它所有传入流量,属于external zone的传出ipv4流量的源地址将被伪装为传出网卡的地址。 |
dmz | 拒绝除和传出流量相关的,以及ssh预定义服务之外的其它所有传入流量 |
block | 拒绝除和传出流量相关的所有传入流量 |
drop | 拒绝除和传出流量相关的所有传入流量(甚至不以ICMP错误进行回应) |
(四)预定义服务
服务名称 | 配置 |
ssh | Local SSH server. Traffic to 22/tcp |
dhcpv6- client | Local DHCPv6 client. Traffic to 546/udp on the fe80::/64 IPv6 network |
ipp- client | Local IPP printing. Traffic to 631/udp. |
samba- client | Local Windows file and print sharing client. Traffic to 137/udp and 138/udp. |
mdns | Multicast DNS (mDNS) local-link name resolution. Traffic to 5353/udp to the 224.0.0.251 (IPv4) or ff02::fb (IPv6) multicast addresses. |
firewalld预定义服务配置
- firewall-cmd --get-services 查看预定义服务列表
- /usr/lib/firewalld/services/*.xml预定义服务的配置
firewalld 三种配置方法
- firewall-config 图形工具: 需安装 firewall-config包
- firewall-cmd 命令行工具: firewalld包,默认安装
- /etc/firewalld/ 配置文件,一般不建议,如:/etc/firewalld/zones/public.xml
(五)远程工具图形化
可以打开 Xmanager - Passive
[root@localhost ~]# export DISPLAY=192.168.91.1:0.0 ###ip地址为自己的Windows地址 [root@localhost ~]# firewall-config centos6 iptables export DISPLAY=192.168.91.1:0.0 system-config-firewall
(六)命令行配置
1,基础命令
firewall-cmd [OPTIONS...] firewall-cmd #基础命令 --permanent #设置永久生效 --add-port=端口号/协议(tcp/udp) 设置端口号和协议 --reload #重新加载防火墙设置 --remove #移除规则 --get-zones 列出所有可用区域 --get-default-zone 查询默认区域 --set-default-zone=<ZONE> 设置默认区域 --get-active-zones 列出当前正使用的区域 --add-source=<CIDR>[--zone=<ZONE>] 添加源地址的流量到指定区域,如果无--zone= 选项,使用 默认区域 --remove-source=<CIDR> [--zone=<ZONE>] 从指定区域删除源地址的流量,如无--zone= 选项, 使用默认区域 --add-interface=<INTERFACE>[--zone=<ZONE>] 添加来自于指定接口的流量到特定区域,如果无-- zone= 选项,使用默认区域 --change-interface=<INTERFACE>[--zone=<ZONE>] 改变指定接口至新的区域,如果无--zone= 选项,使用默认区域 --add-service=<SERVICE> [--zone=<ZONE>] 允许服务的流量通过,如果无--zone= 选项,使用默 认区域 --add-port=<PORT/PROTOCOL>[--zone=<ZONE>] 允许指定端口和协议的流量,如果无--zone= 选 项,使用默认区域 --remove-service=<SERVICE> [--zone=<ZONE>] 从区域中删除指定服务,禁止该服务流量,如果 无--zone= 选项,使用默认区域 --remove-port=<PORT/PROTOCOL>[--zone=<ZONE>] 从区域中删除指定端口和协议,禁止该端口 的流量,如果无--zone= 选项,使用默认区域 --reload 删除当前运行时配置,应用加载永久配置 --list-services 查看开放的服务 --list-ports 查看开放的端口 --list-all [--zone=<ZONE>] 列出指定区域的所有配置信息,包括接口,源地址,端口,服务等,如 果无--zone= 选项,使用默认区域
2,查看现有firewall设置
[root@localhost ~]#systemctl start firewalld #开启 [root@localhost ~]#systemctl stop firewalld.service #关闭 [root@localhost ~]#systemctl status firewalld #查看状态 [root@localhost ~]#firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@localhost ~]#firewall-cmd --list-all --zones=区域名字
3,设置查看默认区
[root@localhost ~]#firewall-cmd --zone= #查看区域 block dmz drop external home internal public trusted work [root@localhost ~]#firewall-cmd --get-default-zone #查看默认区域 [root@localhost ~]#firewall-cmd --set-default-zone block dmz drop external home internal public trusted work [root@localhost ~]#firewall-cmd --set-default-zone block dmz drop external home internal public trusted work [root@localhost ~]#firewall-cmd --set-default-zone home success [root@localhost ~]#firewall-cmd --get-default-zone home
4,添加源地址(网段)及端口 及服务
[root@localhost ~]#firewall-cmd --permanent --add-port=80/tcp #添加80端口 [root@localhost ~]#firewall-cmd --permanent --remove-port=80/tcp #移除80端口 [root@localhost ~]#firewall-cmd --permanent --add-port=80/tcp --zone=home #可以指定区域 success [root@localhost ~]#firewall-cmd --add-service=http #允许http服务 [root@localhost ~]#firewall-cmd --permanent --add-icmp-block=echo-request #禁止ping success [root@localhost ~]#firewall-cmd --reload success [root@localhost ~]#firewall-cmd --permanent --add-source=192.168.100.0/24 # 基础命令 永久生效 添加 源 网段 子网掩码 [root@localhost ~]#firewall-cmd --reload success [root@localhost ~]#firewall-cmd --list-all #查看生效策略 小实验 尝试打开 httpd服务 ####删除source [root@localhost ~]#firewall-cmd --zone=home --remove-source=192.168.91.0/24 --remove-source=192.168.50.0/24 --remove-source=192.168.100.0/24 --permanent
5,其它规则
当基本firewalld语法规则不能满足要求时,可以使用以下更复杂的规则
rich-rules 富规则,功能强,表达性语言
Direct configuration rules 直接规则,灵活性差, 帮助:man 5 firewalld.direct
6,管理rich规则
rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,还可以实现日志syslog和
auditd,也可以实现端口转发,伪装和限制速率
规则实施顺序:
该区域的端口转发,伪装规则
该区域的日志规则
该区域的允许规则
该区域的拒绝规则
每个匹配的规则生效,所有规则都不匹配,该区域默认规则生效
7,rich语法:
rule [source] [destination] service|port|protocol|icmp-block|masquerade|forward-port [log] [audit] [accept|reject|drop]
man 5 firewalld.richlanguage
选项 | 描述 |
--add-rich-rule= | Add to the specified zone, or the default zone if no zone is specified. |
--remove-rich-rule= | Remove to the specified zone, or the default zone if no zone is specified. |
--query-rich-rule= | Query if has been added to the specified zone, or the default zone if no zoneis specified. Returns 0 if the rule is present, otherwise 1. |
--list-rich-rule= | Outputs all rich rules for the specified zone, or the default zone if no zone is |
8,例子
拒绝从192.168.0.100的所有流量,当address 选项使用source 或 destination时,必须用family= ipv4 |ipv6 [root@localhost ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.100/32 reject' [root@localhost ~]#firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.168.91.101" reject' 限制每分钟只有两个连接到ftp服务 [root@localhost ~]#firewall-cmd --add-rich-rule=‘rule service name=ftp limit value=2/m accept’ 接受所有192.168.1.0/24子网端口5900-5905范围的TCP流量 [root@localhost ~]#firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=5900-5905 protocol=tcp accept'