实践五 网络安全防范技术
一、实验内容
1.主要任务
本次实践聚焦于网络防御技术的三个核心方面:防火墙配置、入侵检测系统(IDS)应用以及蜜网网关安全规则分析。通过动手操作与配置分析,深入理解网络安全防护机制在真实场景中的部署与协同工作方式。
1.防火墙配置实践
在Linux平台使用iptables工具配置包过滤规则,实现两项具体安全目标:一是通过丢弃ICMP回显请求数据包,使主机对外部Ping探测无响应;二是基于IP地址的访问控制,仅允许特定IP(模拟可信攻击机)访问本机HTTP服务,而拒绝其他所有主机的连接请求。通过实际网络测试验证规则有效性。
2.Snort入侵检测实践
利用开源IDS工具Snort 3对给定的离线pcap流量文件(listen.pcap)进行分析。通过配置Snort主配置文件snort.lua及加载社区规则集,检测pcap中是否存在网络扫描或攻击行为。结合Snort输出的统计信息与协议异常指标,识别并说明流量中隐藏的TCP SYN端口扫描行为。
3.蜜网网关规则分析
登录Honeywall蜜网网关虚拟机,查看其防火墙启动脚本/etc/init.d/rc.firewall、Snort配置文件/etc/hflow/snort.conf以及服务启动脚本/etc/init.d/hw-snort_inline和/etc/init.d/snortd。分析iptables自定义链(黑名单、白名单、隔离列表、协议限速链)与Snort_inline IPS模式的配置细节,阐释蜜网网关如何通过“防火墙粗粒度控制+入侵检测细粒度阻断”的协同架构,实现攻击数据的完整捕获与出站风险的严格控制。
2.实验环境
- 主机系统:Windows 11
- 虚拟化平台:VMware Workstation 17 Pro
- 虚拟机:
| 主机 | IP地址 | Mac地址 |
|---|---|---|
| WinXPattacker(实际没用到) | 192.168.188.6 | 00:0c:29:CD:96:e9 |
| Kali Linux 2020.1 | 192.168.188.2 | 00:0c:29:42:40:f9 |
| Kali Linux 2025.4 | 192.168.188.7 | 00:0c:29:d2:d4:c0 |
| SEEDUbuntu9-Aug-2010 | 192.168.188.3 | 00:0c:29:ae:ef:2a |
| VMNet8网卡 | 192.168.188.1 | 00:50:56:fa:aa:1e |
- 网络模式:NAT模式(VMnet8,子网 192.168.188.0/24)确保虚拟机间及与宿主机互通。
3.知识点梳理
3.1 防火墙技术与iptables
防火墙基本原理
防火墙是一种网络安全系统,根据预定义的安全规则监控和控制进出网络的流量。它可以是硬件设备或软件程序,核心功能是建立内部可信网络与外部不可信网络之间的屏障。防火墙主要分为包过滤防火墙、状态检测防火墙、应用层网关防火墙等类型,其中包过滤防火墙是最基础的形式,通过检查数据包的头部信息(源/目的IP、端口、协议类型等)决定是否放行。
iptables框架结构
iptables是Linux内核中Netfilter框架的用户态配置工具,用于定义和管理IPv4数据包过滤规则。其规则组织采用“表(Table)→链(Chain)→规则(Rule)”三层结构:
-
表(Table):根据功能划分,常用表包括:
filter表:默认表,用于数据包过滤,包含INPUT、OUTPUT、FORWARD三条链。nat表:用于网络地址转换,包含PREROUTING、POSTROUTING、OUTPUT链。mangle表:用于修改数据包头部的特殊标记(如TTL、TOS等)。
-
链(Chain):代表数据包流经Netfilter的五个钩子点:
PREROUTING:数据包进入路由决策前触发。INPUT:数据包经路由判断发往本机时触发。FORWARD:数据包经路由判断需转发时触发。OUTPUT:本机产生的数据包发出前触发。POSTROUTING:数据包离开本机前(路由决策后)触发。
-
规则(Rule):每条规则由匹配条件(如
-p tcp --dport 80 -s 192.168.1.0/24)和目标动作(如-j ACCEPT、-j DROP、-j LOG)组成。规则按链内顺序依次匹配,匹配成功后立即执行动作,不再检查后续规则,因此规则顺序至关重要。
常用iptables命令
| 命令 | 作用 |
|---|---|
iptables -L -n -v |
列出所有规则,显示详细信息(含匹配计数),不解析IP/端口名 |
iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
在INPUT链末尾添加一条允许TCP 22端口的规则 |
iptables -I INPUT 1 -s 192.168.1.100 -j DROP |
在INPUT链首位插入一条拒绝特定源IP的规则 |
iptables -D INPUT 3 |
删除INPUT链中第3条规则 |
iptables -F |
清空所有链的规则(谨慎使用) |
iptables -P INPUT DROP |
设置INPUT链默认策略为DROP |
iptables-save > /etc/iptables/rules.v4 |
保存当前规则至文件(需安装iptables-persistent) |
状态检测机制
iptables通过-m state模块实现状态检测防火墙功能。该模块跟踪每个连接的状态,将数据包分类为:
NEW:新建连接的第一个包。ESTABLISHED:属于已有连接的双向数据包。RELATED:与已有连接相关的新建连接(如FTP数据通道)。INVALID:无法识别或无状态的包。
典型应用:允许所有出站连接,但只允许已建立连接的入站应答包。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT
3.2 入侵检测系统与Snort
入侵检测系统基本原理
入侵检测系统(IDS)通过监控网络流量或主机日志,识别恶意活动或违反安全策略的行为。根据数据来源分为:
- 基于网络的IDS(NIDS):部署在网络关键节点,捕获并分析流经的数据包,如本次使用的Snort。
- 基于主机的IDS(HIDS):运行在单台主机上,监控文件完整性、系统调用、日志等。
检测方法主要包括:
- 误用检测(Signature-based):将流量与已知攻击特征库(规则)比对,匹配即告警。优点是准确率高,缺点是无法检测未知攻击或变种。
- 异常检测(Anomaly-based):通过学习正常行为建立基线,对偏离基线的行为告警。可检测零日攻击,但误报率较高。
- 协议状态分析:跟踪TCP/IP协议状态机,发现违反协议规范的异常(如SYN扫描时大量SYN而无后续ACK)。
IDS与IPS的区别:IDS仅为被动监听并告警;IPS(入侵防御系统)以串联方式接入网络,可实时阻断攻击流量。Snort支持两种模式,当以-Q参数运行时即进入IPS模式。
Snort架构与工作流程
Snort是一个开源的轻量级NIDS/NIPS,采用模块化插件架构,数据包处理流程分为以下阶段:
- 数据包捕获:通过DAQ(数据采集库)从网卡或pcap文件读取原始数据包。
- 解码器(Decoder):解析数据链路层到传输层头部,识别协议类型。
- 预处理器(Preprocessor):对流量进行重组和规范化,包括:
frag3:IP分片重组,防止分片绕过检测。stream5/stream_tcp:TCP流重组与会话跟踪,重建完整的应用层数据。http_inspect:HTTP协议解码与规范化,处理URL编码、Unicode等混淆手段。port_scan:检测端口扫描行为。
- 检测引擎(Detection Engine):将预处理后的数据与加载的规则进行匹配,若命中则生成告警。
- 输出插件(Output Plugin):将告警和日志输出到指定目的地(文件、数据库、syslog等),如
alert_fast(简略告警)、unified2(二进制格式)等。
Snort规则语法
Snort规则由规则头和规则选项两部分组成,基本格式如下:
动作 协议 源IP 源端口 方向 目标IP 目标端口 (规则选项;)
- 动作:如
alert(告警)、log(记录)、drop(IPS模式下丢弃)、pass(忽略)。 - 规则选项:核心检测逻辑,常见关键字包括:
msg:告警描述信息。content:匹配数据包载荷中的特定字节或字符串,支持二进制|...|表示。flow:指定会话方向(to_server/to_client)和状态(established)。sid:规则唯一标识符。classtype:攻击分类。reference:引用漏洞编号(如CVE、Bugtraq)。
示例规则——检测对IIS服务器的Unicode目录遍历攻击:
alert tcp $EXTERNAL_NET any -> $HOME_NET 80 (msg:"WEB-IIS unicode directory traversal"; flow:to_server,established; content:"/..%c0%af../"; sid:981;)
Snort常用命令
| 命令 | 作用 |
|---|---|
snort -T -c /etc/snort/snort.conf |
测试配置文件语法是否正确 |
snort -i eth0 -c /etc/snort/snort.conf -l /var/log/snort |
监听eth0网卡,实时检测并记录日志 |
snort -r capture.pcap -c /etc/snort/snort.conf -l ./log |
离线分析pcap文件,结果输出到指定目录 |
snort -Q -c /etc/snort/snort.conf |
以IPS模式运行(与nfqueue联动) |
snort -A fast -c /etc/snort/snort.conf |
指定告警输出模式为fast(简略格式) |
Snort 2与Snort 3的区别
Snort 3是新一代架构,与Snort 2的主要差异包括:
- 配置语法:Snort 2使用自定义格式的
snort.conf;Snort 3改用Lua脚本作为配置文件(snort.lua),更加灵活。 - 规则格式:Snort 3规则与Snort 2基本兼容,但规则加载方式改为在Lua中
include。 - 性能优化:Snort 3支持多线程处理,检测引擎效率显著提升。
- 模块化:Snort 3将核心功能拆分为可加载模块,便于扩展和维护。
二、实验过程
1.防火墙配置
任务要求:配置Linux操作系统平台上的iptables,或者Windows操作系统平台上的个人防火墙,完成如下功能,并进行测试:
(1)过滤ICMP数据包,使得主机不接收Ping包;
sudo su
sudo iptables -L -n -v
查看当前防火墙规则
ping 192.168.188.2(kali2020.1)
观察到可以ping通

同样的此时在kali2020.1上可以ping通192.168.188.7(kali2025.4)

在kali2020.1上执行sudo tcpdump -i eth0 icmp

ICMP 回显请求(类型 8)和回显应答(类型 0)是 Ping 命令的底层协议。通过向 INPUT 链添加 DROP 规则,丢弃所有进入本机的 ICMP 回显请求包:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
执行后查看规则:
sudo iptables -L INPUT -n -v
具体效果如下

在kali2020.1上ping 192.168.188.7(kali2025.4)此时无法ping通

此时另一个终端上显示

正常情况下,抓包应该看到类似成对出现的条目:
IP 192.168.188.2 > 192.168.188.7: ICMP echo request
IP 192.168.188.7 > 192.168.188.2: ICMP echo reply
但由于配置了防火墙,导致只有请求没有回应
而在kali2025.4上ping 192.168.188.2(kali2020.1)此时依旧可以ping通,这个是不受影响的

最后删除配置的防火墙规则
在kali2025.4上执行
sudo iptables -F
sudo iptables -L INPUT -n -v
可以看到所有的规则都没有了(这里删除所有的防火墙配置是因为一开始就没有防火墙配置,实际在其他环境时应该谨慎)

(2)只允许特定IP地址(如局域网中的Linux攻击机192.168.200.3),访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址(如Windows攻击机192. 168.200.4)无法访问
在kali2025.4上执行以下命令,启动一个简易 Web 服务器(http服务)
python3 -m http.server 8080
现在需要仅允许来源 IP 为 192.168.188.2的主机访问kali2025.4的 TCP 8080 端口,其他 IP 一律拒绝。
sudo iptables -F # 清空所有链规则,可选执行
sudo iptables -A INPUT -p tcp --dport 8080 -s 192.168.188.2 -j ACCEPT #添加允许规则(先允许特定 IP)
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP #添加拒绝规则(拒绝其他所有 IP 访问 8080)
sudo iptables -L INPUT -n -v #查看当前规则
可以看到当前防火墙规则如下

注意:iptables 规则是按顺序匹配的,因此必须将 ACCEPT规则放在 DROP 规则之前,否则允许规则永远不会生效。
在kali2020.1上执行
curl http://192.168.188.7:8080
可以看到返回 HTTP 服务的目录列表或页面内容,连接成功。

在其他虚拟机上执行curl http://192.168.188.7:8080,直接访问无法连接。
我这里是在物理机执行的,因为不想折腾虚拟机上安装curl(seedUbuntu上不太好安装)ping通kali2025.4之后,再访问服务发现不能连接

在kali2025.4上执行以下命令删除防火墙规则并查看
sudo iptables -F
sudo iptables -L INPUT -n -v

此时再从其他虚拟机(物理机)上访问,发现没有问题了

最后不要忘了在kali2025.4上Ctrl+C退出http服务,实验后恢复原来环境,这是个好习惯

2.动手实践Snort
使用Snort对给定pcap文件(第4章中的解码网络扫描任一个pcap文件,之前的实践已经提供了,请在学习通中下载)进行入侵检测,并对检测出的攻击进行说明。在BT4 Linux攻击机或Windows Attacker攻击机上使用Snort,对给定的pcap文件进行入侵检测,获得报警日志。
在之前保存listen.pcap文件的目录打开终端(右键,open...)

在终端中运行以下命令来分析 listen.pcap 文件:
sudo su
ls
snort -r listen.pcap -c /etc/snort/snort.lua -A alert_fast -l /var/log/snort
输出的内容如下
┌──(kali㉿kali)-[~/Downloads]
└─$ sudo su
┌──(root㉿kali)-[/home/kali/Downloads]
└─# ls
all-2.0.tar.gz listen.pcap Nessus-10.11.3-ubuntu1604_amd64.deb nessus.license
┌──(root㉿kali)-[/home/kali/Downloads]
└─# snort -r listen.pcap -c /etc/snort/snort.lua -A alert_fast -l /var/log/snort
--------------------------------------------------
o")~ Snort++ 3.11.1.0
--------------------------------------------------
Loading /etc/snort/snort.lua:
Loading snort_defaults.lua:
Finished snort_defaults.lua:
stdout_trace
syslog_trace
stream_ip
stream_user
arp_spoof
dns
netflow
iec104
modbus
s7commplus
dce_tcp
dce_http_proxy
gtp_inspect
port_scan
active
alerts
decode
host_cache
host_tracker
hosts
network
packets
process
search_engine
ips
classifications
references
appid
file_id
http2_inspect
http_inspect
ftp_data
ftp_client
ftp_server
smtp
dce_http_server
dce_udp
dce_smb
opcua
mms
dnp3
cip
telnet
ssl
ssh
socks
sip
rpc_decode
pop
normalizer
imap
back_orifice
stream_file
stream_udp
stream_tcp
stream_icmp
stream
so_proxy
daq
output
file_policy
js_norm
trace
wizard
binder
Finished /etc/snort/snort.lua:
Loading file_id.rules_file:
Loading file_magic.rules:
Finished file_magic.rules:
Finished file_id.rules_file:
--------------------------------------------------
ips policies rule stats
id loaded shared enabled file
0 219 0 219 /etc/snort/snort.lua
--------------------------------------------------
rule counts
total rules loaded: 219
text rules: 219
option chains: 219
chain headers: 1
--------------------------------------------------
service rule counts to-srv to-cli
file_id: 219 219
total: 219 219
--------------------------------------------------
fast pattern groups
to_server: 1
to_client: 1
--------------------------------------------------
search engine (ac_bnfa)
instances: 2
patterns: 438
pattern chars: 2602
num states: 1832
num match states: 392
memory scale: KB
total memory: 71.2812
pattern memory: 19.6484
match list memory: 28.4375
transition memory: 22.9453
appid: MaxRss diff: 2956
appid: patterns loaded: 300
--------------------------------------------------
pcap DAQ configured to read-file.
Commencing packet processing
Retry queue interval is: 200 ms
++ [0] listen.pcap
-- [0] listen.pcap
--------------------------------------------------
Packet Statistics
--------------------------------------------------
daq
pcaps: 1
received: 135580
analyzed: 135580
allow: 135580
rx_bytes: 8139156
--------------------------------------------------
codec
total: 135580 (100.000%)
discards: 45 ( 0.033%)
arp: 20 ( 0.015%)
eth: 135580 (100.000%)
ipv4: 135560 ( 99.985%)
tcp: 135512 ( 99.950%)
udp: 3 ( 0.002%)
--------------------------------------------------
Module Statistics
--------------------------------------------------
ac_full
searches: 28
matches: 42
bytes: 398
--------------------------------------------------
appid
packets: 135515
processed_packets: 135505
ignored_packets: 10
total_sessions: 67660
service_cache_adds: 7
bytes_in_use: 1176
items_in_use: 7
--------------------------------------------------
arp_spoof
packets: 20
--------------------------------------------------
back_orifice
packets: 3
--------------------------------------------------
binder
raw_packets: 75
new_flows: 67660
service_changes: 7
inspects: 67735
--------------------------------------------------
detection
analyzed: 135580
--------------------------------------------------
dns
packets: 3
requests: 3
dns_over_udp: 3
--------------------------------------------------
http_inspect
flows: 6
scans: 12
reassembles: 12
inspections: 12
requests: 6
get_requests: 5
options_requests: 1
max_concurrent_sessions: 3
total_bytes: 88
--------------------------------------------------
port_scan
packets: 135515
trackers: 6
--------------------------------------------------
stream
flows: 67660
total_prunes: 67659
idle_prunes_proto_timeout: 120
closed_prunes: 67539
tcp_timeout_prunes: 117
udp_timeout_prunes: 3
no_flow_tcp_rst: 3
no_flow_unwanted: 7
--------------------------------------------------
stream_tcp
sessions: 67657
max: 67657
created: 67657
released: 67657
instantiated: 67657
setups: 67657
restarts: 7
syn_trackers: 67657
segs_queued: 19
segs_released: 19
segs_used: 19
rebuilt_packets: 25
rebuilt_bytes: 263
client_cleanups: 1
server_cleanups: 12
syns: 67657
syn_acks: 83
rsts: 67549
rsts_ok_rfc5961: 46
rsts_ack_ok: 67503
fins: 72
max_segs: 1
max_bytes: 23
--------------------------------------------------
stream_udp
sessions: 3
max: 3
created: 3
released: 3
total_bytes: 129
--------------------------------------------------
telnet
total_packets: 1
max_concurrent_sessions: 1
--------------------------------------------------
wizard
tcp_scans: 19
tcp_hits: 7
--------------------------------------------------
Appid Statistics
--------------------------------------------------
detected apps and services
Application: Services Clients Users Payloads Misc Referred
unknown: 7 3 0 0 0 0
--------------------------------------------------
Summary Statistics
--------------------------------------------------
timing
runtime: 00:00:01
seconds: 1.372092
pkts/sec: 98813
Mbits/sec: 47
o")~ Snort exiting
总结分析可以看到有异常的 TCP 会话行为
stream_tcp
sessions: 67657
syns: 67657
syn_acks: 83
rsts: 67549
SYN 包数量与总会话数几乎相等(67,657),SYN-ACK 响应仅有 83 个,RST 包高达 67,549 个,与 SYN 数量相近。这种“大量 SYN → 极少 SYN-ACK → 大量 RST”的模式,是TCP SYN 扫描的典型指纹,这与之前实验得到的结果高度吻合。
3.分析配置规则
分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则,说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。
首先提升权限到root
su - #密码honey

1.防火墙配置
Honeywall的主要防火墙逻辑,尤其是所有用于数据控制的 iptables 规则,都编写在这防火墙规则脚本:/etc/init.d/rc.firewall中。使用以下命令查看:
more /etc/init.d/rc.firewall # 回车可以继续往下查看,vim也可以,但是不要用cat,因为honey里没法往前翻
这里截取部分

可以看到,下面的图片表明:
-
启用了黑名单和白名单功能,黑名单文件存在阻断已知恶意 IP。外部攻击者如果 IP 在黑名单中,流量将被直接拒绝。白名单中的 IP 可以不受后续出站速率限制。
-
启用了隔离列表防止蜜罐访问特定外部 IP。隔离列表中包含的 IP是蜜罐绝对不允许主动连接的,即使攻击者控制了蜜罐也无法访问这些目标。

tcpHandler对出站 TCP 连接实施速率限制,其他依次也是对出站的不同包进行速率限制。

入站流量规则:宽松允许并记录
--physdev-in $SHuINET_IFACE:匹配从外部互联网接口进入的数据包。-m state --state NEW:仅匹配新建连接的第一个包。- 动作:先用
LOG记录,再用ACCEPT放行。
同样的逻辑也应用于 UDP 和 ICMP 协议。

2.IDS/IPS规则与配置
规则文件路径:Honeywall为Snort自定义了一套配置和规则集,存放在 /etc/hflow目录下,其中snort.conf等文件是其内置的Snort检测规则。
vim /etc/hflow/snort.conf

配置细节解析
| 配置行 | 含义 |
|---|---|
| iis_unicode_map /etc/snort/unicode.map 1252 | 加载 IIS 专用的 Unicode 映射表,用于正确解码 IIS 服务器上的非 ASCII 字符,防止编码绕过攻击。 |
| profile all ports | 对端口 80、8080、8180 启用 all 配置文件,包含最严格的检测选项。 |
| oversize_dir_length 500 | 设置目录路径最大长度为 500 字符,超出则视为可疑(可能为缓冲区溢出尝试)。 |

include 行指定了 Snort 在检测时加载的规则文件。
启动脚本:/etc/init.d/snortd 脚本包含了Snort的启动参数、日志输出目录等关键信息。
输入以下命令查看规则列表,可以看到默认的规则入INPUT、FORWARD、OUTPUT都已经被关闭了。
iptables -t filter -L | less


注意,输入q以退出
输入以下命令打开snort脚本文件
more /etc/init.d/snortd # vim也可以,但是不要用cat,因为honey里没法往前翻
这里截取部分


丢给AI具体分析结果如下(纯眼看有些还是看不懂的)
| 变量名 | 脚本默认值 | 作用与安全意义 |
|---|---|---|
| USER / GROUP | snort | Snort 进程以非 root 用户 snort 运行,遵循最小权限原则,降低进程被攻陷后的影响。 |
| BINARY_LOG | 空(默认不开启) | 若设为 1,则 Snort 启动时加 -b 参数,以 tcpdump 二进制格式保存数据包,便于事后取证分析。这是数据捕获的关键选项。 |
| CONF | -c /etc/snort/snort.conf | 指定 Snort 主配置文件路径。后续需分析该文件来了解网络变量、输出插件和规则加载情况。 |
| INTERFACE | -i eth0 | 监听网卡。Honeywall 通常桥接内外网,此处指定 eth0为监听接口,确保捕获所有流经蜜网的流量。 |
| PASS_FIRST | 空(默认不开启) | 若设为 1,加 -o 参数改变规则匹配顺序为 pass-first(先匹配 pass规则)。在 IPS 模式下,pass 规则可让特定流量免检,提升性能。 |
| LOGDIR | /var/log/snort | 日志存储目录。所有 Snort 告警和抓包文件都输出到此,供 Walleye 分析界面读取。 |
| SYSLOG | /var/log/messages | 系统日志路径,用于 Snort 的 stats 统计功能输出。 |
| SECS | 5 | 统计信息打印间隔(秒),用于监控 Snort 运行状态。 |
| BPFFILE | 空 | 指定 Berkeley Packet Filter 过滤文件,可对 Snort 分析的流量进行预过滤,减少不必要处理。 |
/etc/init.d/hw-snort_inline定义了snort_inline如何以IPS(入侵防御系统) 模式运行,并完成数据包的处理。
more /etc/init.d/hw-snort_inline

-c 表示配置文件;
-D 表示Daemon模式;
-l 表示log文件的目录;
-Q 表示仅与Snort-Inline配合使用,用于队列处理;
-t 表示启动后将进程根目录切换到指定目录,实现沙箱隔离
3.蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求
使用以下命令检查iptables和snort下的脚本是否开启。
chkconfig --list | grep iptables
chkconfig --list | grep snort

| 服务名 | 运行级别 0-6 状态 | 含义 |
|---|---|---|
| iptables | 0:off 1:off 2:on 3:on 4:on 5:on 6:off | 防火墙服务在多用户模式(2、3、4、5) 下自动启动,确保系统每次启动后,iptables 规则立即生效,为蜜网提供持续的包过滤与流量控制。 |
| hw-snort_inline | 0:off 1:off 2:on 3:on 4:on 5:on 6:off | Honeywall 定制的 Snort_inline 服务在相同运行级别下自启动,以 IPS 模式运行,实现对攻击流量的实时深度检测与阻断。 |
| snortd | 0:off 1:off 2:off 3:off 4:off 5:off 6:off | 标准 Snort 守护进程(纯 IDS 模式)被禁用,表明 Honeywall 明确选择以 snort_inline 替代普通 Snort,强调主动防御而非被动监听。 |
数据捕获通过连接记录、应用层载荷捕获、统一日志存储等技术实现;数据控制通过出站连接限速、隔离列表阻断、IPS 主动阻断等技术实现。
三、学习中遇到的问题及解决
1.iptables规则顺序不当导致允许的IP仍被拒绝访问
在配置“仅允许特定IP访问8080端口”时,先添加了DROP所有IP的规则,后又添加ACCEPT特定IP的规则,结果即使是允许的IP也无法访问服务。
解决方案:iptables规则是按链内顺序依次匹配的,第一条匹配成功即停止。因此必须将ACCEPT规则置于DROP规则之前。删掉添加的规则,然后先添加ACCEPT再添加DROP就好了。
2.Snort分析时无法导入配置文件
直接执行sudo snort -r ./listen.pcap -c /etc/snort/snort.conf -l ./snort_log会报错

原因其实很简单,kali2025.4的snort比较新(Snort3),配置文件改名了,从snort.conf改成了snort.lua。如果用的是旧版本的kali2020.1,可能不会遇到这个问题,如果遇到了建议查一下。
解决方法简单粗暴,直接换个命令就行sudo snort -r listen.pcap -c /etc/snort/snort.lua -A alert_fast -l /var/log/snort,其实就是换成正确的配置文件名就行了。这个命令的意思一句话说明就是:该命令使 Snort 3 离线回放 listen.pcap文件,依据 snort.lua 配置加载规则进行检测,并以精简格式将告警输出到 /var/log/snort目录。
一般来讲在kali2025.4或者其他较新版本上这样就没有问题了,因为ls /etc/snort/rules/可以看到本地已经有rules了,不需要修改,tail /etc/snort/snort.lua查看一下配置文件末尾发现snort.lua也预先配置好了。


要是这俩命令执行了没啥反应,愿意折腾的话最终解决方法是下载从Snort官网获取社区规则包(Community Ruleset)并解压到指定目录,然后创建并配置 snort.lua,下面是ai给的具体解决方法。不愿意折腾就没这么费事,换个干净的虚拟机就ok了,至少kali2025.4这样没有问题,别的较近版本应该也ok,但是我没试。
具体执行的命令可能如下(AI给的,未验证)
首先,从Snort官网获取社区规则包(Community Ruleset)并解压到指定目录。
# 1. 创建规则存放目录
sudo mkdir -p /etc/snort/rules
# 2. 下载社区规则包(注意:这是Snort 3专用的规则包)
cd /tmp
wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz
# 3. 解压规则包到刚刚创建的目录
sudo tar -xzvf snort3-community-rules.tar.gz -C /etc/snort/rules/
# 4. (可选) 清理下载的压缩包
rm snort3-community-rules.tar.gz
接下来,我们需要创建并配置Snort 3的主配置文件 snort.lua。如果 /usr/local/etc/snort/ 目录不存在,需要先创建:
sudo mkdir -p /usr/local/etc/snort
sudo vim /usr/local/etc/snort/snort.lua
在文件中输入以下核心配置:
-- 1. 设置网络变量,请根据你的实验环境网段修改
HOME_NET = '192.168.188.0/24'
EXTERNAL_NET = '!$HOME_NET'
-- 2. 配置入侵防御模块 (ips)
ips = {
-- 使用 include 引入社区规则文件 (请务必使用你自己的实际路径)
include = '/etc/snort/rules/snort3-community-rules/community.rules',
variables = default_variables
}
-- 3. 配置报警输出 (默认为 alert_fast 格式)
alert_fast = { }
四、学习感悟、思考等
4.学习感悟与思考
这次实践让我从防御者的视角,完整地走了一遍防火墙配置、入侵检测分析和蜜网网关规则解读的流程。以前对iptables的认识停留在“允许或拒绝端口”,实际动手后才体会到规则顺序的重要性——仅仅把ACCEPT放在DROP之后,就会让整个策略失效,细节决定成败。对蜜网网关的分析也是挺折腾的,有这一大堆文件需要去查看分析,也有不少参数不太熟悉,最后还是直接丢给ai分析后才得出了结果。总的而言,这次实验过后,我感受到亲身实践之后收获很多,我对防火墙配置、入侵检测分析等技术更加熟悉了,实践能力动手水平也有了一定的提升。
参考资料:

浙公网安备 33010602011771号