
過去 1 か月間、この問題を解決できず、さまざまな iptables ルールを作成し、カーネルのモジュールを有効または無効にしましたが、結果は同じで、さらに多くのパケットが iptables によってドロップされました。これにより、仮想マシン上の 192.168.1.0/24 から 192.168.3.0/28 までのさまざまな共有フォルダーにアクセスしようとすると、ユーザーが 3/5 秒の遅延が発生します。
ログに次のように表示されます:
2月14日 13:53:02 ns129115 カーネル: [12426815.202643] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=104 TOS=0x10 PREC=0x00 TTL=64 ID=61932 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK PSH URGP=0 2月14日 13:53:02 ns129115 カーネル: [12426815.393379] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=40 TOS=0x10 PREC=0x00 TTL=64 ID=61933 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK URGP=0 2月14日 13:53:02 ns129115 カーネル: [12426815.834944] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=40 TOS=0x10 PREC=0x00 TTL=64 ID=61934 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK URGP=0 2月14日 13:53:02 ns129115 カーネル: [12426815.835219] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=136 TOS=0x10 PREC=0x00 TTL=64 ID=61935 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK PSH URGP=0 2月14日 13:53:19 ns129115 カーネル: [12426832.829664] IPTables-FWD-Dropped: IN=br0 OUT=br0 PHYSIN=vnet0 PHYSOUT=eth2 MAC=70:85:c2:4f:14:c1:00:16:3e:ea:18:01:08:00 SRC=192.168.1.156 DST=192.168.1.125 LEN=319 TOS=0x00 PREC=0x00 TTL=128 ID=16660 DF PROTO=TCP SPT=49169 DPT=54820 WINDOW=256 RES=0x00 ACK PSH URGP=0 2月14日 13:53:39 ns129115 カーネル: [12426852.496117] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=104 TOS=0x10 PREC=0x00 TTL=64 ID=29023 DF PROTO=TCP SPT=22115 DPT=52214 WINDOW=263 RES=0x00 ACK PSH URGP=0 2月14日 13:53:49 ns129115 カーネル: [12426862.856776] IPTables-FWD-Dropped: IN=br0 OUT=br0 PHYSIN=eth2 PHYSOUT=vnet0 MAC=00:16:3e:ea:18:01:90:2b:34:b0:20:a4:08:00 SRC=192.168.1.237 DST=192.168.1.156 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=1644 DF PROTO=TCP SPT=49244 DPT=49169 WINDOW=1879 RES=0x00 ACK URGP=0 2月14日 13:53:50 ns129115 カーネル: [12426863.288983] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=104 TOS=0x10 PREC=0x00 TTL=64 ID=29069 DF PROTO=TCP SPT=22115 DPT=52214 WINDOW=263 RES=0x00 ACK PSH URGP=0 2月14日 13:54:19 ns129115 カーネル: [12426892.906806] IPTables-FWD-Dropped: IN=br0 OUT=br0 PHYSIN=eth2 PHYSOUT=vnet0 MAC=00:16:3e:ea:18:01:74:d4:35:6a:18:7a:08:00 SRC=192.168.1.199 DST=192.168.1.156 LEN=248 TOS=0x00 PREC=0x00 TTL=128 ID=13244 DF PROTO=TCP SPT=49678 DPT=49169 WINDOW=256 RES=0x00 ACK PSH URGP=0 2月14日 13:54:42 ns129115 カーネル: [12426915.939242] IPTables-OUTPUT-Dropped: IN= OUT=br0 SRC=192.168.1.115 DST=192.168.1.231 LEN=136 TOS=0x10 PREC=0x00 TTL=64 ID=61969 DF PROTO=TCP SPT=22115 DPT=49225 WINDOW=384 RES=0x00 ACK PSH URGP=0
iptables と 2 つのブリッジを備えた Debian サーバー
- BR0は、ゲートウェイ192.168.1.1へのインターネットアクセスを備えたブリッジであり、すべてのユーザーはこのネットワーク上にいます。
- 2番目のブリッジであるVIRBR10、vm1は、IP 192.168.3.12(192.168.3.0/28)でこのブリッジに接続されており、br0を通過する外部へのiptablesによるNATを持っています。
こちら »» ゲートウェイとハイパーバイザーを備えたネットワーク グラフ
これが私のルートテーブルです
~ ルートリスト
カーネル IP ルーティング テーブル 宛先ゲートウェイ Genmask フラグ メトリック参照 Iface の使用 デフォルト 192.168.1.1 0.0.0.0 UG 0 0 0 br0 192.168.1.0 * 255.255.255.0 U 0 0 0 br0 192.168.3.0 * 255.255.255.240 U 0 0 0 virbr10
~ brctl ショー
ブリッジ名 ブリッジID STP対応インターフェース br0 8000.0cc47ac18d3c はい eth2 virbr10 8000.525400c4b847 はい virbr10-ダミー vnet2
~ iptables ルール
#!/bin/sh #すべてのルールをフラッシュする iptables -P 入力を受け入れる iptables -P 転送 受け入れ iptables -P 出力を受け入れる iptables -t nat -F iptables -t マングル -F iptables -F iptables -X # 基本的な INPUT トラフィックを許可します。 iptables -A 入力 -m 状態 --state ESTABLISHED、RELATED -j ACCEPT iptables -A 入力 -i lo -j 受け入れ iptables -A 入力 -p icmp --icmp-type 8 -m conntrack --ctstate 新規 -j 受け入れる iptables -A 入力 -p icmp -m conntrack --ctstate 新規 -j 受け入れる # #MTU iptables -t mangle -A FORWARD -o virbr1 -p tcp -m tcp --tcp-flags SYN、RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1460 iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN、RST SYN -j TCPMSS --clamp-mss-to-pmtu #SMB #ポート: netbios - 445/tcp #ポート: netbios-ns – 137/udp -- NETBIOS 名前サービス #ポート: netbios-dgm – 138/udp -- NETBIOS データグラム サービス #ポート: netbios-ssn – 139/tcp -- NETBIOS セッション サービス iptables -A 入力 -m 状態 --state 新規 -m tcp -p tcp --dport 445 -j 受け入れる iptables -A 入力 -p udp -m udp --dport 445 -j 受け入れる iptables -A 入力 -p udp -m udp --dport 137:138 -j 受け入れる iptables -A 入力 -m 状態 --state 新規 -m tcp -p tcp --dport 139 -j 受け入れる #iptables -A 入力 -p tcp -m tcp -m conntrack --ctstate 新規 --sport 137 -j 受け入れる #iptables -A 入力 -p tcp -m tcp -m conntrack --ctstate 新規 --sport 138 -j 受け入れる #iptables -A 入力 -p tcp -m tcp -m conntrack --ctstate 新規 --sport 139 -j 受け入れる #RDP #ポート: 3389 # 外部からの接続 iptables -I 転送 -o virbr10 -d 192.168.3.12 -j 受け入れ iptables -t nat -I PREROUTING -p tcp --dport 3589 -j DNAT --to 192.168.3.12:3389 # ローカルサブネットをマスカレードする iptables -I 転送 -o virbr10 -d 192.168.3.0/28 -j 受け入れ iptables -t nat -A POSTROUTING -s 192.168.3.0/28 -j マスカレード iptables -A FORWARD -o virbr10 -m state --state RELATED,ESTABLISHED -j ACCEPT #virbr10 から red 192.168.1.0/24 への接続を許可 iptables -A FORWARD -i virbr10 -o br0 -j ACCEPT iptables -A FORWARD -o virbr10 -i br0 -j ACCEPT iptables -A FORWARD -i virbr10 -o lo -j ACCEPT ### #KVM ルーティングゲスト # VM に送信される DHCP パケットにはチェックサムがありません (長年のバグのため)。 iptables -t mangle -A POSTROUTING -o virbr10 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fil # これらの予約済みアドレス ブロックにマスカレードしないでください。 iptables -t nat -A POSTROUTING -s 192.168.3.0/28 -d 224.0.0.0/24 -j 戻る iptables -t nat -A POSTROUTING -s 192.168.3.0/28 -d 255.255.255.255/32 -j 戻る # VM から LAN/インターネットに送信されるすべてのパケットをマスカレードします。 iptables -t nat -A POSTROUTING -s 192.168.3.0/28 ! -d 192.168.3.0/28 -p tcp -j MASQUERADE --to-ports 1024-65535 iptables -t nat -A POSTROUTING -s 192.168.3.0/28 ! -d 192.168.3.0/28 -p udp -j MASQUERADE --to-ports 1024-65535 iptables -t nat -A POSTROUTING -s 192.168.3.0/28 ! -d 192.168.3.0/28 -j マスカレード # SSH 接続を受け入れます。 iptables -A 入力 -p tcp -m tcp --syn -m conntrack --ctstate 新規 --dport 22 -j 受け入れる # Radmin を受け入れる iptables -A 入力 -p tcp -m tcp --syn -m conntrack --ctstate NEW --dport 4899 -j 受け入れる # プライベートサブネットへの受信トラフィックを許可します。 iptables -A FORWARD -d 192.168.3.0/28 -o virbr10 -m state --state ESTABLISHED,RELATED -j ACCEPT #7218-12_07 デスクアクセスが遅い iptables -A FORWARD -d 192.168.1.0/24 -o br0 -m state --state ESTABLISHED,RELATED -j ACCEPT #7218-12_07 デスクアクセスが遅い iptables -A FORWARD -d 192.168.3.0/28 -o br0 -m state --state ESTABLISHED,RELATED -j ACCEPT # プライベートサブネットからの送信トラフィックを許可します。 iptables -A FORWARD -s 192.168.3.0/28 -i virbr10 -m state --state ESTABLISHED,RELATED -j ACCEPT #7218-12_07 デスクアクセスが遅い iptables -A FORWARD -s 192.168.1.0/24 -i br0 -m state --state ESTABLISHED,RELATED -j ACCEPT #7218-12_07 デスクアクセスが遅い iptables -A FORWARD -s 192.168.3.0/28 -i br0 -m state --state ESTABLISHED,RELATED -j ACCEPT # 仮想マシン間のトラフィックを許可します。 iptables -A FORWARD -i virbr10 -o virbr10 -j ACCEPT # その他はすべて拒否します。 iptables -A FORWARD -i virbr10 -j REJECT --reject-with icmp-port-unreachable # VM からの DNS (ポート 53) および DHCP (ポート 67) パケットを受け入れます。 iptables -A 入力 -i virbr10 -p udp -m udp -m マルチポート --dports 53,67 -j 受け入れる iptables -A 入力 -i virbr10 -p tcp -m tcp -m マルチポート --dports 53,67 -j 受け入れる #ICMP iptables -A 出力 -p icmp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # その他はすべて拒否します。 iptables -A 入力 -m conntrack --ctstate 無効 -j ドロップ iptables -A 入力 -p tcp -m tcp -j 拒否 --拒否-tcp-リセット iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable #ログパケットがドロップされました iptables -A INPUT -m limit --limit 2/min -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4 iptables -A FORWARD -m limit --limit 2/min -j LOG --log-prefix "IPTables-FWD-Dropped: " --log-level 4 iptables -A 出力 -m 制限 --limit 2/分 -j ログ --log-prefix "IPTables-出力-ドロップ: " --log-level 4
アップデート
- ログチェーンをスクリプトの最後に変更し、新しいログエントリを貼り付けます
答え1
Googleで検索したら解決できました。
- Windows Server 2012 R2 のドメイン コントローラーで SMB を使用して共有ファイルにアクセスする速度が遅いのは、フォルダーが宛先に存在しない場合に、フォルダー リダイレクト GPO がリダイレクト プロセス中にユーザー プロファイル フォルダーのアクセス許可を変更するためです。Microsoft Technet の iamrafic に基づきます (リンク)、フォルダの権限を次のように変更する必要があります。
必要な場所にフォルダーを作成します。適切なボタンをクリックして、親からのアクセス許可の継承を無効にし、継承されたすべてのアクセス許可を削除します。DACL には、Local Administrators というエントリが既に存在します。
ローカル管理者の変更: フルコントロール: このフォルダ、サブフォルダ、およびファイル
SYSTEM: フルコントロール: このフォルダー、サブフォルダー、およびファイルを追加します。
CREATOR OWNER を追加します: フル コントロール: このフォルダー、サブフォルダー、およびファイル。
認証済みユーザーの追加: フォルダーの一覧表示/データの読み取り、フォルダーの作成/データの追加: このフォルダーのみ
ドメイン管理者の追加: フル コントロール: このフォルダー、サブフォルダー、およびファイル。
[OK]をクリックします。
- もう 1 つの問題は、iptables ルールでした。パケットを分析するときにパフォーマンスが変わるため、新しいチェーンを完全に実行し、すべての FORWARD ルールの順序を修正する必要がありました。新しいルールは次のとおりです。
#!/bin/sh #すべてのルールをフラッシュする iptables -P 入力を受け入れる iptables -P 転送 受け入れ iptables -P 出力を受け入れる iptables -t nat -F iptables -t マングル -F iptables -F iptables -X iptables -t 生 -F # 基本テーブル iptables -A 入力 -m conntrack --ctstate 確立済み、関連 -j 受け入れ iptables -A 入力 -i lo -j 受け入れ # iptables -A FORWARD -o virbr32 -s 192.168.1.0/24 -d 192.168.100.0/28 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i virbr32 -s 192.168.100.0/28 -d 192.168.1.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -o virbr32 -i br0 -j ACCEPT iptables -A FORWARD -i virbr32 -s 192.168.100.0/2 -j ACCEPT iptables -A FORWARD -i virbr32 -o virbr32 -j ACCEPT iptables -A FORWARD -i virbr32 -j LOG --log-prefix "iptables-FORWARD-REJECT: " iptables -A FORWARD -i virbr32 -j REJECT --reject-with icmp-port-unreachable # ローカルサブネットをマスカレードする iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -j マスカレード # これらの予約済みアドレス ブロックにマスカレードしないでください。 iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -d 224.0.0.0/24 -j 戻る iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -d 255.255.255.255/32 -j 戻る # 中小企業 # RPC EPM TCP 135 # HTTPS 経由の RPC TCP 593 # SMB (名前付きパイプ用) TCP 445 # 一時範囲、ダイナミック * iptables -I FORWARD 6 -o virbr32 -i br0 -m conntrack --ctstate NEW -p tcp -d 192.168.100.12 --dport 445 -j ACCEPT iptables -I FORWARD 7 -o virbr32 -i br0 -m conntrack --ctstate NEW -p tcp -d 192.168.100.12 --dport 139 -j ACCEPT # VM からの DNS (ポート 53) および DHCP (ポート 67) パケットを受け入れます。 iptables -I FORWARD 8 -o virbr32 -i br0 -m conntrack --ctstate NEW -p tcp -m tcp -m multiport --dports 53,67 -j ACCEPT iptables -I FORWARD 9 -i virbr32 -o br0 -m conntrack --ctstate NEW -p udp -m udp -m multiport --dports 53,67 -j ACCEPT # # # 以下の2つのルールは、TCPパケットのみが検査されることを保証します。その他 # *filter テーブルに進みます。 iptables -t 生 -N TCPFLAGS iptables -t raw -A PREROUTING -p tcp -j TCPFLAGS iptables -t raw -A PREROUTING -j ACCEPT # 標準的なハンドシェイクを素早く受け入れる # ACK または ACK/SYN を許可する #-A TCPFLAGS -j 受け入れる iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN、ACK、URG、PSH、RST ACK -j ACCEPT # URGまたはPSHのいずれか、または両方、あるいはどちらも許可しないACK/FINを許可する # ただしSYNとRSTは設定できません iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN、SYN、ACK、RST ACK、FIN -j ACCEPT # SYNまたはACK/SYNを許可する iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN、SYN、URG、PSH、RST SYN -j ACCEPT # RST または ACK/RST を許可する iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN、SYN、URG、PSH、RST RST -j ACCEPT # このルールはクリスマスツリーとフィン攻撃をキャッチします iptables -t raw -A TCPFLAGS -p tcp --tcp-flags FIN FIN -j DROP # このルールは、クリスマスツリーと syn/rst 攻撃をキャッチします iptables -t raw -A TCPFLAGS -p tcp --tcp-flags SYN SYN -j DROP # このルールはヌル攻撃をキャッチします iptables -t raw -A TCPFLAGS -p tcp --tcp-flags ALL NONE -j DROP #-A TCPFLAGS -p tcp -ecn-tcp-cwr -j DROP # これらのルールは不正な ack の組み合わせをキャッチします #-A TCPFLAGS -p tcp --tcp-flags ACK ACK -j ACC #iptables -t 生 -A TCPFLAGS -j ACCEPT # では、TCP では何を受け入れるのでしょうか? # ハンドシェイク (ACK/FIN)、(ACK/SYN)、(SYN)、(ACK)、(RST)、(ACK/RST)、 # PSH または URG または FIN または ACK を含むデータ パケット # #ログパケットがドロップされました iptables -A INPUT -m limit --limit 2/min -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4 iptables -A FORWARD -m limit --limit 2/min -j LOG --log-prefix "IPTables-FWD-Dropped: " --log-level 4 iptables -A 出力 -m 制限 --limit 2/分 -j ログ --log-prefix "IPTables-出力-ドロップ: " --log-level 4
- ご覧のとおり、iptables -A FORWARD の代わりに iptables -I FORWARD を使用しました。これにより、フィルタ テーブルで順序付けられたルールを実行し、最初に重要なルールを配置し、その後、残りを DROP または拒否してさらに深く掘り下げることができるためです。すべての FORWARD ルールはこの行の前に置かれます。
iptables -A 入力 -p icmp --icmp-type 8 -m conntrack --ctstate 新規 -j 受け入れる
編集: VM から LAN 192.168.1.0/24 の外部にファイルをコピーするときに、転送速度を上げるためにいくつか変更を加える必要がありますが、4Mb/s を超えることはできません。アドバイスをいただければ幸いです。