网络入侵检测系统(NIDS)通过监听服务器网络流量,匹配预设的攻击特征规则,能够及时发现端口扫描、漏洞利用、恶意 payload 传输等异常行为,为CentOS服务器提供主动的安全防护能力。

部署前的环境准备
首先需要确保CentOS服务器系统版本为7及以上,内核版本不低于3.10,同时预留至少2GB内存和20GB磁盘空间用于存储日志和规则库。执行以下命令更新系统基础组件:
# 更新系统软件包 yum update -y # 安装基础依赖工具 yum install -y wget gcc make flex bison libdnet-devel libpcap-devel pcre-devel zlib-devel
安装Snort作为NIDS核心组件
Snort是开源的轻量级NIDS工具,支持实时流量分析和规则匹配,适合CentOS服务器部署。这里选择编译安装方式获取最新稳定版本:
下载并编译Snort
# 下载Snort源码包 wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz # 解压源码包 tar -zxvf snort-2.9.20.tar.gz cd snort-2.9.20 # 配置编译参数 ./configure --enable-sourcefire # 编译并安装 make && make install
配置Snort基础目录结构
安装完成后需要创建Snort运行所需的基础目录,用于存储配置、规则和日志:
# 创建Snort主目录 mkdir -p /etc/snort /var/log/snort /usr/local/lib/snort_dynamicrules # 复制默认配置文件到主目录 cp etc/*.conf* /etc/snort/ cp etc/*.map /etc/snort/ # 创建Snort运行用户 useradd -r -s /sbin/nologin snort # 修改日志目录权限 chown -R snort:snort /var/log/snort
配置NIDS检测规则
规则库是NIDS识别攻击的核心,Snort官方提供免费的基础规则集,也可以根据服务器业务场景自定义规则:
获取并部署规则库
# 下载基础规则集 wget https://www.snort.org/downloads/community/community-rules.tar.gz # 解压规则集 tar -zxvf community-rules.tar.gz # 复制规则文件到Snort配置目录 cp community-rules/* /etc/snort/rules/
修改Snort主配置文件
编辑/etc/snort/snort.conf文件,调整以下核心配置项:
# 设置Snort运行用户和组 user snort group snort # 设置日志存储目录 logdir /var/log/snort # 设置规则文件加载路径 include /etc/snort/rules/community.rules # 配置网络变量,替换为服务器实际网段 ipvar HOME_NET 192.168.0.0/24 ipvar EXTERNAL_NET !$HOME_NET
启动NIDS并设置开机自启
配置完成后先验证配置文件语法是否正确,再启动Snort服务:
# 验证配置文件语法 snort -T -c /etc/snort/snort.conf # 前台测试运行,观察是否有报错 snort -A console -c /etc/snort/snort.conf -i eth0 # 后台运行Snort snort -D -c /etc/snort/snort.conf -i eth0
如果需要开机自动启动NIDS,可以创建systemd服务文件:
# 创建snort.service文件 cat > /etc/systemd/system/snort.service << EOF [Unit] Description=Snort NIDS Service After=network.target [Service] Type=forking ExecStart=/usr/local/bin/snort -D -c /etc/snort/snort.conf -i eth0 ExecStop=/bin/kill -9 $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target EOF # 重载systemd配置并启用服务 systemctl daemon-reload systemctl enable snort systemctl start snort
自定义检测规则示例
可以根据服务器业务特性添加自定义规则,比如检测针对SSH服务的暴力破解行为:
# 在/etc/snort/rules/local.rules中添加以下规则 # 检测SSH端口(22)短时间内的多次连接尝试 alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"SSH Brute Force Attempt"; threshold: type both, track by_src, count 5, seconds 60; sid:1000001; rev:1;)
规则生效后,当同一源IP在60秒内发起5次以上SSH连接时,NIDS会触发告警并记录到日志中。
日常运维与告警处理
NIDS的日志默认存储在/var/log/snort目录下,可以定期查看日志文件识别攻击行为:
- 每日检查
alert文件,统计高频攻击源IP,通过防火墙封禁恶意IP - 每月更新一次规则库,获取最新的攻击特征识别能力
- 根据服务器业务变更调整HOME_NET等网络变量,避免误报
- 定期备份Snort配置文件和规则库,防止配置丢失
注意:NIDS仅负责检测和告警,无法主动拦截攻击,建议配合防火墙、WAF等防护组件形成完整的安全防护体系。
常见问题排查
如果NIDS无法正常运行,可以按照以下步骤排查:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 启动时报配置文件语法错误 | 规则文件格式错误或者配置项参数缺失 | 使用snort -T -c /etc/snort/snort.conf定位错误行,修正配置 |
| 无法捕获网络流量 | 监听网卡配置错误或者网卡处于混杂模式未开启 | 执行ip link set eth0 promisc on开启混杂模式,检查-i参数指定的网卡是否正确 |
| 无告警日志输出 | 规则库未正确加载或者流量未匹配到规则 | 检查snort.conf中规则include配置,使用测试流量验证规则是否生效 |