Linux(Fedora Core 4)とPostfixを使い、部署内メールサーバを構築する。ただし、ユーザアカウント情報はActiveDirectoryから取得(認証)し、Linuxサーバにはユーザアカウントを持たないような構成にする。
部署内で利用するメールサーバを1から構築する。OSには Fedora Core 4 を使い、MTAはPostfixを採用する。ウィルス付きメールやスパムメールをメールサーバ側である程度破棄できるようにし、クライアント側の負担を若干減らすことも考える。
- SMTPサーバが受信したメールは、ウィルスチェック・スパムチェックを経て、メールボックスに格納される。ウィルスが検出されたメールは破棄され、スパムメールとして認識されたメールはスパム用メールボックスに格納される。
- POP/IMAPサーバは、通常用メールボックスに格納されているメールを取り出す。
また、アカウント情報はActiveDirectoryから取得し、メールサーバ側にはアカウント情報を持たない。クライアントとメールサーバ間の通信は暗号化することも行う。
DNSサーバに、今から構築するメールサーバ(smtp.andokomuten.jp)のホスト名を登録しておく。
「サーバーの役割管理」ウィンドウから「このDNSサーバーを管理する」のリンクをクリックDNSサーバの設定画面が現れるので、次の作業を行う。
2-1 ホスト名(smtp.andokomuten.jp)の登録
2-2 エイリアス(pop.andokomuten.jp)の登録
ついでにsmtpのエイリアス(別名)を作成しておく。
「前方参照ゾーン」ツリーの中にあるドメイン名を右クリックし、「新しいエイリアス」をクリック 新しいリソース・レコードウィンドウが表示される。
エイリアス名に「pop」、ターゲットホスト用の完全修飾ドメイン名に「smtp.andokomuten.jp」と入力し、OKボタンをクリック前方参照ゾーンにエイリアスが登録された 2-3 MXレコードの登録
今から構築するLinuxサーバは、andokomute.jpドメイン内でメールサーバとして利用するため、MXレコードも登録しておく。
「前方参照ゾーン」ツリーの中にあるドメイン名を右クリックし、「新しいメール エクスチェンジャ(MX)」をクリック 新しいリソース・レコードウィンドウが表示される。
「ホストまたは子ドメイン」には何も入力せず、「メールサーバーの完全修飾ドメイン名」に「smtp.andokomuten.jp」と入力し、OKボタンをクリック前方参照ゾーンにMXレコードが登録された
メールサーバ用に用意したマシンに、Fedora Core 4をインストールする。
- カスタムでインストールし、選択するパッケージは「開発ツール」「言語のサポート」だけにしておく。
- IPアドレスは「192.168.10.3」、DNSはドメインマスタサーバの「192.168.10.2」にする。DNSが正常に登録されていれば、ホスト名がsmtp.andokomuten.jpに設定される。
- ファイア・ウォールの設定は有効にし、「SSL」「SMTP」を許可しておく。SELINUXは無効にする。
- インストール後、パッケージを最新の状態にする。
- 不要なサービスは停止しておく。
LinuxサーバがActiveDirectoryのユーザ情報を利用して認証が利用できるよう、設定を行う。
3-1 Winbindのインストール・設定
Winbindを利用して、ActiveDirectoryにLinuxサーバをぶら下げ、認証を行う。この作業はrootで行う。
- Winbindのインストール:WinbindはSambaプログラム群の1つとして提供されているため、Winbindに必要なSambaパッケージをインストールする。
# yum -y install samba-common
# yum -y install samba-client- smb.confの設定1:viで/etc/samba/smb.confを開き、以下の文をコメントアウト(先頭に#を付ける)する。
workgroup = MYGROUP
server string = Samba Server
printcap name = /etc/printcap
load printers = yes
cups options = raw
security = user
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes- smb.confの設定2:次に、Winbind認証に必要なパラメータを追加する。smb.confの最終行に以下の文を追加し、保存する。
workgroup = ANDOKOMUTEN
realm = ANDOKOMUTEN.JP
security = ADS
netbios name = smtp
idmap uid = 10000-50000
idmap gid = 10000-50000
winbind cache time = 15
winbind separator = @
winbind use default domain = yes
template homedir = /home/%U
template shell = /bin/false
password server = ad.andokomuten.jp
encrypt passwords = yes
obey pam restrictions = yes- アカウント取得方法の変更:LinuxシステムがWinbindを経由してActiveDirectoryからアカウント情報を取得するよう、設定を変更する。viで/etc/nsswitch.confを開き、次のように修正して保存する。
passwd: files winbind
shadow: files winbind
group: files winbind- Kerberos設定ファイルの修正:ActiveDirectoryのコンピュータとして接続できるよう、Kerberos設定ファイルを編集する。viで/etc/krb5.confを開き、次のように修正して保存する。
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = ANDOKOMUTEN.JP
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
[realms]
ANDOKOMUTEN.JP = {
kdc = ad.andokomuten.jp
admin_server = ad.andokomuten.jp
default_domain = andokomuten.jp
}
[domain_realm]
.andokomuten.jp = ANDOKOMUTEN.JP
andokomuten.jp = ANDOKOMUTEN.JP
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}- Winbindの起動:Winbindを利用するため、起動する。また、サービスに登録する。
# chkconfig winbind on
# /etc/rc.d/init.d/winbind start
Winbind サービスを起動中: [ OK ]
# /etc/rc.d/init.d/winbind status
winbindd (pid 1639 1638) を実行中...- Kerberos認証の確認:Windows2003サーバのadministratorユーザを使って、kerberos認証が動作するか確認する。パスワードを聞いてくるので、administratorユーザのパスワードを入力してEnterキーを押す。正しいパスワードを入力すると、何も表示されずにプロンプトに戻る。
# kinit administrator@ANDOKOMUTEN.JP
Password for administrator@ANDOKOMUTEN.JP:
#- Kerberosチケットの取得確認:Kerberosチケットが取得できたかどうか確認する。
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@ANDOKOMUTEN.JP
Valid starting Expires Service principal
12/14/05 18:50:45 12/15/05 04:51:06 krbtgt/ANDOKOMUTEN.JP@ANDOKOMUTEN.JP
renew until 12/15/05 18:50:45
Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached- ActiveDirectoryに参加する:このサーバを、ActiveDirectoryに登録する。チケットの有効期限が切れないうちに以下のコマンドを実行する。
# net ads join
Using short domain name -- ANDOKOMUTEN
Joined 'SMTP' to realm 'ANDOKOMUTEN.JP'4-2 動作確認(ActiveDirectory側)
LinuxサーバがActiveDirectoryに登録されたかどうか、Windows側から確認する。
4-3 動作確認(Linux側)
Linuxサーバが、ActiveDirectoryに登録されたことは確認できた。次は、Linux側からWinbindやKerberosが正常に動作するかどうか、確認する。
- 確認1:参加したドメインの情報を参照する。
# net ads info
LDAP server: 192.168.10.2
LDAP server name: ad
Realm: ANDOKOMUTEN.JP
Bind Path: dc=ANDOKOMUTEN,dc=JP
LDAP port: 389
Server time: Wed, 14 Dec 2005 19:04:50 GMT
KDC server: 192.168.10.2
Server time offset: 7- 確認2:ドメインに参加した後に、そのドメインへの参加が有効かどうか確認する。
# net ads testjoin
Join is OK- 確認3:ActiveDirectoryに登録されているユーザを取得できるかどうか確認する。
# wbinfo -u
administrator
guest
support_388945a0
ad$
krbtgt
0001
smtp$- 確認4:ActiveDirectoryに登録されているグループを取得できるかどうか確認する。
# wbinfo -g
BUILTIN@system operators
BUILTIN@replicators
BUILTIN@guests
BUILTIN@power users
BUILTIN@print operators
BUILTIN@administrators
BUILTIN@account operators
BUILTIN@backup operators
BUILTIN@users
domain computers
domain controllers
schema admins
enterprise admins
domain admins
domain users
domain guests
group policy creator owners
dnsupdateproxy
yakusyoku- 確認5:ドメインに参加し、Winbindの役割を正常に機能しているかを確認する。
# wbinfo -t
checking the trust secret via RPC calls succeeded- 確認6:Winbindによるユーザ認証を確認する。
# wbinfo -a 0001%パスワード
plaintext password authentication succeeded
challenge/response password authentication succeeded- 確認7:ユーザが所属しているグループを確認する。
# id 0001
uid=10000(0001) gid=10000(domain users) 所属グループ=10000(domain users),10001(yakusyoku)
SMTPサーバとして、Postfixをインストールする。
5-1 インストール
- Postfixをインストールする。
# yum -y install postfix
- Fedora Coreでは標準MTAとしてSendmailがインストールされ、動作している。SendmailではなくPostfixを使いたいため、デフォルトメールサーバを切り替える。以下のコマンドを実行すると、選択番号を聞かれるので「2」と入力してEnterキーを押す。
# update-alternatives --config mta
2 プログラムがあり 'mta' を提供します。
選択 コマンド
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.sendmail
2 /usr/sbin/sendmail.postfix
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2- 標準MTAは切り替えたが、Sendmail自身は起動したままなので、停止させる。
# /etc/rc.d/init.d/sendmail stop
5-2 設定
Postfixの設定ファイル /etc/postfix/main.cfをviで開き、修正する。
- 基本設定:以下の部分を修正する。
myhostname = smtp.andokomuten.jp
mydomain = andokomuten.jp
myorign = $mydomain
inet_interface = all
mydestination = $myhostname, $mydomain
mynetworks_style = submit
mynetworks = 192.168.10.0/24, 127.0.0.0/8
smtpd_banner = $myhostname ESMTP- メールボックス形式:mbox形式で格納したいなら「Mailbox」、Maildir形式で格納したいなら「Maildir/」と指定する。
home_mailbox = Maildir/
- その他の設定1:ユーザのホームディレクトリに.forwardという名前のファイルを置くことで、そのファイルに記述されたメールアドレス宛にメールを転送する。必要に応じて、追加する。
allow_mail_to_commands = alias,forward
- その他の設定2:社内で使っているメールサーバを経由(中継)してメールを配送する。必要に応じて、修正する。
relayhost = [mail.andokomuten.jp]
5-3 起動
- 設定が終わったら、記述エラーがないか確認する。
# postfix check
- 何も表示されずにプロンプトに戻れば、とりあえず記述エラーは存在しない。Postfixを利用するため、起動する。また、サービスに登録する。
# chkconfig postfix on
# /etc/rc.d/init.d/postfix start- 起動したら、プロセスが動いているか確認する。「実行中」と出れば、とりあえずOK。
# /etc/rc.d/init.d/postfix status
master (pid 28304) を実行中...
クライアントからメールソフトを使ってメールを取得するため、POPサーバをインストールする。今回はFedora Coreが標準採用している、POPとIMAPの両方に対応し、かつ、導入が比較的簡単なDovecotを使用する。
6-1 インストール
次のコマンドを実行し、Dovecotをインストールする。
# yum -y install dovecot
6-2 設定
Dovecotの設定ファイル /etc/dovecot.conf をviで開き、設定を行う。
- プロトコルの指定:利用する受信サーバのプロトコルを「imap」「imaps」「pop3」「pop3s」から指定する。複数のプロトコルに対応させるには、スペースに続けて指定する。
protocols = pop3
- メールボックス形式の指定:mbox形式、Maildir形式で、設定が変わる。
default_mail_env = mbox:/var/mail/%u
default_mail_env = maildir:~/Maildir6-3 起動
- 設定が終わったら、Dovecotを起動する。また、サービスに登録する。
# chkconfig dovecot on
# /etc/rc.d/init.d/dovecot start- 起動したら、プロセスが動いているか確認する。「実行中」と出れば、とりあえずOK。
# /etc/rc.d/init.d/dovecot status
dovecot (pid 29606) を実行中...6-4 ポートを空ける
Fedora Coreインストール時、ファイアウォールの設定においてSSHとSMTPしかポートを空けていない。このままではPOPが通らないので、POPが利用するポート「110」を空ける(IMAPなら「143」)。
ファイアウォールの設定ファイル /etc/sysconfig/iptables をviで開き、次の行を追加して保存する。-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT
追加後、ファイアウォールを再起動する。
# /etc/rc.d/init.d/iptables restart
6-5 統合認証方式の選択
DovecotがPAM経由でActiveDirectoryに対して認証するように設定を行う。Dovecotの設定ファイル /etc/pam.d/dovecot をviで開き、全ての行をコメントアウトしてから、次の行を追加する。
- Winbind認証を利用する
auth sufficient /lib/security/pam_winbind.so
account sufficient /lib/security/pam_winbind.so- Kerberos認証を利用する
auth sufficient /lib/security/pam_krb5.so
account sufficient /lib/security/pam_krb5.so※PAMは設定ファイルを保存しただけで、変更が有効になる。
6-6 動作確認
クライアントPCのメーラーを設定し、メールが送受信できるかどうか確認する。
- メールアカウントの作成:例えばOutlook Expressでアカウントを次のように作成する。
- 認証テスト:アカウントを作成したら、Outlook ExpressからPOP経由でメールサーバに接続できるかテストを行う。何もメールを作っていない状態で「送受信」ボタンをクリックする。何のエラーも表示されなければ、とりあえず認証はうまくいっている。
- メール送信テスト:Outlook Expressを使って自分自身にメールを送ってみる。
すると、送信はできるが受信ができないことが分かる。
これは、メールサーバ側にアカウント用のホームディレクトリが存在しない(ls /home で確認してみよう)ためにメールボックスを作成できず、送信メールが保存されないことが原因である。6-7 Autodirのインストール
元々、メールサーバ側にアカウントを作成したくないがためにActiveDirectoryを利用することを考えているのに、ActiveDirectoryに登録したアカウントごとにホームディレクトリを作成するのは美しくない。
そこで、勝手にホームディレクトリを作成してくれる Autodir というソフトをインストールし、起動させる。
- Autodirの入手:Autodirのサイト(http://www.intraperson.com/autodir/)にアクセスする。Fedora用にRPMとGPG.keyが用意されているので、その2つをダウンロードする。
- インストール:GPG.keyをインストールしてから、Autodirをインストールする。
libltdl.so.3が無いため、インストールに失敗する。libltdl.so.3は libtool-ltdl に含まれているので、yumからインストールする。
# rpm --import key.asc
# rpm -ivh autodir-0.92.1-12.i386.rpm
エラー: Failed dependencies:
libltdl.so.3 is needed by autodir-0.92.1-12.i386その後、再度autodirをインストールすると、今度は成功する。
# yum -y install libtool-ltdl
# rpm -ivh autodir-0.92.1-12.i386.rpm
Preparing... ########################################### [100%]
1:autodir ########################################### [100%]- 起動:インストールがうまくいったので、Autodirを起動する。また、サービスに登録する。
# chkconfig autohome on
# /etc/rc.d/init.d/autohome start
Starting up autohome daemon: autodir info: giving up unnecessary root privileges
autodir notice: using default value '0700' for 'mode'
[ OK ]6-8 もう一度確認
Outlook Expressでもう一度自分宛にメールを作成し、送受信してみる。今度は正常に、送信したメールが受信できるはずである。
また、ls /home でホームディレクトリを確認すると、メールアカウントのディレクトリが作成されていることが確認できる。
ActiveDirectoryへユーザを登録する際、アカウント名を「社員番号」で登録している。このため、例えば社員番号が「0001」の社員の場合、メールアドレスが「0001@andokomuten.jp」になる。これでは味気ないので、エイリアスを使って、「社員名@andokomuten.jp」というメールアドレスが利用できるようにする。
エイリアスを登録するには、/etc/aliases を編集する。例えば「0001」のエイリアスとして「dokozono.syacho」を設定するには、設定ファイルの最後に次の文を追加する。
dokozono.syacho: 0001
エイリアスファイルを編集したら、変更を有効にする。変更を有効にするには次のコマンドを実行する。
# newaliases
記述にミスが無ければ、何も表示されない。
では、エイリアスが使えるかどうか確認する。Outlook Expressで「dokozono.syacho@andokomuten.jp」宛てにメールを送信してみる。送信したメールが受信できれば成功である。
※ユーザ情報をActiveDirectoryで管理しているのに、エイリアスはメールサーバ側に持つのは正直どうかと思う。ActiveDirectoryのユーザ登録画面にはメールアドレスを入力するところがあるので、その情報を利用する方法はないものか・・・
ユーザ認証を行わないとメールを送信できないよう、SMTP認証の設定を行う。
8-1 SASLの起動
SMTP認証を導入するにはSASLというパッケージが必要になる。Fedora Coreには標準でインストールされている。ただし、saslauthdデーモンはデフォルトで /etc/passwd、/etc/shadow を使ってSMTP認証をするようになっているため、PAM認証を行うよう、設定ファイル /etc/sysconfig/saslauthd をviで開き、次のように修正する。
MECH=pam
設定ファイルを修正したら、saslauthdデーモンを起動する。ついでにサービスに追加する。
# chkconfig saslauthd on
# /etc/rc.d/init.d/saslauthd start
# /etc/rc.d/init.d/saslauthd status
saslauthd (pid 30113 30112 30111 30109 30108) を実行中...8-2 Postfixの設定
PostfixがSASL認証を利用するよう、設定ファイル /etc/postfix/main.cf をviで開き、次の文を追加する。
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination追加したら、Postfixをリロードして設定の変更を有効にする。
# /etc/rc.d/init.d/postfix reload
8-3 統合認証方式の選択
PostfixがPAM経由でActiveDirectoryに対して認証するように設定を行う。SMTP認証サービスのPAM設定ファイル /etc/pam.d/smtp をviで開き、全ての行をコメントアウトしてから、次の行を追加する。
- Winbind認証を利用する
auth sufficient /lib/security/pam_winbind.so
account sufficient /lib/security/pam_winbind.so- Kerberos認証を利用する
auth sufficient /lib/security/pam_krb5.so
account sufficient /lib/security/pam_krb5.so※PAMは設定ファイルを保存しただけで、変更が有効になる。
8-4 動作確認
クライアントPCのメーラーを設定し、メールが送受信できるかどうか確認する。まずは今までの設定のままで、外部のメールアドレスに対してメールを作成する。
作成したメールを送信しようとすると、次のようなエラーが出る。
これは、Outlook Expressのアカウントの設定において、SMTP認証を有効にしていないからである。
アカウントのプロパティを開き、「サーバー」タブをクリックして、このサーバーは認証が必要にチェックを入れる。設定変更後、再度メールを送信すると、今度はエラーが出ることなく、メールが送れるはずである。
※同一ドメインのメールアカウントにメールを送信する場合、SMTP認証は行われない。外部へメールを送信する場合にSMTP認証が行われる。
Outlook ExpressやThunderbirdなどのメーラーを利用してメールの送受信を行う場合、メーラー(クライアント)とメールサーバ間の通信は生データ(クリアテキスト)で行われている。よって、このままではユーザ名やパスワードが盗聴される恐れがある。
ここではSSLを利用してSMTPサーバ(Postfix)及びPOP/IMAPサーバ(Dovecot)とメーラー間の通信を暗号化する方法を紹介する。9-1 サーバー証明書・秘密鍵の作成
まずはSSL通信用のサーバー証明書及び秘密鍵を作成する。この操作はrootユーザで行う。
- サーバー用秘密鍵の作成
# openssl genrsa -des3 1024 > /etc/postfix/server.key
Generating RSA private key, 1024 bit long modulus
.++++++
................................................++++++
e is 65537 (0x10001)
Enter pass phrase: 任意のパスワードを入力
Verifying - Enter pass phrase: もう一度任意のパスワードを入力- 秘密鍵からパスフレーズを削除
# openssl rsa -in /etc/postfix/server.key -out /etc/postfix/server.key
Enter pass phrase for /etc/postfix/server.key: 先ほどのパスワードを入力
writing RSA key- サーバー用公開鍵の作成
# openssl req -new -key /etc/postfix/server.key -out /etc/postfix/server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Aichi
Locality Name (eg, city) [Newbury]:Nagoya
Organization Name (eg, company) [My Company Ltd]:Ando Komuten
Organizational Unit Name (eg, section) []:Customer Center
Common Name (eg, your name or your server's hostname) []:smtp.andokomuten.jp
Email Address []:postmaster@andokomuten.jp
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ←何も入力しないでEnter
An optional company name []: ←何も入力しないでEnter
- サーバー証明書作成
# openssl x509 -in /etc/postfix/server.csr -out /etc/postfix/server.pem -req -signkey /etc/postfix/server.key -days 365
Signature ok
subject=/C=JP/ST=Aichi/L=Nagoya/O=Ando Komuten/OU=Customer Center/CN=smtp.andokomuten.jp/emailAddress=postmaster@andokomuten.jp
Getting Private key- クライアントインポート用サーバー証明書作成
# openssl x509 -in /etc/postfix/server.pem -outform DER -out mailserver.der
作成したファイル「mailserver.der」をフロッピーなどで保存しておく。- パーミッションの変更
# chmod 400 /etc/postfix/server.*
※smtpサーバ、popサーバ共に同じ証明書を利用する。smtpサーバとpopサーバをホスト名で区別する場合、それぞれのホスト用の証明書を作る必要がある。
9-2 Postfix設定変更
Postfixの設定ファイルを変更し、メーラー〜SMTPサーバー間通信を暗号化する。
- /etc/postfix/main.cfを編集:以下の文を最終行に追加する。
smtpd_tls_cert_file = /etc/postfix/server.pem
smtpd_tls_key_file = /etc/postfix/server.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache- /etc/postfix/master.cfを編集:以下の2行に付いている#を削除する。
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes- Postfixの再起動
# /etc/rc.d/init.d/postfix restart
9-3 Dovecot設定変更
Dovecotの設定ファイルを変更し、メーラー〜POP/IMAPサーバー間通信を暗号化する。サーバー証明書や秘密鍵は8-1で作成したものを流用する。
- /etc/dovecot.confを編集:以下の該当部分を修正する。
protocols = pop3 pop3s ←pop3を残しておくと、SSL無しでも認証できる
ssl_disable = no ←行頭の#を削除
ssl_cert_file = /etc/postfix/server.pem
ssl_key_file = /etc/postfix/server.key- Dovecotの再起動
# /etc/rc.d/init.d/dovecot restart
9-4 ファイアウォールの設定変更
POP/IMAP/SMTPの暗号化通信が行えるよう、ファイア・ウォールの設定を変更する。
- /etc/sysconfig/iptables をviで開き、以下の行を追加する。
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 465 -j ACCEPT ←SMTP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT ←IMAP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT ←POP- 変更を有効にする。
# /etc/rc.d/init.d/iptables restart
9-5 動作確認:Outlook Express
クライアント側からOutlook Expressを使って暗号化通信をテストする。Outlook Expressを開いてアカウントのプロパティページを表示し、「詳細設定」タブ内を次のように変更する。
- 「このサーバーはセキュリティで保護された接続(SSL)が必要」を、送信メール(SMTP)、受信メール(POPまたはIMAP)ともにチェックをつける。
- 送信メール(SMTP)のポート番号を465に変更(デフォルトは25)。
- 受信メール(POPまたはIMAP)のポート番号を995(IMAPなら993)に変更(自動で変更される)。
設定変更後、メールの送受信が行えるかどうか確認する。サーバー証明書が自家製(?)なので、次のような警告ウィンドウが表示される。
この警告ウィンドウは、Outlook Expressを開くたびに出てきてしまう。出ないようにするには、8-1の5.でフロッピーに保存した、クライアント用のサーバー証明書(mailserver.der)をインストールすればよい。
クライアント用サーバー証明書をインストールするには、mailserver.derをダブルクリックすればよい。次の画面が表示されるので、そのままインストールすればよい。インストール後、再度Outlook Expressを開くと、警告ウィンドウが表示されないはずである。
メールサーバーが不正中継の踏み台にされないように、対策を施す。
設定ファイル /etc/postfix/main.cf をviで開き、次の文を追加する。# HELOコマンドでホスト名を通知しないホストの接続を拒否
smtpd_helo_required = yes
# SMTPのVRFYコマンドを使用不可にする
disable_vrfy_command = yes
# RFC822で定義されている書式に適合しないメールアドレスが通知された場合、受信を拒否する
strict_rfc821_envelopes = yes
# この2つをnoにすると、何でもかんでも転送拒否してしまう
allow_percent_hack = yes
swap_bangpath = yes
# ソース・ルート形式で指定されている宛先メールアドレスを拒否
allow_untrusted_routing = no
# ホスト名と転送先ドメインとして許可されているドメインが宛先メールアドレスに指定されているものを受信
smtpd_recipient_restrictions = permit_mynetworks, reject_sender_login_mismatch, check_relay_domains
# 送信元のメールアドレスのホスト名(@より右)がDNSに登録されていなければ、接続を拒否
smtpd_sender_restrictions = reject_unknown_sender_domain
# SMTPのETRNコマンドの使用をホスト名が不正(怪しげ)なホストには使用不可としている
smtpd_etrn_restrictions = permit_mynetworks, reject_invalid_hostname
# 公開ブラックリストに登録されているホストを拒否する
maps_rbl_domains = relays.ordb.org, all_rbl.jp
smtpd_client_restrictions = permit_mynetworks, reject_maps_rbl, permit保存後、スペルミスなどないか確認し、OKならPostfixを再起動して変更を有効にする。
# postfix check
# /etc/rc.d/init.d/postfix reloadクライアントから様々なメールを送受信し、問題なく利用できるか確認する。
メールに添付されるウィルスを、メールサーバ側である程度駆除できるよう、対策を行う。
対策には、Clam AntiVirusというフリーのLinux向けアンチウィルスソフトを利用する。11-1 インストール
Clam AntiVirusはFedoraのパッケージとして用意されているので、yumで簡単にインストールできる。
- clamavのGPG Keyをインストール(Fedora Core 4の場合)
# cd /etc/pki/rpm-gpg
# wget http://crash.fce.vutbr.cz/Petr.Kristof-GPG-KEY- clamavのリポジトリをインストール(Fedora Core 4の場合)
# cd /etc/yum.repos.d
# wget http://crash.fce.vutbr.cz/crash-hat.repo- Clam AntiVirusをインストール
# yum -y install clamav
# yum -y install clamav-server11-2 設定ファイルの変更
インストールが終わったら、設定ファイルの変更を行う。
freshclamの設定ファイル /etc/freshclam.conf をviで開き、次のように修正する。※プロキシを使ってインターネットに接続する場合のみHTTPProxyServer proxy.andokomuten.jp
HTTPProxyPort 8080
#HTTPProxyUsername myusername
#HTTPProxyPassword mypass11-3 ウィルス定義ファイルを最新の状態に更新
ウィルス定義ファイルを最新の状態に更新できるかどうか、確認する。
# freshclam
ClamAV update process started at Mon Dec 19 16:30:21 2005
Connecting via 192.168.10.248
main.cvd is up to date (version: 34, sigs: 39625, f-level: 5, builder: tkojm)
Connecting via 192.168.10.248
Downloading daily.cvd [*]
daily.cvd updated (version: 1212, sigs: 1843, f-level: 6, builder: arnaud)
Database updated (41468 signatures) from db.jp.clamav.net11-4 ウィルスチェックの動作確認
ウィルスチェックが行えるかどうか、確認する。例えば /home/以下をウィルスチェックするには、次のように実行する。
# clamscan /home
----------- SCAN SUMMARY -----------
Known viruses: 41468
Engine version: 0.87.1
Scanned directories: 2
Scanned files: 6
Infected files: 0 ←ここが0なら、ウィルスは検出されなかったことになる
Data scanned: 0.00 MB
Time: 2.474 sec (0 m 2 s)※Clam AntiVirusによってウィルスが検出された場合、ウィルスは自動的に削除される。
11-5 Clam AntiVirusをデーモンモードで動作させる
Clam AntiVirusをデーモンモード(常駐)で動作するよう、設定を行う。
# chkconfig clamd on
# /etc/rc.d/init.d/clamd start11-6 freshclamをデーモンモードで動作させる
パターンファイルのアップデートを自動化するため、freshclamをデーモンモード(常駐)で動作するよう、設定を行う。
# chkconfig freshclam on
# /etc/rc.d/init.d/freshclam start11-7 amavisd-newのインストール
amavisd-newは、MTAとウィルススキャンプログラムとの橋渡しを行うソフトである。このソフトを利用し、送受信されるメールに対してClam AntiVirusによるウィルスチェックを行うよう設定する。
- dries用リポジトリの作成(Fedora Core 4の場合):viで /etc/yum.repos.d/dries.repo というファイルを作成し、次の文を書き込んで保存する。
[dries]
name=Extra Fedora rpms dries - $releasever - $basearch
baseurl=http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/linux/$releasever/$basearch/dries/RPMS/
gpgcheck=1
gpgkey=http://dries.ulyssis.org/rpm/RPM-GPG-KEY.dries.txt- インストール
# yum -y install amavisd-new
11-8 amavisd-newの設定
ClamAntiVirusとPostfixがamavisd-newを経由して連携するよう、amavisd-newの設定ファイル /etc/amavisd.conf を次のように修正する。
$mydomain = 'andokomuten.jp'; ←修正 #$virus_admin = "virusalert\@$mydomain"; ←ウィルス検知メールを管理者宛に通知したくなければ、コメントアウトする $final_spam_destiny = D_PASS; ←スパムと判断したメールでも受信させる場合は、コメントアウトを解除して編集 $warnvirussender = 0; ←$final_〜の下辺りに、この4行を追加 $warnspamsender = 0; $warnbannedsender = 0; $warnbadhsender = 0; #$sa_spam_subject_tag = '***SPAM*** '; ←スパムと判断したメールの件名に'***SPAM***'と入れたくなければ、コメントアウトする # ### http://www.clamav.net/ ←以下のコメントアウトを解除し、修正 ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"], qr/\bOK$/, qr/\bFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],11-9 Clam AntiVirusとamavisd-newの橋渡しの設定
clamdの設定ファイル /etc/clamd.conf をviで開き、次のように修正する。
LocalSocket /var/run/clamav/clamd.sock ←コメント(#)を外す
#TCPSocket 3310 ←コメント(#)を付ける11-10 Postfixとamavisd-newの橋渡しの設定
Postfixの設定ファイルをviで開き、それぞれ次のように修正する。
- /etc/postfix/main.cf:最終行に追加
content_filter=smtp-amavis:[127.0.0.1]:10024
- /etc/postfix/master.cf:最終行に追加
# # amavist-new # smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=100011-11 amavisd-newをデーモンモードで動作させる
amavisd-newをデーモンモード(常駐)で動作するよう、設定を行う。
# chkconfig amavisd on
# /etc/rc.d/init.d/amavisd start11-12 ClanAntivirus、Postfixを再起動する
11-9〜10でClanAntivirusとPostfixの設定ファイルを編集しているので、それぞれを再起動する。
# /etc/rc.d/init.d/clamd restart
# /etc/rc.d/init.d/postfix restart11-13 amavisd-new動作確認
Outlook Expressから自分宛にメールを送信してみて、SMTPサーバ上でウィルスチェックが行われているかを確認する。受信したメールのヘッダ部分に以下の行があれば、チェックされていることが分かる。
X-Virus-Scanned: amavisd-new at andokomuten.jp
11-14 ウィルス付きメールチェック確認
テスト用の無害なウィルスを自分宛に送信してみて、SMTPサーバ上でウィルスが検出されるかどうか確認する。
次のファイルをwgetでダウンロードし、自分宛に送信(sendmail -i 宛先ユーザ名 <添付ファイル名)する。Outlook Expressを使ってテストしようとすると、ダウンロードしたファイルがアンチウィルスソフトで駆除されてしまうため、テストできない。サーバ上で行った方がよい。
- http://www.eicar.org/download/eicar.com
- http://www.eicar.org/download/eicar.com.txt
- http://www.eicar.org/download/eicar.com.zip
- http://www.eicar.org/download/eicarcom2.zip
送信したら、サーバ上のログファイル「/var/log/maillog」に、ウィルス検出メッセージが出力されていることを確認する。
Dec 24 16:53:12 smtp amavis[14846]: (14846-02) Blocked INFECTED (Eicar-Test-Signature), LOCAL [192.168.10.101] [192.168.10.101] <?@[192.168.10.101]> -> <dokozono.syacho@andokomuten.jp>, quarantine: virus-KnNb-ZMErqEx, Message-ID: <002801c6085f$617cc500$72a112ac@andokomuten.jp>, mail_id: KnNb-ZMErqEx, Hits: -, 4144 ms
ウィルスが添付されているメールはサーバ上で自動的に削除されるため、メールは受信できないはずである。
メールサーバがspamメールを転送しないよう、対策を行う。対策には、SpamAssassinというフリーのspam対策ソフトウェアを利用する。
12-1 導入
SpamAssassinはPerlスクリプトだが、Fedora Core用のパッケージが用意されているので、yumで普通にインストールできる。
SpamAssassinは、amavisd-newをインストールする際に、一緒にインストールされる。# rpm -q spamassassin
spamassassin-3.0.4-2.fc4もし、インストールされていなかったら、次のようにインストールする。
# yum -y install spamassassin
12-2 起動前準備・起動
SpamAssassinの初期設定では、日本語のスパムメールに対応していない。対応させるため、TLECで公開されている日本語のスパムメールに対応したSpamAssassin用のルールファイルをセットアップする。
- SpamAssassin用ルールファイル更新スクリプトを作成する。
# vi /root/spamassassin-update.sh
- 以下のコードを入力し、保存する。
#!/bin/sh
# TLEC(http://tlec.linux.or.jp/)より最新のルートファイルをダウンロード
cd /etc/mail/spamassassin
wget -qN http://tlec.linux.or.jp/docs/user_prefs
cp user_prefs local.cf- 作成したファイルに実行権を付ける。
# chmod 700 /root/spamassassin-update.sh
- スクリプトを実行する。
# /root/spamassassin-update.sh
- SpamAssassin用ルールファイルが作成されたか、確認する。
# ls -al /etc/mail/spamassassin/
合計 404
drwxr-xr-x 2 root root 4096 12月 26 09:50 .
drwxr-xr-x 3 root root 4096 12月 24 16:00 ..
-rw-r--r-- 1 root root 935 11月 9 12:53 init.pre
-rw-r--r-- 1 root root 184500 12月 26 09:51 local.cf ←これ
-rw-r--r-- 1 root root 62 11月 9 12:53 spamassassin-default.rc
-rwxr-xr-x 1 root root 35 11月 9 12:53 spamassassin-helper.sh
-rw-r--r-- 1 root root 55 11月 9 12:53 spamassassin-spamc.rc
-rw-r--r-- 1 root root 184500 12月 25 13:00 user_prefs- 一定期間ごとに更新するよう、cronに登録する。これにより、常に最新のスパム情報を取得できる。
# crontab -e
00 04 * * * /root/spamassassin-update.sh以上の設定が終わったら、SpamAssassinをデーモンとして起動する。ついでに自動起動されるように登録しておく。
# chkconfig spamassassin on
# /etc/rc.d/init.d/spamassassin start12-3 Procmailの設定
SpamAssassinによりメールヘッダにスパムメールの印を付けられたメールはスパムメール用メールボックスへ、それ以外のメールは通常通り各ユーザのメールボックスへ配送するよう、Procmailの設定を行う。
Procmailはデフォルトで /etc/procmailrc というファイルを見に行くため、そのファイルを作成する。
- Procmailの設定ファイルを作成する。
# vi /etc/procmailrc
- 以下のコードを入力し、保存する。
PATH=/bin:/usr/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
SPAM=$MAILDIR/.spam/
#LOCKFILE=$HOME/.lockmail # Maildir形式の場合はコメントアウトする(パフォーマンスが下がる)
#LOGFILE=$HOME/procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力
# メールヘッダー中に「 X-Spam-*** 」の記述がなければ spamassassin を起動する
:0fw
*!^X-Spam.*
|spamassassin
# メールヘッダー中に「 X-Spam-Status: Yes 」の記述があれば、「 .Spam 」ディレクトリにメールを格納する
#:0
#*^X-Spam-Status: Yes
#$SPAM次に、スパムメール用メールボックスを作成する。
- rootユーザ用のスパムメール用メールボックスを、次のように作成する。
# mkdir /root/Maildir/.spam
# chmod 700 /root/Maildir/.spam/
# echo spam >> /root/Maildir/.subscriptions- 他のユーザ(ActiveDirectoryに登録されていて、メールを利用するユーザ)は、ユーザディレクトリが作成されたとき(初めてPOP/SMTP認証を行ったとき)に自動的にスパムメール用メールボックスが作成されるようにする。
# mkdir -p /etc/skel/Maildir/.spam
# chmod -R 700 /etc/skel/Maildir/
# echo spam >> /etc/skel/Maildir/.subscriptions
# chmod 600 /etc/skel/Maildir/.subscriptions12-4 Postfix−Procmail連携
PostfixがProcmailと連携するよう、Postfixの設定ファイル /etc/postfix/main.cf をviで開き、次のように修正する。
mailbox_command = /usr/bin/procmail ←修正
修正したら、設定を反映させる。
# /etc/rc.d/init.d/postfix reload
12-5 確認
受信したメールが、SpamAssassinを経由しているかどうか確認する。自分宛にメールを送信し、受信したメールのヘッダ情報を見ればよい。Outlook Expressなどで受信したメールを開き、全てのヘッダを表示させると、ヘッダ部分に「X-Spam-xxx」という項目が見つかる。この項目があれば成功。
次に、スパムメールを判断するかを確認する。サーバ上で次のコマンドを実行し、任意のアカウントに直接スパムメールを送る。
# echo "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"|mail 任意のアカウント
実行後、Outlook Expressでそのメールを受信してみる。SPAMメールの振り分けは無効にしてあるので、受信はできるはず。
受信したメールのヘッダ情報を見ると、「X-Spam-Status: Yes」という記述を見つけることができる。
このステータスが「Yes」になっていると、スパムメールと判断したことになる。
スパムメールと判断したメールをサーバ側で削除(実際には.spamディレクトリに移動)させるには、Procmailの設定ファイル /etc/procmailrc をviで開き、最終行3行のコメントアウトを解除する。# メールヘッダー中に「 X-Spam-Status: Yes 」の記述があれば、「 .Spam 」ディレクトリにメールを格納する
:0
*^X-Spam-Status: Yes
$SPAM修正後、SpamAssassinを再起動すると、設定が有効になる。
# /etc/rc.d/init.d/spamassassin restart
再起動後、スパムメールのチェックをもう一度行う。サーバ側でスパムメールの振り分けを行うため、Outlook Expressで受信できなくなったことが確認できる。
Thunderbirdなど、IMAPに対応したメーラーを使うと、spamフォルダに自動的に振り分けられることが確認できる。