• 【TCP/IP】【调试】丢包、流不通、错包等问题查证手段系列之二——防火墙


    • 🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)
    • 🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd
    • 🌐系列专栏:TCP/IP协议
    • 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!! 👉关注✨、点赞👍、收藏📂、评论。
    • 如需转载请参考转载须知!!

    防火墙简介

    在这里插入图片描述

    • iptables、ebtabless是Linux系统下网络数据包过滤的配置工具,这点几乎众所周知。但这两个工具在查找丢包过程中的应用,知道的人就不多了。
    • 这种方式的优点在于,不需要修改版本,使用现有版本,输入相关命令即可。

    通过防火墙查看统计

    • 根据报文经过的路径以及报文的特征,在防火墙的特定位置增加规则,然后查看报文统计。
    • 兹举例如下:
      – 二层防火墙中,过滤特定源、目的MAC的IP报文:
     ebtables -t filter -I FORWARD 1 -s SMAC -d DMAC -p 0x0800 //增加特定规则;
     ebtables -t filter -L --Lc                                //查看统计 
     ebtables -t filter  -Z                                    //将统计清0
    
    • 1
    • 2
    • 3

    – 三层防火墙中,过滤目的端口为80的TCP报文

     iptables -t filter -A INPUT  -p tcp  --dport 80  //增加特定规则;
     iptables -t filter -vnL                          //查看统计
     iptables -t filter -Z                            //将统计清
    
    • 1
    • 2
    • 3

    – 删除规则

     ebtables -D FORWARD  1                  //删除filter表,FORWARD链的第一条规则
     iptables -D INPUT 11                    //11是行号,iptables -L INPUT --line-numbers 所打印出来的行号
     ebtables -t filter  -F                  //删除所有二层filter规则
     iptables -t filter -F                   //删除所有三层filter规则
    
    • 1
    • 2
    • 3
    • 4

    通过防火墙LOG模块查看日志

    例1、 配置实例1
    • 配置命令
    kern.=debug     /var/log/kern.debug.log#在/etc/rsyslog.conf添加日志文件
    touch /var/log/kern.debug.log #建立debug.log文件
    systemctl restart rsyslog     #重启rsyslog服务
    iptables -t raw -A OUTPUT -m limit --limit 5000/minute -j LOG --log-level 7 --log-prefix "raw out: " #添加规则,本地发出报文
    iptables -t raw -A PREROUTING -p icmp -s 8.8.8.8/32 -m limit --limit 500/minute -j LOG --log-level 7 --log-prefix "mangle prerouting: " #添加规则:icmp报文
    
    • 1
    • 2
    • 3
    • 4
    • 5

    一个输出的例子:

    Jun 13 19:58:21 dev-slave-110 kernel: raw prerouting: IN=eth0 OUT= MAC=52:54:15:5d:39:58:02:54:d4:90:3a:57:08:00 SRC=8.8.8.8 DST=10.39.0.110 LEN=84 TOS=0x00 PREC=0x00 TTL=32 ID=0 PROTO=ICMP TYPE=0 CODE=0 ID=13629 SEQ=15
    
    • 1
    例2、 配置实例2
    • 配置说明
    iptables -A INPUT -j LOG –log-prefix=”iptables-”
    
    • 1

    这样可以把匹配上iptables规则的数据包写到syslog中。
    因为iptables是按照自上而下的顺序对数据包进行匹配,所以在最底下添加LOG记录,也就是记录了执行默认规则的数据包。

    • 看一下syslog的输出:
    Apr 10 17:45:54 S109 kernel: iptables-IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:52:54:00:02:12:a8:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=330 TOS=0x00 PREC=0x00 TTL=128 ID=4225 PROTO=UDP SPT=68 DPT=67 LEN=310
    
    Apr 10 17:46:03 S109 kernel: iptables-IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:52:54:00:02:12:a8:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=330 TOS=0x00 PREC=0x00 TTL=128 ID=4226 PROTO=UDP SPT=68 DPT=67 LEN=310
    
    Apr 10 17:46:09 S109 kernel: iptables-IN=eth1 OUT= MAC=78:2b:cb:42:a7:2f:3c:e5:a6:4d:59:00:08:00 SRC=184.173.144.34 DST=113.31.131.27 LEN=72 TOS=0x00 PREC=0x00 TTL=44 ID=29448 DF PROTO=UDP SPT=53 DPT=11437 LEN=52
    
    Apr 10 17:46:16 S109 kernel: iptables-IN=eth1 OUT= MAC=78:2b:cb:42:a7:2f:3c:e5:a6:4d:59:00:08:00 SRC=184.173.144.34 DST=113.31.131.27 LEN=72 TOS=0x00 PREC=0x00 TTL=44 ID=30057 DF PROTO=UDP SPT=53 DPT=11826 LEN=52
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    通过防火墙TRACE模块跟踪报文

    • TRACE功能说明

    TRACE

    • This target marks packets so that the kernel will log every rule which match the packets as those traverse the tables, chains, rules.

    • A logging backend, such as nf_log_ipv4(6) or nfnetlink_log, must be loaded for this to be visible. The packets are logged with
      the string prefix: "TRACE: table‐name:chainname:type:rulenum " where type can be “rule” for plain rule, “return” for implicit rule at the end of a user defined chain and “policy” for the policy of the built in chains.

    • It can only be used in the raw table.

    • 用法举例:
    modprobe ipt_LOG ip6t_LOG nfnetlink_log #加载对应模块
    iptables -t raw -A PREROUTING -p icmp -s 8.8.8.8/32 -j TRACE #增加规则,源IP为8.8.8.8的icmp报文
    dmesg                  #查看到匹配的报文的日志:
    cat /var/log/message   #查看到匹配的报文的日志:
    
    • 1
    • 2
    • 3
    • 4

    一个输出的跟踪信息如下:

    Jun 16 17:44:05 dev-slave-110 kernel: TRACE: raw:PREROUTING:rule:2 IN=eth0 OUT= MAC=52:54:15:5d:39:58:02:54:d4:90:3a:57:08:00 SRC=8.8.8.8 DST=10.39.0.110 LEN=84 TOS=0x00 PREC=0x00 TTL=32 ID=0 PROTO=ICMP TYPE=0 CODE=0 ID=4064 SEQ=24
    
    • 1

    以上。

    如本文对你有些许帮助,欢迎大佬支持我一下,您的支持是我持续创作的不竭动力
    支持我的方式

  • 相关阅读:
    c/c++: 如何区分c和c++
    yaml编写规则以及YAML和JSON对比
    网络安全专业学习路线
    Win11一些问题以及解决方案
    redis非关系型数据库(缓存型数据库)——中间件
    linux入门学习17
    HTML视频背景(动态背景)
    流量代理——正向代理
    解密Spring Cloud LoadBalancer:实现高效负载均衡的魔法密卷(一)
    redis学习七redis的集群:主从复制、CAP、PAXOS、Cluster分片集群(二)
  • 原文地址:https://blog.csdn.net/qxhgd/article/details/119709741