V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
itsme
V2EX  ›  Linux

请教高手:用 iptables 如何统计一个端口所有协议的流量?不仅仅是 tcp 或者 udp

  •  
  •   itsme · 2016-05-22 22:22:47 +08:00 · 5952 次点击
    这是一个创建于 3132 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一直以来都是用下面这样的命令,端口 2G 流量后停止
    -A OUTPUT -p tcp --sport 3990 -m quota --quota 2000000000 -j ACCEPT
    -A OUTPUT -p tcp --sport 3990 -j DROP

    但是今天看 iptables 的说明发现有说 -p 后面可以加上 all 参数或者默认就是包括 tcp udp icmp sctp 等协议。

    我就想改成下面这样,实现一个端口上的所有流量总计 2G
    -A OUTPUT -p all --sport 3990 -m quota --quota 2000000000 -j ACCEPT
    -A OUTPUT -p all --sport 3990 -j DROP

    但是发现这个命令不行。难道这种写法不对?

    或者有没有其他的 iptables 命令能否统计一个端口的 tcp 和 udp 协议总共流量达到 2G 后 DROP 掉数据?
    第 1 条附言  ·  2016-05-22 23:50:29 +08:00
    现在确认-p all 后面不可以加-dport 或者-sport ,现在的问题是,如何统计一个端口的 tcp 和 udp 流量来实现达到指定流量后 drop 该端口的数据?
    9 条回复    2020-02-20 23:17:44 +08:00
    xencdn
        1
    xencdn  
       2016-05-22 22:57:03 +08:00
    我尝试了 确实不行 用非参数来匹配也不可以
    iptables -A OUTPUT ! --protocol icmp --sport 3990 -m quota --quota 2000000000 -j ACCEP

    解答如下
    http://serverfault.com/questions/279361/iptables-p-all-dport

    --dport is not a flag for general iptables rules. It's a flag for one of it's extended packet matching modules. These are loaded when you use -p protocol or -m. Unless you specify -m <protocol> or -p <protocol> with a specific protocol you can't use --dport

    You'll see this within the iptables(8) manual page:
    itsme
        2
    itsme  
    OP
       2016-05-22 23:07:27 +08:00
    @xencdn 明白他的意思,就是说--dport --sport 实际是-p 和-m 的参数。
    所以上面写法是不对的。

    现在问题就是,如何实现我想的那种统计一个端口的 tcp 和 udp 的流量达到数值后该端口就 drop 数据?

    不知道有没有其他思路?
    ToughGuy
        3
    ToughGuy  
       2016-05-23 00:38:55 +08:00   ❤️ 1
    iptables -N TRAFFIC_QUOTA
    iptables -A OUTPUT -p tcp --sport 3990 -g TRAFFIC_QUOTA
    iptables -A OUTPUT -p udp --sport 3990 -g TRAFFIC_QUOTA

    iptables -A TRAFFIC_QUOTA -m quota --quota 2000000000 -j ACCEPT
    iptables -A TRAFFIC_QUOTA -j DROP


    试试这个
    jasontse
        4
    jasontse  
       2016-05-23 08:32:56 +08:00 via iPad
    首先你要搞清楚**只有 TCP 和 UDP 才有端口号**
    julyclyde
        5
    julyclyde  
       2016-05-23 18:30:51 +08:00
    首先你要知道,端口是在四层协议以下的定义
    lumen
        6
    lumen  
       2016-05-23 23:20:49 +08:00
    TCP/IP 协议里的传输层才有端口, TCP 或者 UDP
    itsme
        7
    itsme  
    OP
       2016-05-23 23:40:24 +08:00
    @ToughGuy

    似乎有效。谢谢。我实际使用观察下。
    mattx
        8
    mattx  
       2018-08-31 18:17:31 +08:00
    @ToughGuy 请问下, 如果一个 tcp 连接持续得在耗费流量, 是不是 iptables 对流量限制就不生效了
    Dizzly
        9
    Dizzly  
       2020-02-20 23:17:44 +08:00
    @ToughGuy 请问下大佬,这个流量限制的命令要怎么修改和删除?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3367 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:27 · PVG 19:27 · LAX 03:27 · JFK 06:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.