如何使用 iptables 中的某些标志阻止范围端口到目标端口

如何使用 iptables 中的某些标志阻止范围端口到目标端口

我需要用特定的标志阻止(在本地网络中)从特定范围的端口到另一个端口的所有流量

交通:

Transmission Control Protocol, Src Port: 50800, Dst Port: 443, Seq: 1, Ack: 1, Len: 179
Source Port: 50800
Destination Port: 443
[Stream index: 1]
[TCP Segment Len: 179]
Sequence number: 1    (relative sequence number)
[Next sequence number: 180    (relative sequence number)]
Acknowledgment number: 1    (relative ack number)
0101 .... = Header Length: 20 bytes (5)
Flags: 0x018 (PSH, ACK)
    000. .... .... = Reserved: Not set
    ...0 .... .... = Nonce: Not set
    .... 0... .... = Congestion Window Reduced (CWR): Not set
    .... .0.. .... = ECN-Echo: Not set
    .... ..0. .... = Urgent: Not set
    .... ...1 .... = Acknowledgment: Set
    .... .... 1... = Push: Set
    .... .... .0.. = Reset: Not set
    .... .... ..0. = Syn: Not set
    .... .... ...0 = Fin: Not set
    [TCP Flags: ·······AP···]
Window size value: 64400
[Calculated window size: 64400]
[Window size scaling factor: -2 (no window scaling used)]
Checksum: 0x1bcb [unverified]
[Checksum Status: Unverified]
Urgent pointer: 0
[SEQ/ACK analysis]
    [iRTT: 0.212323000 seconds]
    [Bytes in flight: 179]
    [Bytes sent since last PSH flag: 179]
[Timestamps]
TCP payload (179 bytes)

失败的尝试:

iptables -t mangle -A PREROUTING -i eth1 -p tcp --sport 49152:65535 --dport 443 --tcp-flags PSH ACK -j REJECT --reject-with tcp-reset

或组合使用:

--tcp-flags PSH, ACK
--tcp-flags PSH,ACK PSH

或转发并输入:

iptables -I INPUT -i eth1 -p tcp --sport 49152:65535 --dport 443 --tcp-flags PSH,ACK PSH -j DROP
iptables -I FORWARD -i eth1 -p tcp --sport 49152:65535 --dport 443 --tcp-flags PSH,ACK PSH -j DROP

问题:

如何使用 iptables 规则阻止此流量?(在“流量”中描述)

PD:咨询的消息来源http://ask.wireshark.org/questions/20423/pshack-wireshark-capture

答案1

首先,设置规则的链取决于是否连接到本地框。如果应该在那里结束,则选择 INPUT。如果您需要将流量传递到另一个框,则使用 FORWARD。其次,您必须将规则添加到规则中-m tcp才能--tcp-flags产生效果。现在,根据要过滤的内容,您需要相应地设置标志。如果您只选择 PSH 标志(并希望忽略其余部分),则--tcp-flags PSH PSH完全足够了。如果您需要选择 PSH/ACK,则必须将其设置为--tcp-flags PSH,ACK PSH,ACK将两者纳入检查。您的--tcp-flags PSH,ACK PSH检查是设置 PSH 标志和清除 ACK 标志。

至于--tcp-flags PSH ACK,这永远不会产生肯定的结果,因为您声明检查 PSH 标志,但实际上却检查 ACK。但是,由于您忽略了这一点,因此匹配不可能成为真。

解释:

如果您通读man iptables-extensions,您会发现它--tcp-flags有两个参数:一个标志掩码和一个标志值。第一个参数告诉 tcp match 要检查哪些标志,而第二个参数告诉它您希望看到哪些标志被设置(其余检查的标志必须在数据包中清除)。如果数据包符合您的条件,则您命中,规则生效。如果不匹配,则为未命中,规则将被忽略。

相关内容