プロトコル関連のパラメータ

2014/01/22
TCP/IP チューニング可能パラメータ
Solaris 10 では ndd(1M) コマンドで変更していたが、Solaris 11 からは、ipadm(1M) コマンドで変更する。() 内は、対応する ndd(1M) のパラメータ。既定値は、Solaris 11 のものを記述している。OS のバージョン毎に違うので注意。設定一覧は ndd /dev/tcp \? や、ipadm show-prop で表示できる。ただし、ipadm の一覧には _ で始まるプロパティは表示されないので、下記の様に個別に見る必要がある。

# ipadm show-prop -p _conn_req_max_q tcp
PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
tcp   _conn_req_max_q       rw   128          --           128          1-4294967295

接続確立関係

パラメータ 意味 既定値
_conn_req_max_q
(tcp_conn_req_max_q)
接続確立時の接続完了キュー最大サイズ
保留状態の TCP 接続数(accept(3SOCKET) しなくてもクライアントへ SYN・ACK は送られる)。listen(3SOCKET) の引数で設定できる最大値でもある。保留状態の TCP 接続の数が多すぎて、新たな接続要求が拒否される(tcpListenDrop が多い)場合には増やす。しかし、保留状態の TCP 接続はメモリーを消費するため、過剰に大きくしてはならない。
128
_conn_req_max_q0
(tcp_conn_req_max_q0)
接続確立時の接続処理中のキュー最大サイズ
ハーフオープン接続(3 Way ハンドシェークがまだ終わっていない)を含む接続数。超えた場合は、最も古いハーフオープン状態の要求がドロップされる。 tcpListenDropQ0 が多い場合に有効(SYN フラッド攻撃の可能性もある)。
1024
_conn_req_min
(tcp_conn_req_min)
接続確立時の接続完了キュー最小サイズ
上記の listen(3SOCKET) で設定できる最小値を制限する場合に使用する。
1

再送関係

パラメータ 意味 既定値
_rexmit_interval_initial
(tcp_rexmit_interval_initial)
初期再送タイムアウト値
ACK パケットの応答が無い場合に、再送を行うまでの待ち時間のことを、再送タイムアウト(RTO:Retransmission Time Out)と呼ぶ。RTO の初期値は、パケットが相手まで往復する時間(RTT:Round Trip Time)の「4倍+α」が望ましい。RTO の値は再送を行うたびに2倍に増やされる。再送タイムアウトについては RFC11224.2.3.1 を参照。
1000

(1s)
_rexmit_interval_max
(tcp_rexmit_interval_max)
再送タイムアウト値の最大値
再送間隔は、この最大値に達するまで増加する。
60000

(60s)
_rexmit_interval_min
(tcp_rexmit_interval_min)
再送タイムアウト値の最小値 200
_rexmit_interval_extra
(tcp_rexmit_interval_extra)
再送タイムアウト値に加算する時間 0

タイマ(中断)関連

パラメータ 意味 既定値
_keepalive_interval
(tcp_keepalive_interval)
接続が維持されているか検査する間隔
TCP 接続がアイドル状態になってから、最初にキープアライブプローブが送信されるまでの間隔を設定する。この機構は、setsockopt(3XNET) の SO_KEEPALIVE オプションを設定することで有効になる。相手がプローブに応答しない場合、接続が終了する。TCP_KEEPALIVE_THRESHOLD オプションを使用して、ソケットごとに独自の間隔を持たせることもできる。
7200000

(2h)
_time_wait_interval
(tcp_time_wait_interval)
(tcp_close_wait_interval)
TIME_WAIT で待つ時間
既に CLOSE しているソケットで発生していた遅延パケットが、同じポート番号で新たに通信を開始したソケットで衝突することを防ぐために、CLOSED までに一定の時間を設けて、ポートの再利用を制限している。詳細は、RFC 11224.2.2.13 を参照。
60000

(60s)
_fin_wait_2_flush_interval
(tcp_fin_wait_2_flush_interval)
FIN_WAIT_2 で待つ時間
FIN に対する ACK を受信して、相手からの FIN を待っているアクティブ・クローズ側の状態。FIN を受信して TIME_WAIT へ遷移する。
60000

(60s)
_ip_abort_interval
(tcp_ip_abort_interval)
接続完了後のアボートまでの時間
トータルの再送タイムアウト(RTO)の値。再送時(send?)に相手側のエンドポイントから肯定応答をまったく受け取らないと、接続は閉じられる。
300000

(5m)
_ip_abort_cinterval
(tcp_ip_abort_cinterval)
アクティブ・オープン(クライアント側)のアボートまでの時間
ftp や telnet で、サーバの応答が無い場合にタイムアウトまでの時間を短くするためには、この値を小さく設定する。アボートまでの再送処理を実測すると下記になる(クライアント側の接続要求にサーバ側が応答しないケース)。


経過   間隔(RTO)
  0秒 
     送信
  3秒  +3秒 再送 _rexmit_interval_initial(=1s)
 10秒  +7秒 再送
 24秒 +14秒 再送
 51秒 +27秒 再送
105秒 +54秒 再送
165秒 +60秒 再送 _rexmit_inteval_max(=60s)
225秒 +60秒 中断 _ip_abort_cinterval(=3m)
180000

(3m)
_ip_abort_linterval
(tcp_ip_abort_linterval)
パッシブ・オープン(サーバ側)時のアボートまでの時間
小さい値を設定することで、SYN フラッド攻撃などの影響を軽減できる。
180000

(3m)

フロー・輻輳制御関連

パラメータ 意味 既定値
_deferred_ack_interval
(tcp_deferred_ack_interval)
遅延 ACK を送信するまでの時間
データの受信直後の受信バッファがいっぱいの状態で ACK を返すと、小さな広告ウインドウ(rwnd:Advertizement Window)サイズを返すことになり回線効率が低下する。これを防ぐために、データを受信してもすぐには ACK を返さず、受信バッファに空きができるのを待って ACK を返している。ネットワークリンクが遅く、最大セグメントサイズ(MMS:Maximum Segment Size)が 512 バイトを超えていたり、複数の TCP セグメントを受信するには短すぎる場合に増やす。500 ミリ秒を超える値を設定してはならない。詳細は RFC 11224.2.3.2 を参照。
100
_deferred_acks_max
(tcp_deferred_acks_max)
遅延 ACK を送信するまでの受信セグメント数(単位:MSS)
一定のデータを受信するまで ACK を遅延させる。ACK とデータを同一のセグメントで送信するピギーバックの機会が増える。0 か 1 を設定すると、すべてのセグメントが 1MSS の長さとみなされ、遅延 ACK は送信されない。 通常この値は変更しない。
2
_slow_start_initial
(tcp_slow_start_initial)
輻輳ウィンドウの初期最大サイズ(単位:MSS)
輻輳ウィンドウ(cwnd:Congestion Window)は送信側が持つウインドウ。初期サイズがネットワークの輻輳を招く場合は、この値を減らす。変更は非推奨。輻輳ウィンドウの初期サイズについては、RFC 2414 を参照。
4
_slow_start_after_idle
(tcp_slow_start_after_idle)
アイドル後の輻輳ウィンドウサイズ(単位:MSS)
アイドル(1 RTO の間、セグメントをまったく受信しなかった)後に送信される輻輳ウィンドウのサイズを指定する。変更は非推奨。
4
_cwnd_max
(tcp_cwnd_max)
輻輳ウインドウ最大サイズ
輻輳ウインドウは最初は小さい値からスタートして、ACK パケットを受け取るたびに増加させていく。パケットの不達を検出すると、ウインドウサイズを小さくする。max_buf は _cwnd_max より大きくなければならない。輻輳ウィンドウの詳細は、RFC 11222581 を参照。
1048576
cong_default 輻輳制御アルゴリズムの設定
輻輳ウインドウのサイズをどのように増加/減少させるかを決定するアルゴリズム。輻輳をパケットの破棄で検出するロスベースと、キューイング遅延の増加によって検出する遅延ベースのアルゴリズムがある。

NewReno
Solaris のデフォルトアルゴリズム。 ロスベース。

HighSpeed
高速ネットワークのための最も有名かつシンプルな NewReno の修正。ロスベース。

CUBIC
Linux 2.6 のデフォルトアルゴリズム。輻輳回避フェーズで線形的にウィンドウを増加させる。ロスベース。

Vegas
実際のパケットロスをトリガーせずに輻輳の予測を試みる、遅延ベースのアルゴリズム。

Compound TCP
Windows Vista 以降のデフォルトアルゴリズム。ハイブリッド。
newreno
ttl
(tcp_ipv4_ttl)
(udp_ipv4_ttl)
IPパケットの寿命
ルータを通過できる最大回数(TTL:Time to live)
255
recv_buf
(tcp_recv_hiwat)
(udp_recv_hiwat)
受信バッファ最大サイズ
setsockopt(3XNET) の SO_RCVBUF オプションを使って接続ごとに変更できる。
128000
_recv_hiwat_minmss

(tcp_recv_hiwat_minmss)
受信バッファ最小サイズ(単位:MSS) 8
send_buf
(tcp_xmit_hiwat)
(udp_xmit_hiwat)
送信バッファ最大サイズ
setsockopt(3XNET) の SO_SNDBUF オプションを使って接続ごとに変更できる。
49152
_xmit_lowat
(tcp_xmit_lowat)
(udp_xmit_lowat)
送信バッファ最小サイズ 4096
max_buf
(tcp_max_buf)
(udp_max_buf)
バッファの最大サイズ
送信および受信バッファーサイズの最大値をバイト数で指定する。高速ネットワーク環境では速度に合わせて増やす。ネットワーク帯域を全て使い切るには、帯域遅延積の2倍のサイズが必要。RTT(ms)÷1000×帯域(bps)÷8 で求める。
1048576

ネットワークの輻輳と輻輳制御

パス MTU 関係

パラメータ 意味 既定値


_pathmtu_interval
(ip_ire_pathmtu_interval)
パス MTU 検査間隔
パス最大転送単位(Path Maximum Transmission Unit)検出情報をフラッシュしてから、再び検出開始するまでの間隔をミリ秒単位で指定する。変更は非推奨。詳細は RFC 1191 を参照。
600000

(10m)
_path_mtu_discovery
(ip_path_mtu_discovery)
パス MTU スイッチ (DF ビット)
経路MTU探索のオン/オフを切り替る。0(オフ)にした場合、IPオプションで明示的に要求しない限り、DF(Don't Flagment) ビットを設定しない。
1
_ignore_path_mtu
(tcp_ignore_path_mtu)
パス MTU の無視 (デバッグ・オプション)
IPまたはTCP層で、ICMP エラーメッセージ fragmentation needed を無視する。
0
_mss_def_ipv4
(tcp_mss_def)
MSS の既定値
パス MTU 探索を効果的に動作させるためには、最もよく使用する発信用のインターフェイスのMTUから 20 バイトの IP ヘッダー分と、20 バイトの TCP ヘッダー分を引いた値にする。
536
_mss_max_ipv4
(tcp_mss_max)
MSS の最大値 65495
_mss_min
(tcp_mss_min)
MSS の最小値
NFS 環境では、108 にするとよいらしい。
108
(tcp_zero_win_probesize) ゼロ・ウィンドウ検査セグメント・サイズ

セキュリティ関連

パラメータ 意味 既定値
forwarding
(ip_forwarding)
IP パケット転送
受信したパケットの転送を許可する。
0(無効)
_forward_src_routed
(ip_forward_src_routed)
ソースパケット転送
始点経路制御されているパケットを転送するかを決定する。始点経路制御されている場合、ネットワークルータがパスを定義するのではなく、パケット自体がそのパケットの経由するパスを定義する。
1(有効)
(ip_forward_directed_broadcasts) ブロードキャストパケット転送
ネットワークまたはサブネット宛にブロードキャストパケットを転送するかどうかを決定する。システムがルータとして動作している場合、ブロードキャストトラフィック攻撃に悪用されることがある。
1(有効)
_ignore_redirect
(ip_forward_src_routed)
リダイレクトの無視
新しいルートを定義する ICMP パケットを無視するかどうかを決定する。システムがルータとして動作している場合、攻撃者は複雑な攻撃(man-in-the-middle 攻撃)や、単純な DoS 攻撃の一部として、リダイレクト メッセージを送信し、ルーティングテーブルを変更することがある。通常、適切に設計されたネットワークではリダイレクトは必要ない。
0(無効)
_icmp_err_interval
(ip_icmp_err_interval)
2 つの連続した ICMP エラー応答の間隔
ICMP エラーメッセージを生成する頻度を制御し、DoS 攻撃を回避する。_icmp_err_interval の間に最大で ip_icmp_err_burst のエラーメッセージを生成する。
100

(ms)
_respond_to_echo_broadcast
(ip_respond_to_echo_broadcast)
エコー要求への応答
ICMP ブロードキャストエコー要求(ping)に応答するかを決定する。攻撃者は、すべてのシステムが応答するブロードキャストエコー要求を多数送信して、サブ ネットに対する DoS 攻撃を試みることがある。また、これは、ネットワーク上で使用可能なシステムに関する情報も提供している。
1(有効)
_respond_to_address_mask_broadcast
(ip_respond_to_address_mask_broadcast)
ネットマスク応答
ディスクレスクライアントなどがブート時に送信する、ICMP ネットマスク要求に応答するかどうかを決定する。攻撃者は、ネットワークトポロジやサブネットのブロードキャストアドレスを判別するために、ネットマスク情報を使用することがある。
0(無効)
_respond_to_timestamp
(ip_respond_to_timestamp)
タイムスタンプ応答
リモートシステムの時刻を検出するために使用する ICMP タイムスタンプ要求に応答するかどうかを決定する。攻撃者は時刻情報を使用して、攻撃をスケジュールすることがある。また、時間に基づく ID やシーケンス番号を予測して、サービスをスプーフィングすることもある。
1(有効)
_respond_to_timestamp_broadcast
(ip_respond_to_timestamp_broadcast)
ブロードキャストタイムスタンプ応答
ブロードキャストの対象範囲内のすべてのシステムの時刻を検出するために使用される、ICMP ブロードキャストタイムスタンプ要求に応答するかどうかを決定する。単一のタイムスタンプ要求に応答する場合と同じ理由で危険が伴う。さらに、攻撃者は、多数のブロードキャストタイムスタンプ要求を生成することで、DoS 攻撃を試みることがある。
1(有効)
_send_redirects
(ip_send_redirects)
リダイレクトメッセージの送信
リモートシステムのルーティングテーブルを変更することのできる ICMP リダイレクトメッセージの送信を許可する。ルータとして動作しているシステム上でのみ使用すること。
1(有効)
hostmodel
(ip_strict_dst_multihoming)
宛先限定マルチホーミング
到達しなかったインターフェイスから送信されたパケットを廃棄する。この設定は、攻撃者がルータとして動作していない(ip_forwarding が無効)複数のインターフェイスを持つマシンを介してパケットを通過させてしまうのを防ぐ。
weak
_rev_src_routes
(tcp_rev_src_routes)
IP ソースルーティングの回避
着信接続に対して IP ソースルーティングオプションを逆方向に使用しない。
0(無効)
(ip_ire_arp_interval) IP ルーティングテーブルのエントリの有効期間
有効時間を短くすることで、Address Resolution Protocol(ARP:アドレス解決プロトコル)攻撃の影響を軽減することができる。
1200000

(20m)
(arp_cleanup_interval) ARP キャッシュエントリの保持時間
保持時間を短くすることで、ARP 攻撃の影響を軽減することができる。
300000

(5m)

Cisco BTS 10200 Softswitch システム セキュリティ
情報処理推進機構:情報セキュリティ:TCP/IPに係る既知の脆弱性に関する調査報告書

その他のチューニング・パラメータ

パラメータ 意味 既定値
_ip_notify_cinterval
(tcp_ip_notify_cinterval)
アクティブ・オープン時にルートを決めるまでの時間
新たな経路を見つけるように IP に通知後、アクティブオープンを実行している際のタイムアウト値。
10000

(10s)
_ip_notify_interval
(tcp_ip_notify_interval)
接続確立時にルートを決めるまでの時間
新たな経路を見つけるように IP に通知後、ESTABLISHED 状態でのタイムアウト値。
10000

(10s)
smallest_anon_port
(tcp_smallest_anon_port)
(udp_smallest_anon_port)
短命ポート番号最小値 32768
largest_anon_port
(tcp_largest_anon_port)
(udp_largest_anon_port)
短命ポート番号最大値 65535
smallest_nonpriv_port
(tcp_smallest_nonpriv_port)
(udp_smallest_nonpriv_port)
非特権ポート最小値 1024

上記以外のパラメータ

# ndd -get /dev/tcp \?
tcp_conn_grace_period          (read and write)
tcp_debug                      (read and write)
tcp_ipv4_ttl                   (read and write)
tcp_maxpsz_multiplier          (read and write)
tcp_naglim_def                 (read and write)
tcp_snd_lowat_fraction         (read and write)
tcp_dupack_fast_retransmit     (read and write)
tcp_recv_hiwat                 (read and write)
tcp_strong_iss                 (read and write)
tcp_rtt_updates                (read and write)
tcp_wscale_always              (read and write)
tcp_tstamp_always              (read and write)
tcp_tstamp_if_wscale           (read and write)
tcp_sack_permitted             (read and write)
tcp_ipv6_hoplimit              (read and write)
tcp_local_dack_interval        (read and write)
tcp_local_dacks_max            (read and write)
tcp_ecn_permitted              (read and write)
tcp_rst_sent_rate_enabled      (read and write)
tcp_rst_sent_rate              (read and write)
tcp_push_timer_interval        (read and write)
tcp_use_smss_as_mss_opt        (read and write)
tcp_keepalive_abort_interval   (read and write)
tcp_wroff_xtra                 (read and write)
tcp_reass_timeout              (read and write)
tcp_extra_priv_ports_add       (write only)
tcp_extra_priv_ports_del       (write only)
tcp_extra_priv_ports           (read only)
tcp_1948_phrase                (write only)
tcp_listener_limit_conf        (read only)
tcp_listener_limit_conf_add    (write only)
tcp_listener_limit_conf_del    (write only)
tcp_local_slow_start_initial   (read and write)

# ndd -get /dev/udp \?
udp_wroff_extra                (read and write)
udp_ipv6_hoplimit              (read and write)
udp_do_checksum                (read and write)
udp_pmtu_discovery             (read and write)
udp_sendto_ignerr              (read and write)
udp_extra_priv_ports_add       (write only)
udp_extra_priv_ports_del       (write only)
udp_extra_priv_ports           (read only)

# ndd -get /dev/ip \?
ip_respond_to_echo_multicast   (read and write)
ip_mrtdebug                    (read and write)
ip_ire_reclaim_fraction        (read and write)
ip_nce_reclaim_fraction        (read and write)
ip_dce_reclaim_fraction        (read and write)
ip_def_ttl                     (read and write)
ip_wroff_extra                 (read and write)
ip_icmp_return_data_bytes      (read and write)
ip_pmtu_min                    (read and write)
ip_ignore_redirect             (read and write)
ip_arp_icmp_error              (read and write)
ip_broadcast_ttl               (read and write)
ip_icmp_err_burst              (read and write)
ip_reass_queue_bytes           (read and write)
ip_addrs_per_if                (read and write)
ipsec_override_persocket_policy (read and write)
icmp_accept_clear_messages     (read and write)
igmp_accept_clear_messages     (read and write)
ip_ndp_delay_first_probe_time  (read and write)
ip_ndp_max_unicast_solicit     (read and write)
ip6_def_hops                   (read and write)
ip6_icmp_return_data_bytes     (read and write)
ip6_forward_src_routed         (read and write)
ip6_respond_to_echo_multicast  (read and write)
ip6_send_redirects             (read and write)
ip6_ignore_redirect            (read and write)
ip6_strict_dst_multihoming     (read and write)
ip_src_check                   (read and write)
ipsec_policy_log_interval      (read and write)
pim_accept_clear_messages      (read and write)
ip_ndp_unsolicit_interval      (read and write)
ip_ndp_unsolicit_count         (read and write)
ip6_ignore_home_address_opt    (read and write)
ip_policy_mask                 (read and write)
ip_ecmp_behavior               (read and write)
ip_multirt_ttl                 (read and write)
ip_ire_badcnt_lifetime         (read and write)
ip_max_temp_idle               (read and write)
ip_max_temp_defend             (read and write)
ip_max_defend                  (read and write)
ip_defend_interval             (read and write)
ip_dup_recovery                (read and write)
ip_restrict_interzone_loopback (read and write)
ip_lso_outbound                (read and write)
igmp_max_version               (read and write)
mld_max_version                (read and write)
ip_reasm_timeout               (read and write)
ip6_reasm_timeout              (read and write)
ip_cgtp_filter                 (read and write)
arp_probe_delay                (read and write)
arp_fastprobe_delay            (read and write)
arp_probe_interval             (read and write)
arp_fastprobe_interval         (read and write)
arp_probe_count                (read and write)
arp_fastprobe_count            (read and write)
ipv4_dad_announce_interval     (read and write)
ipv6_dad_announce_interval     (read and write)
arp_defend_interval            (read and write)
arp_defend_rate                (read and write)
ndp_defend_interval            (read and write)
ndp_defend_rate                (read and write)
arp_defend_period              (read and write)
ndp_defend_period              (read and write)
ipv4_icmp_return_pmtu          (read and write)
ipv6_icmp_return_pmtu          (read and write)
ip_arp_publish_count           (read and write)
ip_arp_publish_interval        (read and write)
ip_strict_src_multihoming      (read and write)
ip6_strict_src_multihoming     (read and write)
ip_debug                       (read and write)

# ndd -get /dev/icmp \?
icmp_wroff_extra               (read and write)
icmp_ipv4_ttl                  (read and write)
icmp_ipv6_hoplimit             (read and write)
icmp_bsd_compat                (read and write)
icmp_xmit_hiwat                (read and write)
icmp_xmit_lowat                (read and write)
icmp_recv_hiwat                (read and write)
icmp_max_buf                   (read and write)
icmp_pmtu_discovery            (read and write)
icmp_sendto_ignerr             (read and write)

0 件のコメント:

コメントを投稿