ホーム > WWWページ作成について > FreeBSD、Apacheでサーバを構築して公開する

FreeBSD、Apacheでサーバを構築して公開する


2018.7.10 高橋 誠

 ADSLからさらに光接続になり、せっかくの常時接続をサーバにも使おうということになりあちこちを見て、何とか参照できるところまでにこぎつけたのでご報告します。

目次

マシンの準備

 AT互換機なら一世代前のでも良いとのことで、DELL GX520を中古で買ってきました。標準搭載OSがWindowsXPなので、2世代前になりますか(^_^;。メモリは2GBにしてます。HDは内蔵70GBで使っています。1000MBASE-Tに対応したLANボードがついてます。
 ディスプレイとキーボードは置く場所がないので切替え装置で共用しています。

FreeBSDのダウンロードと組込

ブートUSBの作成

 DVD付の解説書もあるのですが、バージョンアップに追いつくのが大変です。ブロードバンド環境ならネットワークインストールがお勧めです。
 Windows 10等から、https://download.freebsd.org/ftp/releases/i386/i386/ISO-IMAGES/11.2/からマシンに合わせて、FreeBSD-11.2-RELEASE-i386-memstick.img.xzをダウンロードして、どこかのディレクトリたとえばC:\freebsdに入れます。7ZIPで展開して、C:\freebsdに置きます。
 ブート用USBを用意して、Win32 Disk Imagerで作成します。  ヴァージョンアップの場合にFreeBSD自身で行うのは、
C:\>cd freebsd
# dd if=FreeBSD-11.2-RELEASE-i386-memstick.img of=/dev/da0 bs=1M conv=sync

インストール

 unix上にもいろいろなエディタがあるのですが、初期設定をする時点ではviコマンドによる定義ファイルの編集が必要になりますから、Windows側に、Jvimを組み込んで、必要に応じてhelpが参照できるようにしておくと便利です。
  1. USBをインストール先マシンにさしてブートします。
  2. IP V6がどうのこうのにはNoを答えて、
  3. DHCPを試すか? と聞かれたら、DHCPなのでYesを答えます。

FreeBSDの基本設定

  1. コピーが終わると、Do you want this machine to function as a network gateway?と聞かれます。サーバに使いルータ機能はいらないのでNoと答えます。
  2. Do you want to configure inetd and simple internet services?セキュリティ上不安なので余分なサービスは止めておくためNoと答えます。
  3. Security profileはhighにするように答えました。
  4. Would you like to customize your system console setting?にYesと答え、3 Keymapの設定でJapanese 106を選びます。
  5. Would you like to set this machine's time zone now?にYesと答え、次のSelect local or UTCはNoと答え、5 Asiaから19 Japanを選びます。JSTでいいかと念を押されます。
  6. root以外のユーザを追加するように言われるので、Wheelグループで一つ追加します。rootはftpできないので。
  7. 最後にrootのパスワードを設定しておしまい。USBを取り除いて、再起動します。

FreeBSD Ports/Packages Collection

 rootでログインして、bsdconfigでインストーラを呼び出します。ConfigureからPackagesを選びます。このなかで、  これで、Packageのトップに戻りInstallにカーソルを移動して、Enterで組み込みを開始します。今度は、すでにnetwork設定をしてあるのでその構成を使うことを確認されftpサーバを選ぶだけです。

.cshrcの設定

 FreeBSDの標準のコマンドプロンプトをDOSのように変える方法がFreeBSD-users-jp 27240にありました。
# $FreeBSD: src/etc/root/dot.cshrc,v 1.25.2.2 2001/03/05 13:36:53 asmodai Exp $
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
# see also csh(1), environ(7).
#

alias h         history 25
alias j         jobs -l
alias la        ls -a
alias lf        ls -FA
alias ll        ls -lA

# A righteous umask
umask 22

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin)

setenv  EDITOR  vi
setenv  PAGER   more
setenv  BLOCKSIZE       K

if ($?prompt) then
        # An interactive shell -- set some stuff up
            alias cd 'cd \!*; set prompt = "`pwd`>"'
        set prompt = "`pwd`>"
        set filec
        set history = 100
        set savehist = 100
        set mail = (/var/mail/$USER)
        if ( $?tcsh ) then
                bindkey "^W" backward-delete-word
                bindkey -k up history-search-backward
                bindkey -k down history-search-forward
        endif
endif

Apacheのダウンロードと組込み

  1. スタート
     apachectlコマンドで開始/終了ができます。
    /tmp>apachectl start
    
    を入力した後、Apache インストール時のテストページがサーバに与えたアドレスで見えれば成功です。

ftpdの設定

 ProFTPDがめちゃ難しくなっていたので、家庭LAN内部で使うだけなんで、ftpdにしました。  inetdから起動するので次の設定を/etc/rc.confに入れました。
inetd_enable="YES"
 inetdからftpdを起動するために、/etc/inetd.confの下記の行のコメントを外します。
ftp    stream tcp    nowait root   /usr/libexec/ftpd      telnetd -l
 /usr/local/etc/ftpd.confは変更していません。あちこち見えてしまうので便利なのですが、セキュリティ上は問題なんで、後で述べるルータの設定で外から見えなくしています。  自分のアドレスが解決できないというので、/etc/hostsに次の行を追加しました。
192.168.1.100 hobbit.ddo.jp

Apacheの設定

 /usr/local/etc/apache24/httpd.confで設定します。
  1. ddo.jpでもらったドメイン名を指定します。
    ServerName hobbit.ddo.jp:80
    
  2. DocumentRoot "/usr/local/www/apache24/data"になっています。ここのデータを削除して、htmlデータを置くことにしました。
  3. apacheは同じ名称で、ブラウザの言語設定によって、別の文書を呼びだす機能があります。これを有効にするためにMultiViewsを指定します。
    <Directory />
        Options FollowSymLinks MultiViews
        AllowOverride None
    </Directory>
    
     ユーザから見たらindex.htmlになるファイルを と作っておくと、ブラウザの言語設定にあわせて使い分けることができます。
  4. Apacheが出すエラーメッセージもこの機能が動くように、MultiViewsを追加し呼び出すエラーメッセージファイルを変更します。Operaでも日本語が出るように、LanguagePriorityでjaを先頭にします。/errorディレクトリ以下に日本語を追加したメッセージファイルをerror.tgzに作りましたのでご参考まで。
        <Directory "/usr/local/apache22/error">
            AllowOverride None
            Options IncludesNoExec MultiViews
            AddOutputFilter Includes html
            AddHandler type-map var
            Order allow,deny
            Allow from all
            LanguagePriority ja en es de fr
            ForceLanguagePriority Prefer Fallback
        </Directory>
    
        ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
        ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
        ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
        ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
        ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
        ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
        ErrorDocument 410 /error/HTTP_GONE.html.var
        ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
        ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
        ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
        ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
        ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
        ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
        ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
        ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
        ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
        ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
    
  5. 自動起動用の、/usr/local/etc/rc.d/apach24.shが作られるようになりました。
  6. パスワード付の頁を作るには認証の通りにします。
    1. パスワードファイルの作成
      /usr/local/www>mkdir passwd
      /usr/local/www>bin/htpasswd -c /usr/local/www/passwd/password ユーザ名
      New password:パスワード
      Re-type new password:パスワード
      Adding password for user ユーザ名
      /usr/local/www>chown www /passwd/password
      
    2. /usr/local/apache/apache/htdocs/secretをパスワードプロテクトされたフォルダとすると、次のように指定します。領域名はIEだと「ネットワークパスワードの入力」のダイアログで、「領域」として表示されます。日本語で出ることもありますが、ローマ字にしておくほうが無難です。ここと上で指定したユーザ名と上で指定したパスワードを入力すると該当ディレクトリの表示が可能になります。
      <Directory /usr/local/apache/apache/htdocs/secret>
      AuthType Basic
      AuthName "領域名"
      AuthUserFile /usr/local/www/passwd/passwords
      require user ユーザ名
      </Directory>
      
  7. WebDAVでファイル共有 (QEMU)ApacheとWebDAVでファイル共有さんのままうまく行きました。
    1. /usr/local/etc/apache22/httpd.confにコメントアウトされている次の行のコメントをはずす。
      LoadModule dav_module libexec/apache22/mod_dav.so
      LoadModule dav_fs_module libexec/apache22/mod_dav_fs.so
      
    2. 次の行も追加
      DavLockDB /var/tmp/apache/DavLock
      Alias /dav "/home/dav/"
      <Directory /home/dav>
          AllowOverride FileInfo AuthConfig Limit Indexes
          Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
          <Limit GET POST OPTIONS PROPFIND>
              Order allow,deny
              Allow from all
          </Limit>
      </Directory>
      <Location /dav>
      DAV On
          Options FollowSymLinks Indexes
          AuthType Basic
          AuthName "WebDAV"
          AuthUserFile /usr/local/etc/apache22/webdav.passwd
        <Limit GET PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
          require valid-user
        </Limit>
      </Location>
      
    3. DavLockデータベースファイル用のディレクトリの作成
      /var/tmp> mkdir apache
      /var/tmp> chown www:www apache
      
    4. WevDAVのファイル置き場を作成
      /usr/home> mkdir dav
      /usr/home> chown www:www dav
      
    5. パスワードを設定
      /usr/local/etc/apache24>htpasswd -c /usr/local/etc/apache24/webdav.passwd ユーザ名
      New password:
      Re-type new password:
      Adding password for user ユーザ名
      

AWStatsのインストールとセットアップ

  1. AWStatsの改造からダウンロード。
  2. 解凍し/usr/local/awstatsを作りFTPで転送。
  3. configure.plの実行
    /usr/local/awstats/tools>perl awstats_configure.pl
    
  4. /etc/awstats/awstats.hobbit.ddo.jp.confの設定確認
  5. データファイルの書き込み許可
    /usr/local/apastats>chmod 777 data
    
  6. 最初のデータファイルの作成、出力
    /usr/local/apastats/wwwroot/cgi-bin>perl utf8_decode.pl < /var/log/access_log > /var/log/access_log.utf8
    /usr/local/apastats/wwwroot/cgi-bin>perl awstats.pl -update -config=hobbit.ddo.jp
    /usr/local/apastats/wwwroot/cgi-bin>perl awstats.pl -output -config=hobbit.ddo.jp -staticlings > ../www/data/awstats.html.utf8
    
  7. これが、http://hobbit.ddo.jp/awstats.html.utf8で参照できればok。
  8. 上記スクリプト内で言われるとおりにcrontab -eで登録
    SHELL=/bin/sh
    MAILTO=自分のメールアドレス
    #
    15 4 * * * /usr/bin/perl /usr/local/awstats/awstats.cron
    
     awstats.cronの中身。環境に合わせて変更しました。
    #!/usr/bin/perl
    
    # 完全日本語版AWStats用サンプルcronファイル
    #
    # ファイルパス等は自分の環境に合わせて書き直して下さい。
    
    # httpのログファイルをデコードした上で一時ディレクトリに格納します。
    # access_log.utf8は一時的にデコードしたログを保存するファイルの名前です。
    
    system("/usr/local/awstats/wwwroot/cgi-bin/utf8_decode.pl < /var/log/access_log > /var/log/access_log.utf8");
    
    # awstats.plが切り詰めないオリジナルのログを切り詰めます。
    open(LOG,"+</var/log/access_log");
    truncate(LOG,0);
    close(LOG);
    
    # Ver.5.0から、更新処理を別途走らせる必要ができたらしい....
    system("/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=hobbit.ddo.jp -update > /dev/null");
    
    # awstats.plを走らせ、htmlファイルを出力します。
    # 必須ではありませんが、awstats.plを直接参照させるよりも、htmlに出力して表示す
    # る方が、良好なパフォーマンスが得られます。
    system("/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=hobbit.ddo.jp -output > /usr/local/www/data/awstats.html.ja.utf8");
    
    
  9. 本質的に問題ではないのですが、Another HTML-lintのエラーが多発したので、なるべくなくなるようにawstats.plを改造しました。AWStatsをFreeBSDで動かすに示します。HTML-lintに従うとフレームが使えないので、次の指定をして下さい。
    #-----------------------------------------------------------------------------
    # オプショナルセットアップセクション:外観 (必須ではないがAWStatsの機能を向上)
    #-----------------------------------------------------------------------------
    
    # AWStatsがCGIとして利用される場合, 表示にフレームを利用することができます.
    # フレームは統計を動的に閲覧する際のみに有効となります. コマンドラインから
    # 統計ページを生成した場合, このオプションは利用されず, フレーム無しのページ
    # が生成されます.
    # 取り得る値: 0 もしくは 1
    # 既定値: 1
    #
    UseFramesWhenCGI=0
    
  10. Geo::IPの組込み IPアドレスから国名を割り出し、国別統計にするオプションです。

カーネルの再構築

 MVSでいうシステムゼネレーションですね。といって分かる人のほうが少ないけど。(^_^;
 バージョンアップの場合、次のように旧ソースファイルの名前を変えてから、FreeBSD ハンドブック Subversion を使うの通りにソースを取得します。
/usr>mv src src.old
 FreeBSD ハンドブック 8.3. システムのハードウェアについて知るにあるように、 /var/run/dmesg.bootに起動時のメッセージがあるので、FreeBSDが認識しているデバイスがわかります。
/usr/src/sys/i386/conf>cp GENERIC MYCOM
とコピーして、いらないデバイス等をはずしてカーネルの大きさを半分ぐらいにできました。  FreeBSD ハンドブック 8.5. カスタムカーネルの構築とインストールにあるとおりコンパイルします。
/usr/src>make buildkernel KERNCONF=MYCOM
延々メッセージが出る
/usr/src>installkernel KERNCONF=MYCOM
 デバイスを変に減らしたりすると途中でエラーになります。雰囲気でMYCOMを修正しました。
 これでrebootすると新しいkernelで起動するのですが、失敗することもあります。

rc.confの設定

 DHCPでもらうIPアドレスだとBuffalo BBR-4MGでNATアドレスポート変換が指定できないので、DHCPの付与するアドレスとぶつからない192.168.1.100に固定しました。
 ntpデーモンは時刻あわせのために起動します。
ifconfig_fxp0="inet 192.168.1.100  netmask 255.255.255.0"
defaultrouter="192.168.1.1"
sendmail_enable="NONE"

xntpd_enable="YES"      # Run ntpd Network Time Protocol (or NO).
xntpd_flags="-A -b -p /var/run/ntpd.pid"   # Flags to ntpd (if enabled).

DNSの設定

 /etc/resolv.confに次の行を追加します。ルータがDNSにも機能しています。
nameserver     192.168.1.1

Buffalo BBR-4MGの設定

  1. 標準設定では192.168.1.1を呼び出します。
  2. 「LAN設定」では、
    1. DHCPサーバ機能を有効にします。
  3. 「WAN設定」では、
    1. その他(PPPoE接続)を選択。
    2. 接続ユーザ名,接続パスワード:プロバイダにもらったもの。
  4. 「アドバンスド設定」の「バーチャル・サーバー」の設定
    1. バーチャル・サーバー:「有効」を選択。
    2. 「ローカルIP」を「192.168.1.100」、「プロトコル」で「http」、「サービス・タイプ」で「TCP」を指定し「設定」します。
    3. 「ローカルIP」を「192.168.1.100」、「プロトコル」で「smtp」、「サービス・タイプ」で「TCP」を指定し「設定」します。
    4. ftpを外から使うときは「ローカルIP」を「192.168.1.100」、「プロトコル」で「ftp」、「サービス・タイプ」で「TCP」を指定し「設定」します。
    5. passive ftpを外から使うときは「ローカルIP」を「192.168.1.100」、「プロトコル」で「ユーザ定義」、「開始Port番号」で「10021」、「終了Port番号」で「10030」、「サービス・タイプ」で「TCP」を指定し「設定」します。
  5. 「アドバンスド設定」の「DHCPサーバ」の設定
    1. DHCP:「有効」を選択。
    2. DHCP開始アドレス:「192.168.1.2」(デフォルトのまま)。
    3. DHCP終了アドレス:「192.168.1.254」(デフォルトのまま)。
と設定します。メールクライアントはLAN内に限定するので、POP:110について外部からのアクセスはさせません。

ファイアウォールの設定

 上記ルータのNAT機能で80、25ポート以外は見えないのですが、念のために/etcにipfw.svrという名前で次のファイルを作ります。Firewall 構築ガイドを参考にさせていただきました。
 ルータの外からの接続は、wwwサーバとsmtpサーバだけ認めます。popサーバはLAN内からだけ使うことにして禁止したままです。
fwcmd="/sbin/ipfw -q"

ip="192.168.1.100"
net="192.168.1.0/24"
!
# 全てのルールを破棄
${fwcmd} -f flush

# ネットワーク内の通信は許可
${fwcmd} add pass all from ${net} to ${net}

# 外向きの通信は許す
${fwcmd} add pass all from ${ip} to any

# プライベートアドレスやマルチキャストなどを拒否
${fwcmd} add deny all from 10.0.0.0/8 to any
${fwcmd} add deny all from 172.16.0.0/12 to any
${fwcmd} add deny all from 192.168.0.0/16 to any
${fwcmd} add deny all from 0.0.0.0/8 to any
${fwcmd} add deny all from 169.254.0.0/16 to any
${fwcmd} add deny all from 192.0.2.0/24 to any
${fwcmd} add deny all from 224.0.0.0/4 to any
${fwcmd} add deny all from 240.0.0.0/4 to any
${fwcmd} add deny all from ${net} to 224.0.0.0/4

# ループバック
${fwcmd} add pass all from any to any via lo0

# 接続された TCP パケットを許可
${fwcmd} add pass tcp from any to any established

# WWW サーバを立てている場合
${fwcmd} add pass tcp from any to ${ip} 80 setup

# SMTP サーバの場合
${fwcmd} add pass tcp from any to ${ip} 25 setup

# FTP サーバの場合
${fwcmd} add pass tcp from any to ${ip} 20 setup

# FTP サーバの場合
${fwcmd} add pass tcp from any to ${ip} 21 setup

# FTP サーバ passiv の場合
${fwcmd} add pass tcp from any to ${ip} 10021-10030 setup

# 外部への TCP の接続開始を許可
${fwcmd} add pass tcp from ${ip} to any setup

# それ以外の外側からの TCP 接続を拒否し、ログに残す
${fwcmd} add deny log tcp from any to any setup

# 外部への DNS の問い合わせとその応答を許可
${fwcmd} add pass udp from any 53 to ${ip}
${fwcmd} add pass udp from ${ip} to any 53

# 外部の NTP サーバへの参照
${fwcmd} add pass udp from any 123 to ${ip}
${fwcmd} add pass udp from ${ip} to any 123

# RFC2979
${fwcmd} add pass icmp from any to ${net} icmptypes 3

# 残りは拒否
${fwcmd} add deny log all from any to any
 ここで、
etc>chmod 700 ipfw.svr
etc>sh ipfw.svr
を実行して、うまく他のマシンから必要なサーバ見えれば成功。うまくいかなかったら、ipfw.svrを変更してやり直します。うまくいったら、/etc/rc.confに次の行を追加しておくと起動時に実行してくれます。
firewall_enable="YES"
firewall_script="/etc/ipfw.svr"

ダイナミックDNSの設定

 [FreeBSD-users-jp 63772] 時刻同期 (NTP) の設定についてから/etc/ntp.confを次のように作ります。これで、210=1024秒ごとにネットワークアクセスが発生します。
#
# ntp.conf
#
driftfile       /etc/ntp.drift

server          ntp.jst.mfeed.ad.jp      minpoll 10      maxpoll 10
server          ntp.ring.gr.jp           minpoll 10      maxpoll 10
 次のコマンドで動作が確認できます。
/etc>ntpq -p
/etc>ntpdate -d localhost
 T-comで おうちインターネットサーバー構築を参考に、ddoupdate.shを組み込みます。Portでwget 1.8.2_5を組み込んであるのですがどこにあるのかは、
etc>find / -name wget
で見つけます。また、PPPが確立していないときにwgetするとip_newのアドレスが0.0.0.0になり、そのときアドレスの登録に行っても無駄なので、nul0をとして、ip_newがこれと等しいかチェックするようにしてみました。この場合、cmpが必ずエラーメッセージを出してくるので、[FreeBSD-users-jp 44430] Re: crontab logで見つけて2>&1を追加しました。これでも本当にIPアドレスが変わるときにはメッセージが来ますが、「動いている証拠」と思ってあえてそのままにしています。|の使い方が分からないのでべたなコーディングになりました。
#!/bin/sh
/usr/local/bin/wget -qO - http://http://info.ddo.jp/remote_addr.php > /root/html_temp
/usr/local/bin/perl -pe 's/\x0D\x0A/\n/g' < /root/html_temp > /root/html_unix_temp
/usr/local/bin/perl /root/getip.pl < /root/html_unix_temp > /root/ip_new
cmp /root/ip_new /root/nul0 > /dev/null 2>&1
if [ $? != 0 ] ; then
cmp /root/ip_new /root/ip_old > /dev/null
if [ $? != 0 ] ; then
  cp -f /root/ip_new /root/ip_old
  /usr/local/bin/wget -O - 'http://free.ddo.jp/dnsupdate.php?dn=hobbit&pw={パスワード}' > /dev/null
fi
fi
ここで、getip.plの中身は、やはりべたに、utf-8で作りました。
#!/usr/bin/perl

use Jcode;

$status = 0;

while(<STDIN>){
     Jcode::convert(\$_,utf8,sjis);
          if (/ローカルアドレス/) {
                  $status = 1;
          } elsif ($status == 1) {
                  print;
                  last;
          }
}
 crontab -eコマンドで、
SHELL=/bin/sh
MAILTO=自分のメールアドレス
#
3,8,13,18,23,28,33,38,43,48,53,58 * * * * /root/ddoupdate.sh
15 3 12,22 * * rm -f /root/ip_old
とし定時実行を予約します。ddoupdate.shを5分おきに実行します。また、1ヶ月更新しないとddo.jpから自動削除されてしまうので、12日と22日の3時15分に強制的に更新するようにしました。cron実行時にエラーがあるとここで指定したアドレスにメッセージが来ます。

mailの設定

 Postfix Dovecot インストールのままでうまくいきました。

procmailインストール

/usr/ports/mail/procmail make BATCH=yes install clean

pkgtools.conf編集

vi /usr/local/etc/pkgtools.conf
2行追加。
  MAKE_ARGS = {
        'security/cyrus-sasl2' => 'WITHOUT_OTP=yes',      # 追加
        'mail/postfix' => 'WITH_SASL2=yes WITH_TLS=yes',  # 追加
  }

cyrus-sasl2インストール

/usr/ports/security/cyrus-sasl2 make BATCH=yes WITHOUT_OTP=yes WITH_BDB=yes WITH_BDB_VER=42 install clean
/usr/ports/security/cyrus-sasl2 rehash

postfixインストール

/usr/ports/mail/postfix make BATCH=yes WITH_SASL2=yes WITH_TLS=yes WITH_BDB=yes WITH_BDB_VER=42 install clean
/usr/ports/mail/postfix rehash

main.cf編集

vi /usr/local/etc/postfix/main.cf
myhostname = hobbit.ddo.jp  # コメント解除でホスト名指定
mydomain = hobbit.ddo.jp    # コメント解除でドメイン名指定
myorigin = $myhostname      # コメント解除(送信元メール)
inet_interfaces = all       # コメント解除(受信するネットワークアドレスを指定)
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain  # コメント解除(ローカル配送先)
relay_domains = $mydestination  # コメント解除(リレーを許可するドメインを指定)
alias_maps = hash:/etc/aliases  # コメント解除(エイリアスを設定)
alias_database = hash:/etc/aliases # コメント解除(エイリアスを設定)
home_mailbox = Maildir/     # コメント解除(Maildir形式)
mailbox_command = /usr/local/bin/procmail ←コメント解除&変更(procmailのパスを指定)
# Cyrus-SASL configuration  # 下記を追加(SASLによるSMTP認証を使用)
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes

/etc/rc.conf編集

下記を追加。
saslauthd_enable="YES"
saslauthd_flags="-a sasldb"
| forward 自分のメール
にしてpostmaster宛のメールを自分のメールで受けられるようにしました。.qmail-root、qmail-mailer-daemon、qmail-webmasterも同様。

 spamが送信元偽装できたばあいにbounceしないおまじない。/var/qmail/alias/.qmail-defaultという次のファイルを作る。

#

確認方法

 ここで作ったサーバはローカルな名前では自分で参照できますが、hobbit.ddo.jpのドメイン名では自分だけは参照できません。Another HTML-lintでテストしてみるのも一つの方法です。

HTML Lintサーバ

 HTML Lintも動作させることが出来ました。/usr/local/www/data/htmllint/htmllint.envの設定は次の通りです。
# CGI 用ディレクトリ (絶対パスかCGI相対パスで指定、なるべく絶対パスにしてください)
$RULEDIR  = '/usr/local/www/data/htmllint/';        # 規則ファイルの場所
$LOGSDIR = '/usr/local/www/data/htmllint/logs/';   # ログファイルの場所 (不要ならコメントアウト)
$TMPDIR   = '/usr/local/www/data/htmllint/tmp/';     # テンポラリファイルの場所
$IMGDIR   = '/usr/local/www/data/htmllint/';        # イメージファイルの場所
$TAGSLIST = '/usr/local/www/data/htmllint/tags/';          # タグ一覧キャッシュ用の場所 (空ならキャッシュしない)
                         # 設定するときはアクセス権を適当に与えておくこと

# HTML 用ディレクトリ (CGI が出力する HTML 中で使う)
$HTMLDIR    = './';                     # HTMLファイルの場所
$GATEWAYURL = $HTMLDIR.'htmllint.html'; # ゲイトウェイサーヴィス HTML
$EXPLAIN    = $HTMLDIR.'explain.html';  # 解説用 HTML (HTML用)
$CGIROOT    = $HTMLDIR;                 # CGIの場所
$IMGROOT    = $HTMLDIR;                 # イメージファイルの場所
 また、httpd.confに
<Directory "/usr/local/www/data/htmllint">
        Options +ExecCGI
        AddDefaultCharset iso-2022-jp
</Directory>
を追加しました。  Another HTML-lintのダウンロードの頁からhtmllint.zipを解凍して、/usr/local/www/data/htmllintにFTPしました。ここで、次の通り変更したら動作しました。
/usr/local/www/data/htmllint>chmod 777 htmllint.cgi
/usr/local/www/data/htmllint>chmod 777 tmp
/usr/local/www/data/htmllint>chmod 777 logs
/usr/local/www/data/htmllint>chmod 777 tags
 CPUの能力の差はいかんともしがたく、とんでもなく遅いです。
 FreeBSDの標準のPerlではLWPが入っていないので、CPANからLWP 5.801をインストールしました。
>perl -MCPAN -e shell
の後適当に答えて、
cpan>install LWP
でインストールできました。
 Portsにもありました。libwww-5.803をインストールできました。
/usr/porsts/www/p5-libwww>make
/usr/porsts/www/p5-libwww>make install
 Jcode.pm-0.88もテーブルを切り替えているので、個別にインストールしましたが、標準でよければ、Portsにあります。
 そのまま公開すると、怒られるので管理者とかを書き直す必要があります。

参考文献


ホーム(x)