只能使用UDP:514端口接收Syslog日志的两种解决方法

简介: 只能使用UDP:514端口接收Syslog日志的两种解决方法

只能使用UDP:514端口接收Syslog日志的两种解决方法


问题场景:


在接入网络安全设备例如防火墙,上网行为管理,IPS等设备和数通设备(交换机,路由器)的Syslog日志时, 有些网络安全设备和数通设备只能将Syslog日志发送到日志服务器的UDP 514端口,无法自定义修改为其他端口


但是GrayLog需要使用1024以上的端口用于Input监听端口用来接收日志


640.png


640.png



具体原因:参考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

640.png


下面用两种方法来解决这个问题


一、使用nginx的stream模块实现四层负载均衡


yum install nginx nginx-mod-stream -y
修改默认的nginx.conf
将include /etc/nginx/conf.d/*.conf; 放置在上方


640.png


然后


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


640.png


接下来


systemctl restart nginx
systemctl enable nginx 
netstat -anp  | grep 514


640.png


找一台Linux服务器测试514端口


vi /etc/rsyslog.conf
最后一行添加如下配置
*.* @192.168.31.230:514;RSYSLOG_SyslogProtocol23Format
systemctl restart rsyslog


640.png

可以看到Graylog 1514端口已经收到syslog日志流量


640.png

640.png



不过有一点问题,这时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

640.png


cat /proc/sys/net/ipv4/ip_forward可以看出

当firewalld的masquerade IP地址伪装开启时,ip_forward 会相应自动开启

效果验证


640.png



可以看到192.168.31.60的日志自动转发到1514端口

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
存储 Python
Python网络编程基础(Socket编程) UDP 发送和接收数据
【4月更文挑战第10天】对于UDP客户端而言,发送数据是一个相对简单的过程。首先,你需要构建一个要发送的数据报,这通常是一个字节串(bytes)。然后,你可以调用socket对象的`sendto`方法,将数据报发送到指定的服务器地址和端口。
|
网络协议
网络编程-UDP协议(发送数据和接收数据)
网络编程-UDP协议(发送数据和接收数据)
245 0
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
497 1
java网络编程 UDP通信协议实现局域网内文件的发送和接收
Erlang在端口上接收消息
Erlang在端口上接收消息
148 1
|
网络协议 Linux Windows
Rsyslog配置不同端口收集不同设备日志
Rsyslog配置不同端口收集不同设备日志
|
网络协议 Windows
在电脑上测试TCP/UDP端口是否开放,还是得网络大佬这招厉害!
在电脑上测试TCP/UDP端口是否开放,还是得网络大佬这招厉害!
5280 2
|
网络协议 网络安全 Python
电脑中 TCP/UDP 端口是否开放的测试:令人意想不到的神奇策略等你发现!
【8月更文挑战第19天】在网络管理和维护中,常需确认TCP/UDP端口是否开放以确保服务运行顺畅。端口如同计算机对外通信的“门”,TCP提供可靠连接,UDP则快速但无连接。测试端口是否开放的方法多样:可用`telnet`测试TCP端口,如`telnet localhost 80`;UDP测试较复杂,可用`nc`工具,如`nc -u -z localhost 53`。此外,也有在线工具可供选择,但需确保其安全性。
3727 1
编辑QZone日志却显示空白的解决方法
编辑QZone日志却显示空白的解决方法
|
Java Android开发
Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。
【6月更文挑战第23天】 Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。客户端连接服务器,发送"Hello, Server!"后关闭。注意Android中需避免主线程进行网络操作。
470 4
|
网络协议
tcp套接字和udp套接字可以共用一个端口吗?
tcp套接字和udp套接字可以共用一个端口吗?
584 1