2016年5月20日金曜日

【備忘録】nginx における WordPressのJetpackにより WordPress.com 対策

以前、Apacheのケースについては
で説明していました。
nginx についても説明しているところはありますが、まだApacheほど数も多くなく、後から探すのが面倒なので書き出しておきます。

一般的な設定(パスワード保護された WordPressも対応)


location ~* /xmlrpc\.php$ {
  access_log off; log_not_found off;
  satisfy any;
  allow 192.0.64.0/18;
  allow 使用中の端末IPアドレス;
  deny all;

  location ~ \.php$ {
     include /etc/nginx/php-fpm;
  }
}

サイトの構築によっては変わるので、一般的な設定の例示とします。

allow 使用中の端末IPアドレス;


まず最初に、自分の端末のIPアドレスを入れてください。
これは本当に xmlrpc.php へのアクセスをしていて、それがブロックされるかのチェックのためです。自分の今使っている(プロバイダの場合には動的なので変化します)IPアドレスを、「IPアドレスチェック」 とかで検索して調べてみてください。

nginx を reload して xmlrpc.php にアクセスしてみる


サイトURL/xmlrpc.php にアクセスして、
  • XML-RPC server accepts POST requests only.
と出ればアクセスOKです。
そして
# allow 使用中の端末IPアドレス;
として無効化して、nginx を reloadします。

サイトURL/xmlrpc.php にアクセスして、403 Forbidden とアクセス拒否されればOKです。

設定の個別説明


さてその他の設定について説明しておきます。

access_log off; log_not_found off;


アクセスログを出さないようにします。

satisfy any;


パスワード認証 と IPアドレス認証を ORにします。
つまり、下記のIPアドレス(JetPackが利用する)の場合には、たとえ パスワード認証をしていても、IPアドレスが許可されているのでアクセスできるということになります。
もちろん xmlrpc.php のみに適用されます。

allow 192.0.64.0/18;


Automattic 社でどうもこの範囲から WordPress.com 連携(JetPack)するようです。
192.0.64.*** で xmlrpc.php が拒否ログを出していているので

dig -t txt  _spf.automattic.com 

で Automattic が使っている SPFを見ると ipv5:192.0.64.0/18 があるので、確かにそれが範囲の1つだと分かります。まぁ大手なので SPFは設定しているだろうという感じなのです。

*IPアドレス群なんて調べられねーぜぃ
http://www.ip-tracker.org/lookup/whois-lookup.php
を使いましょう。
192.0.64.2 とか範囲内のIPアドレスをいれると、IPアドレス範囲と所有情報がでますよ!

deny all;


最後に全拒否を入れておきます。これでそれより上の許可(allow)だけがアクセス可能になります。

location ~ \.php$ {
     include /etc/nginx/php-fpm;
}

nginx では、location ごとに拡張子に対して何をするのかを設定しなければなりません。
設定していなければ、/etc/nginx/nginx.conf の
    default_type  application/octet-stream;
のMIME設定(他に設定していなければ)が適応されて、PHPファイルがそのままダウンロードされちゃいます! wp-config.php なんてダウンロードされたら悲劇ですよ。
まぁさすがに wp-config.php は別の縛り

location ~* /wp-(config|blog-header)\.php$ {
       access_log off; log_not_found off; return 404;
       deny all;
}

は入れてるでしょうけどネ。

2016年5月20日 @kimipooh




0 件のコメント:

コメントを投稿