麒麟OS部署Snort需手动编译安装2.9.20版本,配置混杂模式网卡、专用用户及规则集,验证后可捕获ICMP告警;ARM64架构须修正libpcap路径,规则content字段格式必须严格正确。

您需要在麒麟OS上部署Snort入侵检测系统,但直接运行snort命令提示“command not found”,或配置后无法捕获网卡流量、规则不触发告警——这通常是因为Snort未安装、libpcap未就绪、网卡未启用混杂模式,或规则集未正确加载。
安装Snort主程序与依赖组件
Snort在麒麟OS中无预装,必须手动构建或通过兼容源安装;Kylin V10 SP3+(Debian系)推荐APT安装基础包,再手动编译核心引擎以确保支持最新规则语法与硬件加速特性。
执行sudo apt update && sudo apt install -y build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev openssl libssl-dev pkg-config,这些是编译Snort必需的开发库,缺一将导致configure阶段失败。
下载Snort 2.9.20源码包:wget https://www.snort.org/downloads/snort/softwares/snort-2.9.20.tar.gz,注意不要使用snort-3.x分支,其配置结构与规则语法与麒麟OS现有文档严重不兼容。
解压并进入目录:tar -xzf snort-2.9.20.tar.gz && cd snort-2.9.20。
运行./configure --enable-sourcefire --enable-dynamic-plugin --with-libpcap-includes=/usr/include/pcap --with-libpcap-libraries=/usr/lib/x86_64-linux-gnu,【若系统为ARM64架构,需将x86_64-linux-gnu替换为aarch64-linux-gnu,否则编译后dumpcap无法识别网卡】。
执行make -j$(nproc) && sudo make install完成安装,此时snort二进制文件位于/usr/local/bin/snort。
配置网卡与运行环境
Snort必须绑定到处于混杂模式的物理网卡才能捕获全量流量,仅靠lo回环接口或NetworkManager管理的默认连接无法工作。
执行ip link show确认可用网卡名(如ens33、eth0),避免使用bond或vlan子接口——Snort 2.9.x对虚拟接口支持不稳定。
临时启用混杂模式:sudo ip link set dev ens33 promisc on,该操作无需重启网络服务,但重启后失效。
创建专用运行用户提升安全性:sudo useradd -r -s /sbin/nologin -d /var/log/snort snort,后续所有Snort进程应以此身份运行,防止提权风险。
创建日志目录并赋权:sudo mkdir -p /var/log/snort && sudo chown snort:snort /var/log/snort && sudo chmod 755 /var/log/snort。
加载规则集并验证基础检测能力
Snort默认不带任何规则,空配置启动即静默退出;必须至少加载一条测试规则,否则-a选项不会输出任何告警。
方法一:使用社区免费规则(适用于测试)
下载snortrules-snapshot-2920.tar.gz(对应2.9.20版本),解压后将rules/目录整体复制至/etc/snort/;
编辑/etc/snort/snort.conf,在include $RULE_PATH/local.rules前取消注释,并确保var RULE_PATH /etc/snort/rules存在。
方法二:手写最小化测试规则(绕过签名验证)
执行echo 'alert icmp any any -> any any (msg:"ICMP Detected"; content:"|08 00|"; sid:1000001; rev:1;)' | sudo tee /etc/snort/rules/local.rules;
【content字段中的|08 00|是ICMP Echo Request固定十六进制特征,漏掉竖线或空格将导致规则永不匹配】。
验证配置有效性:sudo /usr/local/bin/snort -T -c /etc/snort/snort.conf -i ens33,输出包含“Snort successfully validated the configuration!”即通过。
启动监听并触发测试:新开终端执行sudo /usr/local/bin/snort -A console -q -c /etc/snort/snort.conf -i ens33,然后在另一终端ping本机IP,若控制台立即刷出“ICMP Detected”告警,说明Snort已正常捕获并匹配。











