私は Apache2 を実行している Ubuntu 12.04 マシンを持っており、約 10 個の WordPress ウェブサイトをホストしています。
最近、私はクライアントからの攻撃を受けました。その攻撃は、'xmlrpc.php' という WordPress ファイルに POST リクエストを送信しているようです。
これらの悪意のあるリクエストを送信する IP アドレスをブロックする方法は面倒な手動プロセスであり、何らかの方法でこれを自動化したいと考えています。
サーバーの負荷が高いことに気づいたら、次のアクションを実行します。
すべての仮想ホストアクセスファイルに対してapachetopを実行します。これにより、行われているすべてのリクエストが表示されるので、xmlrpc.phpにリクエストが行われているかどうかを確認できます。
どの IP がサーバーを攻撃しているかを特定したら、攻撃元の IP アドレスごとに次のコマンドを実行します。
sudo iptables -A INPUT -s 94.102.52.95 -j DROP
すべてのIPアドレスがブロックリストに追加されると、サーバーの負荷はすぐに通常のレベルに下がります。
このプロセスを自動化する方法はありますか? xmlrpc.php 内に、リクエストを送信したすべての IP アドレスをブロック リストに追加するコードを記述しようと考えています。これを行う方法について、何かアイデアをお持ちの方はいらっしゃいますか?
前もって感謝します!
答え1
すべての IP をブロックすることがこの問題の解決策だとは思いません。POST アクションを実行している IP は、おそらく世界中の感染またはハッキングされた PC です。すべてをブラックリストに登録しても、IPtables が飽和状態になるだけです。WP サイトがハッキングされている場合は、サイトをオフラインにして、顧客に混乱を解消してすべてのコンポーネントを更新するように通知することをお勧めします。
悪意のあるコードのアップロードを防ぐために、mod_security をインストールすることができます。また、mod_security に特定のページへの POST リクエストをブロックするように指示することもできます。これにより、404 が返されるだけになり、負荷が軽減されます (ハッキングも阻止されます)。
上記の方法でも問題が解決せず、すべての IP をブロックしたい場合 (iptables が膨大になるのを防ぐため、しばらくしてから IP を削除するようにしてください)、access.log を追跡して IP をブロックするスクリプトを作成できます (たとえば、cronjob/sleep を含むシェル スクリプト、またはさらに良い方法として、perl/python の優れたデーモン)。