これ何
コマンドラインからのアクセスや、Tor、Proxyからのアクセスをブロックするもの。
コマンドラインからのアクセスがブロックできれば、ブルートフォースアタックだったり解析だったりしにくくなる(はず)
Googlebotからのアクセスはブロックされないのでクローラーはきちんと来てくれると思う。
ブロックされるとこんな感じになる。
HTTP ステータスコードは 406 Not Acceptable
インストール
「プラグインの追加」→キーワード「block-wpscan」で出てきます。
設定画面
英語の記述が合ってるのか分からないけどなんとなく通じると思います。
When block the access, What message do you want to display?
アクセスブロックしたときなんてメッセージ流す?
→ そのまんまです。もしかしたらHTML埋め込めるかも
Block Proxy ON / OFF
→ そのまんまです。負荷はそんなにないです。
ただProxyサーバーの設定によっては判別できないのでProxyでもアクセスできちゃう
Block Tor ON / OFF
→ そのまんまです。負荷は僕のサーバーに依存します。
自分で建てたAPIで判別してるので、人が増えたらもしかしたら重くなるかも
Torのnodeが出来たてでnode listに載ってないとアクセスできちゃうので100%ではない。
90%ぐらいの確率で判別はできる。
Exception IP
例外に追加するIPアドレス
→ 複数指定可能。例)1.1.1.1,2.2.2.2,3.3.3.3
テストとかに使えると思う。後はZabbixとかで監視に必要とか。
Command Line
→ wget https://luispc.com/ --2016-03-03 21:54:52-- https://luispc.com/ luispc.com (luispc.com) をDNSに問いあわせています... 153.122.112.200 luispc.com (luispc.com)|153.122.112.200|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 406 Not Acceptable 2016-03-03 21:54:53 エラー 406: Not Acceptable。
Proxy
→ curl -x 106.186.24.124:3128 https://luispc.com/ Fuck you!
Tor
ベンチマーク
Proxy ON / Tor ON
Server Software: nginx/1.9.11 Server Hostname: luispc.com Server Port: 443 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128 Document Path: / Document Length: 74639 bytes Concurrency Level: 100 Time taken for tests: 214.698 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 75180000 bytes HTML transferred: 74639000 bytes Requests per second: 4.66 [#/sec] (mean) Time per request: 21469.803 [ms] (mean) Time per request: 214.698 [ms] (mean, across all concurrent requests) Transfer rate: 341.96 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 19 225 577.3 52 3342 Processing: 13846 20734 1731.0 20781 28410 Waiting: 13833 20645 1725.5 20706 28388 Total: 13866 20960 1874.4 20918 28431
Proxy OFF / Tor OFF
Server Software: nginx/1.9.11 Server Hostname: luispc.com Server Port: 443 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128 Document Path: / Document Length: 74639 bytes Concurrency Level: 100 Time taken for tests: 207.722 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 75180000 bytes HTML transferred: 74639000 bytes Requests per second: 4.81 [#/sec] (mean) Time per request: 20772.158 [ms] (mean) Time per request: 207.722 [ms] (mean, across all concurrent requests) Transfer rate: 353.44 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 19 191 398.3 57 2413 Processing: 13453 20244 1341.6 20313 25824 Waiting: 13444 20167 1343.4 20225 25551 Total: 13497 20435 1419.6 20458 25863
プラグイン無効
Server Software: nginx/1.9.11 Server Hostname: luispc.com Server Port: 443 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128 Document Path: / Document Length: 74795 bytes Concurrency Level: 100 Time taken for tests: 199.701 seconds Complete requests: 1000 Failed requests: 1 (Connect: 0, Receive: 0, Length: 1, Exceptions: 0) Non-2xx responses: 1 Total transferred: 75261004 bytes HTML transferred: 74720388 bytes Requests per second: 5.01 [#/sec] (mean) Time per request: 19970.085 [ms] (mean) Time per request: 199.701 [ms] (mean, across all concurrent requests) Transfer rate: 368.04 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 18 182 446.0 47 2720 Processing: 12115 19404 2071.4 19338 60009 Waiting: 12105 19373 2072.4 19309 60009 Total: 12192 19586 2194.4 19399 60175
ON / ON
Time taken for tests: 214.698 seconds
OFF / OFF
Time taken for tests: 207.722 seconds
プラグイン無効
Time taken for tests: 199.701 seconds
1000リクエストを投げて差はON/ON と 無効化だと15秒の差があります。
雑書
WordPressのプラグインを作るのは2つめだったりして余裕やろと思ってたんだけど
POSTから取得するときとか、外部に文字列を表示するときはサニタイズしろ!バリデーションしろ!エスケープしろ!とうるさかった。ただ単に僕の知識不足で htmlspecialchars すればいいだけど思ってた。
あと、Wordpressの独自のエスケープ関数があったり中々楽しかった。
英文のミスだったり、正規のアクセスなのにブロックされるなどの不具合などがあったらぜひ教えて下さい。
Twitter: @lu_iskun
ブログへのコメントでも大丈夫です。
あとForkもお待ちしております。
https://github.com/rluisr/block-wpscan