入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署(默默的看着你)方式。
入侵防御系统(Intrusion Prevention System):以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)
防火墙( FireWall ):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中.
防水墙
广泛意义上的防水墙:防水墙(Waterwall),与防火墙相对,是一种防止内部信息泄漏的安全产品。 网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。防水墙针对这四种泄密途径,在事前、事 中、事后进行全面防护。其与防病毒产品、外部安全产品一起构成完整的网络安全体系。
主机防火墙:服务范围为当前一台主机
网络防火墙:服务范围为防火墙一侧的局域网
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为, 山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet, Cisco, Checkpoint, NetScreen(Juniper2004年40亿美元收购)等
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront
网络层防火墙:OSI模型下四层,又称为包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否 允许该数据包通过
优点:对用户来说透明,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等
proxy 代理网关,OSI模型七层
应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)
将所有跨越防火墙的网络通信链路分为两段
内外网用户的访问都是通过代理服务器上的“链接”来实现优点:在应用层对数据进行检查,比较安全
优点:但能看真实数据 (应对病毒)
缺点:增加防火墙的负载
提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用 层去检查
Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中
Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作
Netfilter官网文档:https://netfilter.org/documentation/
本章重点介绍
由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包。
从CentOS 7 版开始引入了新的前端管理工具
软件包:
firewalld
firewalld-config
管理工具:
firewall-cmd 命令行工具
firewall-config 图形工作
此软件是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在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、
PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则。 即五表
由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上 即五链
提示:从 Linux kernel 4.2 版以后,Netfilter 在prerouting 前加了一个 ingress 勾子函数。可以使用这个新的入口挂钩来过滤来自第2层的流量,这个新挂钩比预路由要早,基本上是 tc 命令(流量控制工具)的替代品。
优先级由高到低的顺序为 :
security
raw 跟踪数据包
mangle 标记数据包
nat 地址转换 公网和私网的地址转换
filter 地址过滤 允许 拒绝
input 入站数据
output 出站数据
forward 转发数据
postrouting 路由转发后
prerouting 路由转发前
流入本机:PREROUTING --> INPUT-->用户空间进程(访问我的服务)
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING(穿过我)
转发:PREROUTING --> FORWARD --> POSTROUTING(分摊流量)
这是一台防火墙:收到三种信息
1 垃圾信息 丢弃
2 就是 发给自己
3发给自己 需要转发的数据
路由判决: 看ip 判断是给自己的还是要转发
用户空间进程:上层协议 端口80 对应httpd 或者nginx
先根据数据包中源地址,将其纳为某个zone
纳为网络接口所属zone
纳入默认zone,默认为public zone,管理员可以改为其它zone
网卡默认属于public zone,lo网络接口属于trusted zone
已经存在了zone区域
使用firewall,就是将特定的流量关联到某个zone中
通过源网段关联zone
通过网卡关联zone区域
如果两者都没有关联的数据报文,那就会去default zone
进入到zone以后,开始匹配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
firewall-cmd [OPTIONS...]
firewall-cmd
#基础命令
--permanent
#设置永久生效
--add-port=端口号/协议(tcp/udp)
设置端口号和协议
--reload
#重新加载防火墙设置
--remove
#移除规则
--get-zones 列出所有可用区域
--get-default-zone 查询默认区域
--set-default-zone= 设置默认区域
--get-active-zones 列出当前正使用的区域
--add-source=[--zone=] 添加源地址的流量到指定区域,如果无--zone= 选项,使用
默认区域
--remove-source= [--zone=] 从指定区域删除源地址的流量,如无--zone= 选项,
使用默认区域
--add-interface=[--zone=] 添加来自于指定接口的流量到特定区域,如果无--
zone= 选项,使用默认区域
--change-interface=[--zone=] 改变指定接口至新的区域,如果无--zone=
选项,使用默认区域
--add-service= [--zone=] 允许服务的流量通过,如果无--zone= 选项,使用默
认区域
--add-port=[--zone=] 允许指定端口和协议的流量,如果无--zone= 选
项,使用默认区域
--remove-service= [--zone=] 从区域中删除指定服务,禁止该服务流量,如果
无--zone= 选项,使用默认区域
--remove-port=[--zone=] 从区域中删除指定端口和协议,禁止该端口
的流量,如果无--zone= 选项,使用默认区域
--reload 删除当前运行时配置,应用加载永久配置
--list-services 查看开放的服务
--list-ports 查看开放的端口
--list-all [--zone=] 列出指定区域的所有配置信息,包括接口,源地址,端口,服务等,如
果无--zone= 选项,使用默认区域
[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=区域名字
[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
[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
当基本firewalld语法规则不能满足要求时,可以使用以下更复杂的规则
rich-rules 富规则,功能强,表达性语言
Direct configuration rules 直接规则,灵活性差, 帮助:man 5 firewalld.direct
rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,还可以实现日志syslog和
auditd,也可以实现端口转发,伪装和限制速率
规则实施顺序:
该区域的端口转发,伪装规则
该区域的日志规则
该区域的允许规则
该区域的拒绝规则
每个匹配的规则生效,所有规则都不匹配,该区域默认规则生效
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 |
拒绝从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'