只能使用UDP:514端口接收Syslog日志的两种解决方法
问题场景:
在接入网络安全设备例如防火墙,上网行为管理,IPS等设备和数通设备(交换机,路由器)的Syslog日志时, 有些网络安全设备和数通设备只能将Syslog日志发送到日志服务器的UDP 514端口,无法自定义修改为其他端口
但是GrayLog需要使用1024以上的端口用于Input监听端口用来接收日志
具体原因:参考GrayLog上的FAQ
How can I start an input on a port below 1024? If you try to start an input on one of the privileged ports , it will only work for the “root” user. To be able to use a privileged port, you can use authbind on Debian-based systems, or you redirect the traffic with an iptables rule like this: iptables -t nat -A PREROUTING -p tcp --dport 514 -j REDIRECT --to 1514 iptables -t nat -A PREROUTING -p udp --dport 514 -j REDIRECT --to 1514 The input needs to be started on port 1514 in this case and will be made available on port 514
下面用两种方法来解决这个问题
一、使用nginx的stream模块实现四层负载均衡
yum install nginx nginx-mod-stream -y 修改默认的nginx.conf 将include /etc/nginx/conf.d/*.conf; 放置在上方
然后
cd /etc/nginx/conf.d/ vim syslog514to1514.conf 添加如下 stream { upstream udp_backend { server 192.168.31.230:1514; } server { listen 514 udp; proxy_pass udp_backend; } } firewall-cmd --list-ports firewall-cmd --permanent --zone=public --add-port=514/udp firewall-cmd --reload
接下来
systemctl restart nginx systemctl enable nginx netstat -anp | grep 514
找一台Linux服务器测试514端口
vi /etc/rsyslog.conf 最后一行添加如下配置 *.* @192.168.31.230:514;RSYSLOG_SyslogProtocol23Format systemctl restart rsyslog
可以看到Graylog 1514端口已经收到syslog日志流量
不过有一点问题,这时gl2_remote_ip是GrayLog自身的IP (192.168.31.230)
二、通过firewalld的端口重定向来实现
具体操作命令如下
firewall-cmd --permanent --add-forward-port=port=514:proto=udp:toport=1514 需开启IP地址伪装,运行 firewall-cmd --permanent --add-masquerade firewall-cmd --reload
cat /proc/sys/net/ipv4/ip_forward可以看出
当firewalld的masquerade IP地址伪装开启时,ip_forward 会相应自动开启
效果验证
可以看到192.168.31.60的日志自动转发到1514端口