以前はスパムコメントとかを防ぐブラックリストというプラグインの機能を使って
スパム送信先をアクセス拒否するようにしていた。ところが、サーバを自宅サーバからレンタルサーバに変えてからはiptablesを使ってのアクセス制御はできなくなった。なので、しばらくNucleusの機能だけでアクセス拒否にしていたのだけれど、しつこくしつこくアクセスしてくるところがあったので
htaccessでアクセス制御してみたのは以前にも書いたとおり。
で、ついでなので、以前のように自動でアクセス拒否できるよう、スクリプトを書いてみた。大した内容でもないけど、メモしておく
こんな感じ。
#!/bin/sh
#IP_BlacklistのブロックIPアドレスの記録場所
blockip_blacklist=/サーバのディレクトリ/nucleus/plugins/blacklist/settings/blockip.pbl
#IPブラックリストから出力されたブロックIPアドレスを書き出すファイルを指定
blockipwritelist=/サーバのディレクトリ/blocklist
#既存で設定している.htaccessを書いておく
htacsform=/サーバのディレクトリ/htform
#.htaccessの場所を指定
htacsfile=/サーバのディレクトリ/.htaccess
#blocklistに拒否IPアドレスに書き出す
grep "." $blockip_blacklist |awk '{ print "deny from " $1 }'>$blocklist
#.htaccessに既存で設定してあるファイルと拒否IPを書いたファイルを書き出す
cat $htform $blocklist >$htacsfile
#.htaccessのパーミッションを変更
chmod 604 $htacsfile
htformで書いておかなければならない内容は次の通り。
order allow,deny
allow from all
で、Windowsでこういうスクリプトを作成してサーバに上げると、何故かエラーを吐き出す場合がある。調べてみると、原因は
BOM らしい。簡単に言うと、「このファイルUnicodeで書かれていまっせ」という印らしい。俺もこれで結構ハマった。解決策はこちら。
コマンドラインでUTF-8テキストのBOMを追加したり削除したりする