これ何

コマンドラインからのアクセスや、TorProxyからのアクセスをブロックするもの。
コマンドラインからのアクセスがブロックできれば、ブルートフォースアタックだったり解析だったりしにくくなる(はず)
Googlebotからのアクセスはブロックされないのでクローラーはきちんと来てくれると思う。

SnapCrab_NoName_2016-3-3_21-42-13_No-00ブロックされるとこんな感じになる。
HTTP ステータスコードは 406 Not Acceptable

 

インストール

aaa「プラグインの追加」→キーワード「block-wpscan」で出てきます。

 

設定画面

setting

英語の記述が合ってるのか分からないけどなんとなく通じると思います。

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

SnapCrab_NoName_2016-3-3_22-0-26_No-00

 

 

ベンチマーク

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