<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>hogepage</title>
	<atom:link href="http://www.hogepage.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.hogepage.net</link>
	<description>ほげページじゃないよ。ほげぱげね。</description>
	<lastBuildDate>Sat, 23 Jul 2011 05:42:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ユーザ毎のオープンファイル数変更(Debian)</title>
		<link>http://www.hogepage.net/2010/09/nocategory/417.html</link>
		<comments>http://www.hogepage.net/2010/09/nocategory/417.html#comments</comments>
		<pubDate>Wed, 29 Sep 2010 02:32:29 +0000</pubDate>
		<dc:creator>hogepage</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://www.hogepage.net/?p=417</guid>
		<description><![CDATA[tomcatで「java.net.SocketException: Too many open files」エラーが発生したのでその対処。
自前のtomcatはsuでwww-dataユーザで起動しているため、www-da [...]]]></description>
			<content:encoded><![CDATA[<p>tomcatで「java.net.SocketException: Too many open files」エラーが発生したのでその対処。<br />
自前のtomcatはsuでwww-dataユーザで起動しているため、www-dataユーザでのオープンファイル上限が制限されている。rootであれば「ulimit -n」で設定すればよいが、www-dataユーザの場合、大きい値を指定すると「error setting limit (Operation not permitted)」エラーが発生し設定できない。<br />
「ulimit -n」で指定できる上限を大きくするには以下の設定を行う。</p>
<p>/etc/security/limits.conf</p>
<pre class="type1"><code>www-data         hard    nofile          16384
</code></pre>
<p>/etc/pam.d/su</p>
<pre class="type1"><code>session    required   pam_limits.so
</code></pre>
<p>ちなみにシステム全体のオープンファイル上限は以下で設定されている。</p>
<p>/proc/sys/fs/file-max</p>
<pre class="type1"><code>808478</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.hogepage.net/2010/09/nocategory/417.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>smartdのエラー(Debian/lenny)</title>
		<link>http://www.hogepage.net/2010/09/nocategory/415.html</link>
		<comments>http://www.hogepage.net/2010/09/nocategory/415.html#comments</comments>
		<pubDate>Sat, 18 Sep 2010 17:14:38 +0000</pubDate>
		<dc:creator>hogepage</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://www.hogepage.net/?p=415</guid>
		<description><![CDATA[雷による停電で自宅ファイルサーバの電源が落ちた。
ログにsmartdのエラーログが出力されていたので調査したときの備忘録。
/var/log/syslogに残されていたエラーログ
起動直後に/var/log/syslog [...]]]></description>
			<content:encoded><![CDATA[<p>雷による停電で自宅ファイルサーバの電源が落ちた。<br />
ログにsmartdのエラーログが出力されていたので調査したときの備忘録。</p>
<h3>/var/log/syslogに残されていたエラーログ</h3>
<p>起動直後に/var/log/syslogに以下のエラーが残されていた。</p>
<pre class="type1"><code>
Aug 28 01:18:03 loach smartd[13949]: Monitoring 0 ATA and 4 SCSI devices
Aug 28 01:18:04 loach smartd[13949]: Device: /dev/sdd, 1 Currently unreadable (pending) sectors
Aug 28 01:18:04 loach smartd[13949]: Sending warning via /usr/share/smartmontools/smartd-runner to root ...
Aug 28 01:18:04 loach smartd[13949]: Warning via /usr/share/smartmontools/smartd-runner to root: successful
Aug 28 01:18:04 loach smartd[13949]: Device: /dev/sdd, 1 Offline uncorrectable sectors
Aug 28 01:18:04 loach smartd[13949]: Sending warning via /usr/share/smartmontools/smartd-runner to root ...
</doce></pre>
<p>/dev/sddに「uncorrectable sectors」があると。。。<br />
購入したばかりなのにorz</p>
<h3>/dev/sddの調査</h3>
<p>とりあえず調べてみる。以下を参考にさせていただいた。<br />
<a href="https://lumiere.atobe.com/wordpress/archives/1729">Yasuo&#039;s Weblog &raquo; Offline uncorrectable sectorsを修復</a></p>
<p>/dev/sddのテスト</p>
<pre class="type1"><code>
# smartctl --test=short /dev/sdd
smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.
Test will complete after Wed Sep  1 03:33:51 2010

Use smartctl -X to abort test.
</code></pre>
<p>2分待てと書いてあるので待つ。</p>
<p>テスト結果表示</p>
<pre class="type1"><code>
# smartctl -l selftest /dev/sdd
smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%      3812         -
</code></pre>
<p>あれ？エラーなしで完了だって。うーん、ログのエラーはなんだったんだろう？<br />
その後エラーが発生しないので様子をみることにする。</p>
<p>ついでにエラー時に自分のメールアドレスにメールを送るよう設定する。</p>
<p>/etc/smartd.conf</p>
<pre class="type1"><code>
DEVICESCAN -m hogepage@example.com -M exec /usr/share/smartmontools/smartd-runner
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.hogepage.net/2010/09/nocategory/415.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian(lenny)にRAID追加</title>
		<link>http://www.hogepage.net/2010/09/nocategory/411.html</link>
		<comments>http://www.hogepage.net/2010/09/nocategory/411.html#comments</comments>
		<pubDate>Wed, 01 Sep 2010 16:48:29 +0000</pubDate>
		<dc:creator>hogepage</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://www.hogepage.net/?p=411</guid>
		<description><![CDATA[インストール時にソフトウェアRAIDの設定をすることは多々あるが、追加でRAIDの設定をすることはあまりないので、その備忘録。
1.fdisk
追加したHDDをfdiskにてパーティーション作成。
fdisk /dev/ [...]]]></description>
			<content:encoded><![CDATA[<p>インストール時にソフトウェアRAIDの設定をすることは多々あるが、追加でRAIDの設定をすることはあまりないので、その備忘録。</p>
<h3>1.fdisk</h3>
<p>追加したHDDをfdiskにてパーティーション作成。</p>
<pre class="type1"><code>fdisk /dev/sdc
fdisk /dev/sdd
</code></pre>
<p>パーティーションタイプはfd(RAID)に設定。<br />
以下のパーティーションを設定。<br />
両方プライマリの1,2,3を作成</p>
<pre class="type1"><code>■/dev/sdc
/dev/sdc1
/dev/sdc2
/dev/sdc3
■/dev/sdd
/dev/sdd1
/dev/sdd2
/dev/sdd3
</code></pre>
<h3>2.mdデバイス作成</h3>
<p>すでにmd0,md1は使用中なので、md2でraid作成</p>
<pre class="type1"><code># mdadm --create /dev/md2 --level=raid1 --raid-devices=2 /dev/sdc1 /dev/sdd1
# mdadm --create /dev/md3 --level=raid1 --raid-devices=2 /dev/sdc2 /dev/sdd2
# mdadm --create /dev/md4 --level=raid1 --raid-devices=2 /dev/sdc3 /dev/sdd3
</code></pre>
<h3>3.RAIDの状態をみる</h3>
<pre class="type1"><code># cat /proc/mdstat
Personalities : [raid1]
md4 : active raid1 sdc3[0] sdd3[1]
      293154048 blocks [2/2] [UU]

md3 : active raid1 sdc2[0] sdd2[1]
      488287552 blocks [2/2] [UU]

md2 : active raid1 sdc1[0] sdd1[1]
      195318144 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
      486433728 blocks [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1]
      1950708 blocks super 1.2 [2/2] [UU]

unused devices: <none>
</code></pre>
<p>※[UU]となっていれば正常。[_U]や[U_]の場合、片肺となっているので早急にリペアが必要。<br />
※上記はsync後の結果であるが、sync中は「[=======>.............]  resync = 36.0%」などとsyncの状況がわかるようになっている。</p>
<p>また、以下のコマンドでも状態を見ることができる。</p>
<pre class="type1"><code># mdadm -D /dev/md2
/dev/md2:
        Version : 00.90
  Creation Time : Sat Jul  3 00:38:11 2010
     Raid Level : raid1
     Array Size : 195318144 (186.27 GiB 200.01 GB)
  Used Dev Size : 195318144 (186.27 GiB 200.01 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 2
    Persistence : Superblock is persistent

    Update Time : Wed Sep  1 06:25:36 2010
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 7bf135d5:ce8b14b0:fb6507ae:de7f930d (local to host loach)
         Events : 0.14

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8       49        1      active sync   /dev/sdd1
</code></pre>
<h3>4.ファイルシステム作成</h3>
<p>-jオプションはext3 ジャーナルを持ったファイルシステムを作成する。</p>
<pre class="type1"><code># mkfs -j /dev/md2
# mkfs -j /dev/md3
# mkfs -j /dev/md4
</code></pre>
<h3>5.mount</h3>
<pre class="type1"><code># mount /dev/md2 /mnt/mac
# mount /dev/md3 /mnt/data
# mount /dev/md4 /mnt/public
</code></pre>
<h3>6./etc/mdadm/mdadm.confの設定</h3>
<p>今回設定したmd2,md3,md4デバイスを恒久的に使用できるようにする。<br />
/etc/mdadm/mdadm.confに設定する内容は以下のコマンドで取得できる。</p>
<pre class="type1"><code># mdadm -Ds
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=01.02 name=loach:0 UUID=8da4b8a3:7e1e7cbe:24c2b2cb:6646ae87
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=00.90 UUID=f44f1fc0:07501725:92c56874:2756cb86
ARRAY /dev/md2 level=raid1 num-devices=2 metadata=00.90 UUID=7bf135d5:ce8b14b0:fb6507ae:de7f930d
ARRAY /dev/md3 level=raid1 num-devices=2 metadata=00.90 UUID=4c223ab7:fd469f57:fb6507ae:de7f930d
ARRAY /dev/md4 level=raid1 num-devices=2 metadata=00.90 UUID=1003566b:fd7a6a99:fb6507ae:de7f930d
</code></pre>
<p>/dev/md0,/dev/md1はシステムインストール時に設定済みなので、/dev/md2~/de/md4までを新規に/etc/mdadm/mdadm.confへ追加した。</p>
<p>また、障害発生時に特定メールアドレスにメールを送信するよう設定。</p>
<pre class="type1"><code>MAILADDR hogepage@example.com
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.hogepage.net/2010/09/nocategory/411.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>接続されたSATAのHDDの情報を見る方法(Linux)</title>
		<link>http://www.hogepage.net/2010/05/nocategory/399.html</link>
		<comments>http://www.hogepage.net/2010/05/nocategory/399.html#comments</comments>
		<pubDate>Tue, 11 May 2010 17:18:40 +0000</pubDate>
		<dc:creator>hogepage</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://www.hogepage.net/?p=399</guid>
		<description><![CDATA[・接続されたSATAのHDDの情報を見る

# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: Hitachi HDP72505 Rev: GM4O
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi1 Channel: [...]]]></description>
			<content:encoded><![CDATA[<h3>・接続されたSATAのHDDの情報を見る</h3>
<pre class="type1"><code>
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: Hitachi HDP72505 Rev: GM4O
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: Hitachi HDP72505 Rev: GM4O
  Type:   Direct-Access                    ANSI  SCSI revision: 05
</code></pre>
<h3>・その他システム情報(ネットワークチップの確認など)</h3>
<pre class="type1"><code>
# lspci
00:00.0 Host bridge: Intel Corporation 82945G/GZ/P/PL Memory Controller Hub (rev 02)
00:02.0 VGA compatible controller: Intel Corporation 82945G/GZ Integrated Graphics Controller (rev 02)
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01)
00:1c.2 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 3 (rev 01)
00:1c.3 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 4 (rev 01)
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 01)
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)
00:1f.2 IDE interface: Intel Corporation 82801GB/GR/GH (ICH7 Family) SATA IDE Controller (rev 01)
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01)
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.hogepage.net/2010/05/nocategory/399.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[warn] NameVirtualHost *:80 has no VirtualHosts</title>
		<link>http://www.hogepage.net/2010/02/nocategory/390.html</link>
		<comments>http://www.hogepage.net/2010/02/nocategory/390.html#comments</comments>
		<pubDate>Tue, 09 Feb 2010 15:09:23 +0000</pubDate>
		<dc:creator>hogepage</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://www.hogepage.net/?p=390</guid>
		<description><![CDATA[Debian(lenny)でVirtualHostの設定をしたら、以下のエラーが。。
# /etc/init.d/apache2 restart
Restarting web server: apache2[Tue Fe [...]]]></description>
			<content:encoded><![CDATA[<p>Debian(lenny)でVirtualHostの設定をしたら、以下のエラーが。。</p>
<pre class="type1"><code># /etc/init.d/apache2 restart
Restarting web server: apache2[Tue Feb 09 18:08:18 2010] [warn] NameVirtualHost *:80 has no VirtualHosts
 ... waiting .[Tue Feb 09 18:08:20 2010] [warn] NameVirtualHost *:80 has no VirtualHosts
</code></pre>
<p>/etc/apache2/ports.confで以下の設定がすでにしてあり、自分で書いたNameVirtualHost 設定とバッティングしてた。</p>
<pre class="type1"><code>NameVirtualHost *:80
</code></pre>
<p>どちらかをコメントアウトすることで解決。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hogepage.net/2010/02/nocategory/390.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>レンタルサーバ(sakura)にawstats(with GeoIP)インストール</title>
		<link>http://www.hogepage.net/2010/01/nocategory/365.html</link>
		<comments>http://www.hogepage.net/2010/01/nocategory/365.html#comments</comments>
		<pubDate>Sat, 30 Jan 2010 19:57:33 +0000</pubDate>
		<dc:creator>hogepage</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://www.hogepage.net/?p=365</guid>
		<description><![CDATA[1.ユーザランドへのインストール方針
レンタルサーバ(sakura)にGeoIPプラグインを有効にしたawstatsをインストールしたのでそのメモ。
日本用にカスタマイズされたawstasが以下のサイトで公開されている。 [...]]]></description>
			<content:encoded><![CDATA[<h3>1.ユーザランドへのインストール方針</h3>
<p>レンタルサーバ(sakura)にGeoIPプラグインを有効にしたawstatsをインストールしたのでそのメモ。</p>
<p>日本用にカスタマイズされたawstasが以下のサイトで公開されている。<br />
<a href="http://www.fiberbit.net/user/hobbit-t/html/awstats.html">AWStatsをFreeBSDで動かす</a></p>
<p><a href="http://www.sakura.ne.jp/">sakura</a>のようなレンタルサーバでは、ユーザランドでの動作となるので以下のような工夫が必要となる。</p>
<ul>
<li>必要なPerlモジュール(CPAN利用)のユーザランドへインストール</li>
<li>GeoIP(IPから接続元の地域がわかる)のユーザランドへのインストール</li>
<li>awstats.plに上記モジュールのパス追加</li>
</ul>
<h3>2.CPANを利用して必要モジュールインストール</3></p>
<h4>・ホームディレクトリ下にlocalとlocal/srcを作成</h4>
<pre class="type1"><code>$ cd ~
$ mkdir -p local/src
</code></pre>
<h4>・CAPN初期設定</h4>
<p>まずは初期設定。</p>
<pre class="type1"><code>$ perl -MCPAN -e shell
</code></pre>
<p>質問に答える。とりあえず全部デフォルト。<br />
/home/USERNAME/.cpan/CPAN/MyConfig.pmが設定ファイル。これを編集。<a href="http://www.otsune.com/bsd/tips/usercpaninstall.html">ここ</a>を参考にした。</p>
<pre class="type1"><code>'make_install_arg' => qq[SITEPREFIX=$ENV{HOME}/local],
'makepl_arg' => qq[INSTALLDIRS=site INSTALL_BASE=$ENV{HOME}/local LIB=$ENV{HOME}/local/lib/perl5],
'mbuildpl_arg' => qq[./Build --install_base $ENV{HOME}/local],
'urllist' => [q[ftp://ftp.u-aizu.ac.jp/pub/CPAN], q[ftp://ftp.kddilabs.jp/CPAN/]],
</code></pre>
<p>※TIPS：間違えた場合はCAPN>o conf init で初期化できる。</p>
<p>自分の環境はbashに変えてあるので.bashrcにパスなどを書き込み</p>
<pre class="type1"><code>$ echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
$ echo 'export PERL5LIB=$HOME/local/lib/perl5:$HOME/local/lib/perl5/site_perl' >> ~/.bashrc
</code></pre>
<p>FreeBSDのportsと連携する仕組みであるBSDPANでエラーがでないよう調整。</p>
<pre class="type1"><code>$ echo 'export PKG_DBDIR=$HOME/local/var/db/pkg' >> ~/.bashrc
$ echo 'export PORT_DBDIR=$HOME/local/var/db/pkg' >> ~/.bashrc
$ echo 'export INSTALL_AS_USER=' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=$HOME/local/lib' >> ~/.bashrc
$ mkdir -p ~/local/var/db/pkg
</code></pre>
<p>設定を有効にする。</p>
<pre class="type1"><code>$ source ~/.bashrc</code></pre>
<h4>・モジュールインストール</h4>
<pre class="type1"><code>$ perl -MCPAN -e shell
CPAN[1]>install HTML::Entities::Numbered
CPAN[2]>install Unicode::Japanese
CPAN[3]>install Jcode
</code></pre>
<h4>・CAPNを最新にアップデートする。</h4>
<pre class="type1"><code>$ cpan -i Bundle::CPAN
</code></pre>
<h3>3.GeoIPのインストール</h3>
<p>おそらくCPANでもインストールできる(Geo::IP)が、CAPI(高速動作するらしい)を使用したかったのでソースからインストールした。</p>
<h4>・GeoIPのCAPI(C言語で書かれたAPI)ダウンロード、インストール</h4>
<pre class="type1"><code>$ cd ~/local/src
$ wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz
$ tar zxvf GeoIP-1.4.6.tar.gz
$ cd GeoIP-1.4.6
$ ./configure --prefix=/home/USERNAME/local/
$ make
$ make check
$ make install
</code></pre>
<p>コマンドがあるので試してみる。<br />
% geoiplookup 124.83.147.202 (www.yahoo.co.jp)<br />
GeoIP Country Edition: JP, Japan</p>
<p>% geoiplookup www.google.com<br />
GeoIP Country Edition: US, United States</p>
<h4>・GeoIPのPerlモジュールダウンロード、インストール</h4>
<pre class="type1"><code>$ wget http://geolite.maxmind.com/download/geoip/api/perl/Geo-IP-1.38.tar.gz
$ tar zxvf Geo-IP-1.38.tar.gz
$ cd Geo-IP-1.38
$ perl Makefile.PL LIBS='-L/home/USERNAME/local/lib' INC='-I/home/USERNAME/local/include' PREFIX='/home/USERNAME/local'
$ make
$ make test
$ make install
</code></pre>
<h4>・GeoIP用最新データダウンロード</h4>
<p>GeoIP用データは月に一度更新されるらしい。とりあえず最新版にしておく。</p>
<p>最新版の国別IPデータをダウンロードする。</p>
<pre class="type1"><code>$ cd ~/local/src
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
$ gunzip GeoIP.dat.gz
$ mv GeoIP.dat ~/local/share/GeoIP/GeoIP.dat
</code></pre>
<p>最新版の地域別IPデータをダウンロードする。</p>
<pre class="type1"><code>$ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
$ gunzip GeoLiteCity.dat.gz
$ mv GeoLiteCity.dat ~/local/share/GeoIP/GeoLiteCity.dat
</code></pre>
<p>※有償版は以下のコマンドで自動アップデート可能<br />
$ geoipupdate -d /home/USERNAME/local/share/GeoIP</p>
<h3>4.awstatsのインストール</h3>
<p>以下のディレクトリにインストールする。<br />
~/local/awstats-6.95-jp<br />
~/local/awstats-6.95-jp/wwwroot以下をWebに公開することにする(~/local/www/awstatsからのシンボリックリンクを作成)。</p>
<h4>・日本用にカスタマイズされたawstatsをダウンロード・インストール</h4>
<p><a href="http://www.fiberbit.net/user/hobbit-t/html/awstats.html">AWStatsをFreeBSDで動かす</a>サイトの<a =href="http://hobbit.ddo.jp/html/awstats695t_jpn.zip">awstats695t_jpn.zip</a>を使用する。</p>
<p>awstats.model.confはawstats.HOSTNAME.confなどに変更する。HOSTNAMEのところが各種コマンド実行時の-configオプションの指定と一致するようにする。</p>
<pre class="type1"><code>$ mkdir awstats-6.95-jp
$ cd ~/local/awstats-6.95-jp
$ wget http://hobbit.ddo.jp/html/awstats695t_jpn.zip
$ unzip awstats695t_jpn.zip
$ cd wwwroot/cgi-bin/
$ cp awstats.model.conf awstats.www.hogepage.net.conf
</code></pre>
<p>Perlソースの改行コードがCRLFになってる。これだとInternal Server Errorが発生する。また、windowsで作成したらしいのでパーミッションがおかしい。<br />
以下のように修正。</p>
<pre class="type1"><code>$ cd ~/local/awstats-6.95-jp
$ find ./ -name *.pl | xargs nkf -w -Lu --overwrite
$ find ./ -name *.pl | xargs chmod 755
</code></pre>
<h4>・confの設定</h4>
<p>awstats.www.hogepage.net.confの編集</p>
<pre class="type1"><code>#日本語用のawstatsはUTF-8に変換したログを指定。
LogFile="/home/USERNAME/log/access_log.utf8"
#オリジナルのawstats使用の場合はこちらを指定。
#LogFile="/home/USERNAME/log/access_log_%YYYY-24%MM-24%DD-24"
SiteDomain="www.hogepage.net"
DirData="/home/USERNAME/local/awstats-6.95-jp/wwwroot/data"
DirCgi="/awstats/cgi-bin"
DirIcons="/awstats/icon"
StyleSheet="/awstats/css/awstats_bw.css"
Lang="jp"
LoadPlugin="geoip GEOIP_STANDARD /home/USERNAME/local/share/GeoIP/GeoIP.dat"
LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /home/USERNAME/local/share/GeoIP/GeoLiteCity.dat"
</code></pre>
<p>GeoIPのPluginは2つ設定してあるが、それぞれ国別、地域別(都道府県など)用のPluginである。</p>
<p>解析データ保存用ディレクトリ、静的なHTML用ディレクトリを作成。</p>
<pre class="type1"><code>$ mkdir ~/www/awstats/data
$ mkdir ~/www/awstats/html
</code></pre>
<p>※awstatsは統計情報を毎回動的にHTML出力するのは負荷になるので、静的なHTMLに変換できる。</p>
<h4>・apacheの設定</h4>
<pre class="type1"><code>$ cd ~/www
$ ln -s ../local/awstats-6.95-jp/wwwroot awstats
$ cd awstats
$ cat .htaccess
AddHandler cgi-script pl
AuthUserFile /home/USERNAME/.htpasswd
AuthGroupFile /dev/null
AuthName "awstats login"
AuthType Basic
require valid-user
</code></pre>
<p>アクセス制限用アカウント登録。sakuraはDigest認証が使えないのでBasic認証の設定を行う。<br />
$ htpasswd -c ~/.htpasswd admin</p>
<h4>・ユーザランドのCPAN、GeoIPモジュールのインクルード</h4>
<p>awstats.plの最初の方に以下追加。</p>
<pre class="type1"><code>use lib '/home/USERNAME/local/lib/perl5';
use lib '/home/USERNAME/local/lib/perl5/site_perl/5.8.9/mach';
</code></pre>
<p>またawstats.plの先頭の「#!c:/perl/bin/perl」を削除。</p>
<h4>・画面表示</h4>
<p>画面表示してみる。<br />
http://HOSTNAME/awstats/cgi-bin/awstats.pl</p>
<p>なんか以下のエラーが。。<br />
　※error_logが見れない状況では「use CGI::Carp &#8216;fatalsToBrowser&#8217;;」をファイルの先頭付近に記述すると幸せになる。<br />
該当箇所に「};」というゴミがあったので削除。</p>
<pre class="type1"><code>syntax error at /home/USERNAME/local/awstats-6.95-jp/wwwroot/cgi-bin/plugins/geoip_city_maxmind.pm line 4472
syntax error at /home/USERNAME/local/awstats-6.95-jp/wwwroot/cgi-bin/plugins/geoip_city_maxmind.pm line 4512, near "else"
</code></pre>
<p>再度表示。空のアクセス解析画面が表示されればOK</p>
<h4>・アクセス解析</h4>
<p>オリジナルのawstatsは、以下のコマンドでログを解析する。<br />
/home/USERNAME/local/awstats-6.95-jp/wwwroot/cgi-bin/awstats.pl -config=www.hogepage.net -update</p>
<p>しかし、これではサーチエンジンのキーワードなどが文字化けする場合がある。<br />
付属のawstats.shやawstats.cronにログをUTF-8形式にする方法が載っているが、sakuraのようにログがaccess_log_20100101のような日付形式になっている場合に対応していない。</p>
<p>access_log_20100101のような日付がついかアクセスログに対応できるスクリプトが<a href="http://satospo.sakura.ne.jp/blog_archives/tech/web/sakura_awstats69.html">ここ</a>にあったので使わせて頂く(感謝)。以下、自分の環境用に書き換えたモノ。</p>
<p>/home/USERNAME/local/awstats-6.95-jp/awstats_cron.sh</p>
<pre class="type1"><code>#!/bin/sh
# www.hogepage.nt - AWStats

# ENV
PERL5LIB=/home/USERNAME/local/lib/perl5:/home/USERNAME/local/lib/perl5/site_perl
HDIR="/home/USERNAME"
AWDIR=${HDIR}"/local/awstats-6.95-jp"
WWWDIR=${HDIR}"/www/awstats"
HOSTNAME="www.hogepage.net"
DATE=`/bin/date -v -1d +%Y%m%d`
MONTH=`/bin/date -v -1d +%m`
YEAR=`/bin/date -v -1d +%Y`

if [ -f "${HDIR}/log/access_log_${DATE}" ];
then
    # check
    if [ ! -d "${WWWDIR}/html/${YEAR}${MONTH}" ];
    then
        /bin/mkdir ${WWWDIR}/html/${YEAR}${MONTH}
    fi

    if [ -f "${HDIR}/log/access_log.utf8" ];
    then
        /bin/rm -f ${HDIR}/log/access_log.utf8
    fi

    # Can't locate awstats_host.plのエラーが発生するので、${AWDIR}/toolsに移動
    cd ${AWDIR}/tools
    # url decode
    ${AWDIR}/tools/utf8_decode.pl < ${HDIR}/log/access_log_${DATE} \
        > ${HDIR}/log/access_log.utf8

    # update
    ${AWDIR}/wwwroot/cgi-bin/awstats.pl \
        -config=$HOSTNAME -update

    # static report index
    ${AWDIR}/wwwroot/cgi-bin/awstats.pl \
        -config=$HOSTNAME -output -staticlinks \
        -year=${YEAR} \
        -month=${MONTH} > ${WWWDIR}/html/${YEAR}${MONTH}/index.html

    # static report page
    ${AWDIR}/tools/awstats_buildstaticpages.pl \
        -config=$HOSTNAME -lang=jp -year=${YEAR} -month=${MONTH} \
        -awstatsprog=${AWDIR}/wwwroot/cgi-bin/awstats.pl \
        -diricons=/awstats/icon -dir=${WWWDIR}/html/${YEAR}${MONTH}

    # delete logfile
    if [ -f "${HDIR}/log/access_log.utf8" ];
    then
        /bin/rm -f ${HDIR}/log/access_log.utf8
    fi
fi
</code></pre>
<p>~/local/awstats-6.95-jp/tools/awstats_host.plの書き換え</p>
<pre class="type1"><code>$Myhost = "www\.hogepage\.net";
</code></pre>
<p>実行してみる。エラーがでなければ成功。</p>
<pre class="type1"><code>/home/USERNAME/local/awstats-6.95-jp/awstats_cron.sh
</code></pre>
<p>/home/USERNAME/www/wordpress/awstats/dataにファイルができていれば成功。</p>
<h4>・cronへの登録</h4>
<pre class="type1"><code>% crontab -e
# awstats
30 1 * * *       /home/USERNAME/local/awstats-6.95-jp/awstats_cron.sh > /dev/null
</code></pre>
<p>これで毎日01:30にデータが更新される。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hogepage.net/2010/01/nocategory/365.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian(lenny,squeeze)にpostfix,courier-popインストール</title>
		<link>http://www.hogepage.net/2010/01/debian/308.html</link>
		<comments>http://www.hogepage.net/2010/01/debian/308.html#comments</comments>
		<pubDate>Mon, 25 Jan 2010 15:58:33 +0000</pubDate>
		<dc:creator>hogepage</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[courier-authdaemon]]></category>
		<category><![CDATA[courier-imap]]></category>
		<category><![CDATA[courier-pop]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://www.hogepage.net/?p=308</guid>
		<description><![CDATA[Debian(lenny,squeeze)にpostfix,courier-popをインストールし、基本的なメールシステムを構築する。
1.基本方針

SMTP AUTH対応
Maildir使用
POPS対応
SMTPS [...]]]></description>
			<content:encoded><![CDATA[<p>Debian(lenny,squeeze)にpostfix,courier-popをインストールし、基本的なメールシステムを構築する。</p>
<h3>1.基本方針</h3>
<ul>
<li>SMTP AUTH対応</li>
<li>Maildir使用</li>
<li>POPS対応</li>
<li>SMTPS対応</li>
<li>Submission Port対応</li>
<li>Submission PortでのSTARTTLS対応</li>
<li>POPとSMTPの認証モジュールは同一のものを使用</li>
</ul>
<h3>2.courier-authdaemonのインストール設定</h3>
<p>POPとSMTPの認証モジュールは同一のものを使用したかったのでcourier-authdaemonを使用する。これはcourier-pop,postfix両方で使用できる。</p>
<h4>・courier-authdaemonのインストール</h4>
<p># aptitude install courier-authdaemon</p>
<h4>・authdaemonrcの設定</h4>
<p># cat /etc/courier/authdaemonrc</p>
<pre class="type1"><code># authuserdbを使えばシステムアカウントとメールアカウントを
# 分ける事ができる。今回はシステムアカウントを使用。
#authmodulelist="authuserdb"
authmodulelist="authpam"
・・・
# chrootしたpostfixからも見えるようにしようとしたがこのオプションは無効らしい。
# 本当はこうしたい↓
# authdaemonvar=/var/spool/postfix/var/run/courier/authdaemon
# 少々強引だが/var/spool/postfix/var/run/courierのシンボリックリンクを作成することで対応することに。。
authdaemonvar=/var/run/courier/authdaemon
</code></pre>
<h4>・courier-authdaemonの再起動</h4>
<p># /etc/init.d/courier-authdaemon restart</p>
<h3>3.アカウント追加</h3>
<h4>・maildirmakeを使えるようcourier-baseインストール</h4>
<p># aptitude install courier-base</p>
<h4>・ユーザ作成時にMaildirできるようにしておく</h4>
<p># /usr/bin/maildirmake /etc/skel/Maildir</p>
<h4>・ユーザ追加</h4>
<p><code># adduser --shell /bin/false hoge</code></p>
<p>参考：authmodulelist=&#8221;authuserdb&#8221;の場合<br />
今回はauthdaemonrcでauthmodulelist=&#8221;authpam&#8221;を指定したので関係はないが、参考までにauthmodulelist=&#8221;authuserdb&#8221;を指定した場合のユーザ追加例を以下に記す。authuserdbを指定した場合は、システムアカウントとメールアカウントを分けることが可能。</p>
<pre class="type1"><code>・メール用アカウント追加
# adduser -u 1010 --disabled-password --disabled-login test
・userdb作成
# userdb test set home=/home/test mail=/home/test/Maildir uid=1010　gid=1010
　※/etc/courier/userdbが作成される。
・パスワード設定
# userdbpw | userdb test set pop3pw
# userdbpw | userdb test set smtppw
 　※/etc/courier/userdbの該当箇所にパスワードが設定される。
・DB形式に変換
# makeuserdb
・アカウント削除
# userdb test del
</code></pre>
<h3>3.courier-popインストール</h3>
<p># aptitude install courier-pop courier-pop-ssl</p>
<p>認証の設定は終わっているので、 courier-pop courier-pop-sslをインストールすればPOPとPOP-SSL(POPS)が使用できるようになる。</p>
<h3>4.GUI設定</h3>
<p>GUI設定もある模様。</p>
<p># aptitude install courier-webadmin</p>
<p>一部使用できない機能がある？<br />
また、ほとんど有用な機能がないので削除。。。</p>
<p># aptitude purge courier-webadmin</p>
<h3>5.Postfixインストール</h3>
<h4>・libsasl2のインストール。これがないとSMTP認証できない。</h4>
<p># aptitude install libsasl2-modules</p>
<h4>・Postfixインストール</h4>
<p># aptitude install postfix</p>
<h3>6.Postfix設定</h3>
<h4>・ローカルから送信時のFromで使用されるドメインを指定</h4>
<p># cat /etc/mailname<br />
hogepage.net</p>
<h4>・submission port有効</h4>
<p># cat /etc/postfix/master.cf<br />
以下がコメントになっているのでコメント外す</p>
<pre class="type1"><code>submission inet n       -       -       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
</code></pre>
<p>smtpd_client_restrictionsは、SMTPサーバがクライアントからSMTP接続の要求を受けた際に適用するIPアドレスのアクセス制限(デフォルトはすべて許可)。<br />
smtpd_delay_reject = yes(デフォルト)なので、smtpd_client_restrictionsはRCPT TO時に評価される。つまり、この場合だと認証を通ったクライアントのIPのみ、RCPT TO以降のSMTP接続を受け付ける。ここでの設定はサブミッションポートでの設定なので注意(通常の25番ポートの方は適用されない)。</p>
<h4>・main.cf編集</h4>
<p># cat /etc/postfix/main.cf</p>
<pre class="type1"><code>・・・・略
# TLSの設定。証明書はデフォルトのものを使用。オレオレ証明書なので注意
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# 主要な設定
myhostname = mail.hogepage.net  # HELO名などで使用される。
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname  #ローカルからメール配信を行った場合のFromアドレスにつくドメイン名
mydestination = hogepage.net, localhost  #宛先ドメイン。このドメインにきたメールがローカル配送される。
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 xxx.xxx.xxx.xxxx #Relayを許可するIPアドレス。認証無しでもリレーできる。
#mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
#inet_protocols = ipv4
home_mailbox = Maildir/ # mailboxをMaildir形式にする。
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
</code></pre>
<p>smtpd_recipient_restrictions はPostfix SMTPサーバが RCPT TO コマンドの場面で適用するアクセス制限(デフォルト: permit_mynetworks, reject_unauth_destination)。 この設定はサブミッションポート(587)と通常ポート(25)両方に適用される。これがあれば、master.cfのsmtpd_client_restrictions設定はいらない気が。。まぁ、二重にチェックしてもいいか。</p>
<p>ちなみに*_restrictionsの評価の順序は以下になる。必須なのはsmtpd_recipient_restrictionsのみ。</p>
<ol>
<li>smtpd_client_restrictions</li>
<li>smtpd_helo_restrictions</li>
<li>smtpd_sender_restrictions</li>
<li>smtpd_recipient_restrictions</li>
</ol>
<p>上記でも述べたがsmtpd_delay_reject = yes(デフォルト)だと、RCPT TO時にこれらがすべて評価される。<br />
また、条件にマッチした場合、それ以降のマッチングを行わない。</p>
<h4>・SMTP認証設定</h4>
<p>認証方式にauthdaemondを指定する。<br />
# cat /etc/postfix/sasl/smtpd.conf</p>
<pre class="type1"><code>pwcheck_method: authdaemond
authdaemond_path: /var/run/courier/authdaemon/socket
mech_list: plain login
</code></pre>
<h4>・TIPS：/etc/postfix/sasl/smtpd.confの秘密</h4>
<p>pwcheck_methodはauxprop/saslauthd/authdaemondなどがある。<br />
それぞれの設定例を記述する。<br />
(1)auxpropの例<br />
auxpropを使用するといろいろなプラグインが使用できる。pluginにはsqlなどもある。</p>
<pre class="type1"><code>pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: cram-md5 digest-md5 plain login
</code></pre>
<p>auxprop_pluginを指定しない場合、デフォルトでsasldbが使用される。</p>
<p>(2)saslauthdの例<br />
saslauthdデーモンを使用する場合。</p>
<pre class="type1"><code>pwcheck_method: saslauthd
mech_list: plain login
</code></pre>
<p>saslauthdの場合、cram-md5やdigest-md5が使用できないことに注意。しかし、mech_listにcram-md5やdigest-md5が指定できてしまうことが混乱を招いている。認証にcram-md5やdigest-md5が使われた場合、saslauthdではなく、auxprop(=sasldb or sasldb2)が使用されてしまうことに注意orz<br />
個人的にはSSLと組み合わせればよい話なので、cram-md5やdigest-md5はいらないと思っている。さらにcram-md5やdigest-md5の場合はサーバ側にハッシュ値でないプレーンテキストでパスワードを保存しておく必要がある。こっちの方が問題だと思う。。</p>
<p>(3)authdaemondの例<br />
これは今回の例。もう一度おさらい。</p>
<pre class="type1"><code>pwcheck_method: authdaemond
authdaemond_path: /var/run/courier/authdaemon/socket
mech_list: plain login
</code></pre>
<p>authdaemondもsaslauthdの場合と同様、cram-md5やdigest-md5が使用できないことに注意。認証にcram-md5やdigest-md5が使われた場合、authdaemondではなく、auxprop(=sasldb or sasldb2)が使用される。</p>
<h4>・authdaemonのsocketをpostfixが読めるようにする</h4>
<p>まずpostfixユーザをdaemonグループに追加する。<br />
# usermod -G postfix,mail,daemon postfix</p>
<h4><span style="text-decoration:line-through">・ソケットのハードリンクを行う。</span></h4>
<p><span style="text-decoration:line-through">postfixがchrootするのでシンボリックリンクではダメ！</span></p>
<pre class="type1"><code>
<span style="text-decoration:line-through"># mkdir -p /var/spool/postfix/var/run/courier/authdaemon
# ln -f /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket
</span>
</code></pre>
<p><span style="text-decoration:line-through"><br />
※これはauthdaemondを再起動するたびに行わなければならないので起動スクリプトに追加。デーモン起動してからソケット作成まで時間がかかるので3sほどsleepする。<br />
# cat /etc/init.d/courier-authdaemon<br />
</span></p>
<pre class="type1"><code>
<span style="text-decoration:line-through">
・・・
    $daemonscript start
    sleep 3
    ln -f /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket
</span>
</code></pre>
<h4>・authdaemonのソケットをauthdaemonとpostfix両方で使用できるようにする</h4>
<p>authdaemonのソケットをauthdaemonとpostfix両方で使用できるようにする。<br />
(postfixはchrootするのでこのような工夫が必要となる)<br />
上記の取消線で消した情報のようにソケットのハードリンクを行うのはスマートでないのでこちらに変更した。</p>
<pre class="type1"><code>
mkdir -p /var/spool/postfix/var/run/
mv /var/run/courier /var/spool/postfix/var/run/
ln -s /var/spool/postfix/var/run/courier /var/run/courier
</code></pre>
<h4>・エイリアス設定</h4>
<p># cat /etc/aliases</p>
<pre class="type1"><code>mailer-daemon: root
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
</code></pre>
<h3>7.Postfix設定</h3>
<h4>・courier-authdaemonの再起動</h4>
<p># /etc/init.d/courier-authdaemon restart</p>
<h4>・Postfixの再起動</h4>
<p># /etc/init.d/postfix restart</p>
<p>これでSMTP認証も使用できるようになった。認証方式は「PLAIN」「LOGIN」方式、SSLを使用するようにして通信が暗号化されるようにする。ここで使用した証明書はいわゆる「オレオレ証明書」であることに注意。今回使用するSSLは暗号化が目的なのでサーバ証明は行わない。</p>
<h3>8.Postfix + バーチャルドメイン</h3>
<p>今回は必要がなかったので設定しなかったが　MySQLやPostfix Adminと組み合わせるとバーチャルドメインにも対応できる。<br />
参考：<br />
<a href="http://www.postfix-jp.info/trans-2.1/jhtml/VIRTUAL_README.html">Postfix バーチャルドメインホスティング Howto</a><br />
<a href="http://www.aconus.com/~oyaji/centos/smtp-mysql-centos.htm">Postfix+MySQL+Postfix AdminによるバーチャルSMTPサーバの構築</a></p>
<p>また他のバーチャルドメインに対応するための組み合わせについても調べてみた。</p>
<ol>
<li>postfix + courier + mysql + postfixadmin(上記の参考URL参照)</li>
<li>postfix + dovecot + mysql + postfixadmin</li>
<li>postfix + (qmail + vpopmail) + qmailadmin</li>
<li>postfix + V.A.P.E.S &lt;-これは使用例がほとんどない</li>
</ol>
<p>3についてはローカル配送をqmail + vpopmailで行うようである。qmailから移行する人はこの選択肢もありかも知れない。</p>
<h3>9.ついでにimap, squirrelmail</h3>
<h4>・courier-imapインストール</h4>
<p># aptitude install courier-imap courier-imap-ssl</p>
<h4>squirrelmailのインストール</h4>
<p># aptitude install squirrelmail<br />
# /usr/sbin/squirrelmail-configure<br />
設定例は以下参照。<br />
<a href="http://www.bnote.net/kuro_box/kuro_debian_squirrelmail.shtml">玄箱 Debian で WebMail[SquirrelMail編]</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hogepage.net/2010/01/debian/308.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ApacheのDigest認証、一部ファイルは認証しない設定方法</title>
		<link>http://www.hogepage.net/2009/11/nocategory/321.html</link>
		<comments>http://www.hogepage.net/2009/11/nocategory/321.html#comments</comments>
		<pubDate>Thu, 26 Nov 2009 06:57:52 +0000</pubDate>
		<dc:creator>hogepage</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[未分類]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://www.hogepage.net/?p=321</guid>
		<description><![CDATA[ApacheのDigest認証設定を行ったのでそのメモ。
1.ユーザ登録
　レルム名：test_realm
　ユーザ名：admin
# htdigest -c /etc/httpd/.htdigest 'test_rea [...]]]></description>
			<content:encoded><![CDATA[<p>ApacheのDigest認証設定を行ったのでそのメモ。</p>
<h3>1.ユーザ登録</h3>
<p>　レルム名：test_realm<br />
　ユーザ名：admin</p>
<pre class="type1"><code># htdigest -c /etc/httpd/.htdigest 'test_realm' admin</code></pre>
<h3>2.httpd.conf設定</h3>
<p>訳あって「/hoge/noauth.php」のみ認証を行わないように設定する。</p>
<pre class="type1"><code>&lt;Directory /var/www/hogehoe/html/ &gt;
    Options None
    Order allow,deny
    Allow from all
    AuthType Digest
    AuthName "test_realm"
    AuthUserFile /etc/httpd/.htdigest
    Require user admin
&lt;/Directory&gt;

&lt;Location /hoge/noauth.php &gt;
    Satisfy any
&lt;/Location&gt;
</code></pre>
<p>「Satisfy any」の意味は以下の通り。<a href="http://httpd.apache.org/docs/2.0/ja/mod/core.html#satisfy">引用元</a></p>
<blockquote><p>デフォルトの動作 (All) はクライアントがアドレスによる アクセス制限を満たし、かつ正しいユーザ名とパスワードを入力することを 要求します。Any では、クライアントはホストの制限を満たすか、 正しいユーザ名とパスワードの入力をするかをすればアクセスを許可されます。 </p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.hogepage.net/2009/11/nocategory/321.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian(lenny)にproftpdインストール・設定</title>
		<link>http://www.hogepage.net/2009/11/debian/271.html</link>
		<comments>http://www.hogepage.net/2009/11/debian/271.html#comments</comments>
		<pubDate>Wed, 04 Nov 2009 02:32:18 +0000</pubDate>
		<dc:creator>hogepage</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[proftpd]]></category>

		<guid isPermaLink="false">http://www.hogepage.net/?p=271</guid>
		<description><![CDATA[1.基本ポリシー

特定ユーザのみFTPアクセス可能
特定ディレクトリより上位の階層へのアクセス不可
LIMITディレクティブでなくTcpWrapperによるIPアドレス制限

2.proftpdのインストール
xine [...]]]></description>
			<content:encoded><![CDATA[<h3>1.基本ポリシー</h3>
<ul>
<li>特定ユーザのみFTPアクセス可能</li>
<li>特定ディレクトリより上位の階層へのアクセス不可</li>
<li>LIMITディレクティブでなくTcpWrapperによるIPアドレス制限</li>
</ul>
<h3>2.proftpdのインストール</h3>
<p>xinetd経由で使用する。</p>
<pre class="type1"><code>$ sudo aptitude install xinetd
$ sudo aptitude install proftpd
$ cat /etc/xinetd.d/ftp
service ftp
{
        disable         = no
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = root
        log_on_success += DURATION USERID
        log_on_failure += USERID
        server          = /usr/sbin/proftpd
}
$ sudo /etc/init.d/xinetd restart
</code></pre>
<h3>3./etc/proftpd/proftpd.confの設定</h3>
<p>adminユーザは /var/www/htmlをホームとする。<br />
それ以外のユーザはデフォルトホーム(/home/hogeなど)。<br />
許可するユーザはadminとadmin2。</p>
<pre class="type1"><code>・・・
DefaultRoot /var/www/html admin
DefaultRoot ~
・・・
&lt;Limit LOGIN&gt;
  Order allow,deny
  AllowUser admin,admin2
  Deny all
&lt;/Limit LOGIN&gt;
</code></pre>
<p>注意しなくてはいけないのが、以下のようにIPアドレス制限と組み合わせると「または」になってしまう。<br />
しかもapacheのIP制限と記述が似ているがproftpdの場合、条件にマッチした時点で評価終了となりapacheとは動作が異なる。</p>
<pre class="type1"><code>&lt;Limit LOGIN&gt;
  Order allow, deny
  Allow from 192.168.0.0/24
  Deny from all
&lt;/Limit LOGIN&gt;
</code></pre>
<p>つまり、「admin,admin2」からのアクセスまたは「192.168.0.0/24」からのアクセス許可となる。<br />
mod_ifsessionなどと組み合わせれば「あるユーザを特定の IP アドレス範囲からだけログインできるように制限できる」らしい。<a href="http://q.hatena.ne.jp/1184919226">参考</a><br />
めんどいのでTcpWrapperでIPアドレスの制限は行う。</p>
<h3>4.TcpWrapperによるアクセス制限</h3>
<p>すべて拒否してから、許可するサービス、IPを記述。</p>
<p>/etc/hosts.deny</p>
<pre class="type1"><code>ALL: ALL</code></pre>
<p>/etc/hosts.allow</p>
<pre class="type1"><code>sshd: 192.168.0.0/255.255.255.0
proftpd: 192.168.0.0/255.255.255.0 192.168.1.0/255.255.255.0
</code></pre>
<h3>PASV(パッシブモード)対応</h3>
<p>PASV(パッシブモード)に対応できるようiptables設定。</p>
<pre class="type1"><code># modprobe nf_conntrack_ftp
# cat /etc/modules
・・・
nf_conntrack_ftp
</code></pre>
<p>※kernel-2.6.20から、ip_conntrack*関連が nf_conntrack*に置き換わっているので注意。</p>
<h3>6.接続拒否ユーザの設定</h3>
<p>/etc/ftpusersに接続を拒否するユーザを記述。これはPAMの段階で拒否される。/etc/pam.d/proftpdをみると以下の記述がある。</p>
<pre class="type1"><code>auth       required     pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.hogepage.net/2009/11/debian/271.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS 5.4にvsftpインストール・設定</title>
		<link>http://www.hogepage.net/2009/11/centos/257.html</link>
		<comments>http://www.hogepage.net/2009/11/centos/257.html#comments</comments>
		<pubDate>Sun, 01 Nov 2009 01:29:50 +0000</pubDate>
		<dc:creator>hogepage</dc:creator>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[ftp vsftpd centos]]></category>

		<guid isPermaLink="false">http://www.hogepage.net/?p=257</guid>
		<description><![CDATA[1.基本ポリシー

特定ユーザのみFTPアクセス可能
特定ディレクトリより上位の階層へのアクセス不可
TcpWrapperによるIP制限

2.vsftpdインストール
# yum install vsftpd
3./e [...]]]></description>
			<content:encoded><![CDATA[<h3>1.基本ポリシー</h3>
<ul>
<li>特定ユーザのみFTPアクセス可能</li>
<li>特定ディレクトリより上位の階層へのアクセス不可</li>
<li>TcpWrapperによるIP制限</li>
</ul>
<h3>2.vsftpdインストール</h3>
<pre class="type1"><code># yum install vsftpd</code></pre>
<h3>3./etc/vsftpd/vsftpd.confの設定</h3>
<pre class="type1"><code># 匿名アクセス禁止
anonymous_enable=NO
# アスキーモード有効
ascii_upload_enable=YES
ascii_download_enable=YES
# シグニチャ隠蔽
ftpd_banner=Welcome to blah FTP service.
# デフォルトでホームの上位はみせない(chroot()する)
chroot_local_user=YES
# chroot_local_user=YESの場合、
#　　chroot_list_enable=YES　： chroot_listには上位を見せてよい(chrootしない)ユーザを記述
#　　chroot_list_enable=NO　　： すべてのユーザがchroot()する
chroot_list_enable=YES
# chroot_list_enable=YESなので、ここには上位を見せてもよいユーザを記述する。
chroot_list_file=/etc/vsftpd/chroot_list
# リカーシブ操作(サブフォルダを含む一括アップロード・ダウンロード)を許可
ls_recurse_enable=YES
# /etc/vsftpd/user_listの使用(アクセス許可または拒否)
userlist_enable=YES
# userlist_enable=YESの場合、
#　　userlist_deny=YES　：アクセス拒否するユーザをuser_listに記述する
#　　userlist_deny=NO　　：アクセス許可するユーザをuser_listに記述する
userlist_deny=NO
#pamによる認証を行う
pam_service_name=vsftpd
# ユーザーごとの設定ファイルを有効にする。
user_config_dir=/etc/vsftpd/vsftpd_user_conf
#タイムスタンプ時間をローカル時間にする
use_localtime=YES
#TcpWrapper有効
tcp_wrappers=YES
</code></pre>
<h3>4./etc/vsftpd/user_listの設定</h3>
<p>userlist_deny=NOなので、/etc/vsftpd/user_listにはアクセス許可するユーザを記述する。</p>
<pre class="type1"><code>admin</code></pre>
<h3>5./etc/vsftpd/ftpusersの設定</h3>
<p>アクセス拒否するユーザを記述。<br />
※/etc/vsftpd/user_listよりも優先される。ftpusersはPAM認証の際、アクセス拒否リストとして使用される。<br />
/etc/pam.d/vsftpdに以下の記述がある。</p>
<pre class="type1"><code>auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
</code></pre>
<p>/etc/vsftpd/ftpusersの内容は以下。このユーザはアクセス拒否される。</p>
<pre class="type1"><code>root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
</code></pre>
<h3>6./etc/vsftpd/chroot_listの設定</h3>
<p>chroot_list_enable=YESなので上位ディレクトリを見せてもよいユーザを/etc/vsftpd/chroot_listに指定できる。今は上位ディレクトリへのアクセスを許可するユーザはいないので、これは空にする。</p>
<h3>7.ユーザごとのホームディレクトリ設定</h3>
<p>adminのホームディレクトリを指定する。以下の設定により、adminはログインすると/var/www/htmlがホームディレクトリとなる。</p>
<pre class="type1"><code># mkdir /etc/vsftpd/vsftpd_user_conf
# cat /etc/vsftpd/vsftpd_user_conf/admin
local_root=/var/www/html
</code></pre>
<p>※/etc/vsftpd/vsftpd_user_conf/USERNAMEには、vsftpd.confに記述できるオプションが指定できる(listen_addressなどの一部オプションは無効)。</p>
<p>次に/var/www/htmlの作成(存在しない場合)とパーミッションの設定を行う。</p>
<pre class="type1"><code># mkdir /var/www/html
# chown admin:admin /var/www/html
</code></pre>
<h3>8.PASV(パッシブモード)対応</h3>
<p>PASV(パッシブモード)に対応できるようiptables設定。</p>
<pre class="type1"><code># modprobe ip_conntrack_ftp
# cat /etc/sysconfig/iptables-config
・・・
IPTABLES_MODULES="ip_conntrack_ftp"
・・・
</code></pre>
<p>※kernel-2.6.20から、ip_conntrack*関連が nf_conntrack*に置き換わっているので注意。</p>
<h3>9.TcpWrapperによるアクセス制限</h3>
<p>すべて拒否してから、許可するサービス、IPを記述。</p>
<p>/etc/hosts.deny</p>
<pre class="type1"><code>ALL: ALL</code></pre>
<p>/etc/hosts.allow</p>
<pre class="type1"><code>sshd: 192.168.0.0/255.255.255.0
vsftpd: 192.168.0.0/255.255.255.0 192.168.1.0/255.255.255.0
</code></pre>
<h3>10.起動</h3>
<pre class="type1"><code># /etc/init.d/vsftpd restart
# chkconfig  vsftpd on
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.hogepage.net/2009/11/centos/257.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

