地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Linux】iptablesでのコネクション確立要求を破棄

iptablesでのコネクション確立要求を破棄

iptablesを起動させておいて下記コマンドを実行

$ iptables -A INPUT -p tcp -d 127.0.0.1 --dport 12345 -j DROP

# firewalldを使うなら以下のような感じ(未検証)
$ firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -p tcp --dport 11111 -j DROP

telnetなりでportへ接続を試みると繋ごうとしてosの設定値であるtimeoutまでリトライを繰り返す

$ telnet 127.0.0.1 12345
Trying 127.0.0.1...

影響するパラメータ

net.ipv4.tcp_syn_retries = 3 # tcpのSYNを送信するリトライ回数
net.ipv4.tcp_synack_retries = 5 
net.ipv4.tcp_retries1 = 3 # TCP 接続要求に対する応答の再送を試みる回数
net.ipv4.tcp_retries2 = 15 # TCP パケットの再送を試みる回数

ブラウザでタイムアウトが発生するケースのうち主な原因としてはブラウザのsyn要求についてサーバ側及びにその前段のFWによるsynパケットのdropが考えられる。

TCP SYNの再送間隔

再送間隔時間はLinuxでは下記で定義されている

github.com

現在のLinuxでは1, 2, 4秒で再送する(変更したければカーネルのリビルドが必要)