web-dev-qa-db-ja.com

SYN_SENTを停止するには?

netstatを実行すると、サーバーを再起動した後でも、何百ものこの行が表示されます。サーバーは再送信を開始し、そのIPに多くの接続を引き起こします。

tcp        0      1 server1700.skdedicate:36283 154.45.206.59:https   SYN_SENT
tcp        0      1 server1700.skdedicate:36283 154.45.206.59:https   SYN_SENT
tcp        0      1 server1700.skdedicate:36283 154.45.206.59:https   SYN_SENT
tcp        0      1 server1700.skdedicate:36283 154.45.206.59:https   SYN_SENT
tcp        0      1 server1700.skdedicate:36283 154.45.206.59:https   SYN_SENT

すべてのスクリプトを停止しましたが、引き続き試行し続けます。

これは、IPがSYN_SENTに応答していないことを意味しますが、SYN_SENTを停止するにはどうすればよいですか?またはこれに対する最善の解決策は何ですか?

ありがとう。

14
EGN

この質問は多くの意見を得ているようですが、まだ回答がないので、解決策を探している人のために自分の質問に回答することにしました。

まず最初に、理由を知ることは解決策の半分です。自分自身に対してHTTPプロトコルの動作を使用する、いわゆるSYNフラッディング攻撃の下にあった

つまり、リモートクライアントはSYNを送信してサーバーとの接続を確立しようとし、サーバーはSYN_ACKで応答し(ログにはSYN_SENTが表示されます)、ACKを受信するまで待機します。 xx秒以内にACKが受信されない場合、サーバーはSYN_ACKを再度送信します。最終的には構成されたしきい値に達し、それ以上のSYN要求の受け入れを停止し、サーバーが応答しなくなります。私に起こった症状の1つは、私のWebサイトが何も問題がないように1回応答していたが、次のxx回応答しないことでした。

HTTP Protocol SYN

私にとってうまくいった解決策は、SYN Cookieを有効にし、サーバーにSSHで接続し、お気に入りのエディターを使用して次のファイルを開きました。この例ではviを使用しています

vi /etc/sysctl.conf

そして、これらの行をファイルに追加して、サーバーを再起動します。うまくいけば、これで攻撃が止まります。

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 3

私はCentOSを使用していました。上記のソリューションはすべてのディストリビューションで機能すると思いますが、Linuxディストリビューションで「SYNフラッディング攻撃を停止する方法」を検索しなかった場合に備えて

余談ですが、SYNリクエストを開始するIPをブロックしても、攻撃者がIPを偽装している可能性が高いため、おそらく役に立たないでしょう

45
EGN