web-dev-qa-db-ja.com

iptablesでMSSを変更する

システムを流れるパケットのMSSを変更する2つの設定があります。最初の例では、enp2s0とenp3s0をブリッジとしてセットアップしています。 iptablesが受信パケットのMSSを変更してから、それを通過させる方法はありますか?

[root@localhost network-scripts]# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope Host 
       valid_lft forever preferred_lft forever
2: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:60:e0:6f:8c:62 brd ff:ff:ff:ff:ff:ff
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP qlen 1000
    link/ether 00:60:e0:6f:8c:63 brd ff:ff:ff:ff:ff:ff
4: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:60:e0:6f:8c:61 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.248/24 brd 192.168.5.255 scope global enp0s31f6
       valid_lft forever preferred_lft forever
    inet6 fe80::1842:306e:fb55:fe3/64 scope link 
       valid_lft forever preferred_lft forever
5: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP qlen 1000
    link/ether 00:60:e0:6f:8c:64 brd ff:ff:ff:ff:ff:ff
7: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:60:e0:6f:8c:63 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::260:e0ff:fe6f:8c63/64 scope link 
       valid_lft forever preferred_lft forever
[root@localhost network-scripts]# 

2番目のケースでは、すべてのトラフィックを架空のtun0に送信するように設定しています。このtun0は、トラフィックをキュー0に送信し、そこでsnortのようなソフトウェアがパケットを分析します。

root@pink:~/blue# iptables-save 
# Generated by iptables-save v1.6.0 on Sun Jan 14 13:22:07 2018
*raw
:PREROUTING ACCEPT [84:6848]
:OUTPUT ACCEPT [21:2348]
-A PREROUTING -i tun0 -j NFQUEUE --queue-num 0
COMMIT
# Completed on Sun Jan 14 13:22:07 2018
# Generated by iptables-save v1.6.0 on Sun Jan 14 13:22:07 2018
*filter
:INPUT ACCEPT [110838:165446612]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [87556:6202390]
COMMIT
# Completed on Sun Jan 14 13:22:07 2018
root@pink:~/blue#

私はこれを試しました https://www.frozentux.net/iptables-tutorial/chunkyhtml/x4721.html が機能しないようです。

2
Dovid Bender

TCPMSS iptablesターゲットを使用して、TCP MSS値を変更します。つまり、MSSクランプを実行します。

特定のMSS(ここでは800)を強制するには、次のコマンドを使用します。

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 800

Conntrackを使用している場合、これは少しトリッキーになることに注意してください。このルールはbefore conntrackルールでなければなりません。それ以外の場合は、SYNパケットに対してのみ機能し、TCPMSSルールに到達する前にconntrackによって受け入れられるSYN ACKに対しては機能しません。

また、MSSクランプはハックであり、エンドユーザーアプリケーションが壊れている場合にのみ必要です。

2
scai