【メールサーバ】Dovecot設定

  • Dovecot設定

    vi /etc/dovecot/dovecot.conf
    
    下記内容を変更
    #protocols = imap pop3 lmtp
    ↓
    protocols = imap pop3
    
    cp -pi /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.org
    vi /etc/dovecot/conf.d/10-mail.conf
    
    下記内容を追加
    # メールボックス形式
    # Postfixの設定でメールボックスの形式をMaildir形式にしているため、
    # Dovecotの設定でもMaildir形式に変更します。
    mail_location = maildir:~/Maildir
    
    # chroot設定
    # 通常ユーザであれば「/home/ユーザ名」以下のディレクトリはアクセスできますが、
    # 上位ディレクトリである「/home」ディレクトリはroot所有者であるため、
    # アクセスが禁止されています。
    # しかし、メールボックスは「/home/ユーザ名/Maildir」に配置しているため、
    # この設定で一時的にアクセスを許可します。
    valid_chroot_dirs = /home
    
    cp -pi /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.org
    vi /etc/dovecot/conf.d/10-auth.conf
    
    下記内容を変更
    # テキスト認証を許可
    # この設定を利用する場合、後述するOpenSSLでのメールサーバー間の通信内容暗号化を行う。
    disable_plaintext_auth = yes
    ↓
    disable_plaintext_auth = no
    
    auth_mechanisms = plain
    ↓
    auth_mechanisms = plain login
    

【メールサーバ】Dovecot導入

受信ではPOPまたはIMAPを利用するので、Dovecotを導入します。

  • Dovecotの導入確認

    yum list installed | grep dovecot
    
    dovecot.x86_64       1:2.0.9-8.el6_6.1  @updates
    
  • Dovecotの導入
    インストール済ではない場合は下記コマンドでインストールします。

    yum -y install dovecot
    

【メールサーバ】Postfix設定その4(OP25B対策MyDNS利用)

  • Postfix設定(OP25B対策MyDNS利用)

    BIGLOBEのメール中継が利用できないため、MyDNSのメール中継を利用します。
    利用の前提条件はグローバルIPアドレスとドメインの紐付をMyDNSで実施していることです。

    vi /etc/postfix/main.cf
    
    下記内容を追加
    ####################################################################
    # OP25B対策(MyDNS用設定)
    # smtp :他のSMTPメールサーバに接続しに行くときのクライアントとしての設定
    ####################################################################
    
    # ISPのSMTPメールサーバー名を指定
    # プロバイダのメールサーバーから送信するメールはOP25Bの影響は受けないため、
    # 全ての送信メールをプロバイダのメールサーバーを経由するようにする。
    relayhost = [auth.gate-on.net]:587
    

    BIGLOBE用設定では設定していた「smtp_sasl_auth_enable」や
    「smtp_sasl_password_maps」の設定は不要になります。
    理由はグローバルIPとドメインの変換を行う上でユーザ情報を通知済だからのようです。

    メール中継用設定も不要となるため、
    パスワードを記載したファイルを作成している場合、削除しておきます。

    rm /etc/postfix/sasl_passwd
    

【メールサーバ】Postfix設定その3(OP25B対策BIGLOBE利用)

  • Postfix設定(OP25B対策BIGLOBE利用)

    自宅ネットワークに設置したSMTPサーバーが外部へメール送信する際、
    25番ポートを利用しますが、ISPがOP25B(Outbound Port 25 Blocking)対策を行っている場合、メール送信ができません。
    そこで外部のSMTPサーバーのうち、587番ポートで送信してくれるサーバーを中継してメールを送信を行います。

    下記内容はBIGLOBE用ですが、gmailを中継する場合、「relayhost」の値は
    「smtp-relay.gmail.com:25」に変更します。
    後はgmail側の設定として下記サポートサイトに従ってください。
    https://support.google.com/a/answer/2956491?hl=ja

    vi /etc/postfix/main.cf
    
    下記内容を追加
    ####################################################################
    # OP25B対策(BIGLOBE用設定)
    # smtp :他のSMTPメールサーバに接続しに行くときのクライアントとしての設定
    ####################################################################
    
    # ISPのSMTPメールサーバー名を指定
    # プロバイダのメールサーバーから送信するメールはOP25Bの影響は受けないため、
    # 全ての送信メールをプロバイダのメールサーバーを経由するようにする。
    relayhost = [msagw.biglobe.ne.jp]:25
    
    # プロバイダのメールサーバーにSMTPで接続
    smtp_sasl_auth_enable = yes
    
    # SMTP認証情報設定ファイルパス
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    
    # プロバイダのSMTPメールサーバーが対応している認証方式(例:LOGIN, CRAM-MD5, PLAIN)
    smtp_sasl_mechanism_filter = cram-md5, login, plain
    
    # 匿名ログイン不許可(クライアントとしての設定)
    smtp_sasl_tls_security_options = noanonymous
    
  • メール中継用設定

    vi /etc/postfix/sasl_passwd
    
    下記内容を追加([]も必要です)
    [SMTPメールサーバー名]:587 ユーザー名:パスワード
    
    SMTPメールサーバー名:中継先のSMTPメールサーバー名
    ユーザー名:中継先のメールアカウント名
    パスワード:中継先のメールパスワード
    
    chmod 640 /etc/postfix/sasl_passwd
    postmap /etc/postfix/sasl_passwd
    
  • 残念なお知らせ
    BIGLOBEは2014年3月にメール中継のサポートを切ったようです。
    そのため上記設定を行っても送信できません。
    ログを確認してみると下記内容が出力されています。

    cat /var/log/maillog
    
    status=deferred (SASL authentication failed; 
    cannot authenticate to server msagw.biglobe.ne.jp[xxx.xxx.xxx.xxx]: no mechanism available)
    warning: database /etc/postfix/sasl_passwd.db is older than source file /etc/postfix/sasl_passwd
    warning: SASL authentication failure: No worthy mechs found
    

    中継メールサーバーとしてgmailを利用しようかと思いましたが、
    一番簡単そうなMyDNSを利用します。

【メールサーバ】Postfix設定その2(SMTP-Auth)

  • Postfix設定(SMTP-Auth)(自宅サーバ設定)
    メール送信時にユーザ名とパスワードで認証を行えるよう設定します。

    vi /etc/postfix/main.cf
    
    下記内容を追加
    #########################################################
    # SMTP-Auth設定(自宅サーバ設定)
    # smtpd:SMTPメールサーバとして他からの接続を受ける時の設定
    #########################################################
    # SMPTPメールサーバとして他から接続
    smtpd_sasl_auth_enable = yes
    
    # 匿名ログイン不許可
    smtpd_sasl_security_options = noanonymous
    
    # ローカル認証 realm の名前を設定
    # myoriginの設定と同一にする。
    smtpd_sasl_local_domain = $myhostname
    
    # メールの中継機能設定
    # permit_mynetworks:自サイトのネットワークからの接続を無条件で許可
    #                    下記パラメータに設定されているアドレス宛ての場合は許可
    #                      mydestination
    #                      inet_interfaces
    #                      virtual_alias_domains
    #                      virtual_mailbox_domains
    #                      relay_domains
    # permit_sasl_authenticated:SMTP認証された接続を無条件で許可
    # reject_unauth_destination:上記以外は拒否
    smtpd_recipient_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_unauth_destination
    
  • Linuxのパスワードと同じパスワード利用する場合

    • 設定ファイルの設定内容確認

      cp -pi /etc/sasl2/smtpd.conf /etc/sasl2/smtpd.conf.org
      vi /etc/sasl2/smtpd.conf
      
      下記内容が設定されていることを確認
      pwcheck_method: saslauthd
      mech_list: plain login
      
      cat /etc/sysconfig/saslauthd
      
      下記内容が設定されていることを確認
      MECH=pam
      
    • saslauthd起動設定
      saslauthdを起動し、自動起動設定にしておきます。

      /etc/rc.d/init.d/saslauthd start
      chkconfig saslauthd on
      
  • Linuxのパスワードと異なるパスワード利用する場合

    • 設定ファイルの設定内容変更

      cp -pi /etc/sasl2/smtpd.conf /etc/sasl2/smtpd.conf.org
      vi /etc/sasl2/smtpd.conf
      
      下記内容を変更
      pwcheck_method: saslauthd
      ↓
      pwcheck_method: auxprop
      
      mech_list: plain login
      ↓
      # mech_list: plain login
      
    • SMTP-Auth(送信承認)用のパスワード設定

      saslpasswd2 -u mail.z-area.net -c ユーザー名
      Password:パスワード
      Again (for verification):パスワード
      

      mail.z-area.netはz-area.netではNGです。
      「/etc/postfix/main.cf」の「myhostname」と同値を設定します。

      設定した内容を確認します。

      sasldblistusers2
      ユーザ名@mail.z-area.net: userPassword
      

      Postfixが上記で作成したユーザー名とパスワードの紐付ファイルに
      アクセスできるようにパーミッションを変更します。

      chmod 640 /etc/sasldb2
      chgrp postfix /etc/sasldb2
      
    • SMTP-Auth(送信承認)用の設定内容削除
      ユーザを削除する場合は下記コマンドを実行します。

      saslpasswd2 -d ユーザー名 -u mail.z-area.net
      
    • saslauthd起動設定
      saslauthdが起動していたら停止し、
      自動起動設定になっていたら削除しておきます。

      /etc/rc.d/init.d/saslauthd stop
      chkconfig --del saslauthd
      

【メールサーバ】Postfix設定その1(基本)

  • Postfix設定(基本)

    cp -pi /etc/postfix/main.cf /etc/postfix/main.cf.org
    vi /etc/postfix/main.cf
    
    下記内容を追加
    # 自FQDN名を指定
    # hostnameコマンドの戻り値を設定する。
    # 私の環境では「z-area.net」になるが、1つのサーバで
    # 複数の機能(ウェブサーバ、メールサーバ)を持っている場合、
    # OSのホスト名は利用できないため、先頭にmailをつけました。
    myhostname = mail.z-area.net
    
    # 自ドメイン名を指定
    # 上記のmyhostnameの先頭mailを削除した値を設定する。
    mydomain = z-area.net
    
    # メール送信時の送信元メールアドレス@以降にドメイン名を付加
    # Postfixの機能でOSユーザ名のみを宛先に指定した場合、@以降を自動で補完する。
    myorigin = $mydomain
    
    # メールボックス形式をMaildir形式
    home_mailbox = Maildir/
    
    # メールサーバーソフト名の隠蔽化
    smtpd_banner = $myhostname ESMTP unknown
    
    # 受信メールサイズ制限
    message_size_limit = 10485760
    
    # SMTPのVRFYコマンドを使用禁止
    # VRFYはアカウントが実在するか確認するコマンドで、
    # でたらめなユーザ問い合わせを行う悪質なプログラムによりアカウント流出を防ぐ。
    disable_vrfy_command = yes
    
    # sasl認証に対応していないメーラーを拒否
    broken_sasl_auth_clients = yes
    
    下記内容を変更
    # 外部からのメール受信を許可
    # 127.0.0.1を指定するとローカルから外部への配送のみ許可
    inet_interfaces = localhost
    ↓
    inet_interfaces = all
    # 自ドメイン宛メールを受信許可
    mydestination = $myhostname, localhost.$mydomain, localhost
    ↓
    mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
    

【メールサーバ】Postfix導入

メールサーバを構築します。
メールのプロトコルは主に3種類。

SMTP:Simple Mail Transfer Protocol
メールサーバが電子メールを他のサーバへ送信したり、受信するためのプロトコル

POP:Post Office Protocol
メールサーバ内のメールスプールに含まれているメッセージを受信したり削除するためのプロトコル

IMAP:Internet Message Access Protocol
メールスプールのメッセージに対して、移動や検索等を行うプロトコル

送信ではSMTPを利用するので、Postfixを導入します。

  • Postfixの導入確認

    yum list installed | grep postfix
    
    postfix.x86_64          2:2.6.6-6.el6_5 @updates
    
    postconf  mail_version
    
    mail_version = 2.6.6
    
  • Postfixの導入
    インストール済ではない場合は下記コマンドでインストールします。

    yum -y install postfix
    

    sendmailがインストールされている場合、起動を止めておきます。

    /etc/rc.d/init.d/sendmail stop
    chkconfig --del sendmail
    
  • Postfixの導入確認(SMTP-Auth)
    SMTP-Authとはメール送信時にユーザ名とパスワードで認証を行う機能です。

    yum list installed | grep cyrus-sasl
    
    cyrus-sasl.x86_64    2.1.23-15.el6_6.1  @updates
    cyrus-sasl-lib.x86_64
    cyrus-sasl-plain.x86_64
    
  • Postfixの導入(SMTP-Auth)
    インストール済ではない場合は下記コマンドでインストールします。

    yum -y install cyrus-sasl
    

【VPNサーバ】OpenVPN導入その5

ASUSのタブレットを購入したので、こちらにもOpenVPNを導入します。

  • OpenVPN設定(クライアント用の証明書と鍵作成(追加))
    RaspberryPiでタブレット用の証明書と鍵を作成します。

    cd /etc/openvpn/easy-rsa
    source ./vars
    ./build-key クライアント名(タブレット)
    

    作成した証明書や鍵のうち、
    クライアントで利用する下記ファイルをWindowsにUSB等で持ってきて、設定を行います。

    ca.crt
    クライアント名(タブレット).crt
    クライアント(タブレット).key
    ta.key(iPhone優先のため、利用していませんが、一応)
    
  • クライアント設定ファイル(タブレット用)
    クライアント設定ファイルとして「クライアント名(タブレット).ovpn」ファイルを作成します。
    設定内容は「OpenVPN導入その3」の設定値と全く一緒です。
  • はまったこと
    タブレットにOpenVPNをインストールするとデスクトップに「OpenVPN GUI」の
    ショートカットが作成されるので、ダブルクリックして実行し、接続します。
    単純に実行するとOpenVPNには接続し、IPが割り振られますが、
    OpenVPN内の他のクライアントに接続できませんでした。
    pingももちろん飛びません。

    ipv6が悪さをしているのかと色々勘ぐりましたが、
    ちゃんとクライアント側のログを見てみると下記エラーが出力されていました。

    ROUTE: route addition failed using CreateIpForwardEntry: アクセスが拒否されました。[status=5 if_index=12]
    Route addition via IPAPI failed [adaptive]
    Route addition fallback to route.exe
    env_block: add PATH=C:\Windows\System32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
    ERROR: Windows route add command failed [adaptive]: returned error code 1
    

    Cドライブ内のexeファイルを実行できていないようです。
    これを解決するには「OpenVPN GUI」のショートカットを
    常に管理者権限で実行する必要があります。

    「OpenVPN GUI」のショートカットを右クリックからプロパティを開き、
    「互換性」タブの「管理者としてこのプログラムを実行する」のチェックボックスをチェックします。
    これで無事、OpenVPN内のクライアントにも接続できました。

【APサーバ】warファイル配置

  • Tomcat設定ファイルの内容確認

    /usr/local/tomcat/conf/server.xml
    
    # 下記内容が設定されていることを確認
    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    

    warファイルは「/usr/local/tomcat/webapps」に配置します。
    上記設定内容がtrueになっていると、
    配置した瞬間にTomcatの起動中にもかかわらず、同階層に自動で展開されます。

  • Apache2とTomcatの連携設定追加

    WebアプリのURLが「http://z-area.net/コンテキスト名/」である場合、
    ポート番号を指定せずに接続するための設定を追加します。

    vi /etc/httpd/conf/httpd.conf
    
    下記を最終行に追加
    <Location /コンテキスト名/>
            ProxyPass ajp://localhost:8009/コンテキスト名/
            allow from all
    </Location>
    

【APサーバ】Apache2とTomcat連携

ポート番号を指定せずにTomcatにアクセスします。

  • Tomcat側の設定

    vi /usr/local/tomcat/conf/server.xml
    
    下記をコメントアウト
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    
    下記がコメントアウトされていないことを確認
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    
  • Apache2側の設定

    vi /etc/httpd/conf/httpd.conf
    
    下記がコメントアウトされていないことを確認
    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
    
    下記を最終行に追加
    <Location /examples/servlets/>
        ProxyPass ajp://localhost:8009/examples/servlets/
        allow from all
    </Location>
    
  • Apache2とTomcatの連携動作確認

    /etc/rc.d/init.d/httpd stop
    sudo -u tomcat /usr/local/tomcat/bin/shutdown.sh
    sudo -u tomcat /usr/local/tomcat/bin/startup.sh
    /etc/rc.d/init.d/httpd start
    /etc/rc.d/init.d/iptables start
    

    http://z-area.net/examples/servlets/

    ポート指定なしで繋がるようになるため、iptablesは有効のままにしておきます。