#ベーシック認証
AuthType Basic
#ベーシック認証パスワードファイル位置指定
AuthUserFile /************/wp-admin/.htpasswd
#アクセス許可する権限ユニット 用途にあっていればよいのですが詳細指定が不明かと
AuthGroupFile /dev/null
#表示ボックスタイトル
AuthName "Please enter your ID and password"
#二つ上の許可ユニットからの対応宣言ですが バリデートされたユーザーなら(ログインが通ったら)だれでもログイン可能
Require valid-user
#特定のファイルに対して
<FilesMatch "(admin-ajax.php)$">
#ベーシック認証かIPアドレス制限のどちらかで制限
Satisfy Any
#許可を優先しその後不可を執行
Order allow,deny
#全員アクセス可能
Allow from all
#不可 なし?
Deny from none
</FilesMatch>
#スコープを対象ファイルから全体にもどして
#ベーシック認証かIPアドレス制限のどちらかで制限
Satisfy Any
#執行順序 こちらは一般的かと思います(排除してから、許可を記載)
Order deny,allow
#全排除
Deny from all
#許可IP
Allow from ***.***.***.**** #許可するIPアドレス
#そしてまた上記と同じ内容
<FilesMatch "(admin-ajax.php)$">
Satisfy Any
Order allow,deny
Allow from all
Deny from none
</FilesMatch>
上記のような条件だとおもうのですがいかがでしょうか。
またご提示いただきました内容については以下のようですがいかがでしょうか。
# Stop spam attack logins and comments
#リダイレクタへの指定
<IfModule mod_rewrite.c>
#転送式 開始
RewriteEngine On
#POSTアクション受信の場合
RewriteCond %{REQUEST_METHOD} POST
#コメント投稿とログインの場合
RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login)\.php*
#送信元(直前のページ)がどこであるか
RewriteCond %{HTTP_REFERER} !.*example.com.* [OR]
#ユーザーエージェント(送信ソフトウエアの固有情報:各ソフトにより任意)
#なければ(ブラウザではない可能性、プログラムである可能性が大きいので)
RewriteCond %{HTTP_USER_AGENT} ^$
#転送
RewriteRule (.*) http://%{REMOTE_ADDR}/$1 [R=301,L]
</ifModule>
書き方として、拒否ありき、全拒否からのアクセス許可が望ましいと思いますが
拒否先が特定で許可対象のほうが多いのならば、拒否する旨をなによりも先に書くのがよいと思うのですがいかがでしょうか。
オーダー・ディナイでまずディナイフロム拒否IPを指定して、アローオールで希望の動作に至りませんでしょうか。
編集(追記):
あとすいません。IPひとつなら全拒否で許可1件のほうがいいですね。
それと、Wordpress案件なので、プラグインでセキュリティについて複数回ログイン施行で停止措置にするものなどの導入はいかがでしょうか。
-
この返信は6年、 6ヶ月前に
msioが編集しました。理由: 記載事項に抜けがありましたもので追記いたしました。
msio 様
ご回答ありがとうございます。
想定的には
・IP(固定IP)を1つ許可
・違った場合はパスワード(ベーシック認証)
・その他(特にボットなど)すべて通過したくない
・Limit Login Attemptsで失敗3回でロックしています。
・マルチサイトのメインページ
頂きました上記の内容、試させて頂きます。
ありがとうございます。
msio 様
先ほどはありがとうございました。
現在のところ、正常稼働しているようにみえるのですが、下記の記述で大丈夫そうでしょうか?
お手数かけまして申し訳ございません。
しばらく、様子を見てみたいと思います。
AuthType Basic
AuthUserFile /**********/wp-admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
Require valid-user
#スコープを対象ファイルから全体にもどして
#ベーシック認証かIPアドレス制限のどちらかで制限
Satisfy Any
#執行順序 こちらは一般的かと思います(排除してから、許可を記載)
Order deny,allow
#全排除
Deny from all
#許可IP
Allow from ***.***.***.*** #許可するIPアドレス
#そしてまた上記と同じ内容
<FilesMatch "(admin-ajax.php)$">
Satisfy Any
Order allow,deny
Allow from all
Deny from none
</FilesMatch>
# Stop spam attack logins and comments
#リダイレクタへの指定
<IfModule mod_rewrite.c>
#転送式 開始
RewriteEngine On
#POSTアクション受信の場合
RewriteCond %{REQUEST_METHOD} POST
#コメント投稿とログインの場合
RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login)\.php*
#送信元(直前のページ)がどこであるか
RewriteCond %{HTTP_REFERER} !.*hoge.co.jp.* [OR]
#ユーザーエージェント(送信ソフトウエアの固有情報:各ソフトにより任意)
#なければ(ブラウザではない可能性、プログラムである可能性が大きいので)
RewriteCond %{HTTP_USER_AGENT} ^$
#転送
RewriteRule (.*) http://%{REMOTE_ADDR}/$1 [R=301,L]
</ifModule>
ご存知だとおもいますがブルートフォースアタックとはやたらめったらログインを仕掛けて
当たればラッキーという攻撃方法です。
ベーシック認証が回数試せるようであればベーシック認証にも攻撃が可能なわけで
回数制限でのアクセス制御とセキュリティ確保であればやはりプラグインで、とは思います。
承認を2段階にしているという意味ではワードプレスログインの安全性は幾許か向上すると思いますが
「ブルートフォースアタック」対策にはあまり効果的ではない気がします。
アクセス数が特定のファイルやフォルダに対してとても多い、無縁なIPについて
重ねて、ディナイかけるだけで十分で、それ以上はあまり効果が期待できないのではないか、と思います。
#ベーシック認証
AuthType Basic
AuthUserFile /**********/wp-admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
Require valid-user
#ベーシック認証かIPアドレス制限のどちらかで制限
Satisfy Any
#執行順序 こちらは一般的かと思います(排除してから、許可を記載)
Order deny,allow
#全排除
Deny from all
#許可IP
Allow from ***.***.***.*** #許可するIPアドレス
#---------- ここまでで十分な気がします ----------
#IPまたはBasic認証を設定しているのでいらないのではと思うのですが/★追記
#ベーシック認証にいずれ承認されると通ってしまう/★追記
<FilesMatch "(admin-ajax.php)$">
Satisfy Any
Order allow,deny
Allow from all
Deny from none
</FilesMatch>
#指定のページからログインフォームを稼働させていなければはじくという設定ですが/★追記
#そもそもログインページを上記2条件うち一つ(実質的にはベーシック認証)クリアしなければ表示しないので不要なのでは/★追記
#ログインページの表示がなされた時点でベーシック認証は突破されていますが/★追記
#ログインフォームの稼働前提条件としてはあっても無駄ではないと思います/★追記
#ただプラグインで回数制限がかかっていればブルートフォースにはすでに効力を発揮しているはずなので/★追記
#必要ではないかなと思います。/★追記
# Stop spam attack logins and comments
#リダイレクタへの指定
<IfModule mod_rewrite.c>
#転送式 開始
RewriteEngine On
#POSTアクション受信の場合
RewriteCond %{REQUEST_METHOD} POST
#コメント投稿とログインの場合
RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login)\.php*
#送信元(直前のページ)がどこであるか
RewriteCond %{HTTP_REFERER} !.*hoge.co.jp.* [OR]
#ユーザーエージェント(送信ソフトウエアの固有情報:各ソフトにより任意)
#なければ(ブラウザではない可能性、プログラムである可能性が大きいので)
RewriteCond %{HTTP_USER_AGENT} ^$
#転送
RewriteRule (.*) http://%{REMOTE_ADDR}/$1 [R=301,L]
</ifModule>
msio様
ありがとうございます。
そうですよね、根本的な解決になってませんね。
指定IPのみの運用に切り替える(外部IPから接続しない)方向で
進めてみたいと思います。
いろいろとありがとうございました。