Apache cron

日本国内のIPアドレス一覧を取得して海外からのアクセスを遮断する.htaccessをcronを使って作成する方法

2018/03/06

海外からの意味不明なコメントやトラックバックなど、迷惑なアクセスを全て遮断してみようということで、日本に割り当てられているIPアドレスを取得し、その情報を元に『cron』機能で.htaccessを作成してみたいと思います。

ただし、googleなどの海外IPのクローラーまでも遮断するのは運営上よろしくないので、ちょっとだけ工夫します。

日本に割り当てられているIPの一覧は下記サイトのものを利用させて頂きます。

前提として

  • .htaccess及びcronが使えるサーバー環境
  • SSHを利用して、ターミナルからサーバにアクセスできる事

を満たしている事とします。

.htaccessの作り方

get_ip.phpを作成

まずは日本国内IPを取得し、成形するルーチンをphpで作成します。

上記コードは、文字コード:UTF8、改行コード:LF で保存してください。

jpip_get.sh(シェル)を作成

次に cron で作動させるシェルスクリプトを作成。

上記コードも、文字コード:UTF8、改行コード:LF で保存してください。
中にあるphpのパスは、SSHで接続し、ターミナルから以下のコマンドで調査してください。

アップロード

設置ディレクトリ(/var/www/develop/public_html/htaccesscron/)にFTPでアップロードします。
ダミーの .htaccess 及び .htaccess.old も作成し、アップロードしてください。
アップした実行ファイル2つのパーミッションを755に変更します。

テスト

cronで動かす前に、きちんとhtaccessが作成されるかをテストします。

としても、

-bash: jpip_get.sh: command not found

と、エラーになります。
シェルスクリプトはドキュメントルートのフルパスを書かないと動かないので、正しくは、

となります。
正常動作すると、アップロードしていたダミーの .htaccess が生まれ変わるのが確認出来ると思います。
失敗する場合は、ファイルのパーミッション、phpへのパス、設置場所のパスなどを確認してください。

『cron』について

「cronを使って自動作成」云々と上の方にも書いていますが、そもそも cron とは何なのかを簡潔に書きますと、コマンドやシェルスクリプトを「指定した日時に自動実行する」機能のことです。

データベースのバックアップを作成したり、逆に古いログを削除したりする場合などに使用されます。
cron を使用するためには、「crond」というデーモンが起動している必要がありますが、通常は、OSのインストール時にサービスが自動起動するように設定されています。

ちなみに読み方は「クローン」とか「クーロン」となります。

cronの作成

SSH接続し、crontabを作成します。

# crontab -e

上記コマンドで vi が起動するので編集します。
1行に、分、時、日、月、曜日(0=Sun,1=Mon,2=Tue,3=Wen,4=Thu,5=Fri,6=Sat)、
実行するコマンドを入力します。ワイルドカード『*』は、全てを意味します。

編集開始:[i]キー

保存:[Escキー]:wq[Enterキー]

確認

上記一文が追加されています。

日時の設定方法

Cron の日時設定には入力の規則がありますので、以下の内容を参考に必要な設定を行ってください。

フィールド 設定値 / 説明
『0~59』で指定。
ワイルドカード『*』を指定すると毎分となります。
『0~23』で指定。
ワイルドカード『*』を指定すると毎時となります。
『1~31』で指定します。ワイルドカード『*』を指定すると毎日となります。
『1~12』または『jan~dec』で指定。
ワイルドカード『*』を指定すると毎月となります。
曜日 『0~7』(0,7は日曜日)または『sun~sat』で指定します。
ワイルドカード『*』を指定すると毎日となります。
コマンド 実行したいコマンドやシェルを指定します。
設定内容 入力例
曜日
毎時 0 分に実行する 0 * * * *
2 時間おきに実行する * */2 * * *
0 時と12 時に実行する * 0,12 * * *
0 時から 12 時までの毎時 15 分に実行する 15 0-12 * * *
毎月 1 日の 0 時 0 分に実行する 0 0 1 * *
毎月 1 日または毎週金曜日の 23 時 59 分に実行する 59 23 1 * 5

-Apache, cron
-, , , , , ,