Nginxで特定IPアドレスを拒否するnginx

最近スパムコメントが多くなってきました。もちろんAkismetのおかげで直接掲載されることはないのですが、もっと根源から拒否できないか?と調べました。Nginxの場合です。

以下はDebian+dotdebのNginx1.4系でのメモです。

元ネタはNixCraftという海外のサイトです。

ザックリ言うと、拒否したいIPアドレスを列記したファイルを用意して、Nginxで読みこめばいいだけです。元ネタのサイトでは拒否したいIPアドレスファイルを spamhaus というサイトからcronで毎日更新させているのが特徴です。

拒否したいIPアドレス一覧を更新するためのデータを取得するスクリプトを用意し、スクリプト内容をDebian用に変更します。

—————————————

#!/bin/bash
# A Nginx Shell Script To Block Spamhaus Lasso Drop Spam IP Address
# Run this script once a day and drop all spam network IPs (netblock) with http 403 client error.
# The script will get executed every day via /etc/cron.daily (make sure crond
# is running).
# ————————————————————————-
# Copyright (c) 2008 nixCraft project <http://cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# ————————————————————————-
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# ————————————————————————-
# Last updated on Jan/11/2010
# ————————————————————————-
# tmp file
FILE=”/tmp/drop.lasso.txt.$$”

# nginx config file – path to nginx drop conf file
OUT=/etc/nginx/global/drop.lasso.conf

URL=”http://www.spamhaus.org/drop/drop.lasso”
# reload command
NGINX=”/usr/sbin/nginx -s reload”

# remove old file
[[ -f $FILE ]] && /bin/rm -f $FILE

# emply nginx deny file
>$OUT

# get database
/usr/bin/wget –output-document=$FILE “$URL”

# format in nginx deny netblock; format
/bin/egrep -v ‘^;’ $FILE  | awk ‘{ print “deny ” $1″;”}’ >>$OUT

# reload nginx
/bin/sync && ${NGINX}

—————————————

これを/etc/cron.dailyに追加してファイルに実行権限を与えます。

後は /etc/nginx/sites-avalable/default とかに

include global/drop.lasso.conf

と、追加してNginxをリロードすれば完了です。(nginx -tでテストしてくださいね)

追記:

WordPressだと Throws SPAM Away というプラグインてのが非日本語コメントスパム対策で使えるかも知れません。こちらもただ今テスト中です。