AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 555909
Accepted
binakh
binakh
Asked: 2019-12-07 04:52:48 +0800 CST2019-12-07 04:52:48 +0800 CST 2019-12-07 04:52:48 +0800 CST

记录 TCP 标志

  • 772

我使用 nftables 作为我的规则。

我的问题:如何记录 tcp 标志?

这是我的规则:

nft add rule filter input tcp dport 22 ct state new tcp flags \& \(fin\|syn\) ==\( fin \| syn\) accept

我总是得到的结果:

Dec 6 13:40:19 my_host my_FIN IN=eth0 OUT=eth1 MAC= SRC=x.1.1.1 DST=x.2.2.2 LEN=40 TOS=00 PREC=0x00 TTL=127 ID=17695 DF PROTO=TCP SPT=54049 DPT=422SEQ=2558094232 ACK=0 WINDOW=8192 SYN URGP=0 MARK=0

编辑 我的规则:

 chain FORWARD {

      ip saddr 1.1.1.1 ip daddr . tcp dport @myset tcp flags & (fin | syn) == fin | syn counter packets 0 bytes 0 log prefix " myprefix " group 1 accept 

}

tcp logs
  • 1 1 个回答
  • 299 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2019-12-07T08:50:50+08:002019-12-07T08:50:50+08:00

    对于 TCP 情况,Netfilter 的 conntrack 在其内部状态和等效 TCP 状态之间进行了额外的一致性检查。这个netdev 2.1 PDF文档(对不起,我找不到它的 netdev url,这是来自作者的网站)讲述了它:

    L4 跟踪器尝试保持状态,例如 tcp:跟踪状态,检查序列号。例子:

    • 新的tcp数据包?SYN位设置?
    • 预期窗口中的tcp序列号?
    • 未确认的数据?→ 调整超时
    • 首先?鳍?→ 删除连接和/或调整超时

    conntrack NEW状态匹配 TCP SYN_SENT或 TCP SYN_RECEIVED状态。如果您在规则中选择NEW状态条件,使用ct state new,它将永远不会匹配任何FIN数据包,因为在建立新的 TCP 连接时永远不会涉及FIN数据包。

    删除后重试ct state new。

    更新:我最初没有看到第二个问题。这个表达式:

    tcp flags & (fin | syn) == fin | syn
    

    将永远不会与 FIN 标志匹配,因为永远不会同时找到 FIN+SYN(除了一些随机的无效尝试)。正确的表达应该是:

    tcp flags & (fin | syn) != 0
    

    无论何时设置 FIN或SYN都会匹配。实际上nftables简化了它,只有这个被显示或需要:

    tcp flags fin,syn
    

    因此,考虑到这两种调整(ct state new必须仍然被删除),规则变为:

    nft add rule filter FORWARD 'tcp dport 22 tcp flags fin,syn log prefix " my_FIN " group 1 accept
    

    或在完整的链组中:

     chain FORWARD {
          type filter hook forward priority 0; policy accept;
          ip saddr 1.1.1.1 ip daddr . tcp dport @myset tcp flags fin,syn counter log prefix " myprefix " group 1 accept 
    
     }
    

    一旦您可以使用上述规则实际检测到 FIN 数据包,如果您的意图是过滤一些 TCP 攻击(您真的需要吗?),请注意 netfilter 可能会考虑首先在 TCP 连接的第一个数据包中将 TCP FIN 视为INVALID状态:您可能有兴趣记录这些状态 ( ct state invalid)。有 netfilter sysctl 切换可以改变关于INVALID状态的结果:启用 不会将其归类为无效的 nf_conntrack_tcp_be_liberal 和禁用nf_conntrack_tcp_loose这将停止恢复已建立的 TCP 连接,即停止拥有没有 SYN 的状态 NEW。只有在丢失连接跟踪后才能进行此恢复:在路由器重启防火墙或使用 刷新 conntrack 状态conntrack -F之后,但谁知道呢,这里可能会选择偏执狂。

    • 1

相关问题

  • 过滤脚本输出并将其打印在屏幕上,同时将其重定向到文件中

  • 使用 sed 清理日志文件中的长路径

  • logrotate 描述符可以处理多个通配符吗?

  • systemd:如何将标准输出重定向到日志文件

  • journalctl 中的区分级别

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve