現在のサイトは簡単にDOS化されています。 ApacheからABテストを実行でき、約5〜10分間消えます。私たちは他の人がサイトをDOSで使用することで問題を抱えています-それまで8時間シャットダウンしなければならなかったところまで(サーバーホストによって推奨されます)。
サーバーはRackspaceによってホストされています。彼らはそれを8時間シャットダウンすることを推奨しました。
DNSのクラウドフレアをセットアップしましたが、58,000のリクエストを送信したABテストの後で、サイトは(もともとではなく)再びオフラインになりました。
Rackspaceはこれ以上の提案を提供しておらず、当面は何をすべきかを理解する必要があります。サーバーホストの切り替えは現時点ではオプションではありません(リードデベロッパーは新しいポジションに1週間で出発します)。
この特定の攻撃により、mysqlデータベースにsleep
コマンドを使用して多くの接続が作成されました。
DOS攻撃を再度防御する方法についての提案や推奨事項はありますか?
仮想ホストのRAM=を増やすと、まったく役に立ちますか?
攻撃がsleep
コマンドを使用して多数のデータベース接続を作成している場合、DoSは直接的な問題ではなく、問題の結果であると思われます。つまり、データベースが非常にsleep
ingしているということです。
ここには2つの可能性があると思います。
是正?
まず、上記のどれが当てはまるかを考えます。簡単なはずですが、プログラマーにsleep
コマンドを意図的にデータベースに送信するかどうかを尋ねることから始めます。また、関連するsleep
文字列をコードベースで検索するのに十分簡単なはずです。
それが最初のシナリオの場合-コードをリファクタリングして問題のコマンドを削除します。
それ以外の場合-そしておそらくあなたはとにかくこれを行うべきです-SQLインジェクションについて少し読んで、すべてのプログラマーに同じようにしてもらいます。欠陥を見つけて修正してから、集中的な侵入テストを実行します。 (経験豊富なセキュリティ専門家をここで手に入れることができます)。次に、このような重大なセキュリティバグの根本的な原因を検討し、トレーニング、コードレビュー、SDL、ペンテストなどを使用して、セキュリティの全体的なレベルの強化を開始します(セキュリティの専門家もこれに役立ちます)。
DOS/DDOSを防ぐためにできることがいくつかあります。
まず、autobanファイアウォールの使用をお勧めします。 Fail2Ban をしばらく使用しています。 SSH、FTP、BINDなどへのDDOS/DOS攻撃に関する私の問題のほとんどは解決されました。 fail2banが実際に行うことは、ログファイルをスキャンすることであり、正規表現パターンがX回一致すると、ユーザーを禁止します。もう少し作業することで、ほぼすべてのタイプのログファイルを読み取ることができます。
第二に、DDOS/DOS攻撃を防ぐために、Apacheにいくつかのmodがありました。それらの1つは mod_evasive でした。私はしばらくそれを使用しましたが、fail2banは(今のところ)一番うまくいきました。
別の可能性は、Nginxをフロントエンドとして使用して、Apacheサーバーへの接続要求をプロキシ転送することです。次に、NginxのHttpLimitZoneModule
( info )を必要な数に設定します。これにより、単一のIPからの最大着信接続が減少しますが、DDOSが妨げられることはありません。
最後に、未使用のポートをすべて閉じます。ポート21、53、80、443などとして公開する必要があるポートのみを残します。これにより、攻撃者が標的とする可能性が制限されます。
編集:
icmpを制限するいくつかのiptablesルールを設定して、pingフラッドが発生しないことを確認してください。これは、pingフラッドがどのように機能するかを説明する link です。最初に写真を見てみてください。そうすれば、テキストがわかりやすくなります。
iptablesを使用している場合、このコマンドはping/icmpフラッドを防ぐのに役立ちます:
iptables -A INPUT -p icmp -m limit --limit 6/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
最初のものは、icmpリクエストを1秒あたり最大6リクエストに制限します。あとがきその人はそれ以上の返事をもらえません。これにより、循環しているボットが排除されます。
for(i=0; i<1000000; i++){
some evil code that will bring your server down
either by pinging or just connecting to random ports.
};
これ 記事は素人にとって良いスタートです。最終的には、セキュリティの専門家を雇うことをお勧めします。
それが選択肢ではない場合(エキスパートになることが期待される場合)、効果的なDOS緩和戦略には次のものが含まれることを読みました。
あなたが誰であるか、または誰のために働いているかを知らなければ、あなたが同じ当事者によって一貫して再攻撃されているかどうかを推測することは困難です。あなたが大企業の場合、おそらく複数の(異質な)グループがあなたをシャットダウンしようとしています。あなたが小さければ、それはおそらくあなたを攻撃している同じエンティティ/グループです。その場合は、違反したIPをこの方法で数週間積極的にブロックすることを約束すると、時間の経過とともに攻撃者を粉砕して阻止する可能性があります。
セキュリティの大きな点は、資産の取得コストを資産自体の価値よりも高くすることです。
そして、あなたが大企業なら、私よりもリーグを知っている真の専門家/コンサルタントを雇う余裕があります;-)
DoS攻撃の仕組みに関する詳細については、この質問を参照してください。
この特定のケースでは、データベースが応答しなくなるまで強制的に待機サイクル(sleep
)を許可する関数を攻撃が使用しています。
必要な場合を除き、sleep
コマンドを完全に禁止することで解決できる場合があります。より良い解決策は、ストアドプロシージャを除くデータベースへのすべての接続を防ぎ、アプリケーションの実行に必要なコマンドのみが許可されるようにすることです。これにより、攻撃者がホールを見つけて悪用することがはるかに困難になります。