ActiveDirectory+Linuxによる部署内サーバ構築■メールサーバの構築

 Linux(Fedora Core 4)とPostfixを使い、部署内メールサーバを構築する。ただし、ユーザアカウント情報はActiveDirectoryから取得(認証)し、Linuxサーバにはユーザアカウントを持たないような構成にする。

  1. 概要
  2. DNSにホスト(smtp.andokomuten.jp)を登録
  3. Fedora Core 4をインストール
  4. 統合認証の設定(Winbind+Kerberos)
  5. SMTPサーバ(Postfix)のインストール・設定
  6. POPサーバ(Dovecot)のインストール・設定
  7. エイリアスの設定
  8. SMTP認証
  9. クライアント〜メールサーバ間通信暗号化(OpenSSL)
  10. 不正中継対策
  11. Clam AntiVirusによるウィルスメール対策
  12. SpamAssassinによるスパムメール対策

1.概要

 部署内で利用するメールサーバを1から構築する。OSには Fedora Core 4 を使い、MTAはPostfixを採用する。ウィルス付きメールやスパムメールをメールサーバ側である程度破棄できるようにし、クライアント側の負担を若干減らすことも考える。

  1. SMTPサーバが受信したメールは、ウィルスチェック・スパムチェックを経て、メールボックスに格納される。ウィルスが検出されたメールは破棄され、スパムメールとして認識されたメールはスパム用メールボックスに格納される。
  2. POP/IMAPサーバは、通常用メールボックスに格納されているメールを取り出す。

 また、アカウント情報はActiveDirectoryから取得し、メールサーバ側にはアカウント情報を持たない。クライアントとメールサーバ間の通信は暗号化することも行う。

2.DNSにホスト名(smtp.andokomuten.jp)を登録

 DNSサーバに、今から構築するメールサーバ(smtp.andokomuten.jp)のホスト名を登録しておく。
 「サーバーの役割管理」ウィンドウから「このDNSサーバーを管理する」のリンクをクリック

 DNSサーバの設定画面が現れるので、次の作業を行う。

2-1 ホスト名(smtp.andokomuten.jp)の登録

「前方参照ゾーン」ツリーの中にあるドメイン名を右クリックし、「新しいホスト」をクリック
ホスト名登録ウィンドウが表示されるので、名前欄に「smtp」、IPアドレス欄に「192.168.10.3」と入力し、「関連付けられたポインタ(PTR)レコードを作成する」にチェックを入れ、「ホストの追加」ボタンをクリック
追加が成功すると、このダイアログボックスが表示される。OKボタンをクリック
ホスト名登録ウィンドウに戻る。OKボタンをクリック
DNS管理画面に戻る。先ほど作成したホスト(smtp.andokomuten.jp)が登録されていることが分かる
逆引き参照ゾーンを見ると、IPアドレス(192.168.10.3)が登録されていることが分かる

2-2 エイリアス(pop.andokomuten.jp)の登録

 ついでにsmtpのエイリアス(別名)を作成しておく。

「前方参照ゾーン」ツリーの中にあるドメイン名を右クリックし、「新しいエイリアス」をクリック
新しいリソース・レコードウィンドウが表示される。
エイリアス名に「pop」、ターゲットホスト用の完全修飾ドメイン名に「smtp.andokomuten.jp」と入力し、OKボタンをクリック
前方参照ゾーンにエイリアスが登録された

2-3 MXレコードの登録

 今から構築するLinuxサーバは、andokomute.jpドメイン内でメールサーバとして利用するため、MXレコードも登録しておく。

「前方参照ゾーン」ツリーの中にあるドメイン名を右クリックし、「新しいメール エクスチェンジャ(MX)」をクリック
新しいリソース・レコードウィンドウが表示される。
「ホストまたは子ドメイン」には何も入力せず、「メールサーバーの完全修飾ドメイン名」に「smtp.andokomuten.jp」と入力し、OKボタンをクリック
前方参照ゾーンにMXレコードが登録された

3.Fedora Core 4をインストール

 メールサーバ用に用意したマシンに、Fedora Core 4をインストールする。

4.統合認証の設定(Winbind+Kerberos)

 LinuxサーバがActiveDirectoryのユーザ情報を利用して認証が利用できるよう、設定を行う。

3-1 Winbindのインストール・設定

 Winbindを利用して、ActiveDirectoryにLinuxサーバをぶら下げ、認証を行う。この作業はrootで行う。

  1. Winbindのインストール:WinbindはSambaプログラム群の1つとして提供されているため、Winbindに必要なSambaパッケージをインストールする。

    # yum -y install samba-common
    # yum -y install samba-client

  2. 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

  3. 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

  4. アカウント取得方法の変更:LinuxシステムがWinbindを経由してActiveDirectoryからアカウント情報を取得するよう、設定を変更する。viで/etc/nsswitch.confを開き、次のように修正して保存する。

    passwd: files winbind
    shadow: files winbind
    group: files winbind

  5. 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
    }

  6. 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) を実行中...

  7. Kerberos認証の確認:Windows2003サーバのadministratorユーザを使って、kerberos認証が動作するか確認する。パスワードを聞いてくるので、administratorユーザのパスワードを入力してEnterキーを押す。正しいパスワードを入力すると、何も表示されずにプロンプトに戻る。

    # kinit administrator@ANDOKOMUTEN.JP
    Password for administrator@ANDOKOMUTEN.JP:
    #

  8. 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

  9. ActiveDirectoryに参加する:このサーバを、ActiveDirectoryに登録する。チケットの有効期限が切れないうちに以下のコマンドを実行する。

    # net ads join
    Using short domain name -- ANDOKOMUTEN
    Joined 'SMTP' to realm 'ANDOKOMUTEN.JP'

4-2 動作確認(ActiveDirectory側)

 LinuxサーバがActiveDirectoryに登録されたかどうか、Windows側から確認する。

「前方参照ゾーン」ツリーの中にあるドメイン名を展開し、Computersをクリックすると、右側のウィンドウにsmtpという名前のコンピュータが登録されていることが確認できる。
登録されているコンピュータsmtpを右クリックし、プロパティを選択すると、プロパティウィンドウが表示される。
「全般」タブ内では、DNS名が正しく認識されていることが分かる。
「オペレーティングシステム」タブ内では、Sambaのバージョンが正しく認識されていることが分かる。

4-3 動作確認(Linux側)

 Linuxサーバが、ActiveDirectoryに登録されたことは確認できた。次は、Linux側からWinbindやKerberosが正常に動作するかどうか、確認する。

  1. 確認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. 確認2:ドメインに参加した後に、そのドメインへの参加が有効かどうか確認する。

    # net ads testjoin
    Join is OK

  3. 確認3:ActiveDirectoryに登録されているユーザを取得できるかどうか確認する。

    # wbinfo -u
    administrator
    guest
    support_388945a0
    ad$
    krbtgt
    0001
    smtp$

  4. 確認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. 確認5:ドメインに参加し、Winbindの役割を正常に機能しているかを確認する。

    # wbinfo -t
    checking the trust secret via RPC calls succeeded

  6. 確認6:Winbindによるユーザ認証を確認する。

    # wbinfo -a 0001%パスワード
    plaintext password authentication succeeded
    challenge/response password authentication succeeded

  7. 確認7:ユーザが所属しているグループを確認する。

    # id 0001
    uid=10000(0001) gid=10000(domain users) 所属グループ=10000(domain users),10001(yakusyoku)

5.SMTPサーバ(Postfix)のインストール・設定

 SMTPサーバとして、Postfixをインストールする。

5-1 インストール

  1. Postfixをインストールする。

    # yum -y install postfix

  2. 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

  3. 標準MTAは切り替えたが、Sendmail自身は起動したままなので、停止させる。

    # /etc/rc.d/init.d/sendmail stop

5-2 設定

 Postfixの設定ファイル /etc/postfix/main.cfをviで開き、修正する。

  1. 基本設定:以下の部分を修正する。

    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

  2. メールボックス形式:mbox形式で格納したいなら「Mailbox」、Maildir形式で格納したいなら「Maildir/」と指定する。

    home_mailbox = Maildir/

  3. その他の設定1:ユーザのホームディレクトリに.forwardという名前のファイルを置くことで、そのファイルに記述されたメールアドレス宛にメールを転送する。必要に応じて、追加する。

    allow_mail_to_commands = alias,forward

  4. その他の設定2:社内で使っているメールサーバを経由(中継)してメールを配送する。必要に応じて、修正する。

    relayhost = [mail.andokomuten.jp]

5-3 起動

  1. 設定が終わったら、記述エラーがないか確認する。

    # postfix check

  2. 何も表示されずにプロンプトに戻れば、とりあえず記述エラーは存在しない。Postfixを利用するため、起動する。また、サービスに登録する。

    # chkconfig postfix on
    # /etc/rc.d/init.d/postfix start

  3. 起動したら、プロセスが動いているか確認する。「実行中」と出れば、とりあえずOK。

    # /etc/rc.d/init.d/postfix status
    master (pid 28304) を実行中...

6.POPサーバ(Dovecot)のインストール・設定

 クライアントからメールソフトを使ってメールを取得するため、POPサーバをインストールする。今回はFedora Coreが標準採用している、POPとIMAPの両方に対応し、かつ、導入が比較的簡単なDovecotを使用する。

6-1 インストール

 次のコマンドを実行し、Dovecotをインストールする。

# yum -y install dovecot

6-2 設定

 Dovecotの設定ファイル /etc/dovecot.conf をviで開き、設定を行う。

  1. プロトコルの指定:利用する受信サーバのプロトコルを「imap」「imaps」「pop3」「pop3s」から指定する。複数のプロトコルに対応させるには、スペースに続けて指定する。

    protocols = pop3

  2. メールボックス形式の指定:mbox形式、Maildir形式で、設定が変わる。

    default_mail_env = mbox:/var/mail/%u
    default_mail_env = maildir:~/Maildir

6-3 起動

  1. 設定が終わったら、Dovecotを起動する。また、サービスに登録する。

    # chkconfig dovecot on
    # /etc/rc.d/init.d/dovecot start

  2. 起動したら、プロセスが動いているか確認する。「実行中」と出れば、とりあえず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で開き、全ての行をコメントアウトしてから、次の行を追加する。

※PAMは設定ファイルを保存しただけで、変更が有効になる。

6-6 動作確認

 クライアントPCのメーラーを設定し、メールが送受信できるかどうか確認する。

  1. メールアカウントの作成:例えばOutlook Expressでアカウントを次のように作成する。
    「追加」ボタンをクリックし、「メール」をクリック
    適当な名前を入力し、「次へ」をクリック
    ActiveDirectory側に作成したユーザアカウント名を、ドメイン名付き(例、0001@andokomuten.jp)で入力し、「次へ」をクリック
    プロトコルが「POP3」になっていることを確認し、POPサーバー、SMTPサーバーにそれぞれメールサーバのホスト名(例、smtp.denpa.jp)を入力して、「次へ」をクリック
    登録したアカウントのパスワードを入力し、「次へ」をクリック
    「完了」をクリック
  2. 認証テスト:アカウントを作成したら、Outlook ExpressからPOP経由でメールサーバに接続できるかテストを行う。何もメールを作っていない状態で「送受信」ボタンをクリックする。何のエラーも表示されなければ、とりあえず認証はうまくいっている。
  3. メール送信テスト:Outlook Expressを使って自分自身にメールを送ってみる。

    すると、送信はできるが受信ができないことが分かる。
    これは、メールサーバ側にアカウント用のホームディレクトリが存在しない(ls /home で確認してみよう)ためにメールボックスを作成できず、送信メールが保存されないことが原因である。

6-7 Autodirのインストール

 元々、メールサーバ側にアカウントを作成したくないがためにActiveDirectoryを利用することを考えているのに、ActiveDirectoryに登録したアカウントごとにホームディレクトリを作成するのは美しくない。
 そこで、勝手にホームディレクトリを作成してくれる Autodir というソフトをインストールし、起動させる。

  1. Autodirの入手:Autodirのサイト(http://www.intraperson.com/autodir/)にアクセスする。Fedora用にRPMとGPG.keyが用意されているので、その2つをダウンロードする。
  2. インストール:GPG.keyをインストールしてから、Autodirをインストールする。
    # 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
    libltdl.so.3が無いため、インストールに失敗する。libltdl.so.3は libtool-ltdl に含まれているので、yumからインストールする。
    # yum -y install libtool-ltdl
    その後、再度autodirをインストールすると、今度は成功する。
    # rpm -ivh autodir-0.92.1-12.i386.rpm
    Preparing...        ########################################### [100%]
      1:autodir        ########################################### [100%]
  3. 起動:インストールがうまくいったので、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 でホームディレクトリを確認すると、メールアカウントのディレクトリが作成されていることが確認できる。

7.エイリアスの設定

 ActiveDirectoryへユーザを登録する際、アカウント名を「社員番号」で登録している。このため、例えば社員番号が「0001」の社員の場合、メールアドレスが「0001@andokomuten.jp」になる。これでは味気ないので、エイリアスを使って、「社員名@andokomuten.jp」というメールアドレスが利用できるようにする。

 エイリアスを登録するには、/etc/aliases を編集する。例えば「0001」のエイリアスとして「dokozono.syacho」を設定するには、設定ファイルの最後に次の文を追加する。

dokozono.syacho: 0001

 エイリアスファイルを編集したら、変更を有効にする。変更を有効にするには次のコマンドを実行する。

# newaliases

 記述にミスが無ければ、何も表示されない。

 では、エイリアスが使えるかどうか確認する。Outlook Expressで「dokozono.syacho@andokomuten.jp」宛てにメールを送信してみる。送信したメールが受信できれば成功である。

※ユーザ情報をActiveDirectoryで管理しているのに、エイリアスはメールサーバ側に持つのは正直どうかと思う。ActiveDirectoryのユーザ登録画面にはメールアドレスを入力するところがあるので、その情報を利用する方法はないものか・・・

8.SMTP認証

 ユーザ認証を行わないとメールを送信できないよう、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で開き、全ての行をコメントアウトしてから、次の行を追加する。

※PAMは設定ファイルを保存しただけで、変更が有効になる。

8-4 動作確認

 クライアントPCのメーラーを設定し、メールが送受信できるかどうか確認する。まずは今までの設定のままで、外部のメールアドレスに対してメールを作成する。

 作成したメールを送信しようとすると、次のようなエラーが出る。

 これは、Outlook Expressのアカウントの設定において、SMTP認証を有効にしていないからである。
 アカウントのプロパティを開き、「サーバー」タブをクリックして、このサーバーは認証が必要にチェックを入れる。

 設定変更後、再度メールを送信すると、今度はエラーが出ることなく、メールが送れるはずである。

※同一ドメインのメールアカウントにメールを送信する場合、SMTP認証は行われない。外部へメールを送信する場合にSMTP認証が行われる。

9.クライアント〜メールサーバ間通信暗号化

 Outlook ExpressやThunderbirdなどのメーラーを利用してメールの送受信を行う場合、メーラー(クライアント)とメールサーバ間の通信は生データ(クリアテキスト)で行われている。よって、このままではユーザ名やパスワードが盗聴される恐れがある。
 ここではSSLを利用してSMTPサーバ(Postfix)及びPOP/IMAPサーバ(Dovecot)とメーラー間の通信を暗号化する方法を紹介する。

9-1 サーバー証明書・秘密鍵の作成

 まずはSSL通信用のサーバー証明書及び秘密鍵を作成する。この操作はrootユーザで行う。

  1. サーバー用秘密鍵の作成

    # 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: もう一度任意のパスワードを入力

  2. 秘密鍵からパスフレーズを削除

    # openssl rsa -in /etc/postfix/server.key -out /etc/postfix/server.key
    Enter pass phrase for /etc/postfix/server.key: 先ほどのパスワードを入力
    writing RSA key

  3. サーバー用公開鍵の作成

    # 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

  4. サーバー証明書作成

    # 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

  5. クライアントインポート用サーバー証明書作成

    # openssl x509 -in /etc/postfix/server.pem -outform DER -out mailserver.der

    作成したファイル「mailserver.der」をフロッピーなどで保存しておく。
  6. パーミッションの変更

    # chmod 400 /etc/postfix/server.*

※smtpサーバ、popサーバ共に同じ証明書を利用する。smtpサーバとpopサーバをホスト名で区別する場合、それぞれのホスト用の証明書を作る必要がある。

9-2 Postfix設定変更

 Postfixの設定ファイルを変更し、メーラー〜SMTPサーバー間通信を暗号化する。

  1. /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

  2. /etc/postfix/master.cfを編集:以下の2行に付いている#を削除する。

    smtps  inet n    -    n    -    -    smtpd
     -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

  3. Postfixの再起動

    # /etc/rc.d/init.d/postfix restart

9-3 Dovecot設定変更

 Dovecotの設定ファイルを変更し、メーラー〜POP/IMAPサーバー間通信を暗号化する。サーバー証明書や秘密鍵は8-1で作成したものを流用する。

  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

  2. Dovecotの再起動

    # /etc/rc.d/init.d/dovecot restart

9-4 ファイアウォールの設定変更

 POP/IMAP/SMTPの暗号化通信が行えるよう、ファイア・ウォールの設定を変更する。

  1. /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

  2. 変更を有効にする。

    # /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を開くと、警告ウィンドウが表示されないはずである。

10.不正中継対策

 メールサーバーが不正中継の踏み台にされないように、対策を施す。
 設定ファイル /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

 クライアントから様々なメールを送受信し、問題なく利用できるか確認する。

11.Clam AntiVirusによるウィルスメール対策

 メールに添付されるウィルスを、メールサーバ側である程度駆除できるよう、対策を行う。
 対策には、Clam AntiVirusというフリーのLinux向けアンチウィルスソフトを利用する。

11-1 インストール

 Clam AntiVirusはFedoraのパッケージとして用意されているので、yumで簡単にインストールできる。

  1. clamavのGPG Keyをインストール(Fedora Core 4の場合)

    # cd /etc/pki/rpm-gpg
    # wget http://crash.fce.vutbr.cz/Petr.Kristof-GPG-KEY

  2. clamavのリポジトリをインストール(Fedora Core 4の場合)

    # cd /etc/yum.repos.d
    # wget http://crash.fce.vutbr.cz/crash-hat.repo

  3. Clam AntiVirusをインストール

    # yum -y install clamav
    # yum -y install clamav-server

11-2 設定ファイルの変更

 インストールが終わったら、設定ファイルの変更を行う。
 freshclamの設定ファイル /etc/freshclam.conf をviで開き、次のように修正する。※プロキシを使ってインターネットに接続する場合のみ

HTTPProxyServer proxy.andokomuten.jp
HTTPProxyPort 8080
#HTTPProxyUsername myusername
#HTTPProxyPassword mypass

11-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.net

11-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 start

11-6 freshclamをデーモンモードで動作させる

 パターンファイルのアップデートを自動化するため、freshclamをデーモンモード(常駐)で動作するよう、設定を行う。

# chkconfig freshclam on
# /etc/rc.d/init.d/freshclam start

11-7 amavisd-newのインストール

 amavisd-newは、MTAとウィルススキャンプログラムとの橋渡しを行うソフトである。このソフトを利用し、送受信されるメールに対してClam AntiVirusによるウィルスチェックを行うよう設定する。

  1. 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

  2. インストール

    # 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で開き、それぞれ次のように修正する。

  1. /etc/postfix/main.cf:最終行に追加

    content_filter=smtp-amavis:[127.0.0.1]:10024

  2. /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=1000
    			

11-11 amavisd-newをデーモンモードで動作させる

 amavisd-newをデーモンモード(常駐)で動作するよう、設定を行う。

# chkconfig amavisd on
# /etc/rc.d/init.d/amavisd start

11-12 ClanAntivirus、Postfixを再起動する

 11-9〜10でClanAntivirusとPostfixの設定ファイルを編集しているので、それぞれを再起動する。

# /etc/rc.d/init.d/clamd restart
# /etc/rc.d/init.d/postfix restart

11-13 amavisd-new動作確認

 Outlook Expressから自分宛にメールを送信してみて、SMTPサーバ上でウィルスチェックが行われているかを確認する。受信したメールのヘッダ部分に以下の行があれば、チェックされていることが分かる。

X-Virus-Scanned: amavisd-new at andokomuten.jp

11-14 ウィルス付きメールチェック確認

 テスト用の無害なウィルスを自分宛に送信してみて、SMTPサーバ上でウィルスが検出されるかどうか確認する。
 次のファイルをwgetでダウンロードし、自分宛に送信(sendmail -i 宛先ユーザ名 <添付ファイル名)する。Outlook Expressを使ってテストしようとすると、ダウンロードしたファイルがアンチウィルスソフトで駆除されてしまうため、テストできない。サーバ上で行った方がよい。

 送信したら、サーバ上のログファイル「/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

 ウィルスが添付されているメールはサーバ上で自動的に削除されるため、メールは受信できないはずである。

12.SpamAssassinによるスパムメール対策

 メールサーバが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用のルールファイルをセットアップする。

  1. SpamAssassin用ルールファイル更新スクリプトを作成する。

    # vi /root/spamassassin-update.sh

  2. 以下のコードを入力し、保存する。

    #!/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

  3. 作成したファイルに実行権を付ける。

    # chmod 700 /root/spamassassin-update.sh

  4. スクリプトを実行する。

    # /root/spamassassin-update.sh

  5. 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

  6. 一定期間ごとに更新するよう、cronに登録する。これにより、常に最新のスパム情報を取得できる。

    # crontab -e
    00 04 * * * /root/spamassassin-update.sh

 以上の設定が終わったら、SpamAssassinをデーモンとして起動する。ついでに自動起動されるように登録しておく。

# chkconfig spamassassin on
# /etc/rc.d/init.d/spamassassin start

12-3 Procmailの設定

 SpamAssassinによりメールヘッダにスパムメールの印を付けられたメールはスパムメール用メールボックスへ、それ以外のメールは通常通り各ユーザのメールボックスへ配送するよう、Procmailの設定を行う。
 Procmailはデフォルトで /etc/procmailrc というファイルを見に行くため、そのファイルを作成する。

  1. Procmailの設定ファイルを作成する。

    # vi /etc/procmailrc

  2. 以下のコードを入力し、保存する。

    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

 次に、スパムメール用メールボックスを作成する。

  1. rootユーザ用のスパムメール用メールボックスを、次のように作成する。

    # mkdir /root/Maildir/.spam
    # chmod 700 /root/Maildir/.spam/
    # echo spam >> /root/Maildir/.subscriptions

  2. 他のユーザ(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/.subscriptions

12-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フォルダに自動的に振り分けられることが確認できる。


参考文献・サイト


[ TOP ]