メールサーバー設定 · 4 min read · Feb 14, 2026

Exim、MySQL、Cyrus-Imapd、Horde Webmailを使用したメールサーバーの設定 - Centos 5.1 - ページ 2

設定

Apacheの設定

  • バーチャルホスティングを有効にし、デフォルトのバーチャルホストを作成します。/etc/httpd/conf/httpd.confを編集し、最後に以下を追加します。
    NameVirtualHost *:80
    
      ServerAdmin [email protected]
    
  • Horde Webmail用のバーチャルホストを作成し、上記の下に以下を追加します。
    
          Servername mail.home.topdog-software.com
          DocumentRoot /usr/share/horde
          ErrorLog logs/mail-error_log
          CustomLog logs/mail-access_log common
    
  • Hordeのセキュリティ設定を有効にするために、/etc/httpd/conf.d/horde.confファイルを編集し、以下のように設定します。
    #Alias /horde /usr/share/horde
    
      Options +FollowSymLinks
      php_admin_flag safe_mode off
      php_admin_flag magic_quotes_runtime off
      php_flag session.use_trans_sid off
      php_flag session.auto_start off
      php_admin_flag file_uploads on
      #php_admin_flag allow_url_fopen on
      php_value post_max_size 20M
      php_value upload_max_filesize 10M
      php_admin_value open_basedir "/usr/share/horde:/usr/share/horde/config:/usr/share/pear:/tmp"
      php_admin_flag register_globals off
    
    
      Order Deny,Allow
      Deny from all
    
    
      Order Deny,Allow
      Deny from all
    
  • PHPのメモリ制限を増やすために、/etc/php.iniを編集し、以下のように変更します。
    memory_limit = 64M
  • SSLの下でHordeを有効にするために、/etc/httpd/conf.d/ssl.confを編集し、デフォルトのバーチャルホストのdefault:443>タグの間に以下を追加します。
    Servername mail.home.topdog-software.com:443
    DocumentRoot /usr/share/horde

Eximの設定

  • MTAをeximに切り替えます。
    system-switch-mail (select exim)

ウイルス対策 / Sanesecurityチェック

  • Exim (/etc/exim/exim.conf)を設定して、clamavを使用して受信メールをスキャンし、ウイルスに感染したメールや画像、PDFスパムをSMTP時に拒否します。
    av_scanner = clamd:/var/run/clamav/clamd.sock

RBL

  • acl_check_rcptの下にRBLを設定します。
    drop    message       = REJECTED because $sender_host_address is in a black list spamhaus.org
             dnslists      = zen.spamhaus.org
    drop    message       = REJECTED because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
             dnslists      = bl.spamcop.net
    drop    message       = REJECTED because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
             dnslists      = dnsbl.sorbs.net

スパム対策

  • 逆引きDNSがないサーバーからのメッセージを拒否したい場合は、acl_check_rcptの下に以下を追加します。例外リストがあり、そこにACLを適用しないドメインを追加できます。また、送信者が有効かどうかを確認するために、送信先アドレスにテストメッセージを配信しようとします。
    drop  message   = REJECTED - We don't accept messages from hosts without reverse DNS
          log_message = No reverse DNS
          domains = ! lsearch;/etc/exim/checks_exempt_hosts
          !verify = reverse_host_lookup
          !verify = sender/callout=2m,defer_ok
          !condition =  ${if eq{$sender_verify_failure}{} }
  • HELO/EHLOを提供しないクライアントからのメッセージを拒否するには、acl_check_rcptに以下を追加します。
    drop  message  = REFUSED - no HELO/EHLO greeting
          log_message = remote host did not present greeting
          condition = ${if def:sender_helo_name {false}{true}}
  • サーバーへの接続をレート制限することもできます。これをacl_check_connectに追加します(サイトに合わせてパラメータを微調整する場合は、Eximのドキュメントを参照してください)。
    deny ratelimit = 250 / 15m / strict
         message = You can only send $sender_rate per $sender_rate_period
         log_message = RATE: $sender_rate/$sender_rate_period (max $sender_rate_limit)
    accept
  • 悪意のあるスパムボットがマシンを荒らすのを防ぎます。
    smtp_accept_max_nonmail = 30
    smtp_max_unknown_commands = 1
  • パイプラインを宣伝しないようにします。
    pipelining_advertise_hosts = 
  • Spamassassinチェックを有効にします。
    spamd_address = /var/run/spamassassin/spamd.sock
  • SMTP時にスコアが6を超えるすべてのメッセージを拒否します。(acl_check_data)
    accept  condition  = ${if >={$message_size}{100000} {1}}
          add_header = X-Spam-Note: SpamAssassin run bypassed due to message size
    warn    spam       = nobody/defer_ok
          add_header = X-Spam-Flag: YES
    accept  condition  = ${if !def:spam_score_int {1}}
          add_header = X-Spam-Note: SpamAssassin invocation failed
    warn    add_header = X-Spam-Score: $spam_score ($spam_bar)\n\#       X-Spam-Report: $spam_report
    drop    condition = ${if >{$spam_score_int}{60} {1}}
          message   = Your message scored $spam_score SpamAssassin point. Report follows:\n\        $spam_report

メールルーティング

  • Mysqlデータベースへのアクセスを有効にします。
    hide mysql_servers = localhost/horde/horde/hordepassword
  • ローカル配信ルーターを修正して、Cyrusに配信しますが、配信前にユーザーのメールアドレスを確認します(exim.confのルーターセクションで)。
    localuser:
    driver = accept
    local_parts = ${lookup mysql {SELECT REPLACE(user_uid,'${quote_mysql:@$domain}','') \
           as user FROM horde_users WHERE user_uid='${quote_mysql:$local_part@$domain}'}{$value}}
    transport = local_delivery
    cannot_route_message = Unknown user
  • LMTPソケットを介してCyrusに配信するためのトランスポートを作成します。
    local_delivery:
    driver = lmtp
    socket = /var/lib/imap/socket/lmtp
    batch_max = 50
    user = cyrus

SMTP認証

  • /etc/exim/exim.confの認証セクションに以下を追加します。
    plain:
    driver = plaintext
    public_name = PLAIN
    server_prompts = :
    server_set_id = $2
    server_condition = ${if saslauthd{{$2}{$3}{pop}}{1}{0}}
    server_advertise_condition = true
    login:
    driver = plaintext
    public_name = LOGIN
    server_prompts = "Username:: : Password::"
    server_condition = ${if saslauthd{{$1}{$2}{pop}}{1}{0}}
    server_set_id = $1
    server_advertise_condition = true

完全なサンプル設定

完全な設定ファイルはここからダウンロードできます。

Mysqlの設定

  • TCPネットワーキングを無効にします。/etc/my.cnfを編集し、mysqldセクションに以下を追加します。
    skip-networking
  • rootパスワードを設定します。 /usr/bin/mysqladmin -u root password ‘new-password’
    /usr/bin/mysqladmin -u root -h your_host_name password ‘new-password’ -p

Hordeの設定

  • SQLファイルを編集し、HordeユーザーのMySQLパスワードを変更します。 cp /usr/share/horde/scripts/sql/create.mysql.sql .
    vi create.mysql.sql
    REPLACE INTO user (host, user, password)
      VALUES (
          'localhost',
          'horde',
    -- 重要: このパスワードを変更してください!
          PASSWORD('hordepassword')
    );
  • ユーザーを作成し、Hordeデータベースをポピュレートします。
    mysql -p < create.mysql.sql
  • turba(アドレス帳)のテーブルを作成します。
    mysql -p horde < /usr/share/horde/turba/scripts/sql/turba_objects.mysql.sql
  • kronolith(カレンダー)のテーブルを作成します。
    mysql -p horde < /usr/share/horde/kronolith/scripts/sql/kronolith.mysql.sql

Horde設定

  • Hordeの基本設定を作成します。/usr/share/horde/config/conf.php
  • Hordeの設定を編集して、Webメールをログイン時のデフォルトアプリケーションにします。/usr/share/horde/config/prefs.phpファイルを編集し、$_prefs[‘initial_application’]を以下のように変更します。
    $_prefs['initial_application'] = array(
      'value' => 'imp',
      'locked' => true,
      'shared' => true,
      'type' => 'select',
      'desc' => sprintf(_("What application should %s display after login?"), $GLOBALS['registry']->get('name'))
    );
  • HordeがWebサーバーのデフォルトルート内で動作するようにします。/usr/share/horde/config/registry.phpを編集し、$this->applications[‘horde’]を以下のように変更します。
    $this->applications['horde'] = array(
      'fileroot' => dirname(__FILE__) . '/..',
      'webroot' => '',
      'initial_page' => 'login.php',
      'name' => _("Horde"),
      'status' => 'active',
      'templates' => dirname(__FILE__) . '/../templates',
      'provides' => 'horde'
    );
Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。