《构建基于 Snort+Guardian+Iptables 的 IPS》
2020 年的第三天, 依旧如往常写文章, 分享最近做的项目继《中小型企业级防火墙部署》之后的另一部分《构建基于 Snort+Guardian+Iptables 的 IPS》, 后面会将整个完整项目开源分享出来, 欢迎大家一起交流分享
IPS
IPS 简介
IPS 是英文 "Intrusion Prevention System" 的缩写, 中文意思是 "入侵防御系统", 是一种网络安全设备或应用软件, 除了具有 IDS 的监控检测功能之外, 还具有深度感知检测数据流量, 对恶意报文进行丢弃, 实现实时告警和阻断的入侵防御系统.
IPS 功能组成
数据采集: 采集和捕获流量数据
入侵检测: 分析流量和日志数据, 发现安全异常行为并发出警报, 常见的有 Snort,Suricata,Bro
结果展示: 用于分析 IDS 警报并进行友好展示, 常见的 IDS 警报分析工具有 Snorby,Sguil,Base
安全防御: 主动响应安全事件, 阻断攻击者入侵行为, 常用 iptables
IDS
IDS 是英文 "Intrusion Detection Systems" 的缩写, 中文意思是 "入侵检测系统", 是一种网络安全设备或应用软件, 可以依照一定的安全策略, 对网络, 系统的运行状况进行监视, 尽可能发现各种攻击企图, 攻击行为或者攻击结果, 并发出安全警报.
IDS 通用系统模型
(1)数据收集器(又称探测器): 主要负责收集数据. 探测器的输入数据流包括任何可能包含入侵行为线索的系统数据, 如各种网络协议数据包, 系统日志文件和系统调用记录等. 探测器将这些数据收集起来, 然后再发送到检测器进行处理.
(2)检测器(又称分析器或检测引擎): 负责分析和检测入侵的任务, 并向控制器发出警报信号.
(3)知识库: 为检测器和控制器提供必需的数据信息支持. 这些信息包括: 用户历史活动档案或检测规则集合等.
(4)控制器: 根据从检测器发来的警报信号, 人工或自动地对入侵行为做出响应.
IDS 分类
IDS 根据两种方法进行分类: 按照数据来源, 按照入侵检测策略.
按照数据来源分类
基于网络的入侵检测系统(NIDS)
基于主机的入侵监测系统(HIDS)
分布式入侵检测系统(DIDS)
按照入侵检测策略分类
滥用检测
异常检测
完整性分析
环境搭建
企业拓扑
环境准备
DMZ 区: CentOS7 --- IP:192.168.9.100 Gateway:192.168.9.254
防火墙: kali --- ip1:211.67.93.254;ip2:192.168.9.254;ip3:192.168.33.254;
外网主机: win2003 --- IP:211.67.93.100 Gateway:211.67.93.254
内网主机: win2003 --- IP:192.168.33.100 Gateway:192.168.33.254
IDS Snort
Snort 简介
在 1998 年, Martin Roesch 用 C 语言开发了开放源代码 (Open Source) 的入侵检测系统 Snort. 直至今天, Snort 已发展成为一个具有多平台 (Multi-Platform), 实时(Real-Time) 流量分析, 网络 IP 数据包 (Pocket) 记录等特性的强大的网络入侵检测 / 防御系统(Network Intrusion Detection/Prevention System), 即 NIDS/NIPS.Snort 符合通用公共许可(GPL--GNU General Pubic License), 在网上可以通过免费下载获得 Snort, 并且只需要几分钟就可以安装并开始使用.
Snort 有三种工作模式: 嗅探器, 数据包记录器, 网络入侵检测系统. 嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上. 数据包记录器模式把数据包记录到硬盘上. 网络入侵检测模式是最复杂的, 而且是可配置的. 我们可以让 snort 分析网络数据流以匹配用户定义的一些规则, 并根据检测结果采取一定的动作.
Snort 安装
安装系统 Kali
Snort 安装方式一般分为源码编译安装与包管理器安装两种方式. 使用源码下载会比较复杂, 但是文档齐全, debug 方便一些; 而包管理器安装非常方便, 一条命令解决所有问题
apt-get install snort
Snort 配置
设置规则路径
修改配置文件
/etc/snort/snort.conf
查看规则
PS:Linux 默认安装之后 Snort 日志路径等都会默认配置好, 无需麻烦配置
Snort 启动
snort -i eth1 -c /etc/snort/snort.conf -A fast -l /var/log/snort
Snort 测试
查看默认 Snort ICMP 规则
测试外网 ping DMZ 区域 web 服务器
查看 IDS 日志记录
分析日志可知, Snort 允许 ICMP 通过, 并且记录了 ICMP 的相关数据.
Guardian
Guardian 实现 Snort+Iptables 联动效应
Guardian 下载
Guardian 需要去官网下载
http://www.chaotic.org/guardian/
Guardian 安装
下载之后解压
tar -zxvf guardian-1.7.tar.gz
移动 guardian 到 snort 下 && 创建名单 && 日志
→ Qftm ← :~/ 桌面# mv guardian-1.7 /etc/snort/
→ Qftm ← :~/ 桌面# touch /etc/snort/guardian-1.7/guardian.ignore 创建白名单
→ Qftm ← :~/ 桌面# touch /etc/snort/guardian-1.7/guardian.target 创建黑名单
→ Qftm ← :~/ 桌面# touch /var/log/snort/guardian.log guardian 的日志
复制 block 脚本
→ Qftm ← :/etc/snort/guardian-1.7# cp scripts/iptables_block.sh /usr/local/bin/guardian_block.sh
→ Qftm ← :/etc/snort/guardian-1.7# cp scripts/iptables_unblock.sh /usr/local/bin/guardian_unblock.sh
此操作是为了满足在 guardian.pl 中设置的 \(blockpath 和 \)unblockpath 路径
PS:
(1)Guardian 的执行文件 guardian.pl
(2)Guardian 封锁 IP 所要调用的外部程序 scripts/iptalbes_block.sh
(3)Guardian 解除对某一 IP 封锁时, 所需要调用的外部程序 scripts/iptalbes_unblock.sh
Guardian 配置
配置 guardian.conf
- Interface eth1
- HostGatewayByte 1
- LogFile /var/log/snort/guardian.log
- AlertFile /var/log/snort/alert
- IgnoreFile /etc/snort/guardian-1.7/guardian.ignore
- TargetFile /etc/snort/guardian-1.7/guardian.target
- TimeLimit 86400
PS:
TimeLimit: 在多少秒后解除对 IP 的封锁, 86400 秒也就是 24 小时之后解除对 IP 的封锁.
AlertFile: 警报信息, 前提是 snort 以 alert_fast 输出报警信息
配置 guardian_block.sh 和 guardian_unblock.sh 规则
编写策略文件, 配置对外来入侵者进行拦截和解除的策略
Guardian 启动
→ Qftm ← :/etc/snort/guardian-1.7# perl guardian.pl -c guardian.conf
IPS 测试
外网攻击者对 Web 服务器进行攻击
IPS 检测 & 拦截
IPS 检测
IPS 拦截
由上可知, 外部攻击者被 IPS 记录拦截限制访问
来源: https://www.cnblogs.com/qftm/p/12129029.html