一、安装部署
1. Ubuntu/Debian 系统
# 安装 Snort
sudo apt update
sudo apt install snort -y
# 安装开发工具和依赖
sudo apt install build-essential libpcap-dev libpcre3-dev libdumbnet-dev zlib1g-dev liblzma-dev openssl libssl-dev -y
2. CentOS/RHEL 系统
# 启用 EPEL 仓库
sudo yum install epel-release -y
# 安装 Snort
sudo yum install snort -y
# 或从源码编译
sudo yum install gcc flex bison zlib zlib-devel libpcap libpcap-devel pcre pcre-devel libdnet libdnet-devel openssl openssl-devel -y
3. 源码编译安装
# 下载源码
wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz
tar -xvzf snort-2.9.20.tar.gz
cd snort-2.9.20
# 配置和编译
./configure --enable-sourcefire
make
sudomake install
二、基础配置
1. 网络接口配置
# 查看网络接口
ip addr show
# 设置网卡为混杂模式(可选)
sudo ip link set eth0 promisc on
2. 配置文件
# 主配置文件位置
/etc/snort/snort.conf
# 规则文件位置
/etc/snort/rules/
/usr/local/etc/rules/ # 源码安装默认位置
3. 修改配置文件
编辑 /etc/snort/snort.conf:
sudovim /etc/snort/snort.conf
修改以下关键配置:
# 设置网络变量
ipvar HOME_NET 192.168.1.0/24
ipvar EXTERNAL_NET any
# 设置规则路径
var RULE_PATH /etc/snort/rules
三、基础命令
1. 测试配置文件
# 测试配置文件语法
sudo snort -T-c /etc/snort/snort.conf
# 指定接口测试
sudo snort -T-c /etc/snort/snort.conf -i eth0
2. 运行模式
嗅探模式(数据包查看)
# 基本嗅探
sudo snort -v-i eth0
# 显示数据链路层头部
sudo snort -v-e-i eth0
# 显示应用层数据(ASCII)
sudo snort -v-e-X-i eth0
数据包记录模式
# 记录到日志目录
sudo snort -dev-l /var/log/snort -i eth0
# 二进制模式记录(pcap格式)
sudo snort -i eth0 -l /var/log/snort -b
NIDS模式(入侵检测)
# 使用默认配置
sudo snort -c /etc/snort/snort.conf -i eth0
# 在后台运行
sudo snort -c /etc/snort/snort.conf -i eth0 -D
# 指定告警输出方式
sudo snort -c /etc/snort/snort.conf -i eth0 -A console # 控制台输出
sudo snort -c /etc/snort/snort.conf -i eth0 -A fast # fast模式日志
sudo snort -c /etc/snort/snort.conf -i eth0 -A full # 完整模式日志
3. 规则管理
# 启用/禁用规则文件
# 在 snort.conf 中修改:
# include $RULE_PATH/local.rules
# 注释掉不需要的规则: # include $RULE_PATH/exploit.rules
# 自定义规则
sudovim /etc/snort/rules/local.rules
# 示例规则:alert icmp any any -> $HOME_NET any (msg:"ICMP Packet detected"; sid:1000001; rev:1;)
4. 日志分析
# 查看告警日志
tail -f /var/log/snort/alert
# 使用 Snort 读取二进制日志
sudo snort -r /var/log/snort/snort.log.1234567890
# 转换为 ASCII 格式
sudo snort -r /var/log/snort/snort.log.1234567890 -v
5. 进程管理
# 查看 Snort 进程
ps aux | grep snort
# 停止 Snort
sudo pkill snort
# 查看 Snort 监听的端口
sudo netstat -tulpn | grep snort
四、实用命令示例
1. 完整NIDS部署命令
sudo snort -c /etc/snort/snort.conf \
-i eth0 \
-A fast \
-l /var/log/snort \
--daq afpacket \
--daq-mode passive
2. 性能测试
# 测试丢包率
sudo snort -c /etc/snort/snort.conf -i eth0 -T--perfmon-file snort_perf.log
# 查看性能统计
sudo snort -c /etc/snort/snort.conf -i eth0 --perfmon
3. 规则测试
# 测试单个规则
sudo snort -c /etc/snort/snort.conf -i eth0 -k none --alert-with-interface-name
五、故障排除
# 查看 Snort 版本
snort -V
# 查看帮助
snort -h
snort --help
# 检查依赖库
ldd /usr/sbin/snort
# 查看日志
sudo tail -f /var/log/snort/snort.log
sudo less /var/log/syslog | grep snort
六、常用选项说明
选项说明
-c <config>指定配置文件
-i <interface>指定网络接口
-l <logdir>指定日志目录
-A <alert_mode>告警模式:fast/full/console/none
-b二进制模式记录
-d显示应用层数据
-e显示数据链路层头部
-v详细模式
-X十六进制和ASCII输出
-D守护进程模式
-T测试模式
-r <pcap>读取pcap文件
-k none忽略校验和错误
七、快速启动脚本示例
创建 /etc/systemd/system/snort.service:
[Unit]
Description=Snort NIDS Daemon
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/snort -c /etc/snort/snort.conf -i eth0 -A fast -l /var/log/snort
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload
sudo systemctl enable snort
sudo systemctl start snort