2.システム設定


パソコンのシステム設定について記述していきます。


 FreeBSD6.1ではインストール時にオンボードのネットワーク(Marvel 8053 Gigabit LAN) が認識されなかったので、まずはこれを認識させます。(認識できていないデバイスがあるかどうか のチェックは「pciconf -lv」というコマンドでわかります。「none」で始まっているものは 認識できていません。)Marvell Technology Groupのドライバ検索ページのProduct Familyで「Yukon」を選択し、Submitします。 上から2番目の「Marvell Yukon FreeBSD 6 Driver v8.12.1.3」が対応ドライバです。 ライセンスをAcceptしてダウンロードします。ダウンロードした「mykbsd60x86-8.12.2.3.tar」 を以下のようにインストールします。

# pkg_add mykbsd60x86-8.12.2.3.tar
    
起動時に自動認識させるために、/boot/loader.confを編集して「if_myk_load="YES"」を追加します。 それから、カーネルの再構築のときにモジュールが/boot/kernel/から削除されることへの対策として 以下のようにしておきます。
# mv /boot/kernel/if_myk.ko /boot/modules/
    

これでカーネルの再構築に煩わされることはありません。再起動時に「myk0」というデバイスが 認識されればうまくいっています(dmesgやifconfigといったコマンドで確認できます)。

ちなみに、Linux(CentOS、Fedora Coreなど)のインストールを試みたときはデフォルトで 「myk0」というデバイスが認識されました。したがって、FreeBSDでも近々デフォルトで認識される ようになるでしょう。

 次に、ネットワークボード「Corega CG-LAPCIGTR」を新たに装着しました(1000BASE-T対応ですが、 32bit(^^;)のPCIバス接続のLANアダプタです)。こちらは取り付けて起動するだけで自動認識 (デバイス名は「re0」)されたので何も問題なしです。

 次にいよいよ本題。NAT(Network Address Translator)を設定します。NATとは、インターネット上の パケットにあるIPアドレスやポート番号を別のものに変換する技術で、主にプライベートIPアドレスを グローバルIPアドレスに変換することに用いられます。最近のFreeBSDにはデフォルトで導入されています。 設定は、まず/etc/rc.confに以下の項目を追加します。

firewall_enable="YES"
firewall_type="OPEN"
gateway_enable="YES"
natd_enable="YES"
natd_interface="[global側のデバイス名]"
    

 最後にIP Firewallを有効にするためにカーネルを再構築しなければなりません。 マシンパワーによりますが、一般にカーネルの再構築には時間がかかります。 再構築の手順は以下のとおりです(…で囲まれた部分を変更・追加します)。 カーネル設定ファイルの名前(以下では[MYKERNEL])は適当に決められますが、 自分はホスト名にしています。([MYKERNEL]を編集するとき、不必要なデバイスを コメントアウトしておくと、再構築の時間が短縮される。ただし、よくわからない デバイスに関しては残しておいた方が無難。最悪、OSが起動しなくなります。)

# cd /sys/i386/conf/
# cp GENERIC [MYKERNEL]

# vi [MYKERNEL]
…………………………………………………………………
ident    [MYKERNEL]    # GENERICから[MYKERNEL]に変更

options  IPDIVERT
options  IPFIREWALL
options  IPFIREWALL_VERBOSE
options  IPFIREWALL_VERBOSE_LIMIT=100
…………………………………………………………………

# config [MYKERNEL]
# cd ../compile/[MYKERNEL]/
# make cleandepend
# make depend
# make install
    

上述の手順でエラーが出なければ、再起動します(エラーが出た場合、[MYKERNEL]の編集から やり直します。たいてい、コメントアウトしたデバイスが他のデバイスに依存している場合に エラーが生じます。)

以上でNATの設定は終了です。設定がうまくいっているかどうかは再起動したときのメッセージによります。 再起動後、「dmesg -a」というコマンドを入力したときに、以下のメッセージが含まれていれば問題ありません。

Starting divert daemons: natd

これでローカルネットが構築されました(^-^)。


 DHCP(Dynamic Host Configuration Protocol)は、インターネットに一時的に接続するコンピュータに IPアドレスなど必要な情報を自動的に割り当てるプロトコルのことです。localnet側のIPアドレスを 自動的に割り当てることを目的としてこの設定を行います。この設定をした理由は、localnet側から つなぐWindowsマシンで全く設定がいらなくなる(つまり、ネットワークケーブルをつなぐだけで インターネットにつながる)からです。

 まず、portsから「wide-dhcp」というパッケージをportsからインストールします(他にもdhcpを設定できる パッケージはたくさんありますが、私はこれを用いているのであしからずm(_ _)m)。

# cd /usr/ports/net-mgmt/wide-dhcp/
# make install clean
    

 次に、dhcpdb.poolファイルを/etc/にコピーし、dhcpdb.relayとdhcpdb.serverという 空のファイルを用意します。

# cd /etc/
# cp /usr/local/share/examples/wide-dhcp/dhcpdb.pool dhcpdb.pool
# touch dhcpdb.relay
# touch dhcpdb.server
    

 さらに、/etc/dhcpdb.poolを編集します。下記の記述以外はすべて コメントアウトします。

…………………………………………………………………………………
global:!snmk=[subnet mask of global]:tmof=32400:

subnet30:tblc=global:rout=192.168.1.1:dht1=500:dht2=850:\
        :brda=192.168.1.255:dnsv=[IP address of DNS server]:dnsd=[domain name of your domain]:

02:      :maxl=0xffffffff:ipad=192.168.1.2:tblc=subnet30:
03:      :maxl=0xffffffff:ipad=192.168.1.3:tblc=subnet30:
04:      :maxl=0xffffffff:ipad=192.168.1.4:tblc=subnet30:
05:      :maxl=0xffffffff:ipad=192.168.1.5:tblc=subnet30:
06:      :maxl=0xffffffff:ipad=192.168.1.6:tblc=subnet30:
07:      :maxl=0xffffffff:ipad=192.168.1.7:tblc=subnet30:
08:      :maxl=0xffffffff:ipad=192.168.1.8:tblc=subnet30:
09:      :maxl=0xffffffff:ipad=192.168.1.9:tblc=subnet30:
…………………………………………………………………………………
    

 最後に、以下の作業をして再起動すれば設定完了です。

# cd /usr/local/etc/rc.d/
# cp wide-dhcps.sh.sample wide-dhcps.sh
# vi wide-dhcps.sh
…………………………………………………………………………………………………………
${PREFIX}/sbin/dhcps myk0   # [Interface Name]にDHCPを有効にするデバイス名を記述
…………………………………………………………………………………………………………
    

 TCP Wrapperにより、不正なアクセスを防ぐためにアクセス制限が可能です。TCP Wrapperは FreeBSDにデフォルトで導入されています。ちなみに、IP Firewallでもアクセス制限をしましたが、 より頑丈にするためにこちらも設定しています。ここでは「不正アクセスがいつどこからなされた のか」を知るために独自のシェルスクリプトを組み込んだ方法を紹介します。まず、/etc/hosts.allow ファイルを以下のように編集します。

…………………………………………………………………………………
all : xxx.yyy.zzz. : spawn = ( /etc/wrappedlog %d %c %a %u %h 1 ) : allow   # global側の限られた範囲からのアクセスを許可
all : 192.168.1. : spawn = ( /etc/wrappedlog %d %c %a %u %h 1 ) : allow     # local側からのアクセスを許可
all : 127.0.0.1 : spawn = ( /etc/wrappedlog %d %c %a %u %h 1 ) : allow

all : all : spawn = ( /etc/wrappedlog %d %c %a %u %h 2 ) : deny
…………………………………………………………………………………
    

ここで、/etc/wrappedlogというファイルはもともと自分の先輩(上椙さん)が作ったものを 編集したものです(これ)。このファイルの[Your E-mail Address]の部分に 自分のメールアドレスを書いて、パーミッションを「700」(つまり、「-rwx------」)に設定し、/etc/ 以下に置きます。こうすることで、不正アクセスがあった場合に、いつあったか、どのプロトコルで アクセスしてきたか、相手のホスト名、IPアドレスなどを知ることができます。(ただし、自分のパソコンは global側もDHCPで与えられているために、あまりこの設定に意味がありません…(T-T))

余談ですが、かつては許可を指定するファイルと拒否を指定するファイルはそれぞれ「hosts.allow」、 「hosts.deny」というファイルに別れていました。統合された今でも「hosts.allow」というファイル名が 使われているのはその名残だと思われます。


 hostsファイルは、TCP/IPを利用するコンピュータにおいて、ホスト名とIPアドレスの対応を 定義するためのテキストファイルです。DNSの簡易版と思っていただいてかまいません。このファイルは /etc/以下にあります。

 まず、/etc/host.confファイルを確認してください。FreeBSDでは「hosts」が上に「dns」が下に なっています。このファイルが意味しているのは、「1番上に来ているIP or ドメイン名の認証方式を優先する」 ということです。つまり、FreeBSDのデフォルトの設定ではhostsファイルによる認証を優先している ことがわかります。さらに、/etc/nsswitch.confの中でも「hosts: files dns」という記述があります。 これも同じ意味です。hostsファイルは以下のように編集します。

………………………………………………………………………
::1        localhost     localhost.[your domain name]
127.0.0.1  localhost     localhost.[your domain name]

# Domain Name Server
133.xxx.xxx.xxx   [hostname.domainname]   [hostname]
    :

# Machine in …
133.xxx.xxx.yyy   [hostname.domainname]   [hostname]
    :

# Localnet
192.168.1.1       [myhostname.domainname]   [myhostname]
    :
………………………………………………………………………
    

注意すべき点として、hostsファイル中にはDNSサーバが入っている必要があります。そうすることで DNSサーバの設定をたどってWANの世界にアクセスすることができるからです。(DNSサーバのIPアドレスは FreeBSDインストール時にDHCPを選んだ場合、/etc/resolve.confに記述されています。DNSサーバの hostname.domainnameがわからない場合は、近場のUNIXマシンでnslookupコマンドを試してみてください。 わかるかもしれません。固定IPの場合、すでにDNSサーバがわかっているはずです。)

以上で、hostsファイルの設定は終了です。手順は


 SMP(Symmetric Multi Processor)とは、複数のCPUが同等に処理を分担する マルチプロセッサの手法です。「Intel Core 2 Duo」はデュアルコアですが、 FreeBSD 6.1の「i386」アーキテクチャのデフォルトではひとつしか認識されません。 したがって、2つ認識させるための設定が必要になります。

 で、どうするかというとIP Firewallを有効にするときにもやったカーネルの再構築です。 …で囲まれた部分を追加します。

# cd /sys/i386/conf/
# cp GENERIC [MYKERNEL] # この作業は[MYKERNEL]がすでにある場合には必要ありません

# vi [MYKERNEL]
…………………………………
options  SMP
device  apic
…………………………………

# config [MYKERNEL]
# cd ../compile/[MYKERNEL]/
# make cleandepend
# make depend
# make install
    

ちなみに、かつては「options APIC_IO」を追加していたようですが、5.2-RELEASEからは deviceとして読み込む方法に変わっています。このとき同時に「SMPは標準でサポートされるように なったらしいです。でも「デフォルトではひとつしか認識されないのはどういうこと?」 と思って/sys/i386/conf/内を調べると「SMP」というファイルを発見。このファイルを コンパイルしてやってもSMPは認識されるようです。

設定がうまくいっているかどうかは再起動したときのメッセージによります。 再起動後、「less /var/run/dmesg.boot」で

FreeBSD/SMP: Multiprocessor System Detected: 2CPUs

という記述があれば成功です。以上でSMPの設定は終了です(^-^)。


 CVSupにより、ports collectionやdocumentのアップデート、 OSのバージョンのアップグレードのためのソースファイルの取得ができます。ports からインストールできます。

# cd /usr/ports/net/cvsup/
# make install clean
    

インストール後、/usr/share/examples/cvsup/に以下のファイルが加わっているはずです。

  1. README
  2. cvs-supfile
  3. doc-supfile
  4. gnats-supfile
  5. ports-supfile
  6. refuse
  7. refuse.README
  8. stable-supfile
  9. standard-supfile
  10. www-supfile

それぞれ、「doc-supfile」はドキュメント、「ports-supfile」はports collection、「gnats-supfile」はGNATS データベース、「www-supfile」は /usr/www 以下、「stable-supfile」「standard-supfile」はOSのバージョンアップデート用のソースファイルの サンプル設定ファイルです。「cvs-supfile」はこれらのすべてを指定できます。 また、「refuse」はアップデートしたくないカテゴリーを記入することで特定カテゴリーのアップデート拒否ができます。 以下では、doc-supfile、ports-supfile、www-supfile、refuse について言及します。

「doc-supfile」と「ports-supfile」、「www-supfile」を以下のように変更します。

   ………………………………………………………
     *default host=cvsup3.jp.FreeBSD.org
     *default base=/usr/local/etc/cvsup
     *default prefix=/usr
     *default release=cvs tag=.
     *default delete use-rel-suffix
   ………………………………………………………

上述の赤で書かれた2ヶ所が変更点です。 hostを設定するとき、ネットワークが近く速度の速いサーバにつないだ方が作業時間の短縮になります。 そこで、「fastest_cvsup」というパッケージを使います。以下のように ports からインストールします。

     # cd /usr/ports/sysutils/fastest_cvsup
     # make install clean

インストールした後、以下のようなコマンドを打ちます。

     # fastest_cvsup -c jp

自分の環境では「cvsup3.jp.FreeBSD.org」が一番速かったので上述のようにしています。

base はデフォルトでは「/var/db」になっていますが、私は上述のようにしています。 (かつて、/usr/local/etc/cvsup が推奨されていたのでそれに倣っています。) 通常、/usr/local/etc/cvsupのディレクトリは存在しないので mkdirコマンドで作っておきましょう。

次は「refuse」の設定です。ports や document には英語や日本語以外のカテゴリ (e.g., 中国語、フランス語)もたくさんあります。それら不必要なカテゴリを記述するのが このファイルです。といっても、すでに全部記述されています。ですが、日本語のカテゴリは必要なので 「doc/ja_*」、「ports/japanese」の前に「#」を入力してコメントアウトします。 これで refuse の設定は終わりです。

後は、次のコマンドを実行してしばらく待てばアップグレードのためのソースファイルの取得は完了です。

     # cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile
     # cvsup -g -L 2 /usr/share/examples/cvsup/doc-supfile
     # cvsup -g -L 2 /usr/share/examples/cvsup/www-supfile

 portsnapは安全にFreeBSDのportsツリーを更新することができるツールです。 6.0-REALESEからデフォルトで実装されています。CVSupよりも短時間かつ低負荷での 更新が可能であることやファイル取得の安全性が高いことなどから、今後portsnapが 普及する可能性が高い。

設定ファイルは/etc/にある「portsnap.conf」です。更新したくないカテゴリを REFUSEで設定することが可能で、更新時間を短縮することができます。

あとは以下のコマンドを入力するだけ。2回目からは「portsnap extract」は 必要ありません。

     # portsnap fetch
     # portsnap extract
     # portsnap update

注意すべきことは、CVSupとportsnapでのportsツリー更新を 同時にやらないことです。CVSupとportsnapは必ずしもportsの更新状況が同じとは 限りません。CVSupでは更新されているものがportsnapではまだということはあり得ます。

 CVSupもしくはportsnapによって新しくなったportsツリーの中には、 すでにインストールしているものでバージョンアップされたものもあるかもしれません (ていうか、たいていあります)。何が更新されたのかは以下のコマンドを入力することで 確認できます。

     # portversion -vL=

これらをアップグレードするのが「portupgrade」です。まず、portsからインストールします。

# cd /usr/ports/sysutils/portupgrade/
# make install clean
    

このパッケージをインストールすることで、portsdb、pkgdb、portinstall、portupgrade、pkg_deinstall、 portversion、portsclean、portcvswebといったコマンドが使用できるようになりますが、ここでは詳細は 省きます(こちら のページを参考にしてください)。

次に以下のコマンドを入力します。portsdbは非常に時間がかかるので覚悟してください。3つ目のコマンドは 「アップグレード対象のパッケージをすべてアップグレードする」というコマンドです。

     # portsdb -Uu
     # pkgdb -F 
     # portupgrade -a

ちなみに、1回ですべてうまくいったら奇跡です。依存関係が複雑に絡み合っているために、 あるパッケージで必要とされているものが別のパッケージと競合したりして非常に厄介です。 根気強くがんばってください (^-^;)。

後述のcrontabと併用すると毎回手動でやる 必要がなくなります。)

 2007年5月下旬、X.Orgのバージョンが7.2(これまでのバージョンは6.9)になった portsツリーが公開されました。このバージョンだと3D対応のウィンドウマネージャ「Beryl」 が使えるらしく、おもしろそうなので試してみることに。

 インストール作業は「/usr/ports/UPDATING」にもとづいて行います(『Welcome, fearless user!』 (ようこそ、恐れ知らずのユーザーよ!)で始まる項目)。このファイルには、scriptを用いる 方法とportupgradeを用いる方法が記述されていますが、ここではportupgradeを用いてアップデートします。

まず、/etc/make.confに以下の項目を追加します。

………………………………………………………
X11BASE=${LOCALBASE}
WITH_NVIDIA_GL= yes
………………………………………………………
    

ただし2つ目の項目は、ビデオカードのドライバが「nvidia」のときのみ追加します。

次に、portupgradeを開発版にアップデートします。

     # portupgrade -f -o ports-mgmt/portupgrade-devel portupgrade
     # rm -f /usr/ports/INDEX*.db /var/db/pkg/pkgdb.db
     # pkgdb -fu

portsのINDEXファイルを生成します。(けっこう時間がかかります。)

     # cd /usr/ports && make index

環境変数を設定します(csh系の場合↓。sh系ならexportを用いる)。

     # setenv XORG_UPGRADE yes

まず、libXftに関連するパッケージをアップグレードし、その後、他のパッケージを アップグレードします(ほとんどのパッケージがマイナーアップデートをしているので、 かなり時間がかかります)。

     # portupgrade -Rf libXft
     # portupgrade -a

不要になったX.Orgのマニュアルを削除します。

     # pkg_delete xorg-manpages\*

最後に、/usr/X11R6/を/usr/local/に組み込み、/usr/X11R6/を シンボリックリンクにします。この作業を行ってくれるシェルスクリプト が生成されているのでそれを実行します。

     # sh /usr/ports/Tools/scripts/mergebase.sh

エラーが出るときは、十分確認してからエラーのもとになっている ファイルを手動で消していきます。その後、もう一度上述のコマンドを 実行します。

これでうまくいくかと思いきや、X Window System起動時に キーボードとマウスのドライバの読み込みに失敗。フォント関連の エラーも出ている。というわけで、xorg-driversとxorg-fontsを インストールします。

     # cd /usr/ports/x11-drivers/xorg-drivers/
     # make install clean
     # cd /usr/ports/x11-fonts/xorg-fonts/
     # make install clean

これで、X.Org 7.2の環境でX Window Systemが起動するはずです。


 X Window Systemを立ち上げることで作業効率は格段によくなる。なぜなら、 これまでコンソール上でひとつずつ行っていた作業を複数のターミナルで同時進行で 行えるからである。(当然ひとつひとつの作業スピードは落ちるが、それでも同時進行 できることにより全体としてのスピードは格段に上がる。……コンソール画面を切り替えれば いいだけでは?とか言わないで。)というわけで、次はX Window Systemの設定である。

 しかし、最初に問題になったのがグラフィックカードのデバイス認識。けっこう 新しいグラフィックカード(チップセット:GeForce 7600 GS)を買ったがために 苦労しました(格闘の記録はこちら)。ここでは、 前述の「portupgrade」が終わったとして話を進めていきます。

 まず、以下の2つのパッケージをportsからインストールします。

# cd /usr/ports/x11/nvidia-driver/
# make install clean
# cd /usr/ports/x11/nvidia-xconfig/
# make install clean
    

次に、設定ファイルを作成します。

# nvidia-xconfig
    

このコマンドにより、/etc/X11/以下に「XF86Config」というファイルが作成されます。 このファイルを「xorg.conf」という名前にリネームして編集します。 ただし、編集は各自のマシンのモニタ、キーボード、マウス、グラフィックカードに もとづいて行ってください。

# mv /etc/X11/XF86Config /etc/X11/xorg.conf
# vi /etc/X11/xorg.conf
    

編集が終わったらいよいよXの起動です。

# xinit
    

これでエラーなくXが立ち上がれば設定終了です。そして、一気に世界が広がります。 ここでは触れませんが、自分好みのWindow Managerを選んで使いやすいように 設定していきましょう!

最後に、私は以下の設定をしてマシンブート時にxdmが起動するようにしています。

# vi /etc/ttys
……………………………………………………………………………………………
ttyv8  "/usr/X11R6/bin/xdm -nodaemon"  xterm   on secure
……………………………………………………………………………………………
    

 sambaは、UNIX系OS上でWindowsのファイルサーバやプリントサービスを可能にする ソフトウェアです。

 まずportsから「samba3」をインストールします。

# cd /usr/ports/net/samba3/
# make install clean
    

設定ファイルは/usr/local/etc/smb.confです。もしこのファイルが無ければ、 /usr/local/etc/smb.conf.sampleからコピーしてください。編集は以下のとおりです。

   [global]

     workgroup = [your_group_name]   # Windowsマシンとそろえる必要がある

     server string = [server name]   # Windowsのネットワークコンピュータで表示される名前

     hosts allow = 192.168.1. 127.0.0.1   # アクセスを許可するマシンのIPアドレス

     display charset = CP932
     unix charset = EUCJP-MS
     dos charset = CP932


   [homes]
      comment = Home Directories
      browseable = no
      writeable = yes
      create mask = 0644

[global]の項目の中で「display charset」以下は「samba3」で新しく追加されたパラメータです。 上述のように設定しておけば問題ありません。[homes]において、「create mask」を追加しているのには 理由があります。これを設定していないと、Windowsとやり取りしたファイルにすべて実行権限が ついてしまいます。

 次は、マシンを再起動したときに自動的に Sambaデーモンが立ち上がってくれるように設定します。 /etc/rc.confに「samba_enable="YES"」と記入しておくと、起動時に/usr/local/etc/rc.d/sambaというシェル スクリプトを読み込んでくれます。

 最後に、各ユーザのsambaのパスワードを設定します。sambaユーザーの登録は以下のように /usr/lcoal/bin/smbpasswdコマンドを使って行います。

   # /usr/lcoal/bin/smbpasswd -a [ユーザー名]

これで設定は1通り終了です。あとは、再起動するかもしくは以下のように直接シェルスクリプトを スタートさせてsambaを立ち上げます。

   # /usr/lcoal/etc/rc.d/samba start

Windows側からアクセスできるかどうか試してみてください。


 apacheはWebサーバ用ソフトウェアです。まずportsから「apache22」をインストールします。 apacheのバージョンは複数存在しますが、「apache22」が現時点(2006年12月)での最新だったので これを選びました。

# cd /usr/ports/www/apache22/
# make install clean
    

すると、/usr/local/etc/の中に「apache22」というディレクトリができます。 この中にあるファイルで編集するファイルは「httpd.conf」です。編集箇所は以下の通りです。

   ServerAdmin    [your_mail_address]
   ServerName     www.your_domain_name

   <Directory "/usr/local/www/apache22/data">
      Options FollowSymLinks           # Indexes を削除

   

   AddHandler cgi-script .cgi          # cgiを有効にするために「#」を消去

 次に、一般ユーザが各自のホームページを掲載したいというときのための設定を行います。 まず、以下の行があることを確認します。

   <IfModule mod_userdir.c>
      UserDir public_html
   </IfModule>

万が一なければ追加してください。次に、これより下の行に以下を追加します。

   <Directory /home/*/public_html>
      AllowOverride None
      Options FollowSymLinks ExecCGI
      Order allow,deny
      Allow from all
   </Directory>

/home/*/public_html は、/home以下にある任意のユーザのディレクトリの中の public_htmlというディレクトリが それぞれの一般ユーザのWeb用ディレクトリに なることを示しています。さらに、OptionsのExecCGIで一般ユーザもcgiを使うことが できる設定にしています。

 ここまで設定が終わったら、いよいよ apacheを起動してみましょう! その前にhttpd.confの記述に間違いがないかをチェックします。

     # /usr/local/sbin/apachectl configtest

これで、「Syntax OK」と表示されれば記述が正しいことがわかります。 記述が間違っていると「Syntax error」と出ますので間違いを直してください。

最後に次のように入力すればapacheが起動します。

     # /usr/local/sbin/apachectl start

apacheを停止、再起動するためには以下のコマンドを使います。

     # /usr/local/sbin/apachectl stop (停止時)
     # /usr/local/sbin/apachectl restart (再起動時)

/etc/rc.confに「apache22_enable="YES"」と記述しておけば、 /usr/local/etc/rc.d/apache22というシェルスクリプトによって 起動時に自動的にapacheのデーモンが立ち上がるようになります。


 メールサーバを構築するソフトウェアはいくつかあり、FreeBSDはデフォルトで 「sendmail」が実装されています。が、自分は昔から「qmail」を使っていたので今回も 「qmail」にしました。今は「Postfix」の時代らしいんですが…。

まずportsからqmailをインストールします。後述する「qmail-scanner」 の設定のために「with_…」が必要です。最初にオプション選択の画面になりますが そのままでも問題ありません。

# cd /usr/ports/mail/qmail/
# make install with_qmailqueue_patch=yes clean
    

次に設定ファイルを作成します。

# cd /var/qmail/configure/
# ./config-fast [Your Hostname]
    

[Your Hostname]にはあなたのマシンのホスト名を入力してください。 これで、/var/qmail/control/以下の5つのファイル(defaultdomain、 locals、me、plusdomain、rcpthosts)が一瞬にして 作成されます(以前、書式にすごく苦労したのに…。 こんな便利なコマンドがあったとは)。

さらに起動スクリプトを準備し、メール保存形式を Maildir形式に変更します。起動時に自動的にデーモンを 立ち上げるためにリンクも忘れずに。

# cp /var/qmail/boot/home /var/qmail/rc
# vi /var/qmail/rc
………………………………………………………
./Mailbox → ./Maildir/
………………………………………………………
# ln -s /var/qmail/rc /usr/local/etc/rc.d/qmail.sh
    

FreeBSDではデフォルトでsendmailの受信機能が停止されています (/etc/defaults/rc.conf中で「sendmail_enable="NO"」に なっている)。しかし送信機能は/etc/mail/mailer.confで 指定されていて、動いています。なので、qmailを使う場合は、 sendmailを完全停止する必要があります。そのために、 /etc/rc.confに「sendmail_enable="NONE"」という項目を 付け加えてください。("NO"を"NONE"にしなければならなくなった のはFreeBSD 4.6-RELEASE以降だそうです。)

また、qmailはデフォルトでmanualが追加されないので /etc/manpath.configに「OPTIONAL_MANPATH /var/qmail/man」 を追加するのも忘れずに。

これでqmailのインストールと設定は終了ですが、 SPAM対策として次のtcpserverの設定に移りましょう。

 tcpserverは前述した「TCP Wrapper」の機能をシンプルかつセキュアに したもので、DoS攻撃にも対応できるように、同時接続に対する 制限がかけられます。qmailを起動するときには切っても切れない関係に あるといっても過言ではありません。

まずportsからucspi-tcpというパッケージをインストールします。

# cd /usr/ports/sysutils/ucspi-tcp/
# make install clean
    

次にSPAMメールの踏み台にされないための設定を行います。

# vi /etc/tcp.smtp
………………………………………………………
192.168.1.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
………………………………………………………
    

ここでは、ローカルネットワーク内(192.168.1.)と自分自身だけを 許可する設定にしています。このファイルをもとにデータベースを作成します。

# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp 
    

では、tcpserverを経由してqmailを起動してみましょう。

# tcpserver -v -u 82 -g 81 -x /etc/tcp.smtp.cdb 0 smtp 
/var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
    

「-u」の後はqmaildのユーザID、「-g」の後はqnofilesのグループIDです。 最後に、起動時に自動的にこの設定が読み込まれるようにします。

# vi /usr/local/etc/rc.d/qmail.sh
…………………………………………………………………………………………
#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.

case "$1" in
start)
	exec env - PATH="/var/qmail/bin:$PATH" \
	qmail-start ./Maildir/ splogger qmail &

         exec env - PATH="/var/qmail/bin:$PATH" \
         tcpserver -v -u 82 -g 81 -x /etc/tcp.smtp.cdb 0 \
         smtp qmail-smtpd  2>&1 | /var/qmail/bin/splogger smtpd 3 &
         echo -n ' qmail-smtpd'
	;;
stop)
	exec killall qmail-send
	;;
*)
	echo "Usage: `basename $0` {start|stop}" >&2
	exit 64
	;;
esac
…………………………………………………………………………………………
    

これでtcpserverを利用したqmailの起動の設定終了です。

 メールサーバに届いたメールを取得するプロトコルは「POP3」です。 しかし「POP3」では認証に用いるユーザ名とパスワードが暗号化されずに ネットワークに送信されるという問題点があります。そのためここでは、 ユーザ名とパスワードを暗号化して送信する「APOP」にも対応している qpopperをインストールすることにします。

まずportsからqpopperをインストールします。次項の「POP before SMTP」 の設定のためにオプション「DRAC」の選択を忘れずに。

# cd /usr/ports/mail/qpopper/
# make config
………………………………………………………
 「DRAC」を選択
………………………………………………………
# make install clean
    

次に、設定を有効にするためにinetd.confファイルを編集し、 inetdを再起動します。

# vi /etc/inetd.conf
……………………………………………………………………………………………………
pop3  stream  tcp   nowait  root  /usr/local/libexec/qpopper   qpopper -s
……………………………………………………………………………………………………
# kill -HUP `cat /var/run/inetd.pid`
    

最後にAPOPパスワードのデータベースを初期化します。

# qpopauth -init
    

後は各ユーザにAPOPのパスワードを設定してもらうだけです。

 SMTPにはユーザ認証機能がないので、SPAMメール対策として外部ネットワークからの アクセスを拒否する(上述のtcpserverの)設定が必要である。しかし、この方式では 外部ネットワークから接続してくる正規の利用者もアクセスできない。そこで 認証機構を持つPOPでまずメールの受信を行なうことで、利用者のIPアドレスを 一定時間だけ送信受け付け可能にするという方法が考え出されました。それが POP before SMTPです。

まずdracというパッケージのインストールですが、上述の手順でqpopperを インストールした場合、すでにインストールされています。もし、DRACのオプションを つけずにqpopperをインストールした場合は、再度アンインストールしてやり直した 方がいいです。

設定ファイルを用意して編集し、/etc/rc.confに以下の項目を追加します。

# cp /usr/local/etc/dracd.allow-sample /usr/local/etc/dracd.allow
# vi /usr/local/etc/dracd.allow
………………………………………………………
# 255.255.255.255 192.168.16.8
………………………………………………………
# vi /etc/rc.conf
………………………………………………………
dracd_enable="YES"
dracd_flags="-i -e 15"
rpcbind_enable="YES"
………………………………………………………
    

dracd_flagsの「-i」で中継許可データベースのクリアし、 「-e 15」でPOP認証後15分間、SMTPを許可するということを意味します。 次に、/etc/hosts.allowに以下の項目を追加します。

# vi /etc/hosts.allow
………………………………………………………
rpcbind : localhost : allow
rpcbind : ALL : deny
………………………………………………………
    

これで設定終了です。そろそろ設定もqmail関係の設定も終盤です。 この辺でいったん再起動しときましょう。

 迷惑メールって厄介です。たまにウィルスに感染しているメールもあるので さらに厄介です。そんなメールをメールサーバで発見し撃退できれば言うことありません。 そこでフリーのウィルス対策ソフト「Clam AntiVirus」とスパム対策ソフト「SpamAssassin」 を導入します。qmail-scannerはそれらの対策ソフトとqmailとの仲介を行います。

まずそれぞれのパッケージをインストールします。

# cd /usr/ports/mail/qmail-scanner/
# make install clean
# cd /usr/ports/security/clamav/
# make install clean
# cd /usr/ports/mail/p5-SpamAssassin/
# make install clean
    

次に、/etc/rc.confに以下の項目を追加します。

# vi /etc/rc.conf
………………………………………………………
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
spamd_enable="YES"
………………………………………………………
    

これで、起動時にClam AntiVirusとSpamAssassinが 自動的に立ち上がります。

qmail-scannerの設定は保留。


 crontabに定期的に実行したいプログラムやコマンドを登録しておくと、 自動的に実行されるので非常に便利である。

かつて自分は、rootでも「crontab -e」を実行してroot用のcrontabの設定ファイルを 作っていましたが、どうもそれは良くないらしい。そこで、システムのcrontabの 設定ファイル(/etc/crontab)を確認(内容の説明は例えば こちらのページを参照してください)。これによると、すでに一日おき、一週間おき、 一ヶ月おきにいくつかのことを実行するようになっている(時間は変だが…)。というわけで、 それら実行すべきスクリプトファイルが置かれているディレクトリ内に 新しく実行したいスクリプトファイルを作成しておけばいいということがわかる。

というわけで、ここでは「一週間おきにportupgradeを行う」設定を行います。 まず、/etc/periodic/weekly以下で適当な(自分は「Y100.ports-up」とした)スクリプト ファイルを作成する。内容は以下の通り。

     ………………………………………………………
     #!/bin/sh
     
     /usr/sbin/portsnap fetch
     /usr/sbin/portsnap update
     
     /usr/local/sbin/portsdb -Uu
     /usr/local/sbin/portupgrade -a
     ………………………………………………………

これだけで完了。あとは、土曜日の4時15分をお楽しみに。


 TwinViewはデュアルディスプレイ表示(1つのパソコンの画面を2台のディスプレイに表示)を可能にする機能です。通常はビデオカードを2枚挿して設定しますが、今回自分が購入した ビデオカードにはD-sub15ピン(VGA)とDVIの2つともついていたのでビデオカードを追加する 必要はありませんでした。

新しく追加したディスプレイは「IO-DATA LCD-A174VB」です。

まず、/etc/X11/xorg.confに以下の項目を追加します。

     ………………………………………………………
     Section "Device"
      :
      :
      Option      "TwinView" "on"
      Option      "SecondMonitorHorizSync" "24.8-80.0"
      Option      "SecondMonitorVertRefresh" "56.3-75.0"
      Option      "Metamodes" "1280x1024,1280x1024"
      Option      "TwinViewOrientation" "LeftOf"
     EndSection
     ………………………………………………………

モニタの水平周波数と垂直周波数には、追加したディスプレイに応じた値を入力してください。 ディスプレイはVGAに接続されているものが最初に認識され、次にDVIに接続されているものが 認識されます。この順番に考慮して、MetamodesとTwinViewOrientationを設定する必要があります。

以上で設定は終了です。再起動してうまくいったかどうか確かめてください。


 FreeBSDはBIOSの時計情報をもとに時間を設定しています。しかし、そのうち少しずつずれて いきます。

そこで、ntpdateというコマンドを用いて、公開されている時計サーバーの時刻に合わせる ことにします。ntpdateはデフォルトで実装されています。

まず、/etc/rc.confに以下の項目を追加します。

     ………………………………………………………
     ntpdate_enable="YES"
     ntpdate_program="ntpdate"
     ntpdate_flags="-s -b 130.69.251.23"
     ………………………………………………………

ここで、130.69.251.23というIPアドレスは東京大学のNTPサーバーのものです。その他のNTP サーバーについてはこちらを参考にしてください。

動作確認のため、以下のコマンドを実行します。

# ntpdate -b 130.69.251.23
    

ここで、「ntpdate[4874]: step time server 130.69.251.23 offset 0.000570 sec」 のように表示されれば、正常に動作しています。

あとはFreeBSDを再起動すれば、ntpdateが自動的に起動します。


 CMSはContent Management Systemの略で、テキストや画像などのコンテンツを統合的に管理するシステムのことです。ウェブサイトの構築、管理にも使用されています。


Back

Up

Next

1. はじめに

目次

3. 失敗は成功の素