openwrt标准的日志记录功能是使用logd ubox 日志守护程序实现的。默认日志会以固定大小、循环覆盖的方式存储在内存中,可以使用命令logread
在路由器上读取。logd还支持通过TCP/UDP的方式将日志发送到远程syslog服务器中。
用iptables标记转发的数据包后,通过logd记录至本地或发送到syslog服务器。
日志
本地记录
在配置文件:/etc/config/system
的config system
字段下面加入以下行:
config system ... option log_file '/var/log/mylog' option log_remote '0'
重启服务
/etc/init.d/log restart /etc/init.d/system restart
网络记录
在配置文件:/etc/config/system
的config system
字段下面加入以下行:
config system ... option log_ip <destination IP> option log_port <destination port> option log_proto <tcp or udp>
重启服务
/etc/init.d/log restart /etc/init.d/system restart
IPTABLES
记录网络流量
iptables的规则配置文件在/etc/firewall.user
中,该配置文件被/etc/config/firewall
加载
以下配置仅记录出向的HTTP/HTTPS流量,记录双向网络流量会明显降低路由器速度。
#创建一个用于记录转发数据包(内网到外网)的区域 iptables -N forwarding_log_chain #附加到forwarding_rule区域 iptables -A forwarding_rule -j forwarding_log_chain #记录目的端口为80、443的SYN日志(可以使用--syn代替--tcp-flags和FIN-ACK事件) iptables -A forwarding_log_chain -p tcp --dport 80:443 --tcp-flags ALL SYN -j LOG --log-prefix "HTTP-SYN:" iptables -A forwarding_log_chain -p tcp --dport 80:443 --tcp-flags ALL ACK,FIN -j LOG --log-prefix "HTTP-ACK-FIN:" #记录所有源、目的端口为80、443的日志,会增大网络延迟 # iptables -A forwarding_log_chain -p tcp --dport 80:443 -j LOG --log-prefix "HTTP-DPRT-ALL:" # iptables -A forwarding_log_chain -p tcp --sport 80:443 -j LOG --log-prefix "HTTP-SPRT-ALL:" #记录出向ICMP iptables -A forwarding_log_chain -p icmp --icmp 8 -j LOG --log-prefix "ICMP-OUT:" #清空forwarding_log_chain区域 iptables -F forwarding_log_chain
重启服务
/etc/init.d/log restart /etc/init.d/system restart
效果
使用网络记录的方式收取日志,重启服务后即可收到最新的iptables日志。
参考文章
https://openwrt.org/docs/guide-user/firewall/netfilter_iptables/iptables_log_targets
https://openwrt.org/docs/guide-user/base-system/log.essentials