Back to Top

漂泊の想いは電網の間に揺蕩う

八千穂高原の白樺とツツジ

nginx:タグアーカイブ

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 というプラグインてのが非日本語コメントスパム対策で使えるかも知れません。こちらもただ今テスト中です。

Nginxでの中間証明書設定

掲載日:  

nginx

以下、自分用のメモです。ようやく自宅サーバーをWheezyにしてWebサーバーもApacheからNginxにして稼働し始めました。

ついでなので昨今Wordpressをターゲットにした攻撃が多いらしいので管理ページをSSL接続にしたいと考えていままでメールの証明書でお世話になっている Startssl でWEBサーバーの証明書も取得してみようと考えました。

Startsslでの作業はほかのサイトを参照してもらうとして、NginxでのSSLの設定です。

/etc/nginx/sites-available/Default なサンプルがあります。

————————–

# HTTPS server
#
server {
listen 443;
server_name localhost;
root html;
index index.html index.htm;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
location / {
try_files $uri $uri/ =404;
}
————————–

あれ? Apacheだと証明書を指定するディレクティブは2つじゃないんだが?
で、色々と調べるとどうやら今のバージョンのNginxには中間証明書を指定するディレクティブはないようです。
実はこのサンプルの状態で設定して起動するとブラウジング環境によってはスンナリ表示されず、証明書の警告が出る場合があるようです。私のスマートフォンのデフォルトブラウザでも出ました。

じゃあどうする?

要はサーバー証明書と中間証明書を1つのファイルにマージして指定すればいいようです、なるほど!!
つまり・・・・
cat サーバー証明書 中間証明書 > マージした証明書

↑ こんなかんじです。
こうするとスマートフォンのブラウザでもスンナリ表示されました。

あとはadmin-sslとかのプラグインを追加して管理ページをSSL接続にできました!

しかし最近スパムコメントが多いです。Akismetで掲載される前に保留はされるんですが、記録される前に撥ねることはできないもんでしょうか? サーバーで海外IPとかを拒否すればいいのかな?

Nginxに変更

掲載日:  

自宅サーバーのWebサーバーをApacheからNginxに変更しました。所詮は趣味の自宅サーバーなのでうまく動作しなくても実害がないのでもそれなら新しいものを触ってみようということです。

仕事用に借りているVPSサーバーはApacheから変更しません。

さてNginxですが、正直Apacheよりどれくらい軽快かは分かりません。なにしろアクセス数の少ないサイトなので有り余るCPUとメモリーパワーなのですからね。

とりあえずは負荷テストサイト Load Impact でテストしてみましたが、結局自己満足かも。幸運にもYahoo!ニユースにでもリンクされてみないと実際のことは不明です。

ご訪問いただいている方はいかかでしょうか? 以前よりクリックした時のレスポンスが若干上がってる気もしますけど。

NginXの感触

掲載日:  

NginX先日から1.4系になったNginXを入れてみようと思い立ちました。かと言って現実にApacheで稼働しているサーバーは使いたくなかったので月額490円のVPSサーバーを新規に契約してお勉強です。

Serverman@VPSです。Debian 32ビット版を指定して契約しました。しかし安くなってますね。490円でメモリー1GB x HDD50GBですよ。(もっともメモリーの1GBは常時って訳では無さそうですが)

この価格ならWEBサーバー入れないでパーソナルクラウドとして使ってもいいんじゃないでしょうか? Google DriveとかSkyDriveとかはデータ保護の面ではたぶん分散システムでしょうけど無料なので価格では有利ですが、反面どうしてもセキュリティ的に怖い気がするのも確かでして、だったらこういった月額500円程度のサーバーもアリかも知れません。

で、納品されたVPSサーバーはApacheが入ってましたのでとりあえず停止させて起動しないように設定。

次に公式サイトからソースをダウンロードして展開しておきまして、コンパイルする際にNginXの標準ではないモジュールも入れたかったので依存パッケージを最初にインストールしました。あ、その前に最低限の開発環境も入れてます。

あとはコンパイルされたものをインストールして簡単に設定すればWEBサーバーとしては問題なく起動しました。(すげえ大雑把な説明)

でもこれだとセキュリティパッチを含めてその都度コンパイルしないといけないわけですね。なのでここまで来て方針転換です。

今入れたソースからのコンパイル版をすべて削除してから、dotdev をリポジトリに追加し、パッケージの公開鍵を入れた後にNginXのパッケージ版を入れました。同様にPHP-fpmやMySQLも追加。

NginXにPHP設定をして、Wordpressを入れてみました。

ん・・・・・記事もプラグインも入ってないとApacheより速いかなんて分かりませんです。サーバーのベンチマーク取るのもメンドーだし。もっと試してみないとですね。まだApacheのmod_rewrite相応な設定もよくわかりませんし。NginXによるリバースプロキシも時間を見てやってみたいです。

しかし趣味とはいえ、せっかくApacheに馴染んできているのに、こうして次から次へと新しい技術が出てくると、楽しい半面おじさんには辛い部分も多々ありますね。頭が追いついていけませんよ~。

nginx 苦戦中

掲載日:  

軽量で高速だと言うWebサーバー nginx だが、震災以来停止させていた自宅サーバー(Debian Squeese)でトライ中。

何も考えずにソースをコンパイルしたけど、やっぱりヒント少なすぎ。混迷は深いよ。

なので一旦削除してDebianのパッケージを入れ直し(手順は逆だけど、アップデートが楽だしDebian流儀だもんね)したんだけど、それほどの差はないみたい。

/etc/nginx/nginx.conf で全体の設定を決め、仮想ホストは sites-available ディレクトリに書いて sites-enabled にシンボリックリンクを貼る手順は Debain の Apache2 と一緒。

とりあえずデフォルト設定の root ディレクトリだけ変更して起動はできたけど、サブディレクトリを認識しないってなぜ?

う~ん、やっぱ、混迷は深い。

 

Apache以外の選択肢 nginx

掲載日:  

ApacheやIISばかりがウェブサーバーじゃないわけだ。
最近話題になることが多いnginx。
軽量高速なウェブサーバーらしい。一捻り必要だけどPHPやMySQLとも連携可能だなんて、なんかすごく魅力的なんですけど。

とりあえずApacheはそのままにしてnginxをインストールしてみよう。Saases@VPSのDeibanは、Lennyなのでnginxパッケージは0.6.32-3。最新バージョンと比べるとけっこう古いな。(最近1.0.0になったし)とりあえずパッケージで入れてから、様子を見て最新版をコンパイルしてみよう。

Apacheが80ポートを使っているので設定を別ポートに書き換えるだけで動かすだけは簡単です。

https://www.drivecafe.com

なにもありませんけどね。