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

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


2006.12.30 高橋 誠

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

目次

マシンの準備

 AT互換機なら一世代前のでも良いとのことで、FLORA 330 DC2を拾ってきました。標準搭載OSがWindows98なので、2世代前になりますか(^_^;。メモリは64MBにしてます。もっと増やしたかったのですが、最近のSDRAMはささらないみたいです。HDは内蔵6GBで使っています。100MBASE-TXに対応したLANボードがついてます。
 ディスプレイとキーボードは置く場所がないので切替え装置で共用しています。

FreeBSDのダウンロードと組込

ブートフロッピーの作成

 DVD付の解説書もあるのですが、バージョンアップに追いつくのが大変です。ブロードバンド環境ならネットワークインストールがお勧めです。
 Windows XP等から、ftp://ftp2.jp.freebsd.org/pub/FreeBSD/releases/i386/7.1-RELEASE/tools/(d)からfdimage.exeをダウンロードして、どこかのディレクトリたとえばC:\freebsdに入れます。ftp://ftp2.jp.freebsd.org/pub/FreeBSD/releases/i386/7.1-RELEASE/floppies/(f)から、kern.flpとmfsroot.flpをやはりC:\freebsdにダウンロードします。ftp://ftp2.jp.freebsd.org/の部分はhttp://www.jp.freebsd.org/mirror.htmlの中から、転送速度の速いところを選んでください。
 ブート用フロッピーを5枚用意して、ftp://ftp2.jp.freebsd.org/pub/FreeBSD/releases/i386/7.1-RELEASE/floppies/README.TXTにあるように次のコマンドを実行します。
C:\>cd freebsd
C:\freebsd>fdimage boot.flp a:
C:\freebsd>fdimage kern1.flp a:
C:\freebsd>fdimage kern2.flp a:
C:\freebsd>fdimage kern3.flp a:
C:\freebsd>fdimage mfsroot1.flp a:
 ヴァージョンアップの場合にFreeBSD自身で行うのは、
C:\>cd freebsd
# ftp ftp.jp.freebsd.org
ftp>cd pub/FreeBSD/RELEASE/i386/7.1-RELEASE/floppies
ftp> get boot.flp
ftp> get kern1.flp
ftp> get kern2.flp
ftp> get kern3.flp
ftp> bye
# dd if=boot.flp of=/dev/fd0
# dd if=kern1.flp of=/dev/fd0
# dd if=kern2.flp of=/dev/fd0
# dd if=kern3.flp of=/dev/fd0
# dd if=mfsroot1.flp of=/dev/fd0

インストール

 unix上にもいろいろなエディタがあるのですが、初期設定をする時点ではviコマンドによる定義ファイルの編集が必要になりますから、Windows側に、Jvimを組み込んで、必要に応じてhelpが参照できるようにしておくと便利です。
  1. boot.flpフロッピーをインストール先マシンのfddに入れてブートします。
  2. 「kern1.flpを入れて何かキーを押せ」と英語でいって来るので、そのとおりにします。
  3. 「kern2.flpを入れて何かキーを押せ」と英語でいって来るので、そのとおりにします。
  4. 「kern3.flpを入れて何かキーを押せ」と英語でいって来るので、そのとおりにします。
  5. 「mfsrot1.flpを入れて何かキーを押せ」と英語でいって来るので、そのとおりにします。
  6. また「boot.flpを入れて何かキーを押せ」と英語でいって来るので、そのとおりにします。
  7. 色のついたsysinstall Main Menuが表示されます。Standardを選び[Select]にtabで移動して設定を開始します。
  8. 「次にDOSのfdiskにあたるパーティション作成しますが・・・」なんていってくるので、Enterを押します。
  9. C = Create Sliceでスライス(DOSでいうパーティション)を作成します。IDE接続のad0s1を最大に取りました。
  10. Install Boot Manager for drive ad0という画面が出ます。DOSでも使いたいので、BootMgr Install the FreeBSD Boot Managerを選びます。
     FreeBSD Disklabel Editorはディスクが一つなので、 としました。
     パーティションごとに大きさとタイプとmount pointをを聞かれます。タイプはswapはswapに/はFS A file systemを選びます。mount pointは上記の/を指定します。
  11. Choose Distributionsでは、6 Kern-Developerを選びました。ここで、ported software packagesをどうのこうのというのが出ます。後でもインストールできます。
  12. Choose Installation Mediaでは、FTPを選びました。
  13. IP V6がどうのこうのにはNoを答えて、
  14. DHCPを試すか? と聞かれたら、DHCPなのでYesを答えます。
  15. コピー元を聞いてきますから、以前選んだ転送速度の早そうなところとします。

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. Would you like to enable Linux binary compatibility?にはNoと答えました。
  7. Does this system have a USB mouse attached to it?にはPS/2マウスなのでNoと答えます。
  8. 2 Enableでマウスが反応したので、Is the mouse cursor moving?にYesと答えます。
  9. これで、X Exitすると、次はWould you like to configure your Xserver at this time?と聞いてきます。WWWサーバとして使うのでNoと答えます。
  10. root以外のユーザを追加するように言われるので、Wheelグループで一つ追加します。rootはftpできないので。
  11. 最後にrootのパスワードを設定しておしまい。フロッピーディスクを取り除いて、再起動します。

FreeBSDのバージョンアップ

 こまめにバージョンアップされるのでフォローするのにFreeBSD QandA 325の1の方でやりました。ブートフロッピーを作るところから次までは最初のインストール時と同じです。
  1. 色のついたsysinstall Main Menuが表示されます。Upgradeを選び[Select]にtabで移動して設定を開始します。
  2. Choose Distributionsでは、ソースを選択しても文句を言われるのでとりあえずbinaryだけを範囲にして置きます。
  3. Choose Installation Mediaでは、FTPを選びました。
  4. IP V6がどうのこうのにはNoを答えて、
  5. DHCPを試すか? と聞かれたら、ルータのDHCPの配下なのでYesを答えます。IPアドレスが表示されたときに、192.168.1.100に変更しました。
  6. コピー元を聞いてきますから、以前選んだ転送速度の早そうなところとします。
  7. インストールがすんだところで、再度Configureを選んで、カーネルの再構築に必要なソースファイルをインストールします。
  8. 再起動後、カーネルの再構築をして再起動、ここで、ユーザとグループがroot以外すべて消えるので再追加しました。本当はファイルの移行もできるらしいが、「今後の課題」としました。qmailあたりが文句をいうグループとかユーザを追加すると、元どおりに動作しました。
  9. rootのパスワードもなくなっていたので、passwdコマンドで追加しておきます。
  10. /etc/pam.confも元に戻ったので、再設定しました。

FreeBSD Ports/Packages Collection

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

.cshrcの設定

 FreeBSDの標準のコマンドプロンプトをDOSのように変える方法がFreeBSD-users-jp 27240にありました。これに限らず、分からないことはhandbook, FAQ, QandAとメーリングリストの検索に行くと分かるようになっています。
# $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
 ワーニングがでるので、/boot/loader.conf に下記の行を追加しました。
accf_http_load="YES"

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

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

proftpdの設定

 FreeBSD 5.4から次の設定を/etc/rc.confに入れることになりました。
proftpd_enable="YES"
 /usr/local/etc/proftpd.confは次のエントリのみ変更して、上書きコピー可としました。あちこち見えてしまうので便利なのですが、セキュリティ上は問題なんで、後で述べるルータの設定で外から見えなくしています。下の行は.htaccess等のファイルを見る呪文です。この程度の使い方ならinetdでもいいかもしれません。外からpassiveを可能にするためには、下の2行を追加します。
#TimeoutNoTransfer               0
TimeoutIdle                     0
ListOptions                     "-a"
DelayTable                      /var/run/proftpd.delay
MasqueradeAddress               hobbit.ddo.jp
PassivePorts                    10020 10024
 自動起動用の/usr/local/etc/rc.d/proftpd.shは作られるようになりました。
 自分のアドレスが解決できないというので、/etc/hostsに次の行を追加しました。
192.168.1.100 hobbit.ddo.jp

Apacheの設定

 /usr/local/etc/apache22/httpd.confで設定します。
  1. ddo.jpでもらったドメイン名を指定します。
    ServerName hobbit.ddo.jp:80
    
  2. DocumentRoot "/usr/local/www/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/apach22.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/apache22>htpasswd -c /usr/local/etc/apache22/webdav.passwd ユーザ名
      New password:
      Re-type new password:
      Adding password for user ユーザ名
      

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

  1. AWStats 6.5完全日本語版のページからダウンロード。
  2. 解凍し/usr/local/awstatsを作り移動
    /tmp>gunzip AWStats60_Jpn.tar.gz
    /tmp>tar -xvf AWStats60_Jpn.tar
    /tmp>mkdir /usr/local/awstats
    /tmp>cd AWStats60_Jpn
    /tmp/AWStats60_Jpn>mv * /usr/local/awstats
    /tmp/AWStats60_Jpn>mv *.* /usr/local/awstats
    
  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でいうシステムゼネレーションですね。といって分かる人のほうが少ないけど。(^_^;
 バージョンアップの場合、次のように旧ソースファイルの名前を変えてから、sysinstallからソースを取得します。
/usr>mv src src.old
 FreeBSD QandA 310にあるように、
/usr/src/sys/i386/conf>cp GENERIC MYCOM
とコピーして、次の行を追加するとファイアウォール機能が使えるようになります。ついでにいらないデバイス等をはずしてカーネルの大きさを半分ぐらいにできました。
options         IPFIREWALL              #firewall
options         IPFIREWALL_VERBOSE      #enable logging to syslogd(8)
 FreeBSD ハンドブック 9.3. カスタムカーネルの構築とインストールにあるとおりコンパイルします。
/usr/src/sys/i386/conf>config MYCOM
延々メッセージが出る
/usr/src/sys/i386/conf>cd ../compile/MYCOM
/usr/src/sys/i386/compile/MYCOM>make depend
延々メッセージが出る
/usr/src/sys/i386/compile/MYCOM>make
延々メッセージが出る
/usr/src/sys//i386compile/MYCOM>make install
 デバイスを変に減らしたりすると途中でエラーになります。雰囲気でMYCOMを修正しました。
 これでrebootすると新しいkernelで起動するのですが、失敗することもあります。

rc.confの設定

 DHCPでもらうIPアドレスだとcorega BAR Pro2でNATアドレスポート変換が指定できないので、DHCPの付与するアドレスとぶつからない192.168.1.100に固定しました。
 qmailを導入するので、sendmailを殺します。[FreeBSD-users-jp 68922]にあるように、NOでは死なないのでご注意。
 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を
<td><strong>0.0.0.0</strong></td>
として、ip_newがこれと等しいかチェックするようにしてみました。この場合、cmpが必ずエラーメッセージを出してくるので、[FreeBSD-users-jp 44430] Re: crontab logで見つけて2>&1を追加しました。これでも本当にIPアドレスが変わるときにはメッセージが来ますが、「動いている証拠」と思ってあえてそのままにしています。|の使い方が分からないのでべたなコーディングになりました。
#!/bin/sh
/usr/local/bin/wget -qO - http://{管理者のユーザ名}:{管理者のパスワード}@192.168.1.1/cgi-bin-lock/ap_conf.cgi?_PAGE=BASE_INFO > /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://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実行時にエラーがあるとここで指定したアドレスにメッセージが来ます。

qmailの設定

 qmail/pop before smtp/qmail-scanner設定メモのままでうまくいきました。portsのインストールはsysinstallからはできないのですが、 に行って、make; make installでならできます。pop5smtpは、pop5smtp ホームページから持ってきます。mailuserとnofilesというグループを作らないとエラーになります。
 ただ、tcpserver.shの中の/bin/chmod 664 /var/qmail/pop5smtp.dbのままでは、popサーバアクセス時に認証エラーになるので、666に変更しています。
 qmail scannerはサボっています。
 /var/qmail/alias/に.qmail-postmasterのファイルがあるので、これを
| 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)