PR

【nginx】xmlrpc.phpを無効化してセキュリティリスクを減らす【KUSANAGI9】

 

前回やったこと

前回、WordPressのプラグイン User Login History について詳しくまとめましたが、その記事を書いたあと5時間程度経つと、19ページにも渡ってログイン試行の履歴が残されていました。

びっしりですね……
過去の記事でセキュリティ設定やfirewalldでのブラックリスト、WordPress管理画面のアクセス制限等、対策は取っているにも関わらず、このアクセス試行数です。
拙い個人のブログをハッキングしても何の得にもならんだろうとは思いますが、1日で何百ものログイン試行があるのはさすがに気持ちが悪いので対策することにしました。

 

WPSCANをインストールしてチェックしてみたところ、「xmlrpcが有効になっている」と怒られました。

 

XML-RPCとは何かを検索してみました。

XML-RPCとは、遠隔手続き呼出し (RPC) プロトコルの一種であり、エンコード(符号化)にXMLを採用し、転送機構にHTTPを採用している。非常に単純なプロトコルで、少数のデータ型やコマンドだけを定義しているだけであり、その仕様は2枚の紙にまとめられる。これは多くのRPCシステムが膨大な量の規格を規定し、実装に多量のプログラミングを要することに比べると、際立った特徴と言える。

1998年、ユーザーランド・ソフトウェアがマイクロソフトと共同で開発した。その後、これに新たな機能を追加したものがSOAPへと発展した。しかし、SOAP よりも単純で扱いやすいXML-RPCを好む人もいる。

類似の RPCプロトコルとして JSON-RPC がある。

ウィキペディア XML-RPC

 

XML-RPCを無効化する理由

どうしてXML-RPCを無効にしなくてはならないのか?

DDoS攻撃やプルートフォースアタックの対象になるから!

 

XML-RPCの用途はリモート投稿などですが、XML-RPCを利用することで次のことが可能になるとも書いてありました。

  • pingback:誰かがあなたの投稿を引用したときに、元の投稿にpingを送り返す機能
  • ブルートフォース:総当たり攻撃

 

詳しくはこちらに書かれています。

WordPressのxmlrpc.php徹底解説(無効化すべきセキュリティ上の理由とその方法)
なぜWordPressには未だにxmlrpc.phpファイルが同梱されているのでしょう。セキュリティを鑑みると、無効化したほうが良いのでしょうか。xmlrpc.phpについて詳しく解説した本記事をお読みください。

 

また、XML-RPCは無効化するべきだという情報もいくつか散見されましたが、特に強調したいのがこちらになります。

現在では、REST APIがXML-RPCに取って代わったため、サイトのxmlrpc.phpは無効にするのがいいでしょう。

(引用:kinsta「WordPressのxmlrpc.php詳細ガイド(xmlrpc.phpとは、セキュリティリスク、無効にする方法

有効にしておく必要はありませんね。

 

XML-RPCを無効化する方法

Nginxの設定ファイルに追記する

無効化するだけなら簡単です

 

以下のファイルを開きます。

 

次の記述をserverディレクティブ内に追記します。

 

保存したらnginxをリスタートさせます。

 

ブラウザからアクセスしてXML-RPCが無効になったかを確認します。
403が返ってくればOKです。

 

IPアドレス制限を設定する

先ほどXML-RPCへのアクセスを遮断しましたが、念には念を入れる意味でIPアドレス制限を設定します。
アクセス制限国別のIPアドレスをまとめているhttp://nami.jp/ipv4bycc/サイトさんからcidr.txt.gzをダウンロードして、/etc/opt/kusanagi/nginx/conf.d/ip_deny_list.txtを読み込んでIPアドレス制限を実現する方法です。

 

/etc/opt/kusanagi/nginx/プロファイル名.confを開き、geoディレクティブを使用してアクセスフィルターを設定します。

 

次にsereverディレクティブに次のコードを記述します。

 

過度アクセスへの対策

1秒あたり数十~数百ものリクエストしてくる攻撃者には、limit_reqでリクエスト制限を設定します。

以下を定義とします。
① limit_req_zoneにて「攻撃者の同IPからアクセスが秒間1回以上の制限する」定義をする。
② limit_reqで秒間5回までのリクエストを受け付ける。

 

/etc/opt/kusanagi/nginx/nginx.confを開き、httpディレクティブ内に次のコードを追記します。

 

/etc/opt/kusanagi/nginx/conf.d/【プロファイル名】.confを開き、serverディレクティブ内に次のコードを追記します。

 

保存したらnginxをリスタートさせます。

 

今回は以上となります。
お疲れ様でした。

コメント

テキストのコピーはできません。
タイトルとURLをコピーしました