2006.01.19

ウイルスチェックソフト(clamAV)のインストール・・・(mail)

WindowsのクライアントPCにはNorton Anti Virusを入れているが、ウイルスはサーバで阻止した方が好ましい。
特にMLを運用していると、誰かがウイルスに感染すると急速に広がる危険性を帯びており、以前から何とかしたいと考えていた。
しかし、個人のクライアント用は数千円で買えるのにサーバ用は数十万円もするので二の足を踏んでいた。 個人使用は無料のものもあるが、試してみたがどうもしっくりこないので、本格的な導入は見合わせていた。
ところが、最近Clam Antivirus (略称ClamAV)というソフトが見つかり、フリーとは言うもののApple, IBM, SunMicroなどでも採用していて営利目的でも使えるとして評判が良いので入れることとした。
インストール方法の下記に手順を書いておく。
FreeBSDにはportsにclamavがあるので、/usr/ports/security/clamavでインストールする。

# cd /usr/ports/security/clamav
# make WITH_MILTER=yes clean

clean動作が終わったら、次にインストールです。

# make WITH_MILTER=yes install

インストールが終わると、/usr/local/etcにclamd.confというファイルが出来ていて、/usr/local/etc/rc.d
に clamav-clamd.sh, clamav-freshclam.sh, clamav-milter.shの3つのファイルが出来る。
ここで、/etc/mailに移動しsendmail.cfのバックアップを取って、freebsd2.mcに次の赤字部を追加してsendmai.cfを作り直す。

dnl Enable for both IPv4 and IPv6 (optional)
DAEMON_OPTIONS(`Name=IPv4, Family=inet')
DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O')
INPUT_MAIL_FILTER(`clmilter', `S=local:/var/run/clamav/clmilter.sock, F=, T=S:4m;R:4m')dnl
define(`confINPUT_MAIL_FILTERS', `clmilter')dnl
define(`confBIND_OPTS', `WorkAroundBrokenAAAA')
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')

そして、インストール

# make all install restart

次に/etc/rc.confに次の3行を追加。

clamav_clamd_enable="YES"
clamav_milter_enable="YES"
clamav_freshclam_enable="YES"

ここで、サーバをリブートすれば有効になって立ち上がるはず。
ところが、3つの起動ファイルで # xxxxx.sh startとすると、clamav-clamd.sh以外はalready runnningと出るのにclamav-clamd.shのときは/var/log/clamav/clamd.logがPermissionが許容されていないとして立ち上がらない。

# chown clamav /var/log/clamav/*

として再度起動したら、うまく起動できたようだ。
あとは、動いていることの確認だがWindowsのメーラから自分宛にメールを出して、届いたメールのヘッダをみると、以下の2行が追加されいている。 これでOKだ。
X-Virus-Scanned: ClamAV version 0.87, clamav-milter version 0.87 on uls.fam.cx
X-Virus-Status: Clean


Portsを最新版にする・・・(FreeBSD)

昨日、clamAVのインストールを書いた。
うまく動いているようだが、freshclamコマンドを実行するとお前の使っているバージョンは古いと以下のようなメッセージがでる。

WARNING: Your ClamAV installation is OUTDATED
WARNING: Local version: 0.87 Recommended version: 0.88

それでは、最新版を入れ直そう思い、まずportsを最新版にすることにした。
このためにcvsupを動かす必要があるのでcvsupをportsで入れる。

# cd /usr/ports/net/cvsup-without-gui
# make install clean

だいぶ時間が掛かるが、終了したら、/usr/share/examples/cvsupにあるports-supfileを/etcにコピーする。

# cp /usr/share/examples/cvsup/ports-supfile /etc

このファイルはRead-Onlyになっているので chmod 644 ports-supfileで編集可能としてから、中身を編集する。
編集個所は *default hostの指定のみで、ここに記述したhostと同期を取ることになる。
私は *default host=cvsup.jp.freebsd.org とした。

*default host=cvsup.jp.freebsd.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix

これで、updateする準備が出来たが、要らないports/chineseやports/vietnameseなどもupdateされるので /var/db/supにrefuseというファイルを作り、要らないportsを列記しておく。

# mkdir /var/db/sup
vi /var/db/sup/refuse
ports/arabic
ports/chinese
ports/french
ports/german
ports/hebrew
ports/hungarian
ports/korean
ports/polish
ports/portuguese
ports/russian
ports/ukrainian
ports/vietnamese

あとは、cvsup -g -L2 /etc/ports-supfile で同期が始まる。

# cvsup -g -L2 /etc/ports-supfile

かなり時間が掛かる。 終わったら、clamAVの入れ直しだ。

# cd /usr/ports/security/clamav
# make WITH_MILTER=yes clean
# make WITH_MILTER=yes install

これで、サーバをrebootして最新版を起動する。
freshclamコマンドでもWarningは出なくなった。
なお、例えばclamscan -r /home とすると/home以下のウイルスをチェックしてくれる。
延々とファイルリストの表示が続いたあと結果が以下のように出力される。

# clamscan -r /home
Known viruses: 42492
Engine version: 0.88
Scanned directories: 558
Scanned files: 14193
Infected files: 0
Data scanned: 1092.54 MB
Time: 1108.554 sec (18 m 28 s)

2006.01.16

Firewallの設定・・・(FreeBSD)

韓国からの不正浸入を試みようとするアクセスが異様に多い。 そんなに簡単には破られる事は無いと思うが、無気味であり、もしものことを考えてFirewallでサーバを守ることとにした。
FreeBSD 6.0で運用しているが、設定は簡単で /etc/rc.conf に次の2行を追加する。

firewall_enable="YES"
firewall_type="/etc/ipfw.conf"

しかし、ここでサーバを再起動すると私のようにWindowsからTera Termでアクセスしていると、その後一切アクセスできなくなるので要注意です。
理由は、defaultで
65535 0 0 deny ip from any to any
が設定されているからです。 この意味は全てのipパケットを禁止するとなる。
そこで、/etcに ipfw.confの名前のファイルを作り、最低次の1行を書いておく。
add 65000 allow all from any to any
ipfwのルールは番号の若い順に評価されるので、65535番より若い65000で全てのパケットを通すと指定しておく。 これでサーバをrebootして、

# ipfw -a list  と入力して設定ルールを見ると、
65000 354796 84007947 allow ip from any to any
65535      0        0 deny ip from any to any
となる。

後は、中国・韓国のIPアドレスを拒否するからipアドレス一覧をダウンロードし、Editorで開いて全選択してコピーし/etc/ipfw.conf の 6500 all allow ip from any to anyの行の前に貼り付ける。
これで、再度サーバをrebootすれば公式に韓国に割り当てられたip addressからのパケットは全て拒否できる。

            ・
            ・
            ・
add deny log all from 222.120.0.0/15 to any
add deny log all from 222.122.0.0/16 to any
add deny log all from 222.231.0.0/18 to any
add deny log all from 222.232.0.0/13 to any
add deny log all from 222.251.128.0/17 to any
add 65000 allow all from any to any

それでも、proxy経由でアクセスされたら防げないが、90%程度は阻止できるとのことである。


2006.01.15

sshの設定・・・(FreeBSD)

ほとんど、自宅内からしかアクセスしないからとssh接続の設定を行っていなくて通常のtelnetを使っていたが、使ってみようと設定することにした。
設定と言っても/etc/rc.confにsshd_enable=”YES”が入っていればsshdは既に起動しているので、もっぱらWindowsのクライアント側の作業となる。
最初、使っていたTeraTerm ProにTSSHをダウンロードして入れて設定しようとしたが、この組み合わせではSSH1しか使えず、最近のSSH2は使えないのでもっと新しいTeraTerm Pro UTF-8 対応版をダウンロードして新しく入れた。
ダウンロードするのはteratermj_utf8_425.exeで、ダウンロード後これをクリックするとインストールが始まる。
インストールしたら、起動すると図-1のような画面が現れるので、最初はまず通常のtelnetモードでloginする。
tterm01.jpg
      (図-1 )
loginできたら、設定のSSH KeyGeneratorを選ぶと図-2のような画面が現れるのでKey TypeにRSAを選んでKey Passphraseを入れてGenerateを押してKeyを生成する。
tterm03.jpg
      (図-2)
keyはpublic key(公開鍵)とprivate key(秘密鍵)の2つがそれぞれid_rsa.pubとid_rsaの名前で出来上がるので、この2つを保存しておく。
次に自分のhome directoryに .sshというDirectoryを作りftpでid_rsa.pubを送り込み、authorized_keysとファイル名を変える。
これで準備が出来たので、Tera Termを一度終わらせて再度Tera Termを起動し今度はsshを選んでOKボタンを押す。
(図-3)のような画面になるのでUse RSA/DSA Key to loginを選びPrivate Key fileを押して先に保存したid_rsaを選択してPassphraseにKey生成で用いたのと同じPassphraseを入れOKを押すと、見事にlogin出来る。

これで準備が出来たので、Tera Termを一度終わらせて再度Tera Termを起動し今度はsshを選んでOKボタンを押す。
(図-3)のような画面になるのでUse RSA/DSA Key to loginを選びPrivate Key fileを押して先に保存したid_rsaを選択してPassphraseにKey生成で用いたのと同じPassphraseを入れOKを押すと、見事にlogin出来る。
tterm04.jpg
      (図-3)
ここで、従来使っていたPasswordとPassphraseの違いを述べておくと、passwordは通常10字程度の記号と英数字でスペースは許されないが、Passphraseはもっと長くスペースも許されるので、
I can see beautiful mountainsのような文章とすることが出来る。
そして、文は文法的に誤りがあったり、スペルミスがある方が良いとされる。
しかし、長い文はloginのたびに入れるのが大変なので、自宅内だけなら簡単なpasswordと同じものでも良いと思う。


2006.01.03

Berkeley DBからMySQLへ移行(アップデートしました)・・・(Movabletype)

以前から、やろうと思っていたBerkeley DBからMySQLへの移行を行いました。
私のところではDBの容量が約6MBであったのが2MBになり、実行速度もだいぶ向上しました。
MySQLはFreeBSDのpackageから入れることを試みたのですが、インストール条件などが指定できないので、portsから入れ直しました。
MySQLのPortsは/usr/ports/databasesにありますが、mysql323, mysql40, mysql50の3つの版数のものが入っています。 Webで調べるとmysql50はまだ問題を抱えているような記述がありましたのでmysql40を入れることにしました。
一度packageで入れると、packageを削除しても完全には消されていなくて、矛盾を生じるので、入れる前にmake deinstallする必要がありました。
それと、DBの作成先はDefaultでは/var/db/mysqlですが、容量の残りがたっぷりの/usr/db/mysqlとすることにしました。 また、文字コードはeucにしたかったので ujisとしました。 最初文字コードをeucと書いたらエラーになりましたが、調べるとeucの指定はujisだと分かりました。
eucなら日本語以外のも中国語のeucもあるし、eucjpでは長いのでujisとしたのだそうです。
なんだか、言い訳じみています。

# mkdir /usr/db
# cd /usr/ports/databases/mysql40-client
# make deinstall
# make WITH_CHARSET=ujis WITH_XCHARSET=all
DB_DIR=/usr/db install clean

だいぶ時間がかかりましたが無事終了して、次にmysql40-serverのインストールです。

# cd ../mysql40-server
# make deinstall
# make WITH_CHARSET=ujis WITH_XCHARSET=all
DB_DIR=/usr/db install clean

インストールオプションはclientと同じですが、同じでないと具合が悪いようです。
次にMovabletypeから使えるように、p5-DBD-mysql40とp5-Class-DBI-mysqlも入れます。
この順序でないと、エラーがでます。 

# cd ../p5-DBD-mysql40
# make install clean
# cd ../p5-Class-DBI-mysql
# make install clean

ここまで、うまく行ったら、Movabletypeのmt.cgiがインストールされているディレクトリーにあるmt-check.cgiをBrowserから起動してDBIとDBDがインストールされていることを確認します。
この確認も取れたら、いよいよDBの作成です。
以下の作業をします。
(1) /usr/local/share/mysql内にあるmy-medium.cnfをmy.cnfの名前で /etcにコピーします。

# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf

(2) /etc/my.cnf に datadir = /usr/db/mysql の1行を追加

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
datadir = /usr/db/mysql ・・・この行を追加
key_buffer = 16M

(3) /usr/local/binにあるmysql_install_dbを使ってdbを設定します。

# mysql_install_db

(4) /usr/local/etc/rc.d内にあるmysql-server.sh は複雑でうまく動かなかったので、/usr/local/shre/mysql内にある mysql.server を/usr/local/etc/rc.dにコピーしmysql-server.shに名前を変えます。

# cd /usr/local/etc/rc.d
# mv mysql-server.sh mysql-server.org
# cp /usr/local/share/mysql.server ./mysql-server.sh

そして起動

# ./mysql-server.sh start

いよいよ、管理者のパスワードを設定です。

# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 6 to server version: 4.0.17
mysql> set password for root=password('設定するパスワード');
mysql> flush privileges;
mysql> exit
Bye

次にmysqlを再起動し、匿名ユーザーを削除します。
インストール直後、自動で作られていますのでセキュリティの点からも削除します。

# mysql -u root -p
Enter password: 設定したパスワード
mysql> use mysql;
mysql> delete from user where password=' ';
mysql> flush privileges;
mysql> exit
Bye

いよいよ、mysqlを起動してDBを作ります。 DBの名前はmtdbとしました。

# mysql -u root -p
Enter password: パスワード
mysql> create database mtdb;
Query OK, 1 row affected (0.00 sec)
mysql>

続いて、MovableType用のデータベースユーザーを作ります。
ユーザー名を mtuser としましたが、作ったデータベース mtdb に対してのすべての権限を与えます。
パスワードはMovabletypeが使うもので新しく決めて、後ほどmt-config-cgiにも書き込みます。

mysql> use mysql;
mysql> grant all privileges on mtdb.*
to mtuser@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.13 sec)
mysql> flush privileges;
mysql> exit
Bye

以上で完了です。
データベース上のテーブルは、MovableTypeが自動で作ります。
mysqlのコマンドは語句にスペルミスがあったりするとエラーになりますので、文末の”;”まで含めて正確に入れるのが要注意点です。
さて、いよいよDBの移行作業です。
mt.cgiのあるディレクトリーにあるmt-config.cgiのコメントアウトされている下記の部分を編集します。
パスワードはDBの作成でmtuserに与えたパスワードです。

ObjectDriver DBI::mysql
Database mtdb
DBUser mtuser
DBPassword パスワード
DBHost localhost

このとき DataSource ./db の設定はそのまま残しておきます。
そして、Brawserから mt-db2sql.cgi を起動します。
設定が正しければ、画面に延々と数字らしきものが表示され、かなりの時間の経過後に All well doneだったと思うが、うまく行ったメッセージが出て終了します。
ここで、先のmt-config.cgiのDataSource ./dbをコメントアウトする。
実際のdbディレクトリは消してもかまわないが、移行したものが正しく動作することが確認されるまでは、取っておくか、名前を変えて温存した方が無難でしょう。
結構、こまかい作業だが、順を追ってやって行けば移行作業は完了します。


« Previous | Next »