搬瓦工 VPS Snort 网络入侵防御系统部署教程

Snort 是全球最广泛使用的开源网络入侵检测和防御系统(IDS/IPS),由 Cisco Talos 团队维护。它通过实时分析网络流量,基于规则匹配来检测和阻止各种网络攻击,包括端口扫描、缓冲区溢出、SQL 注入、跨站脚本等。Snort 3 是最新版本,采用多线程架构,性能大幅提升。本文将介绍如何在搬瓦工 VPS 上部署 Snort。

一、系统要求

  • 内存:至少 1GB,推荐 2GB 以上(规则越多内存消耗越大)。
  • CPU:至少 1 核心,推荐 2 核心以上。
  • 前置条件:需要安装编译工具和依赖库。

二、安装 Snort 3

2.1 安装依赖

apt update
apt install build-essential libpcap-dev libpcre3-dev libnet1-dev \
  zlib1g-dev luajit hwloc libdnet-dev libdumbnet-dev bison flex \
  liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake \
  cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev \
  libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev libfl-dev -y

2.2 安装 DAQ(数据采集库)

cd /opt
git clone https://github.com/snort3/libdaq.git
cd libdaq
./bootstrap
./configure
make && make install

2.3 安装 Snort 3

cd /opt
git clone https://github.com/snort3/snort3.git
cd snort3
./configure_cmake.sh --prefix=/usr/local
cd build
make -j$(nproc) && make install

# 更新共享库
ldconfig

# 验证安装
snort -V

三、基本配置

3.1 创建配置目录

mkdir -p /etc/snort/rules
mkdir -p /var/log/snort

3.2 配置网络变量

# 编辑 /etc/snort/snort.lua
# 设置内网地址范围
# HOME_NET = 'YOUR_SERVER_IP/32'
# EXTERNAL_NET = '!$HOME_NET'

3.3 下载社区规则

# 下载 Snort 社区规则
cd /tmp
wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz
tar -xzf snort3-community-rules.tar.gz
cp snort3-community-rules/*.rules /etc/snort/rules/

四、运行模式

4.1 嗅探模式(仅监控)

# 在指定接口上嗅探流量
snort -i eth0 -c /etc/snort/snort.lua -l /var/log/snort

# 详细输出模式
snort -i eth0 -c /etc/snort/snort.lua -A alert_full

4.2 IDS 模式(检测并告警)

snort -i eth0 -c /etc/snort/snort.lua \
  -l /var/log/snort \
  -D \
  --create-pidfile

4.3 IPS 模式(检测并阻断)

# 配置 iptables 将流量引导到 Snort
iptables -I FORWARD -j NFQUEUE --queue-num 1

# 以 IPS 模式运行
snort -i eth0 -c /etc/snort/snort.lua \
  --daq nfq \
  --daq-var queue=1 \
  -l /var/log/snort

五、自定义规则

# 创建自定义规则文件
cat > /etc/snort/rules/local.rules <<'EOF'
# 检测 SSH 暴力破解
alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"SSH brute force attempt"; flow:to_server,established; threshold:type both,track by_src,count 5,seconds 60; sid:1000001; rev:1;)

# 检测 ICMP Ping 扫描
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"ICMP Ping sweep detected"; threshold:type both,track by_src,count 10,seconds 5; sid:1000002; rev:1;)

# 检测可疑的 HTTP 请求
alert tcp $EXTERNAL_NET any -> $HOME_NET 80 (msg:"SQL injection attempt"; flow:to_server,established; content:"UNION"; nocase; content:"SELECT"; nocase; sid:1000003; rev:1;)

# 检测端口扫描
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"Port scan detected"; flags:S; threshold:type both,track by_src,count 20,seconds 10; sid:1000004; rev:1;)
EOF

六、配置 systemd 服务

cat > /etc/systemd/system/snort.service <<'EOF'
[Unit]
Description=Snort 3 IDS/IPS
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/snort -i eth0 -c /etc/snort/snort.lua -l /var/log/snort -D
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable snort
systemctl start snort

七、告警分析

# 查看实时告警
tail -f /var/log/snort/alert_json.txt

# 统计告警类型
cat /var/log/snort/alert_json.txt | jq '.msg' | sort | uniq -c | sort -rn

# 统计告警来源 IP
cat /var/log/snort/alert_json.txt | jq '.src_addr' | sort | uniq -c | sort -rn | head -20

八、规则管理

# 安装 PulledPork 规则管理工具
cd /opt
git clone https://github.com/shirkdog/pulledpork3.git
cd pulledpork3

# 配置 PulledPork 自动更新规则
# 注册 Snort 账号获取 Oinkcode
# 配置定时更新规则

九、性能优化

  • 精简规则集,禁用与自身服务无关的规则,减少性能开销。
  • 合理设置 threshold 避免告警风暴。
  • 使用 pass 规则白名单可信流量。
  • 在 IPS 模式下,确保 Snort 性能足够处理所有流量,否则可能导致丢包。

总结

Snort 是搬瓦工 VPS 上网络层安全防御的重要工具,可以实时检测和阻断各种网络攻击。配合主机层的 OSSEC 入侵检测和 CrowdSec 协作防御,可以构建从网络层到主机层的全方位安全体系。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 进入官网购买。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。