事象1:
IWSVA 側で下位 HTTP プロキシサーバとの特定の TCP セッションが TIME_WAIT 状態で残っている状態で、下位 HTTP プロキシサーバが当該 TCP セッションと同じ「クライアント IP アドレス/クライアントポート番号」で新規 TCP 接続 (TCP SYN) を試みた場合、IWSVA はその要求を「前回の TCP セッションの続き」と判断して、SYN/ACK 応答ではなく ACK 応答を返却します。
このとき、下位 HTTP プロキシサーバは、当該 ACK 応答を不正と判断して IWSVA に TCP RST を送信いたしますが、IWSVA はデフォルトで RFC1337 に従ってこの TCP RST を無視します。
下位 HTTP プロキシサーバは TCP SYN の再送を繰り返しますが、上述の TCP RST の無視が繰り返されることで、最終的に「TCP接続失敗」となることがあります。
下位 HTTP プロキシサーバを使用される環境では、事象への予防策として設定頂くことを強く推奨します。
事象1への対策
1. IWSVA の Linux コンソールに root ユーザでログインします。
2. /etc/sysctl.conf をバックアップしたのちに vi で開きます。
# vi /etc/sysctl.conf
net.ipv4.tcp_rfc1337=1
(編集後)
net.ipv4.tcp_rfc1337=0
事象2への対策
以下の手順を実施して、下位 HTTP プロキシサーバからの TCP セグメントに対する明示的な許可ルールを追加します。
1. IWSVA の Linux コンソールに root ユーザでログインします。
2. /usr/iwss/iwsvafw.sh をバックアップしたのちに vi で開きます。
# vi /usr/iwss/iwsvafw.sh
3. stateful を検索し、下の行に以下のルールを追加します。
たとえば、下位 HTTP プロキシサーバの IP アドレスが 192.0.2.1 であれば、以下のようにします。
IPTABLE -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # stateful
# Create the custom chains
IPTABLE -N SCAN_SERV_IN
IPTABLE -N ACL_IN
IPTABLE -N LOCAL_SERV_IN
IPTABLE -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # stateful
IPTABLE ipv4 -A INPUT -p tcp -s 192.0.2.1 -j ACCEPT
# Create the custom chains
IPTABLE -N SCAN_SERV_IN
IPTABLE -N ACL_IN
IPTABLE -N LOCAL_SERV_IN
4. ファイルを保存し、以下のコマンドで iptables を再起動します。
正しく設定されていれば、iptables に以下のようなルールが追加されます。
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT tcp -- * * 192.0.2.1 0.0.0.0/0
...