iptables监控reset的连接信息
需求
如果连接被reset需要记录下reset包是哪边放出来的,并记录reset连接的四元组信息
iptables规则
1 | # Generated by iptables-save v1.4.21 on Wed Apr 1 11:39:31 2020 |
将如上配置保存在 drds_filter.conf中,设置开机启动:
1 | //注意,tee 命令的 "-a" 选项的作用等同于 ">>" 命令,如果去除该选项,那么 tee 命令的作用就等同于 ">" 命令。 |
单独记录到日志文件中
默认情况下 iptables 日志记录在 dmesg中不方便查询,可以修改rsyslog.d规则将日志存到单独的文件中:
1 | # cat /etc/rsyslog.d/drds_filter_log.conf |
将 [drds] 开头的日志存到对应的文件
将如上配置放到: /etc/rsyslog.d/ 目录下, 重启 rsyslog 就生效了
1 | sudo cp /home/admin/drds-worker/install/drds_filter_log.conf /etc/rsyslog.d/drds_filter_log.conf |
防止日志打满磁盘
配置 logrotate, 保留最近30天的
1 | #cat /etc/logrotate.d/drds |
logrotate操作的日志需要权限正常,并且上级目录权限也要对,解决方案参考:https://chasemp.github.io/2013/07/24/su-directive-logrotate/ 报错信息:
1 | rotating pattern: /var/log/myapp/*.log weekly (4 rotations) |
最终效果
1 | $tail -10 logs/drds-tcp.log |
NetFilter Hooks
下面几个 hook 是内核协议栈中已经定义好的:
NF_IP_PRE_ROUTING
: 接收到的包进入协议栈后立即触发此 hook,在进行任何路由判断 (将包发往哪里)之前NF_IP_LOCAL_IN
: 接收到的包经过路由判断,如果目的是本机,将触发此 hookNF_IP_FORWARD
: 接收到的包经过路由判断,如果目的是其他机器,将触发此 hookNF_IP_LOCAL_OUT
: 本机产生的准备发送的包,在进入协议栈后立即触发此 hookNF_IP_POST_ROUTING
: 本机产生的准备发送的包或者转发的包,在经过路由判断之后, 将触发此 hook
IPTables 表和链(Tables and Chains)
下面可以看出,内置的 chain 名字和 netfilter hook 名字是一一对应的:
PREROUTING
: 由NF_IP_PRE_ROUTING
hook 触发INPUT
: 由NF_IP_LOCAL_IN
hook 触发FORWARD
: 由NF_IP_FORWARD
hook 触发OUTPUT
: 由NF_IP_LOCAL_OUT
hook 触发POSTROUTING
: 由NF_IP_POST_ROUTING
hook 触发
tracing_point 监控
对于 4.19内核的kernel,可以通过tracing point来监控重传以及reset包
1 | # grep tcp:tcp /sys/kernel/debug/tracing/available_events |
iptables 打通网络
1 | //本机到 172.16.0.102 不通,但是和 47.100.29.16能通(阿里云弹性ip) |