http://www.tamochan.com - Gentoo Linux で自宅サーバ運用中!

Homeserver Install Guide

目次

はじめにGo To Index

さまざまなインターネットのサービスを提供するサーバ.皆さんもインターネットを利用しているなら,必ずお世話になっています.

通常,サーバは主にプロバイダなど第3者によって運営され,我々はその利用権限をもらったり買ったりして利用します.

自宅サーバはそのサーバを自宅に設置し,自らの手で運営し,ネットワークに関するスキルアップと快適なインターネット環境を模索することを目的とします.

自宅サーバは以前なら自宅まで専用線を引き,IPアドレスを買い,サーバ専用の機器を購入し・・・.と,構築には莫大な費用と手間がかかりました.しかし,近年の情報インフラの普及に伴い,非常に安価に構築が可能です.

専用線はフレッツADSL・ISDN,あるいはBフレッツなどの一般向けの常時接続で代用可能ですし,IPアドレスも一つ月々1,000円ぐらいからもらえるようになりました.また,LINUXを利用すれば,apacheなど世界標準のサービスソフトウェアが無償で提供されているので,ソフトウェアはOSを含め,すべて無償でそろえることができます.

このページではこれから自宅サーバを構築する人のために,私の経験を踏まえて,機器の選定から導入,ソフトウェアの設定までを紹介して行きます.

しかし,あくまで私の経験ですので,正しいとは限りません.ここでの内容を実行するときはすべて自らの責任の上で行ってください.

1 環境選び,環境作りGo To Index

1.1 回線Go To Index

Bフレッツ光終端装置

思い立ったが吉日!さあ,いきなりはじめます.まずは家にインターネットを引きましょう.これを見てるなら,多分もう引いてあるでしょう.でも,本格的にサーバを立てたいのなら,常時接続が基本.フレッツADSL・ISDN,あるいはBフレッツなどがいいのではないでしょうか.私はBフレッツ,ファミリータイプにしました.これから先は,Bフレッツであることを前提に話を進めさせていただきます.

申し込んでから1ヶ月強で工事をしてくれました.工事は1時間ぐらいで終わりました.青い光ファイバを外から引っ張って,屋内にある光終端装置につける程度の工事です.速度は速いときで5Mbpsぐらいです.遅いような気がしますが・・・.ADSLよりは劇的に早くなったので良しとします.

1.2 ルータGo To Index

設置状況 SuperOPT50

ブロードバンドルータを決めます.自宅サーバ運営で必要な機能は

しかも,ブロードバンドの場合は

も考慮に入れる必要があります.私はマイクロ総合研究所 NetGenesis SuperOPT50にしました.設定が少々面倒くさいところがありますが,パケットフィルタリングが細かく設定できるところが嬉しいです.高機能,高スループットで最高のルータだと思います.

1.3 プロバイダGo To Index

プロバイダは固定IPをくれるところがいいです.今は結構増えてきています.まだまだBフレッツの固定IPは高いですが・・・.http://www.flatray.com/static-ip/index.htmlに,固定IPを提供しているプロバイダの一覧があります.

1.4 ドメイン名Go To Index

ドメイン名を取ります.私はお名前.comでとりました.

もし,DNSを管理するのが面倒ならば,DNS登録も同時にやってくれるレジストリがあるので,そこを狙うのがいいでしょう.独自ドメイン取得情報は参考になります.

1.5 本体Go To Index

我が家のサーバ

たいしたスペックは要りません.私はあまりパーツで自分で組み立てました.ただ,ネットワークカードは100Mbpsにしたほうがいいです.

1.6 OSGo To Index

Linux,特に今回はRedHat Linux 7.2にします.ほとんどの場合,OSもソフトウェアも無料です.Windowsはセキュリティ面でちょっと不安があります.世界的に見ても,Unixベースのサーバのほうが圧倒的に多いと思いますから,Linuxに慣れることはのちのち有利になるかもしれません.

1.7 提供するサービスとそのサーバソフトウェア

の5つとします.telnetはセキュリティ上提供しません.ソフトウェアは世界標準といっても過言ではないものを選んでいます.使われていないものを使っても将来役に立たなさそうですから・・・.

2 インストールGo To Index

2.1 OSGo To Index

まずはOSのインストールからはじめます.RedHat Linux 7.2を雑誌,またはFTPでイメージを落としCDに焼くなりして手に入れます.

インストール方法はカスタムインストールとします.一つ一つ自分で決めながらインストールです.

まずは,パーティションの切り方です.

/varと/homeは後々のことを考えて,分けたほうがいいです./varにはログとメール,/homeにはユーザのデータが記憶されています.swapはメモリと同じぐらいの大きさをとります.

IPの割り当ててすが,DHCPではなく固定でわかりやすい番号を一つ決めておきます.ルータによってはDHCP機能が働いている場合があるので,DHCPで割り当てるIPの範囲外のものにしておきます.サーバ名も自分の好きな名前をつけます.

同時にインストールするパッケージですが,ネットワーク関連のソフトウェアは入れても入れなくてもかまいません.どうせ後で最新版を探してくるからです.

2.2 RPMについてGo To Index

RPM(RedHat Package Manager)とは、パッケージ管理システムです。RPMでパッケージ、平たく言うとソフトウェアを管理することで、依存性のチェックやアップデートなどを楽〜に行うことができます。

ソフトウェアをソースからコンパイルしてインストールすると、設定ファイルやログが/usr/local 以下に入ってしまうことが多く、管理も面倒くさくなってしまいます。RPMでインストールすろと設定ファイルは/etc 以下、ログは/var/log 以下にきちんと置かれるので大変管理がしやすくなります。

こんな楽なRPMですが、結構探すのが面倒くさかったり、逆にインストールやアップデートが面倒くさくなることがあります。RPMのバイナリパッケージはKondara用とかVine用とかって言うのがあるので、所望の物がなかなか無かったりします。インストールのときはちゃんと依存関係をチェックするので、入れておかなければいけない物があったら怒られて、それを探しにいって、・・・なんてことがあったりします。また、ソフトウェアの最新版がRPMになって無かったりということもあります。また、アーキテクチャによっても異なったりします。普通はi386ですが・・。

でも、やっぱりRPMがいいです。ソースからコンパイルしてなんぼ!という人もいるかもしれませんが、僕はRPMを意地でも使って管理をしたほうが一元的に管理ができていいと思います。

2.3 BINDGo To Index

では,いよいよソフトウェアを入れていきます.まずはDNSを担当するBINDを入れていきます.BINDはバージョン9を入れます.BIND9は内部からは内部向けの名前引き、外部からは外部向けの名前引きをしてくれます.これが,IPアドレスを一つしかもらえないホームサーバにとってはありがたいからです。/etc/named.confには以下のような設定を行ってみます。

options { //辞書ファイルをどこに置くか? directory "/var/named"; }; //対内部用名前引きの設定 view "internal"{ //この設定をどのIPに効かせるか match-clients {192.168.0.0/24; 127.0.0.0/8;}; recursion yes; zone "." IN { type hint; file "named.ca"; }; //ローカルホスト順引き zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; }; //ローカルホスト逆引き zone "0.0.127.in-addr.arpa" IN { type master; file "named.local"; allow-update { none; }; }; //内部LAN用順引き zone "tamochan.com" IN{ type master; notify no; file "tamochan.com.local.zone"; }; //内部LAN用逆引き zone "0.168.192.in-addr.arpa" IN{ type master; notify no; file "0.168.192.rev"; }; }; //外部公開用 view "external"{ match-clients {any;}; recursion no; //外部用順引き zone "tamochan.com" IN{ type master; notify no; file "domain"; }; };

外部用の逆引きは,プロバイダの都合上,してくれないので,記述していません.

個々の辞書ファイルですが,外部向きの設定ファイル(上の設定ファイルに合わせると,/var/named/domain)だけ公開します.

$TTL 43200 @ IN SOA dns.tamochan.com. tamori.tamochan.com. ( 2002022501;serial 28800;refresh 14400;retry 3600000;expire 86400;minimum ) dns IN A 211.133.147.90 @ IN NS dns.tamochan.com. //メールサーバ @ IN MX 10 mail.tamochan.com. //エイリアスの設定 www IN CNAME dns.tamochan.com. ftp IN CNAME dns.tamochan.com. mail IN CNAME dns.tamochan.com.

細かい部分は他所に譲るとして,結構重要なのは,上で行くとserial.これはシリアル番号で,変更を行った際には必ず,さらに大きな番号をつけておきます.変更した日付(YYYYMMDD)+2桁の通し番号としておくと,大きな番号になっていきます.また,忘れがちなのがdns.tamchan.com.の最後のピリオド.本当に忘れます.

2.4 ProFTPDGo To Index

FTPサービスを実現するソフトウェアにProFTPDがあります.RPMでインストールすると設定ファイルは/etc/proftpd.confです.この設定を見ていきます.

# This is the ProFTPD configuration file # 起動時に最初に表示させるメッセージ ServerIdent on "tamochan.com FTP Server ready." #アドミニストレータのメールアドレス ServerAdmin root@tamochan.com #ined経由で起動するので,standaloneではなくて,inetd ServerType inetd DefaultServer on # Use pam to authenticate by default AuthPAMAuthoritative on # Do not perform ident lookups (hangs when the port is filtered) IdentLookups off # Port 21 is the standard FTP port. Port 21 # Umask 022 is a good standard umask to prevent new dirs and files # from being group and world writable. Umask 022 # Chmod isn't allowed by default #AllowChmod on # Default to show dot files in directory listings LsDefaultOptions "-a" # See Configuration.html for these (here are the default values) #MultilineRFC2228 off #RootLogin off #LoginPasswordPrompt on #MaxLoginAttempts 3 #MaxClientsPerHost none # To prevent DoS attacks, set the maximum number of child processes # to 30. If you need to allow more than 30 concurrent connections # at once, simply increase this value. Note that this ONLY works # in standalone mode, in inetd mode you should use an inetd server # that allows you to limit maximum number of processes per service # (such as xinetd) MaxInstances 30 # Set the user and group that the server normally runs at. User nobody Group nobody # Normally, we want files to be overwriteable. <Directory /*> AllowOverwrite on </Directory> #anonumous(匿名)は受け付けないようにするため,コメントアウト. # A basic anonymous configuration, no upload directories. #<Anonymous ~ftp> # Uncomment the following line to allow anonymous access #RequireValidShell off # AllowChmod off # User ftp # Group ftp # AccessGrantMsg "Anonymous login ok, restrictions apply." # We want clients to be able to login with "anonymous" as well as "ftp" # UserAlias anonymous ftp # # Limit the maximum number of anonymous logins # User ftp # Group ftp # AccessGrantMsg "Anonymous login ok, restrictions apply." # We want clients to be able to login with "anonymous" as well as "ftp" # UserAlias anonymous ftp # # Limit the maximum number of anonymous logins # MaxClients 10 # We want 'welcome.msg' displayed at login, '.message' displayed in # each newly chdired directory and tell users to read README* files. # DisplayLogin welcome.msg # DisplayFirstChdir .message # DisplayReadme README* # Limit WRITE everywhere in the anonymous chroot # <Limit WRITE> # DenyAll # </Limit> #</Anonymous>

FTPはinetdを経由して起動します.inetdとは,一つのプロセスでいろんなポートを見張っていて、クライアントからの通信が来た場合に初めてサーバを実行してくれる便利な仕組みのことです.そこで次に,このinetdの設定をします.RedHatでは,inetdのさらに強力な管理機能を持つxinetdになっています.設定ファイルは/etc/xinetd.d/proftpdです.

# default: off # description: The ProFTPD FTP server serves FTP connections. It uses \ # normal, unencrypted usernames and passwords for authentication. service ftp { socket_type = stream wait = no user = root server = /usr/sbin/in.proftpd log_on_success += DURATION USERID log_on_failure += USERID nice = 10 disable = no }

曲者はdisableでしょうか.デフォルトではyesになっていますが,noにしないと,起動しません.

2.5 SSHGo To Index

リモートでサーバを管理するために,従来はtelnetを使っていました.しかし,telnetは内容が暗号化されないため,パスワードなどが容易に盗聴できました.そこで,SSH(Secure SHell)を採用するところが多くなってきています.パケットをすべてRSAまたはDSAという方法で暗号化して送るため,盗聴しにくくなっています.また,SSHにはポートフォワードという便利な機能もあるため,利用しない手はありません.

RSA方式を採用するものがSSH1,DSA方式を採用するものがSSH2となります.暗号強度的にはDSA方式のほうが有利ですが,Windowsからアクセスするためには,ソフトウェアの都合からRSA方式でなくてはならないようです.両方に対応しているものがOpenSSHです.RPMでいれると,/etc/ssh/sshd_configが設定ファイルになります.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin # This is the sshd server system-wide configuration file. See sshd(8) # for more information. Port 22 Protocol 2,1 #ListenAddress 0.0.0.0 #ListenAddress :: HostKey /etc/ssh/ssh_host_key HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key ServerKeyBits 768 #ポートフォワードなどでつなぎっぱなしにしたいときは0 LoginGraceTime 0 KeyRegenerationInterval 3600 #ルートでのログインを拒否 PermitRootLogin no # Don't read ~/.rhosts and ~/.shosts files IgnoreRhosts yes # Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication #IgnoreUserKnownHosts yes StrictModes yes X11Forwarding yes X11DisplayOffset 10 PrintMotd yes #AllowUsers tamori #PrintLastLog no KeepAlive yes # Logging SyslogFacility AUTH LogLevel INFO #obsoletes QuietMode and FascistLogging RhostsAuthentication no # # For this to work you will also need host keys in /usr/local/etc/ssh_known_host s RhostsRSAAuthentication no # similar for protocol version 2 HostbasedAuthentication no RSAAuthentication yes #平文パスワードの拒否 # To disable tunneled clear text passwords, change to no here! PasswordAuthentication no PermitEmptyPasswords no Subsystem sftp /usr/local/libexec/sftp-server (END)

平文パスワードの拒否はnoにしておいたほうがいいでしょう.クライアントには秘密鍵,サーバ側には自分のホームディレクトリに.sshというディレクトリを作り,中に公開鍵を置きます.

SSHはVPNにも応用されているようですので,暗号化ということに免疫をつけるにはちょうどいい第一歩かもしれません.

2.6 ApacheGo To Index

Apacheはいわずと知れたウェブサービスを提供するソフトウェアです.今では最新版として2.0が出ていますが,ここでは1.3について紹介します.RPMでのインストールではインストール後,デーモンを立ち上げ,127.0.0.1にアクセスするとすぐに「It worked!」などという画面がすぐに出てくれます.ただ,外部に公開するにはいくつか設定を変更しなくてはなりません.以下に,/etc/httpd/conf/httpd.confの変更するべき一部を抜粋して紹介します.

#サーバの管理者のメールアドレス ServerAdmin webmaster@tamochan.com #サーバの名前 ServerName www.tamochan.com #http://www.tamochan.comのルートディレクトリ.まずはじめに参照するディレクトリ. DocumentRoot "/home/webmaster/public_html" #/home/*/public_htmlの設定.CGIやSSIが動くようにしてある. <directory home/*/public_html> AllowOverride FileInfo AuthConfig Limit #CGIの実行を許可 Options MultiViews Indexes SymLinksIfOwnerMatch ExecCGI   #SSIの実行を許可 Options +Includes <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS PROPFIND> Order deny,allow Deny from all </LimitExcept> </Directory> #CGIのファイルを設定 AddHandler cgi-script .cgi #SSIのファイルを設定 AddType text/html .shtml AddHandler server-parsed .shtml #バーチャルホストの設定 #まずはNameVirtualHostにサーバのIPを設定 NameVirtualHost 192.168.0.22 #もし,http://tanpopo.tamochan.comでアクセスしてきた場合 #ドキュメントルートは/home/tanpopo/public_htmlに設定 <VirtualHost 192.168.0.22> ServerAdmin tanpopo@tamochan.com DocumentRoot /home/tanpopo/public_html ServerName tanpopo.tamochan.com #ログの出力先 ErrorLog /var/log/httpd/error_log CustomLog /var/log/httpd/access_log common </VirtualHost>

CGIやSSIの設定が少々面倒くさいといったところでしょうか.ユーザに好評なのがヴァーチャルホストの設定.ユーザのホームページがhttp://***.tamochan.comのような,チルダなしのアドレスで公開できます.ヴァーチャルホストの設定後は,違う名前でもアクセスできるように,/var/named/domain(正引きファイル)に,たとえば次の一行を足しておきます.

tanpopo IN CNAME dns.tamochan.com.

2.7 Postfix&QpopperGo To Index

一番重要なのがメールでしょう.ここはしっかり設定しないと,スパムメールの発信元などになりかねないので,気をつけます.

tamochan.comは"POP before SMTP"というものを採用しています.SMTPには本来, 認証手続きがないために,外部からのメールのリレーを許可すると,スパムメールのようなメールの不正中継に使われてしまう恐れがあります.だからといってメールのリレーを許可しないと外部からSMTPが使えなくなるので,たとえば自宅にメールサーバがあって,外出先から自宅のアカウントでメールを出したい,なんてときには不便です.そこで,外部のマシンがPOP接続をした場合,その後数分間は同じマシンからの SMTPリレーを許可することで,あたかもSMTPにユーザ認証機能が付いているかのようにするのが"POP before SMTP"です.(一部,PostfixとAPOP,POP before SMTPより引用)

今回はは,SMTPを提供するものにPostfix,POP3を提供するものにQpopper,POP before SMTPを提供するものにはDRACをそれぞれ利用します.

まずはDRACのインストール.http://mail.cc.umanitoba.ca/drac/よりDRACをダウンロードし,解凍します.

% tar xzvf drac.tar.Z

次にDRACのMakefileを編集します.

INSTALL = install EBIN = /usr/sbin DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C -DREQ_HASH CFLAGS = $(DEFS) -g LDLIBS = -ldb TSTLIBS = -L. -ldrac RPCGENFLAGS = -C -I MANADM = 8

rpc.dracd.c を編集します.

#define DBFILE "/etc/postfix/dracd.db" #define ALFILE "/etc/postfix/dracd.allow"

dracd-setup.linux を編集します.ここでは,POP認証の有効期限を60分に設定しています.

"daemon rpc.dracd&"の行を"daemon rpc.dracd -e 5&"に変更.

コンパイルとインストールを行います.

% make % make install % make install-man % cp dracd-setup.linux /etc/rc.d/init.d/dracd % ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc3.d/S78dracd % ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc5.d/S78dracd % ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc6.d/K22dracd

DRACの最後の仕上げは,Qpopperのインストール時に必要なライブラリを自分でインストールします.

% cp libdrac.a /usr/lib/

つぎは,Qpopperのインストールです.まず,ソースのRPMを探してきて,インストールします.

% rpm -ivh qpopper-4.0.3-0vl1.src.rpm

QpopperをDRAC対応にするため,specファイルを編集します.

% cd /usr/src/redhat/SPECS % vi qpopper.spec (%buildセクションに追加) --prefix=/usr \ --enable-bulletins=/var/spool/mail/bulletins \ --enable-specialauth \ --with-pam=qpopper \ --with-popuid=pop \ --enable-apop=/etc/pop.auth \ --enable-drac (←これを追加) (%preセクションのuseraddにオプションを追加) /usr/sbin/useradd -M -g pop pop -c "Pop Account" -d /dev/null -s /dev/null

rpmを作成します.

% rpm -bb qpopper.spec

Qpopperの仕上げとして,作ったQpopperをアップデートします.

% cd /usr/src/redhat/RPMS/i386 % rpm -Uvh qpopper-4.0.3-0vl1drac.i386.rpm

いよいよPostfixのインストールです.RPMでインストールすると,設定ファイルは/etc/postfix/main.cfです.それでは見ていきましょう!主なものを抜粋です.

#キューをためるディレクトリ queue_directory = /var/spool/postfix #メールオーナー mail_owner = mail #ホストネーム myhostname = mail.tamochan.com #ドメイン mydomain = tamochan.com # myorigin パラメータにはローカルで送信されたメールがどのドメインから # 来るように見えるかを指定 myorigin = $mydomain #このマシンが自分自身が最終目的地だとみなすドメインのリストを指定 mydestination = $myhostname, localhost.$mydomain, $mydomain, mail.$mydomain, www.$mydomain, ftp.$mydomain #エイリアスのファイル alias_maps = hash:/etc/aliases #/sbin/newaliacesを実行したとき,どんなデータベースを作るか alias_database = hash:/etc/aliases #メールをためるディレクトリ mail_spool_directory = /var/spool/mail #このメールシステムがどのクライアントから #リレーを受けるか、またはどの目的地にメールをリレーするかを制限 relay_domains = $mydestination #SMTPを受け付けるアドレス mynetworks = 192.168.0.0/16, 127.0.0.0/8, 211.133.147.90/32 #POP before SMTPを動かす設定 smtpd_recipient_restrictions = permit_mynetworks, check_client_access btree:/etc/mail/dracd, check_relay_domains #わかんないドメインからのメールは拒否 smtpd_sender_restrictions = reject_unknown_sender_domain #送信を許可する最大のファイルサイズ message_size_limit = 1024000 #メールの寿命 maximal_queue_lifetime = 12h

POP before SMTPを動かす設定を忘れないようにします.また,送信を許可する最大のファイルサイズも設定しておいたほうが,メール爆弾などが送られなくてすみます.

一番トラフィックが多いのはメールになってくると思います.きちんと設定しなければ損害賠償!なってこともあるかもしれないので,慎重に設定をしてください.なお,第三者中継のチェックはhttp://www.nanet.co.jp/rlytest/relaytest.htmlでやってくれますので,公開する前に試してみてください.

2.8 ルータの設定Go To Index

さぁ,いよいよ外部に公開!そこで最後の仕上げとして,ルータの設定をします.必要な設定は静的IPマスカレードです.これは,インターネット側から配信されたIPフレームを,プロトコルやポート番号に応じて内部LANの特定のIPアドレスへ転送する機能です.今回はサーバのアドレスを192.168.0.100として,設定をしてみます.

試しに,ポートスキャンをかけてみます.http://210.143.99.143/~p-sec/pscan.htmlからかけてみて,余計なポートは開いていませんか?確認してみてください.

2.9 WebDAVGo To Index

WebDAVとは(簡単に言うと)HTTPでファイル転送を行う,FTPに変わるものと注目されるファイル共有プロトコルです.コネクションが単一方向なので,どうもファイアウォールでFTPが邪魔される,ということも無くなるようです.また,サーバサイドでの処理,一本のコネクションでの処理というメリットもあります.なお,ここで紹介する設定例はapache1.3用です.ご了承ください.

まず,apacheに必要なモジュールが入っているか確認します.mod_so.cが入っていれば利用可能です

% httpd -l Compiled-in modules: http_core.c mod_so.c SUExec: enabled; valid wrapper /usr/sbin/suexec

rpmを探してきてインストールしましょう.パッケージによってはすでに入っていることもあるようです.以下のコマンドで確認してみましょう.私はすでにインストール済みでした.入れた覚えはないのですが….

% rpm -qa | grep mod_dav

いよいよhttpd.confの設定です.

#以下の2行はあらかじめ書いてあるかもしれません LoadModule dav_module modules/libdav.so AddModule mod_dav.c #ロックデータベースの設定.どこに設定してもいいが,ディレクトリに #httpdプロセスのユーザ権限で書き込み可能でなくてはならない. DAVLockDB /usr/local/apache/DAVLock #Aliasの設定.設定した方がいいかも. #エイリアス先はpublic_html以下はさけた方が無難. Alias /dav "/home/httpd/davhome" #指定のディレクトリに対してWebDAV可能にする. <Location /dav> DAV on </Location>

httpdの再起動を忘れずに.ここまででとりあえず可能です.Windowsだと,「ネットワークプレイスの追加」により利用可能です.上の設定例だとホスト名http://www.tamochan.com/davで設定します.XPだと,ドライブ名を割り当てることもできます.

しかし,ここまでだと誰でもファイルを閲覧可能です.ここで,.htaccessファイルにより認証設定を行います.以下に.htaccessの設定例を示します.

AuthUserFIle /usr/local/apache/pass.pwd #パスワードファイル名.後述. AuthGroupFile /dev/null #認証用グループファイル AuthName DAVhome #認証ダイアログ表示用文字列 AuthType Basic #認証タイプ <LimitExcept GET OPTIONS> Require user tamochan </LimitExcept>

GET,OPTIONS以外の操作は認証が必要という設定でした.次にパスワードの設定です.以下のコマンドによりパスワードを入力してください.

% htpasswd -c /usr/local/apache/pass.pwd tamochan

さらに,.htaccessが動くようにhttpdの設定です.httpd.confに以下の設定を加えてください.

<Directory /home/httpd/davhome> AllowOverride Limit AuthConfig </Directory>

これで,(WinXPではなく)Win2000ではアクセスすると認証画面が表示されます.WinXPではなぜか認証画面が出ても認証されません.

さらに,このままだと日本語のファイル名を持つものを登録するとファイル名が文字化けしてしまいます.よって,mod_encodingというモジュールを導入します.これはWinXPの認証問題と日本語の問題を一気に解決してくれるものです.

まず,WebDAV Resourcesからソースアーカイブをダウンロードします.適当に展開します.

次にコンパイルですが,まず展開されたディレクトリの直下にlibディレクトリがあるので,そこの中からコンパイルです.

% cd lib % ./configure % make % make install

これについては詳しいことはあまり述べないことにします.次に本体のコンパイルです.

% cd .. (コメント)apxsというコマンドのパスとiconv_hookライブラリのパスの指定をしてください. % ./configure --with-apxs=/usr/sbin/apxs --with-iconv-hook=/usr/local/lib % make % make install

さらに,httpd.confの設定です.

LoadFile /usr/local/lib/libiconv_hook.so LoadModule encoding_module modules/mod_encoding.so <IfModule mod_headers.c> Header add MS-Author-Via "DAV" </IfModule> <IfModule mod_encoding.c> EncodingEngine on NormalizeUsername on SetServerEncoding UTF-8 DefaultClientEncoding JA-AUTO-SJIS-MS SJIS AddClientEncoding "cadaver/" EUC-JP </IfModule>

httpdを再起動して確認してください.

2.10 SpamAssassinGo To Index

あまり望ましくないことですが、運営していると外部にメールアドレスが漏れたりしてスパムメールが頻発してくるようになることがあります。そういうときの強い見方がSpamAssassinです。これをMTAに組み合わせて使うことにより、強力なスパムフィルタにより自動的にスパムメールと思われるメールを廃棄してくれます。今回はデーモン(spamd)を起動しておいて、一回ずつ呼び出して処理するという手法を紹介します。

まず、SpamAssassinより、tarボールをダウンロードしてきます。このtarボールにはspecファイルが含まれているのでrpmパッケージが作成可能です。rpmパッケージは3つ作られると思いますが、いずれも一応インストールします。

次に、デーモンとして動かすための準備をします。以下のスクリプトを用意します。(rpmを入れたら入っているかもしれません。)

#!/bin/sh # # spamassassin This script starts and stops the spamd daemon # # chkconfig: 2345 80 30 # # description: spamd is a daemon process which uses SpamAssassin to check # email messages for SPAM. It is normally called by spamc # from a MDA. # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 # Source spamd configuration. if [ -f /etc/sysconfig/spamassassin ] ; then . /etc/sysconfig/spamassassin else SPAMDOPTIONS="-d -c -a -m5 -H" fi [ -f /usr/bin/spamd -o -f /usr/local/bin/spamd ] || exit 0 PATH=$PATH:/usr/bin:/usr/local/bin # See how we were called. case "$1" in start) # Start daemon. echo -n "Starting spamd: " daemon spamd $SPAMDOPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/spamassassin ;; stop) # Stop daemons. echo -n "Shutting down spamd: " killproc spamd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/spamassassin ;; restart) $0 stop $0 start ;; condrestart) [ -e /var/lock/subsys/spamassassin ] && $0 restart ;; status) status spamd ;; *) echo "Usage: $0 {start|stop|restart|status|condrestart}" exit 1 esac exit 0

このスクリプトをspamdとして保存し実行権限を与え、各ランレベルでデーモンとして起動するようにします。

% chmod +x spamd % /sbin/chkconfig spamd on

TLECより、設定ファイルをダウンロードし利用します。これを/etc/mail/spamassassin/local.cfとして保存します。

次に、Postfixのフィルタとしてのスクリプトを用意します。要するに、メールを受け取ったり発信したりする都度にこのスクリプトを実行するようにさせるわけです。様々なHPを参考に、私は以下のようなスクリプトを作成しました。

#!/bin/bash #SpamAssasin filter with Postfix #FILE PATH RM=/bin/rm INSPECT_DIR=/var/spool/filter OUTPUTFILE=out.$$ SENDMAIL=/usr/sbin/sendmail KILLFILE=/var/log/spammail SPAMASSASSIN=/usr/bin/spamc #Exit codes from EX_TEMPFAIL=75 EX_UNAVAILABLE=69 #Move to Work Dir cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist : exit $EX_TEMPFAIL; } #Clean up when done or when aborting trap "$RM -f $OUTPUTFILE" 0 1 2 3 15 cat | $SPAMASSASSIN -x > $OUTPUTFILE #メールのヘッダにspamdによってつけられる"X-Spam-Status: Yes"があるなら、KILLFILEに捨てる。 spamflag=`less $OUTPUTFILE | grep -c 'X-Spam-Status: Yes'` if [ $spamflag = 1 ]; then cat $OUTPUTFILE >> $KILLFILE #それ以外なら処理。 else $SENDMAIL "$@" < $OUTPUTFILE fi exit $?

さらに、Postfixのmain.cfに、フィルタの定義を追加します。

filter unix - n n - - pipe user=filter argv=/usr/local/bin/sa_filter.sh -f ${sender} -- ${recipient}

次にmain.cfのsmtpの部分を書き換えます。

smtp inet n - n - - smtpd -o content_filter=filter:

Postfixを再起動し、きちんと動作するか確認します。

参考:http://www.sonorilo.net/spamassassin。ありがとうございました。

3 日々の管理Go To Index

3.1 logcheckGo To Index

日々の管理は,やはり/var/log以下のログを随時チェックすることが大事ですが,膨大なログを,逐一チェックするのは大変に手間のかかる作業です.

しかし,我々には大きな見方がいます.その名はlogcheck.大事なログだけを抜粋して設定時間おきにメールで送ってきてくれます.

RPMで入れて,早速設定します.まず,どのログファイルチェックするかを設定します./usr/bin/logcheck.shを編集します.以下に抜粋を示します.

# Linux Red Hat Version 3.x, 4.x $LOGTAIL /var/log/messages > $TMPDIR/check.$$ $LOGTAIL /var/log/secure >> $TMPDIR/check.$$ $LOGTAIL /var/log/maillog >> $TMPDIR/check.$$ $LOGTAIL /var/log/router >> $TMPDIR/check.$$ #apacheのエラーログも送るようにする. $LOGTAIL /var/log/httpd/error_log >> $TMPDIR/check.$$

次に,どんなログが大事で,どんなログがいらないかを設定します.特に,いらないログを設定することは大事です.一杯送られてきたら意味がないですから・・・.この設定は/etc/logcheck以下にありますが,今回はいらないログの設定を示します./etc/logcheck/ignoreには,「こんな文字列があるものは,いらない!」という設定をすることができます.

authsrv.*AUTHENTICATE cron.*CMD cron.*RELOAD cron.*STARTUP ftp-gw.*: exit host ftp-gw.*: permit host ftpd.*ANONYMOUS FTP LOGIN ftpd.*FTP LOGIN FROM ftpd.*retrieved ftpd.*stored http-gw.*: exit host http-gw.*: permit host mail.local named.*Lame delegation named.*Response from named.*answer queries named.*points to a CNAME named.*reloading named.*starting netacl.*: exit host netacl.*: permit host popper.*Unable popper: -ERR POP server at popper: -ERR Unknown command: "uidl". telnetd.*ttloop: peer died tn-gw.*: exit host tn-gw.*: permit host x-gw.*: exit host x-gw.*: permit host xntpd.*Previous time adjustment didn't complete xntpd.*time reset root 1 named.*Cleaned named.*USAGE named.*NSTATS named.*XSTATS ntpd.*ntpd ntpd.*precision ntpd.*using ntpd.*frequency ntpd.*: synchronisation lost postfix/pickup.*: uid= postfix/cleanup.*: message-id postfix/nqmgr.*: from= postfix/local.*: to= postfix/smtp.*250 postfix/smtpd.*: connect from postfix/smtpd.*: disconnect from postfix/smtpd.*client sshd.*: Connection closed by sshd.*: Accepted rsa PAM_pwdb.*: (login) session opened PAM_pwdb.*: (login) session closed named.*bad referral named.*Lame server on popper.*: login popper.*: Stats: xinetd.*pop3

.* というのはワイルドカードです.上手に利用して,アタックの早期発見を心がけましょう.

最後に,一時間おきにlogcheckを起動します.cronに書いておきます.

% su % crontab -e (この行を追加) 00 * * * * /usr/bin/logcheck.sh

3.2 SYSLOG機能を利用したルータのログ管理Go To Index

私の所有するルータには,SYSLOG機能があります.ログを,指定したIPアドレスに送ってくれる機能です.もしルータにこの機能があるなら,絶対に利用するべきです.

ルータの設定は説明書にお任せして,ここではサーバ側の設定を行います./etc/sysconfig/syslogを編集します.

#Options to syslogd # -m 0 disables 'MARK' messages. # -r enables logging from remote machines # -x disables DNS lookups on messages recieved with -r # See syslogd(8) for more details SYSLOGD_OPTIONS="-m 0 -r" #<-ここを変更 # Options to klogd # -2 prints all kernel oops messages twice; once for klogd to decode, and # once for processing with 'ksymoops' # -x disables all klogd processing of oops messages entirely # See klogd(8) for more details KLOGD_OPTIONS="-2"

SYSLOGD_OPTIONS="-m 0 -r"の"-r"オプションをつけることで外部からのSYSLOGを受け付けるようになります.最後に,SYSLOGデーモンを再起動すると,/var/log/messagesにルータのログが記録されていきます.

% /etc/init.d/syslog restart

3.3 攻撃がしつこいときに・・・パケットフィルタリングのマスクGo To Index

たとえば,こんなログが残ったりします.

[Wed May 15 20:50:53 2002] [error] [client 211.5.***.***] File does not exist: /home/webmaster/public_html/scripts/..%5c../winnt/system32/cmd.exe

ルータのパケットフィルタリングはわかりづらいことがあります.IP/MASKといわれても,MASKってなに?って感じです.ここでは,このマスクについて解説します.

これは有名なNimdaから攻撃されたログです.IPドメインサーチで211.5.***.***を見ると、こんな感じで返事が返ってきます。

……… inetnum: 211.0.0.0 - 211.7.255.255 ………

この全体をパケットフィルタリングします.おもむろに電卓で前から2進数になおしてみます.

おもむろに2進数

前から13桁は変化なし,後ろの19桁はがらりと変わっています.この変化のなかった桁数,13という数字がマスクになります.ですから,この範囲からのパケットをはじきたい場合には

211.0.0.0/13

という設定になります.フィルタリングしたい最初のIP/変化のない桁数 です.

気をつけて設定しないと,予期しないところからもアクセスできない場合が出てきますので,気をつけて設定しましょう(汗).

ちなみに,http://www.nextcom.co.jp/tools/addr.htmで,サブネットに関する計算をしてくれます.参考にしてみてください.

3.4 up2dateでアップデートを簡単にする!Go To Index

RedHatにはup2dateという自動アップデート機能があるんです.設定方法を簡単にご説明します.まずはRedHat Networkだかに登録をします.登録は無料のようです.

% rhn_register --configure % rhn_register --nox

初期設定です.

% up2date --nox --configure

自動起動の設定です.

% ntsysv この後,rhnsdをON

いよいよアップデート.以下のコマンドを打つと,ずら〜っとアップデートしてくれます.

% up2date -u

4 最後にGo To Index

最後に,私が自宅サーバを立ち上げてよかったなって思うことをいくつか.

まず,知識レベルがものすごく高くなりました.インターネットって,どんな仕組みなんだろうってことがだいぶわかるようになってきました.これは,資格などに非常に有利だと思います.資格は実務経験がものをいうことが多いです.学生のうちはそんなものは得ることができないので,この自宅サーバを通じて得る経験は大変に意義深いものだと思います.

リアクションがあるのも非常に嬉しいです.「DNSのセカンダリになって」とか,「設定わからないので教えて」というメールが多くなってきています.やりがいがあります.

最近は,就職活動の面接のネタとして非常に役に立ちました.私はネットワークスペシャリストを持っていますが,資格ではなく,経験を重視する企業も多いはずです.僕は面接で自宅サーバについて,たとえば苦労話など,熱く語ったらそこから話が弾むことも多かったです.

どうでしょう,皆さん.今すぐ始めてみたらいかがですか?少々費用がかさむかもしれませんが,自分の将来への投資と考えて・・・.

参考文献Go To Index