排查rsyslog接收端口514被拦截需分层验证:先确认rsyslog是否启用imudp/imtcp模块并监听*:514,再检查防火墙(firewalld/iptables)及云安全组是否放行udp/tcp 514,最后用nc和tcpdump定位拦截环节。

排查 rsyslog 接收端口(默认 UDP/TCP 514)被防火墙拦截,关键不是只看“端口开没开”,而是确认请求是否真正抵达 rsyslog、是否被系统防火墙或云平台安全策略中途丢弃。整个过程需分层验证,从服务监听→本地连通→防火墙放行→网络路径→rsyslog 配置本身。
确认 rsyslog 确实在监听 514 端口
很多问题根源是 rsyslog 根本没启用网络输入模块,或只监听了 localhost。
- 检查配置是否加载了 imudp 和/或 imtcp 模块:运行
grep -E 'imudp|imtcp' /etc/rsyslog.conf /etc/rsyslog.d/*.conf,应看到类似module(load="imudp") input(type="imudp" port="514") - 确认监听状态:
sudo ss -tuln | grep ':514'或sudo netstat -tuln | grep ':514'
若只显示127.0.0.1:514,说明仅限本地;正常应为*:514(UDP)或0.0.0.0:514(TCP) - 重启服务并验证:
sudo systemctl restart rsyslog && sudo systemctl status rsyslog,确保无 ERROR
测试本地能否接收日志(绕过网络和防火墙)
先排除 rsyslog 自身逻辑问题,用本地发包验证基础功能。
- 发送一条测试日志:
logger "test from local",然后查/var/log/messages或/var/log/syslog是否出现 - 模拟网络接收(本机发往本机):
UDP:echo "test-udp" | nc -u 127.0.0.1 514
TCP:echo "test-tcp" | nc 127.0.0.1 514
再查日志文件或用tcpdump -i lo port 514 -A -c 5观察是否收到 - 如果本地不通,问题在 rsyslog 配置或 SELinux(RHEL/CentOS 上常见),运行
sestatus和ausearch -m avc -ts recent查拒绝记录
检查系统防火墙是否放行 514 端口
rsyslog 默认使用 UDP 514,但很多环境也启用 TCP 514;防火墙需同时放行两者。
- 确认当前启用的防火墙:
systemctl status firewalld(RHEL/CentOS/Fedora)sudo iptables -L -n -v | grep 514(传统 iptables)sudo nft list ruleset | grep 514(较新发行版) - firewalld 示例(放行 UDP+TCP):
sudo firewall-cmd --add-port=514/udp --permanentsudo firewall-cmd --add-port=514/tcp --permanentsudo firewall-cmd --reload - iptables 示例:
sudo iptables -I INPUT -p udp --dport 514 -j ACCEPTsudo iptables -I INPUT -p tcp --dport 514 -j ACCEPT
保存规则(如 Ubuntu:sudo iptables-save > /etc/iptables/rules.v4)
验证外部设备能否连通 + 排查中间网络设备
即使系统防火墙开了,云服务器的安全组、物理网络 ACL 或负载均衡器仍可能拦截。
- 从发送端执行:
nc -zuv 目标IP 514(UDP)或nc -zv 目标IP 514(TCP)
返回succeeded表示可达;Connection refused表示 rsyslog 未监听;timeout则大概率被拦截 - 云服务器(阿里云、AWS、Azure)必须检查对应控制台中的「安全组」或「网络 ACL」,确认入方向规则明确允许 UDP/TCP 514 来自源 IP 段
- 抓包定位拦截点:
sudo tcpdump -i any port 514 -c 10在目标服务器上运行,看是否有来自客户端的 SYN(TCP)或 UDP 包到达。没有则问题出在网络路径上











