現用サーバーはFreeBSD 7.3と PC (Intel D510MO) を使用しているが、もう、6年以上、連続稼働している。
動作が怪しいわけではないが、新しいPC (Asron D1800B-ITX ) に最新のFreeBSD 11.0をクリーン・インストールして予備サーバーとしてみる。
インストールに使用したHDDは500GBHDD(SATA)である。
FreeBSD 11.0はFreeBSDのサイトから
FreeBSD-11.0-RELEASE-amd64-mini-memstick.imgをダウンロードした。
これをLinuxで動作してる自作NASへ格納し
、以下のようにddコマンドでUSBメモリーへコピーした。
dd if=FreeBSD-11.0-RELEASE-amd64-mini-memstick.img of=/dev/sdb
なお、/dev/sdbはUSBメモリーのデバイス名である。
新しいPC (Asron D1800B-ITX ) にモニター、キーボード、LANケーブル、FreeBSD-11.0-RELEASE-amd64-mini-memstick.imgをコピーしたUSBメモリーを装着して電源を投入する。
なお、FreeBSD-11.0-RELEASE-amd64-mini-memstick.imgでは、基本的なファイルしか格納されておらず、その他のファイルはWAN側から引っ張ってくるのでインターネットに接続しておく必要がある。
D1800B-ITXはUEFIを採用しているので、電源投入したらF11キーを連打するとBOOTデバイス選択になるので、USBメモリーを選択してブートする。
インストールに関しては、「FreeBSD ハンドブック」を参照したが、現用サーバーのFreeBSD 7.3とはディスク領域の割り当て等でかなり勝手が違っていた。
ウェルカムメニューで[install]を選択し、以下の項目について設定していく。
*キーボードメニューの選択 日本語106
*ホスト名の設定 exsample.net
*インストールするコンポーネントの設定 デフォルトのまま
*ネットワークからのインストール ネットワークインタフェースの設定後、Main Siteを選択
*ディスク領域の割り当て 500GBHDDを選択後、Guided によるパーティションの分割、GPT選択
*rootパスワードの設定
*タイムゾーンの設定 JSTを選択
*サービスを有効にする デフォルトのまま
*ユーザの追加 wheelグループにも所属させる。
インストールを終了し、リブートしps axで動作している主なアプリ確認するとsyslogd、sendmail、sshdが立ち上がっていた。
サーバーで外部公開するのは、現状と同じでsmtpとhttpdのみで、内部ではftpd、sshd、pop を使う。
sshdが動いているので、これからの作業はWin7PCからTera Term経由で操作するので、現用サーバーの設定ファイル等を、GUIで簡単にコピー・ペーストできる。
これから追加したり設定したりするアプリ類はApache、wwwcounter、semdmail、fml、pop3、ipfilter、syslog等である。
それらの設定をするためにinetdが立ち上がっていると便利なので、/etc/rc.confに以下を追加する。
#vi /etc/rc.conf
inetd_enable="YES"
設定にはftpも多用するので、/etc/inetd.confを編集してftpを有効にする。
#vi /etc/inetd.conf
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
FreeBSD-11.0をインストールするとデフォルトでsendmailが動作しているので、そのバージョンをチェックしてみる。
$ sendmail -d0.101
Version 8.15.2
現用サーバーと同様、これをMTAとする。
/etc/mailへ移動し、rootで以下のコマンドを実施する。
#make
これにより、ホスト名(myhost)が反映されたmyhost.cf、myhost.mc、myhost.submit.cf、myhost.submit.mcが生成される。
今回はmyhost.cf、myhost.submit.cfをそのまま、sendmail.cf、 submit.cfとしてコピーした。
#cp myhost.cf sendmail.cf
#cp myhost.submit.cf submit.cf
その後、現用サーバーを参考にして/etc/mail以下のaccess、aliases、local-host-namesを設定し、再度
#make
とすると、設定が反映される。
次に、/etc/rc.confに
#vi /etc/rc.conf
sendmail_enable="YES"
と記述した。
POP3サーバーであるが、POPはLAN内のPCからMTAとやりとりするだけなので、高機能なPOP3は不要である。
現用サーバーではpop3liteを使用しているので、portsからインストールしてみたが、どういうわけか動作しない。
仕方ないので、以前、使用したことのあるqpopperをこれまたportsからインストールしてみた。
#cd /usr/ports/mail/qpopper
#make install
インストール終了後、/etc/inetd.confに以下を記述すると、無事、動作した。
pop3 stream tcp nowait root /usr/local/libexec/qpopper qpopper
現用サーバーはApache/2.2.14であるが、今回も2.2系としportsからインストールした。
#cd /usr/ports/www/apache22
#pkg install apache22
次に/etc/hostsを以下のように設定する。
なお、192.168.0.20はサーバーのIP、ns.myhost.netはサーバーのホスト名である。
::1 localhost localhost.my.domain
127.0.0.1 localhost localhost.my.domain
192.168.0.20 ns.myhost.net ns
192.168.0.20 ns.myhost.net.
/etc/rc.confに、apache22_enable=“YES”を追加する。
#vi /etc/rc.conf
apache22_enable=“YES”
最後にhttpd.confを修正する。
#vi /usr/local/etc/apache22/httpd.conf
Listen 192.168.0.20:80
ServerAdmin webmaster@myhost.net
ServerName www.myhost.net:80
/var/log/httpd-access.logでDNSを逆引きしてドメイン名を表示させたいので、以下を追加した。
HostnameLookups On
CustomLog "/var/log/httpd-access.log" combined
以下のコマンドでapacheを起動させ、ブラウザからアクセスすると、このように見えるはずである。
# /usr/local/etc/rc.d/apache22 start
Performing sanity check on apache22 configuration:
Syntax OK
Starting apache22.
なお、バージョンは以下のとおりとなった。
% httpd -v
Server version: Apache/2.2.31 (FreeBSD)
自宅サーバーではいくつかのMLをハンドリングしているので、これらの環境を構築する必要がある。
使い慣れたfmlをインストールしようと思い、fml-4.0.3.tar.gzをダウンロードして
#su fml
$tar zxvf fml-4.0.3.tar.gz
$cd fml-4.0.3
$make install
としたが、エラーが発生してインストールできない。
ネット検索するといくつかの情報がヒットした。
BBRK 14-12-29 fml の makefml がエラー
FML4 patch
それらによるとperlのバージョンが上がっのたのが原因のようである。
念のため、perlのバージョンをチェックすると
% perl -v
This is perl 5, version 20, subversion 3 (v5.20.3) built for amd64-freebsd-thread-multi
となった。
上述したサイト等を参考にして何とかインストールすることができたが、試行錯誤の連続で系統立ったメモを作れなかった。
その後の設定は。以前作ったメモを参考にして行ったが、すでに現用サーバーには設定に必要なファイル類があるので、本機にftpで移設した。
ipfilterであるが、以前のメモは古くなったので、
ファイアウォール IP Filter 設定
を参考にして設定した。
モジュールを追加し、/boot/loader.confに記述する。
# kldload ipl
# vi /boot/loader.conf
ipl_load="YES"
さらに/etc/rc.confを編集して下記をコメントする。
# vi /etc/rc.conf
ipfilter_enable="YES"
ipfilter_rules="/etc/ipf.rules"
ipfilter_flags=""
ipmon_enable="YES"
ipmon_flags="-D /var/log/ipflog"
デフォルトのipf.rulesを以下のように作る。
# perl /usr/share/examples/ipfilter/mkfilters | grep -v inet6 > /etc/ipf.rules
/etc/ipfrulesについては現用サーバーのものをコピー・ペーストした。
なお、外部に公開するポートは25、110のみで、192.168.0.20はサーバーのIPである。
# vi /etc/ipf.rules
block in log quick from any to any with ipopts
block in log quick proto tcp from any to any with short
pass out on re0 all head 250
block out from 127.0.0.0/8 to any group 250
block out from any to 127.0.0.0/8 group 250
block out from any to 192.168.0.20/32 group 250
pass out quick proto tcp/udp from 192.168.0.20/32 to any keep state group 250
block out quick all group 250
pass in on re0 all head 200
block in from 127.0.0.0/8 to any group 200
block in from 192.168.0.20/32 to any group 200
block in quick from 10.0.0.0/8 to any group 200
block in quick from 172.16.0.0/12 to any group 200
block in quick from 0.0.0.0/8 to any group 200
block in quick from 169.254.0.0/16 to any group 200
block in quick from 224.0.0.0/4 to any group 200
block in quick from 240.0.0.0/4 to any group 200
pass in quick proto tcp from any to 192.168.0.20/32 port = 80 flags S/SA keep state group 200
pass in quick proto tcp from any to 192.168.0.20/32 port = 25 flags S/SA keep state group 200
pass in quick from 192.168.0.0/24 to 192.168.0.20/32 keep state group 200
pass out quick from 192.168.0.20/32 to 192.168.0.0/24 keep state group 250
block in log quick all group 200
pass in quick on lo0 all
pass out quick on lo0 all
syslog関係も以前のメモを参考にして設定した。
先ず、ルーターのsyslogを格納するファイルを作る。
#touch /var/log/rt314
次に、/etc/syslog.confに以下を追記した。
# vi /etc/syslog.conf
*.=debug /var/log/debug.log
*.emerg *
user.* /var/log/rt314
auth.* /var/log/rt314
次に/etc/newsyslog.confに以下を追記した。
# vi /etc/newsyslog.conf
/var/log/xferlog 600 7 100 * JC
/var/log/httpd-access.log 644 5 90000 *
Z /var/run/httpd.pid
/var/log/httpd-error.log 644 5 1000 * Z /var/run/httpd.pid
/var/log/ipflog 644 5 5000 * Z /var/run/ipmon.pid
/var/log/ftpd.log 644 3 100 * Z
/var/log/rt314 644 3 5000 * Z
筆者は、運用中サーバーのHDDを丸ごとコピーしたバックアップ用のHDDを定期的に作ることにしている。
丸ごとコピーの方法であるが、サーバーにコピー先HDDを装着してddコマンドで行う。
コピー先のHDD容量は、コピー元HDDと同容量かそれ以上の容量が必要であるが、同容量であれば、2つのHDDを入れ替えて運用することも可能である。
現用サーバーはMini-ITX Intel D510MOであるが、コピー先のHDDをSATAポートに装着してdmesgで確認するとコピー元(運用中HDD)がad6、コピー先がad4であることが判った。
コマンドは以下のとおりで、bs=16mはブロックサイズの指定である。
#dd if=/dev/ad6 of=/dev/ad4 bs=16m
本機も現用サーバーと入れ替えて2ヶ月ほど運用し、特にトラブル等もなかったので、バックアップ用HDDを作ることにした。
バックアップ用HDDとして同容量の500GBがあったので、本機に装着してデバイスを確認したところコピー元がad0、コピー先がad1であった。
その場合、コマンドは以下のとおりである。
#dd if=/dev/ad0 of=/dev/ad1 bs=16m
3時間かかって丸ごとコピーが終了し、コピー先のHDDを外してサーバーを再起動させようとしたが、立ち上がらなかった。
本機に使用したAsron D1800B-ITXでは、同じSATAポートに装着したHDDでも1台だけの場合は/dev/ado、別のSATAポートに2台目のHDDを装着すると/dev/ad1に変わってしまうことが判った。
正しいコマンドは以下のとおりである。
#dd if=/dev/ad1 of=/dev/ad0 bs=16m
特に同一メーカー、同一形式、同容量のHDDを使用する場合は、dmesgで表示されるSerial Numberを必ず確認してデバイス名を決定することが肝心である。
そのような訳で、本機も一から作り直しとなった。