ボールを蹴りたいシステムエンジニア

ボール蹴りが大好きなシステムエンジニア、ボールを蹴る時間確保の為に時間がある時には勉強する。

自宅サーバーのCentOSでメールサーバーの環境構築(Postfix+Dovecot)

自宅サーバーのVMware上のCentOSPostfix+Dovecotを使用したメールサーバーを構築する。
PostfixSMTP認証にはCyrus SASLを使用。

※この記事は自分用作業ログとなり、参考にならないと思いますのでご注意下さい

環境

ファイアウォールルーター
ゲストOS:CentOS6.6(VMWare
IP:192.168.10.30
IP:10.10.0.30
ドメインvmware.local
※同サーバーのDNSサーバーで設定

・メールサーバー
ゲストOS:CentOS6.6(VMWare
IP:192.168.10.40
IP:10.10.0.40
ドメイン:mail.vmware.local

・自宅プロパイダ
OCN

上記ドメインはLAN内でのみ有効なドメイン
自宅サーバーにグローバルなドメインは設定されてない。

やりたかった事、注意点

test@mail.vmware.local
というアドレスを作成して

@gmail.com

にメールを送信、逆も出来るように。

・・・と思っていましたが、
自宅サーバーにグローバルなドメインが設定されていない場合、上記は実現出来ない。
理由として、mail.vmware.localのドメインがLAN内のみ有効で世界のインターネット上では名前解決出来ない為。

更に言うと、自宅サーバーのプロパイダによってはOP25B対策がされており、25番ポートへのアクセスを閉じられている為、その対応が必要になるみたい。
※参考
http://www.walbrix.com/jp/blog/2014-02-gentoo-postfix-relay-gmail.html

結論から言うと、
SMTPサーバー(メール送信処理)を自宅のメールサーバーに設定しメール送信を出来るようにする。
但し、メールリレーによりメール送信処理をプロパイダに委譲する。
メール送信元アドレス、メール送信先アドレスはgmail等の実際に存在するアドレスを指定する。

何か縛りが凄い・・

手順

Postfix+cyrus-sasl

postfixインストール

yum -y install postfix

Postfix設定ファイル編集

vi /etc/postfix/main.cf

追加

# メールサーバーのドメイン(FQDN)
myhostname = mail.vmware.local

# 自サーバーのドメイン
mydomain = vmware.local

# ローカルからのメール送信時の送信元メールアドレス@以降にドメイン名を付加する
myorigin = $mydomain

# メールボックス形式をMaildir形式にする
home_mailbox = Maildir/

# メールサーバーソフト名の隠蔽化
smtpd_banner = $myhostname ESMTP unknown

# 受信メールサイズ制限
message_size_limit = 10485760

バーチャルメールボックス用の設定追記

virtual_mailbox_domains = vmware.local
virtual_mailbox_base = /home/mailuser
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 10000
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
virtual_alias_maps = hash:/etc/postfix/virtual

virtual_mailbox_domainsには受信するドメインを指定。
virtual_mailbox_baseにはバーチャルメールボックスユーザーを指定。
virtual_uid_mapsとvirtual_gid_mapsはバーチャルメールボックスユーザーのグループIDを指定。

SMTP認証をdovecotで行うための設定追記

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination


変更

#外部からのメール受信を許可               
inet_interfaces = all

# 自ドメイン宛メールを受信できるようにする
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

#ipv6で送信しないように
inet_protocols = ipv4 

追加
存在しないユーザー宛メールをunknown_userへ配送

local_recipient_maps =
luser_relay = unknown_user@localhost

unknown_user宛メールを破棄

echo unknown_user: /dev/null >> /etc/aliases

サブミッションポート(587)を有効にする。
サブミッションポートとは、TCP 25番ポート以外でメールの送信を行うためのポート。
SMTP認証(SMTP AUTH)」と併せて利用するのが一般的。
OBP25B(迷惑メール対策)の為に使用する。

master.cf を編集。

vi /etc/postfix/master.cf 

コメントアウトを外し以下のように設定
smtpd_tls_security_levelの行はコメントアウトのまま

submission inet n       -       n       -       -       smtpd                                                      
#  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes                                                                                    
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject                                                    
  -o milter_macro_daemon_name=ORIGINATING 

SMTP認証ファイルパスディレクトリ作成

mkdir -p /var/spool/postfix/private/auth

権限付与

chown postfix:postfix -R /var/spool/postfix/private/
chmod 700 -R /var/spool/postfix/private/

バーチャルメールボックスのエイリアスのデータベース更新

postmap /etc/postfix/virtual

cyrus-saslインストール

yum -y install cyrus-sasl
yum -y install cyrus-sasl-plain cyrus-sasl-md5

saslauthd起動

/etc/rc.d/init.d/saslauthd start

自動起動設定

chkconfig saslauthd on

SMTPAuthを利用する為、smtpd.confを修正。

vi /etc/sasl2/smtpd.conf

以下のように設定する

pwcheck_method: auxprop

Maildir形式メールボックスを作成する。
Postfixのメール格納形式は共有ディレクトリ形式(「/var/spool/mail/ユーザー名」というファイルに全てのメールが蓄積されていく形式)だが、アクセス性能改善及びセキュリティ強化の観点からMaildir形式へ移行する。

新規ユーザー追加時に自動でホームディレクトリにMaildir形式のメールボックスが作成されるようにする。

mkdir -p /etc/skel/Maildir/new/

パーミッション設定

chmod -R 700 /etc/skel/Maildir/

Postfix起動

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

自動起動設定

chkconfig postfix on

iptablessmtpポート開放

iptables -A INPUT -p tcp --dport 25 -j ACCEPT

Dovecot

Dovecotインストール

yum -y install dovecot

10-mail.conf編集

vi /etc/dovecot/conf.d/10-mail.conf 

追加

# メールボックス形式をMaildir形式とする              
mail_location = maildir:~/Maildir

# ※OpenSSH+Chrootを導入している場合のみ 
valid_chroot_dirs = /home

10-auth.conf編集

vi /etc/dovecot/conf.d/10-auth.conf

コメントアウトを外す

!include auth-passwdfile.conf.ext

コメントアウトする

#!include auth-system.conf.ext

変更

# プレインテキスト認証を許可
# ※メールサーバー間通信内容暗号 ((OpenSSL+Postfix+Doveco))
disable_plaintext_auth = no

auth_mechanisms = plain login

10-ssl.conf編集

/etc/dovecot/conf.d/10-ssl.conf
# SSL接続無効
# ※メールサーバー間通信内容暗号化(OpenSSL+Postfix+Dovecot)導入必須
ssl = no

auth-passwdfile.conf.extファイルを編集

vi /etc/dovecot/conf.d/auth-passwdfile.conf.ext

変更前

passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

userdb {
  driver = passwd-file
  args = username_format=%u /etc/dovecot/users
}

変更後

passdb {
  driver = passwd-file
  args = /etc/dovecot/passwd                                                                                       
}

userdb {
  driver = passwd-file
  args = /etc/dovecot/passwd                                                                                       
}


dovecot.conf編集

vi /etc/dovecot/dovecot.conf

エラー時の調査用にデバッグモードに設定

auth_verbose = yes
auth_debug = yes


Dovecot起動

/etc/rc.d/init.d/dovecot start

自動起動設定

chkconfig dovecot on

iptablesでポート開放

iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 143 -j ACCEPT

メールユーザー作成

メールボックス用のグループとバーチャルメールボックスユーザーを作成
※ここではmailuserというグループ名とユーザー名としているが任意の名前でOK
グループIDを10000で指定しているが任意のIDでOK

groupadd -g 10000 mailuser
useradd -g 10000 -g mailuser -d /home/mailuser -s /sbin/nologin mailuser  

以後、メールアカウント追加時は下記作業から。

メールボックス定義ファイル作成

vi /etc/postfix/vmailbox

メールボックス メールボックスディレクトリパス
を追記。
メールアドレス:test@mail.vmware.local
メールアドレスディレクトリ:test
とする場合は

test@mail.vmware.local test

データベースを更新

postmap /etc/postfix/vmailbox

メール転送したい場合は下記ファイルに追記してデータベースを更新しますが、今回はメール転送は行わない為特に編集しません。
/etc/postfix/virtual

パスワードを作成します。
dovecot2からdoveadmというコマンドに変わったようです。
(dovecot1ではdovecotpw)
下記では「testpassword」というパスワードにハッシュアルゴリズム「HMAC-MD5」を使用してパスワードを生成しています。

doveadm pw -s HMAC-MD5 -p testpassword
{HMAC-MD5}3c4936f08f79f2bd70c0b42de4449f2286cfe22749d81c932bf2bc9e95bff4a2

パスワードファイルpasswd-fileを作成し、上記コマンドで生成したパスワードを登録します。

vi /etc/dovecot/passwd

追記

test@mail.vmware.local:{HMAC-MD5}3c4936f08f79f2bd70c0b42de4449f2286cfe22749d81c932bf2bc9e95bff4a2:502:10000:::::Maildir:/home/mailuser/Maildir/test/

※ユーザーIDとグループIDはpasswdファイルから確認する

cat /etc/passwd | grep mailuser
mailuser:x:502:10000::/home/mailuser:/sbin/nologin

メールボックスディレクトリ作成

mkdir -p /home/mailuser/Maildir/test/

権限付与

chown mailuser:mailuser -R /home/mailuser/Maildir/test/
chmod 700 -R /home/mailuser/Maildir/test/

telnetを使用してPOP3でログイン出来るか確認

telnet無い場合はインストール

yum -y install telnet

POP3ポート確認

telnet localhost 110

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
USER test@mail.vmware.local ←入力
+OK
PASS testpassword ←入力
+OK Logged in.

確認出来たらquitでログアウト。

telnetを使用してIMAPでログイン出来るか確認

telnet localhost 143

1 LOGIN test@mail.vmware.local testpassword ←入力(左端の1も忘れずに)
1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in

2 list "" ←入力(左端の2も忘れずに)

3 LOGOUT ←入力(左端の3も忘れずに)

ログインできない場合は/var/log/maillogログを確認する。

メールでのSMTP認証用ユーザー名、パスワードとシステムのユーザー名、パスワードを別々にする。
※OS上のパスワードと同じで良いならこのコマンドは不要

echo testpassword | saslpasswd2 -p -u mail.vmware.local -c test 
  • p ... 上記のようにecho等使用してパイプでパスワードを設定(パイプモード)
  • u ... realm(ドメイン名)を指定、main.cfの「myhostname」の値と同じ
  • c 設定するユーザーを指定

SMTP認証用ユーザー名、パスワード確認

sasldblistusers2

test@mail.vmware.local: userPassword

削除する場合は

saslpasswd2 -u mail.vmware.local -d test

sasldb2所有グループをpostfixに変更※最初の1回のみ
※このコマンドは最初の1回のみ、次回からのユーザー作成時は不要。

chgrp postfix /etc/sasldb2

iptables設定

ファイアウォールルーター

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 110 -j DNAT --to 10.0.10.40
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to 10.0.10.40
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 465 -j DNAT --to 10.0.10.40
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 587 -j DNAT --to 10.0.10.40

iptables -A FORWARD -m tcp -p tcp --dst 10.0.10.40 --dport 110 -j ACCEPT
iptables -A FORWARD -m tcp -p tcp --dst 10.0.10.40 --dport 25 -j ACCEPT
iptables -A FORWARD -m tcp -p tcp --dst 10.0.10.40 --dport 465 -j ACCEPT
iptables -A FORWARD -m tcp -p tcp --dst 10.0.10.40 --dport 587 -j ACCEPT

・メールサーバー

iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 465 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 587 -j ACCEPT
iptables -A INPUT -p tcp -s 10.0.10.0/24 --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -s 10.0.10.0/24 --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -s 10.0.10.0/24 --dport 465 -j ACCEPT
iptables -A INPUT -p tcp -s 10.0.10.0/24 --dport 587 -j ACCEPT

iptables -A OUTPUT -p tcp -d 192.168.10.0/24 --sport 110 -j ACCEPT
iptables -A OUTPUT -p tcp -d 192.168.10.0/24 --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -d 192.168.10.0/24 --sport 465 -j ACCEPT
iptables -A OUTPUT -p tcp -d 192.168.10.0/24 --sport 587 -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.10.0/24 --sport 110 -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.10.0/24 --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.10.0/24 --sport 465 -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.10.0/24 --sport 587 -j ACCEPT
メール送信時エラー出たらmaillogを確認

メッセージが出た場合はログ確認

less /var/log/maillog
maillogエラー1

下記エラー出たけどmain.cf編集で解決した。

Feb  9 05:47:32 web dovecot: pop3-login: Aborted login (no auth attempts): rip=192.168.10.106, lip=10.0.10.40
Feb  9 05:47:32 web postfix/smtpd[59191]: connect from unknown[192.168.10.106]
Feb  9 05:47:32 web postfix/smtpd[59191]: warning: SASL: Connect to private/auth failed: Connection refused
Feb  9 05:47:32 web postfix/smtpd[59191]: fatal: no SASL authentication mechanisms
Feb  9 05:47:33 web postfix/master[58757]: warning: process /usr/libexec/postfix/smtpd pid 59191 exit status 1
Feb  9 05:47:33 web postfix/master[58757]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling

/etc/postfix/main.cf
を以下のように変更

変更前

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

変更後

smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd
maillogエラー2

下記エラーの場合はpasswdに設定したパスワードとsaslpasswd2に設定したパスワードに差異がある可能性あり。

Feb  9 22:14:06 web postfix/smtpd[59778]: connect from unknown[192.168.10.106]                                     
Feb  9 22:14:06 web postfix/smtpd[59778]: warning: SASL authentication failure: Password verification failed       
Feb  9 22:14:06 web postfix/smtpd[59778]: warning: unknown[192.168.10.106]: SASL PLAIN authentication failed: authentication failure                                                                                                  
Feb  9 22:14:06 web postfix/smtpd[59778]: warning: unknown[192.168.10.106]: SASL LOGIN authentication failed: authentication failure                                                                                              
maillogエラー3

thunderbirdでメール送信されたけどメール受信されない。

/var/log/maillogではメール送受信ログある

Feb  9 22:50:18 web postfix/local[60127]: 8CF973158: to=<test@mail.vmware.local>, relay=local, delay=0.12, delays=0.07/0.03/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)

Feb  9 22:50:20 web dovecot: auth: Debug: master out: USER#011679870465#011test@mail.vmware.local#011uid=502#011gid=10000#011mail=Maildir:/home/mailuser/Maildir/test/

メールボックスディレクトリは空

ls -lht /home/mailuser/Maildir/test/new/                                                             
合計 0

ls -lht /home/mailuser/Maildir/test/cur/                                                             
合計 0

spool側にも届いてない

ls -lht /var/spool/mail/mailuser 
-rw-rw----. 1 mailuser mail 0  2月  8 20:15 2017 /var/spool/mail/mailuser

問題切り分けの為、postfixの設定でsmtpを一旦無効にして
/etc/postfix/main.cf

smtpd_sasl_auth_enable = no

再度メール送信

iptablesで25番ポート落とされてるぽい?

Feb  9 23:20:13 web kernel: Dropped by OUTPUT: IN= OUT=eth0 SRC=10.0.10.40 DST=108.177.97.26 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=45754 DF PROTO=TCP SPT=51835 DPT=25 WINDOW=14600 RES=0x00 SYN URGP=0 
Feb  9 23:20:14 web kernel: Dropped by OUTPUT: IN= OUT=eth0 SRC=10.0.10.40 DST=108.177.97.26 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=45755 DF PROTO=TCP SPT=51835 DPT=25 WINDOW=14600 RES=0x00 SYN URGP=0 
Feb  9 23:20:16 web kernel: Dropped by OUTPUT: IN= OUT=eth0 SRC=10.0.10.40 DST=108.177.97.26 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=45756 DF PROTO=TCP SPT=51835 DPT=25 WINDOW=14600 RES=0x00 SYN URGP=0

認証パスワード作

[root@web ~]# printf "%s\0%s\0%s" test@mail.vmware.local test@mail.vmware.local testpassword | openssl base64 -e | 
tr -d '\n'; echo                                                                                                   
dGVzdEBtYWlsLnZtd2FyZS5sb2NhbAB0ZXN0QG1haWwudm13YXJlLmxvY2FsAHRlc3RwYXNzd29yZA==


成功例??

[root@web ~]# telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.vmware.local ESMTP unknown
EHLO mail.vmware.local
250-mail.vmware.local
250-PIPELINING
250-SIZE 10485760
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN dGVzdEBtYWlsLnZtd2FyZS5sb2NhbAB0ZXN0QG1haWwudm13YXJlLmxvY2FsAHRlc3RwYXNzd29yZA==
235 2.7.0 Authentication successful
quit
221 2.0.0 Bye
Connection closed by foreign host.

認証はOK
続いて送信

[root@web ~]# telnet localhost 587                                                                               
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.vmware.local ESMTP unknown
EHLO mail.vmware.local
250-mail.vmware.local
250-PIPELINING
250-SIZE 10485760
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN dGVzdEBtYWlsLnZtd2FyZS5sb2NhbAB0ZXN0QG1haWwudm13YXJlLmxvY2FsAHRlc3RwYXNzd29yZA==
235 2.7.0 Authentication successful
mail from:test@mail.vmware.local
250 2.1.0 Ok
rcpt to:test@mail.vmware.local
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject testtitle
honbun
.
250 2.0.0 Ok: queued as 345B3315C
quit
221 2.0.0 Bye
Connection closed by foreign host.

ドメインアドレスにメール送信

[root@web ~]# telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.vmware.local ESMTP unknown
EHLO mail.vmware.local
250-mail.vmware.local
250-PIPELINING
250-SIZE 10485760
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN dGVzdEBtYWlsLnZtd2FyZS5sb2NhbAB0ZXN0QG1haWwudm13YXJlLmxvY2FsAHRlc3RwYXNzd29yZA==
235 2.7.0 Authentication successful
mail from:test@mail.vmware.local
250 2.1.0 Ok
rcpt to:***@gmail.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject testtitle
honbun
.
250 2.0.0 Ok: queued as 0B8E5315C
quit
221 2.0.0 Bye
Connection closed by foreign host.
maillogエラー4

どうやらOP25Bという問題のおかげで直接25番portでSMTPできていないみたい。

Feb 11 08:51:14 web postfix/smtp[61998]: connect to gmail-smtp-in.l.google.com[64.233.188.27]:25: Connection timed out
Feb 11 08:51:14 web postfix/smtp[61998]: connect to alt1.gmail-smtp-in.l.google.com[2607:f8b0:4003:c17::1b]:25: Network is unreachable
Feb 11 08:51:44 web postfix/smtp[61998]: connect to alt1.gmail-smtp-in.l.google.com[173.194.67.27]:25: Connection timed out
Feb 11 08:51:44 web postfix/smtp[61998]: connect to alt2.gmail-smtp-in.l.google.com[2607:f8b0:4001:c0b::1b]:25: Network is unreachable

送信失敗したメールはキューに溜まってるみたい。
Connection timed outが発生してる。

postqueue -p
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
32BD73163       369 Sat Feb 11 09:14:30  test@mail.vmware.local
(connect to alt4.gmail-smtp-in.l.google.com[74.125.192.26]:25: Connection timed out)
                                         ***@gmail.com

一旦キュー削除

postsuper -d ALL deferred

外部へのメールを送るメールサーバーを指定。
これを指定しないとデフォルトだと外部のメールサーバーを直接指定するらしい。
なので、これを指定しなかったので送信時にgoogleのメールサーバー見に行ってたみたい。
以下のように自サーバーのメールサーバーを指定する。

relayhost = [mail.vmware.local]

設定後はpostfixを再起動

同じようにtenletから再度メール送信したけどまたエラー。
だけど今度はメッセージ変わった
一応ちゃんと自サーバーを見てるみたい

Feb 11 10:08:24 web postfix/smtp[63630]: connect to mail.vmware.local[192.168.10.40]:25: No route to host
Feb 11 10:08:24 web postfix/smtp[63628]: 80BCA3167: to=<***@gmail.com>, relay=none, delay=1246, delays=1243/0.07/3/0, dsn=4.4.1, status=deferred (connect to mail.vmware.local[192.168.10.40]:25: No route to host)

※参考までに、DNSを変更後もpostfixのログで変更前のdns逆引きされてる場合はpostfixの再起動が必要。

No route to hostって出てるので試しにtelnetで接続

telnet 192.168.10.40 25

Trying 192.168.10.40...
telnet: connect to address 192.168.10.40: No route to host

繋がらない・・

pingも繋がらない

ping 192.168.10.40

PING 192.168.10.40 (192.168.10.40) 56(84) bytes of data.
From 192.168.10.30 icmp_seq=2 Destination Host Unreachable
From 192.168.10.30 icmp_seq=3 Destination Host Unreachable

どうやら自サーバーのDNS設定で繋がってないネットワークに対して正引き設定していたようなので、bindのゾーン情報ファイルを以下のように修正。

変更前

mail    IN A     192.168.10.40   

変更後

mail    IN A     10.0.10.40   

設定後はnamed再起動

再度telnetで587でメール送信。
まだメール送信できなかったけどエラーメッセージ変わった

Feb 11 10:19:32 web postfix/smtp[63701]: 8119A3163: to=<***@gmail.com>, relay=none, delay=15, delays=15/0/0/0, dsn=4.3.5, status=deferred (mail for mail.vmware.local loops back to myself)

調査した所、relayhostにローカルのメールサーバーを指定するとメールリレーがループしてエラーなるらしい。
なので、relayhostにはローカルのメールサーバーを指定するべきではないみたい。
relayhostには自身のメールサーバーの処理すべきドメインのみ指定するべきみたい。
ここでいうmail.vmware.local

で、自宅サーバーなどの場合、メールサーバーを構築してメール送信しようとしてもプロパイダ(ISP)側のOP25B対策によりメールが送れない事があるらしいので
relayhostにはプロパイダのSMTPを指定する必要があるみたい

relayhost = [smtp.***.ne.jp]

同じようにmyhostnameとmydomainにもプロパイダのドメインを設定。

myhostname = ***.ne.jp
mydomain = ***.ne.jp


そうするとエラーメッセージ変わった

Feb 11 18:07:17 web postfix/smtp[68579]: 1042D31A7: to=<***@gmail.com>, relay=smtp.***.ne.jp[203.160.31.73]:25, delay=0.52, delays=0.47/0/0.04/0.01, dsn=4.1.8, status=deferred (host smtp.***.ne.jp[***.***.***.***] said: 450 4.1.8 <test@mail.vmware.local>: Sender address rejected: Domain not found (in reply to RCPT TO command))

どうやらプロパイダ側のDNSのでこちらのLAN内のドメインが名前解決出来ないからみたい。

なので送信元アドレスを実際に存在してるドメインを指定してみる。

telnetモードにして

telnet localhost 587

HELO ホスト名入力

HELO mail.vmware.local

SMTP-AUTHのパスワード入力
※自サーバーアカウント(ここで言うtest@mail.vmware.local)のパスワード

AUTH PLAIN dGVzdEBtYWlsLnZtd2FyZS5sb2NhbAB0ZXN0QG1haWwudm13YXJlLmxvY2FsAHRlc3RwYXNzd29yZA==

送信元アドレス

mail from:***@ocn.ne.jp

宛先アドレス

rcpt to:***@gmail.com


dataを入力して

data

タイトル

Subject:hoge

メール文

bunsyou

.を入力してtelnetを終了

.

メーラーを確認するとメールが届いていた。

最後に

久しぶりにかなりハマりました。
はじめに書いたように、OP25B対策がされているプロパイダかつ、ドメインが無い自宅サーバーでは一般的なメール送受信可能がメールサーバー構築は難しいです。
出来る方法があればご教授頂きたく・・・
次回はVPNサーバーを借りてメールサーバーを構築してみます。

VMware上のCentOSにVPNサーバーを構築し外部からリモートデスクトップ接続をする

やりたいこと

自宅にLinuxVPNサーバーを構築し、外部からVPN接続して自宅LANのWindowsリモートデスクトップで操作する。
今回はAndroidからVPN接続してみる。
VPNサーバーはVMware上のCentOSで構築して使用する。

環境

※自宅は固定IPを使用しています

ルーター
NEC製の"ATERM-7D10F1"
IP:192.168.10.1

VPNサーバー
ホストOS
OS:Windows10
IP:192.168.10.106

ゲストOS(VMware
OS:CentOS 6.6
IP:192.168.10.30

VPNクライアント
Android
ASUSのZenFone)

VPNプロトコル

VPNプロトコルは手軽なPPP(Point-to-Point Protocol)を使用する。
セキュリティが高いのはL2TP/IPsecらしい。
PPP使用時にはIP制限とかもした方が良いかも。

VPNプロトコルの比較は下記サイトがわかりやすかった。
VPNプロトコル比較表 PPTP vs L2TP vs OpenVPN ™ vs Chameleon ™ | VyprVPN

手順

ゲストOS(VMware

ライブラリをインストール

yum install -y ppp
yum install -y pppd

pppdのインストールで下記エラーが出た場合は、rmpでインストールする。

[root@lb ~]# yum install -y pppd
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
パッケージ pppd は利用できません。
エラー: 何もしません

ダウンロードしてインストール

cd /usr/local/src
wget http://poptop.sourceforge.net/yum/stable/rhel6/x86_64/pptpd-1.4.0-1.el6.x86_64.rpm
rpm -Uhv pptpd-1.4.0-1.el6.x86_64.rpm

pptpd.conf編集

vi /etc/pptpd.conf

localipとremoteipを設定

localip 192.168.10.240
remoteip 192.168.10.241-249  

・localip
PPTP-VPNサーバー自身のローカルIP。
今回の例だと10.0.10.30

・remoteip
PPTP-VPNクライアントに割り当てられるIPアドレス範囲を指定。
上記設定だと241から249の9クライアントを最大接続数とする。
LAN内のコンピューターとIPが重なると 通信できないので被らないよう注意する。


コメントアウトを外しデバッグモードに設定

debug

ログ出力の為rsyslog設定

vi /etc/rsyslog.conf

下記を追記

*.=debug;\
        news.none;mail.none     -/var/log/pptpd

chap-secretsを編集し、VPNサーバーにアクセス可能なアカウントを作成します。

vi /etc/ppp/chap-secrets

ユーザー名 接続名(サーバー名) パスワード IPアドレス
を記入します。
サーバー名は/etc/ppp/options.pptpd の nameと同じにする必要があるようですが、アスタリスクを指定してもOKだそうです。
IPアドレスにはpptpd.confで設定した範囲のIPアドレスを指定しますが、ランダムに割り振る場合はアスタリスクで良いみたいです。

vpnuser *  passhoge  *

VPN接続したユーザーが外部ネットワークに接続できるように設定。
VPNユーザーに外部ネットワークアクセスを許可しない場合は設定不要です

vi /etc/ppp/options.pptpd

同LANネットワークで使用してるDNSサーバーを指定
外部DNSを使用してる場合はそれを指定(8.8.8.8等)

ms-dns 192.168.10.30 
ms-dns 192.168.10.1  

参考までにresolv.conf

[root@lb src]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 192.168.10.30
nameserver 192.168.10.1

ipv4転送設定

vi /etc/sysctl.conf
net.ipv4.ip_forward = 1

iptables設定

iptables -A INPUT -i eth0 -p tcp -dport 1723 -j ACCEPT 
iptables -A INPUT -i eth0 -p gre -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT

VPN許可IPの制限を設ける場合は、上記の1行目を以下のように変更。

iptables -A INPUT -i eth0 -s ***.***.***.***/32 -p tcp --dport 1723 -j ACCEPT 

VPN接続されたパケットをログ出力する場合はこうなる。

iptables -N VPN_LOGGING
iptables -A VPN_LOGGING -j LOG --log-level debug --log-prefix "VPN : "
iptables -A VPN_LOGGING -j ACCEPT

iptables -A INPUT -i eth0 -s ***.***.***.***/32 -p tcp --dport 1723 -j VPN_LOGGING

SELinuxの状態確認
SELinuxは高度なセキュリティ機能だが、これが有効になっているとVPN接続が行えない。

getenforceを確認し、Enforcingだと有効になっているので無効にする。

/usr/sbin/getenforce
Enforcing

Enforcingを0に設定

/usr/sbin/setenforce 0

設定ファイルも修正

vi /etc/selinux/config
SELINUX=disabled

SELinux変更後はサーバー再起動が必要

reboot

pptpdの再起動

service pptpd restart

自動起動設定

chkconfig pptpd on

自動起動設定がされている事を確認。

chkconfig pptpd --list

pptpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

ルータの設定

詳細設定 > ポートマッピング設定

IPアドレス ... 192.168.10.30
VPNサーバーのローカルIP
プロトコルに ... TCP
ポート範囲 ... 1723
コメント ... 適当に

「設定」をクリック

AndroidからVPN接続

設定からVPN設定。
自宅のグローバルIPと上記で設定したアカウント情報を入力で接続できた。

接続後、VPNサーバーのifconfigではpppの接続が表示される

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:192.168.10.30  P-t-P:192.168.10.241  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1396  Metric:1
          RX packets:3871 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3747 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:401489 (392.0 KiB)  TX bytes:1244178 (1.1 MiB)

デバッグログも出力されている
(但し意味は分からない)

less /var/log/pptpd 

Feb  2 23:20:03 lb pptpd[6638]: MGR: Launching /usr/sbin/pptpctrl to handle client
Feb  2 23:20:03 lb pptpd[6638]: CTRL: local address = 192.168.10.30
Feb  2 23:20:03 lb pptpd[6638]: CTRL: remote address = 192.168.10.241

CentOS6.6で急にmessageログが出力されなくなったので対処

CentOS6.6で急にmessageログが出力されなくなった。。
というかmessageログだけで無く、iptablesやsecureのログ等、/var/log/配下のログが出力されていないような。。

別サーバーからずっとping送信してもiptablesのログが更新されない

ls -lht /var/log/iptables/iptables.log
-rwxrwxrwx 1 root root 196K  1月 30 22:05 2017 /var/log/iptables/iptables.log

調査した所、messageログ等はrsyslogによって出力されてるらしい。

rsyslogの起動状態確認

/etc/init.d/rsyslog status
rsyslogd (pid  3972) を実行中...

起動してる。。

再起動してみる

/etc/init.d/rsyslog restart

お、更新された

ls -lht /var/log/iptables/iptables.log
-rwxrwxrwx 1 root root 196K  1月 31 22:34 2017 /var/log/iptables/iptables.log


根本原因分かってないけどとりあえず解決。

NTPサーバーを構築してLAN内サーバーでも日本時刻を同期する

NTPサーバーを構築してLAN内サーバーでも日本時刻を同期する。

NTPサーバーとは時刻を同期する為のもの(説明適当)。
LAN内にNTPサーバーを構築するメリットして

・LAN内の全てのサーバーで時刻を同期できる
 →各サーバーで外部NTPサーバーを参照する事も可能だが多少のズレが発生する可能性あるみたい
・NTPサーバーだけが外部問い合わせをする事で、外部ネットワークへのトラフィックの削減につながる

環境

・サーバーA
ゲストOS(CentOS6)
eth0:192.168.10.30
eth1:10.0.10.30
※eth0がWAN(グローバルネットワーク)に繋がっている

・サーバーB
ゲストOS(CentOS6)
eth0:10.0.10.40
※WANにつながっていない

ntpd 4.2.6

手順

NTPサーバー

現在時刻を確認

[root@lb ~]# date
2017年  1月 28日 土曜日 08:52:00 JST

ハードウェアクロックの時刻を確認

hwclock -r 
2017年01月28日 10時13分09秒  -0.353933 秒

ずれてる・・

ntpインストール

yum -y install ntp


ntp設定ファイル修正

LAN内のNTPサーバーはNICTのNTPサーバーを元にして時刻を同期する。
ntp.nict.jpは独立行政法人情報通信研究機構NICT)が管理している日本標準時に直結したNTPサーバー

vi /etc/ntp.conf  

以下の設定を行います。

#NTPサーバーの時刻と,ローカル・マシンの時刻のずれを記録するファイル
driftfile /var/lib/ntp/drift
#デフォルトのアクセス制御を設定、明示的に許可されていないアクセスを禁止
restrict -6 default ignore
restrict default ignore
restrict 210.173.160.27 mask 255.255.255.255 nomodify notrap noquery
restrict 210.173.160.57 mask 255.255.255.255 nomodify notrap noquery
restrict 210.173.160.87 mask 255.255.255.255 nomodify notrap noquery

最初の2行でipv6ipv4のデフォルトのアクセス制限として拒否設定。
その後、必要なアクセスのみを許可していってる。
上記3つのIPはこちらからアクセスする上位NTPサーバーのIP(後述)。
こちらからのタイムクエリーはしますが、あちらからのntpqやntpdcクエリーはさせないようnomodify以降のオプションを付与。

restrictでは外部からのアクセスと外部へのアクセス両方の設定となるようです。
各オプションは
ignore ... 指定したサーバからのすべてのNTPアクセスを無視
noquery ... 指定したサーバからの時刻問い合わせパケットを無視
nomodify... 指定したサーバからの設定変更要求パケットを無視
notrap ... 指定したサーバに対して状変時にトラップを上げない

# 自分自身のアクセスを許可
restrict 127.0.0.1
# 10.0.10.0/24からのアクセスを許可
restrict 10.0.10.0 mask 255.255.255.0 nomodify notrap

書いての通り、NTPサーバーへのアクセス許可設定です。

# 時刻同期先NTPサーバーを指定
server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst

ちなみにデフォルトの下記だと、デフォルトのNTPサーバーを参照するらしい。
これでも動くみたいだけど、変更したほうが良さ気。

server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org

server に 127.127.1.0 を指定すると、自分自身のローカルクロック(システム時刻)を使用するみたい。
外部ネットワークに接続できない場合に使用する事あるみたいだけど、今回は上位NTPサーバーを参照するのでこの設定は使用しない。

server 127.127.1.0

上位サーバーを参照しない場合は、以下のようにfedgeをつける?
Stratumは、小さい方が優先度が高くなるとの事。
ちょっとこの辺よくわかってない。。

fudge 127.127.1.0 stratum 10

iptablesにNTPサーバーへのアクセスを許可する
※ntp.confのserverのIP

iptables -A OUTPUT -p udp -d 210.173.160.27 --dport 123 --sport 123 -j ACCEPT
iptables -A OUTPUT -p udp -d 210.173.160.57 --dport 123 --sport 123 -j ACCEPT
iptables -A OUTPUT -p udp -d 210.173.160.87 --dport 123 --sport 123 -j ACCEPT

ntpを起動する前に手動で時刻を合わせてみる。
※ntpdateの後にNTPサーバーのホスト名またはIPを指定する

ntpdate ntp.nict.jp

28 Jan 12:32:56 ntpdate[37946]: step time server 133.243.238.164 offset 122958.759329 sec
ntpdate

以下のようなメッセージが出た場合ntpdが起動中、またはNTPサーバーの指定がない。

27 Jan 00:01:09 ntpdate[38507]: no servers can be used, exiting
27 Jan 00:01:09 ntpdate[38507]: the NTP socket is in use, exiting

自動起動設定

chkconfig ntpd on

確認

[root@lb ~]# chkconfig --list ntpd
ntpd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

ntp起動

service ntpd start


NTPサーバーとの同期確認
※remoteで指定されたホストの左に*が表示されていれば、そのサーバと同期していることを確認できるらしい

[root@lb ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+ntp1.jst.mfeed. 133.243.236.17   2 u    -   64    1   44.714   54.252   8.762
*ntp2.jst.mfeed. 133.243.236.17   2 u    1   64    1   46.647   57.935   5.071
 ntp3.jst.mfeed. 133.243.236.17   2 u    -   64    1   44.669   57.794   5.860
※refidの値がずっと「.INIT.」の場合

以下のようにrefidの値が「.INIT.」の場合、「.INIT.」はNTPサーバに到達できないという事。
st(Stratum) 16 は、最下位の階層で、NTPクライアントはこの階層のNTPサーバには同期しない。
ntpdは、上位サーバの時刻の違いが 1000 秒より大きい場合、何か決定的にまずいことが生じたと仮定し同期しない。

[root@lb ~]# ntpq -p

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ntp-b2.nict.go. .INIT.          16 u    -   64    0    0.000    0.000   0.000
 ntp1.jst.mfeed. .INIT.          16 u    -   64    0    0.000    0.000   0.000
 ntp2.jst.mfeed. .INIT.          16 u    -   64    0    0.000    0.000   0.000
 ntp3.jst.mfeed. .INIT.          16 u    -   64    0    0.000    0.000   0.000

自分はここでかなりハマりました。
結論から言うと、設定してる上位NTPサーバーのIPのアクセスを許可するよう設定しntpdを再起動する事で解決しました。

ntp.confのserverにしているホストのIPを調べ、

server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst

restrictに指定

restrict 210.173.160.27 mask 255.255.255.255 nomodify notrap noquery
restrict 210.173.160.57 mask 255.255.255.255 nomodify notrap noquery
restrict 210.173.160.87 mask 255.255.255.255 nomodify notrap noquery
※同期確認時にタイムアウトエラーが出た場合。
$ ntpq -np

::1: timed out, nothing received
***Request timed out

色々可能性はありますが、自分の場合はipv6localhostに対して通信しようとしており、ntp.conf側ではipv6を許可していないのが原因でした。
そもそもipv6は使用しないのでシステム側でipv6の通信をさせないように設定。

sysctl.confを編集し、

vi /etc/sysctl.conf

ipv6の通信をさせないように設定追加

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

反映

sysctl -p

これで解決しました。

iptablesのログでNTPのポート123がDropされていた場合。

下記の例だとntp.confのserverで指定した下記IPの123ポートがDropされてる。
210.173.160.27
210.173.160.57
210.173.160.87
これらは、ntpd.confに設定したNTPサーバーのIP

Jan 28 13:02:49 lb kernel: Dropped by OUTPUT: IN= OUT=eth0 SRC=192.168.10.30 DST=210.173.160.27 LEN=76 TOS=0x00 PREC=0xC0 TTL=64 ID=0 DF PROTO=UDP SPT=123 DPT=123 LEN=56 
Jan 28 13:06:59 lb kernel: Dropped by OUTPUT: IN= OUT=eth0 SRC=192.168.10.30 DST=210.173.160.57 LEN=76 TOS=0x00 PREC=0xC0 TTL=64 ID=0 DF PROTO=UDP SPT=123 DPT=123 LEN=56 
Jan 28 13:07:00 lb kernel: Dropped by OUTPUT: IN= OUT=eth0 SRC=192.168.10.30 DST=210.173.160.87 LEN=76 TOS=0x00 PREC=0xC0 TTL=64 ID=0 DF PROTO=UDP SPT=123 DPT=123 LEN=56

iptablesに下記設定で解決した

iptables -A OUTPUT -p udp -d 210.173.160.27 --dport 123 --sport 123 -j ACCEPT
iptables -A OUTPUT -p udp -d 210.173.160.57 --dport 123 --sport 123 -j ACCEPT
iptables -A OUTPUT -p udp -d 210.173.160.87 --dport 123 --sport 123 -j ACCEPT

同期確認

最後に時刻の同期が取れている事を確認。

[root@lb ~]# date                      
2017年  1月 28日 土曜日 09:58:18 JST

動作確認の為、故意的に時間をずらしてみる。
※ntpサーバーとのズレが大きすぎると同期されない為、2,3分だけずらしてみる。

date -s "2017/01/29 08:57:00"

直後は以下のようだけど

[root@lb ~]# ntpstat
unsynchronised
   polling server every 64 s

同期されると以下のように表示される

ntpstat
synchronised to NTP server (210.173.160.87) at stratum 3
time correct to within 34 ms
polling server every 64 s

20分位すると同期されました。
直ぐに動悸したい場合は、ntpdateコマンドを使用した方が良いでしょう。

[root@lb ~]# date
2017年  1月 29日 日曜日 09:20:13 JST

クライアントサーバー

インストール手順は省略します。


ntp.confを編集

vi /etc/ntp.conf
restrict -6 default ignore
restrict default ignore
restrict 127.0.0.1
restrict 10.0.10.0 mask 255.255.255.0 nomodify notrap

server 10.0.10.30

sysctl.confを編集

vi /etc/sysctl.conf

ipv6の通信をさせないように設定追加

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

反映

sysctl -p

ntp.conf設定

vi /etc/ntp.conf  

同期確認
refidやstが正常に表示されてればOKだはず。

[root@web ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 10.0.10.30      210.173.160.87   3 u    2   64    1    0.386  1823354   0.000
※「ntpq -p」実行後タイムアウトし、NTPサーバーのiptablesのログでNTPのポート123がDropされていた場合。
Jan 29 09:25:02 lb kernel: Dropped by INPUT: IN=eth1 OUT= MAC=00:0c:29:73:76:73:00:0c:29:5c:ba:fd:08:00 SRC=10.0.10.40 DST=10.0.10.30 LEN=76 TOS=0x00 PREC=0xC0 TTL=64 ID=0 DF PROTO=UDP SPT=123 DPT=123 LEN=56 

Jan 29 09:28:20 lb kernel: Dropped by OUTPUT: IN= OUT=eth1 SRC=10.0.10.30 DST=10.0.10.40 LEN=76 TOS=0x00 PREC=0xC0 TTL=64 ID=0 DF PROTO=UDP SPT=123 DPT=123 LEN=56 

NTPサーバー側でファイアウォール設定する事で解決した。

iptables -A INPUT -p udp -s 10.0.10.0/24 --dport 123 -j ACCEPT
iptables -A OUTPUT -p udp -d 10.0.10.0/24 --dport 123 --sport 123 -j ACCEPT

クライアント側から「ntpq -p」実行してタイムアウトが発生する場合は、NTPサーバー側のiptables設定やntp.confのrestrict設定あたりも疑った方が良い

DNSサーバーの種類と構成を整理

DNSサーバーの種類と構成を整理。
※間違ってる情報があれば指摘頂けると嬉しいです

種類

※外部=外部の世界中のインターネット
※内部=LAN内ネットワーク

DNSコンテンツサーバー

ドメイン名の名前解決の情報を管理し提供するサーバー。
外部向けと内部向け、どちらもコンテンツサーバーと呼ぶ。

DNS権威サーバー

コンテンツサーバーかつ外部向けのサーバー。
主に外部インターネット全体に提供するDNSサーバー。

コンテンツサーバーと権威サーバーをイコールで考えているサイトが多いけど、色々調べてみると外部(世界中のインターネット)に公開しているDNSサーバーを権威サーバー、内部LANのみで参照されるサーバーはコンテンツサーバーと呼ぶっぽい。
ただ、コンテンツサーバーの中の権威サーバーなので、権威サーバーはコンテンツサーバーと呼ぶのは正しい。

キャッシュDNSサーバー(DNSフルリゾルバ)

名前解決の情報は持っておらず、階層構造をたどり名前解決を提供するサーバー。
主に特定のクライアント(LANネットワーク内)等に提供するDNSサーバー。
外部公開する事は基本的に無いと思う。

冗長化

プライマリ=マスタ、セカンダリ=スレーブ、
と扱われる事が多いが、実際はそうでは無いと思われる。

DNSプライマリサーバー

クライアント側のリゾルバから、最初にアクセスすべきDNSサーバー。
大抵クライアント側ではDNSサーバーを1つ指定しており基本的にアクセスされるサーバー。
冗長化の為、クライアント側でセカンダリサーバーもDNSにしていれば、このサーバーがアクセスできなかった場合セカンダリサーバーにアクセスが行く。

DNSセカンダリサーバー

プライマリが障害がある時に使用されるサーバー。
使用する為にはクライアント側でDNSサーバーとして指定する必要有り。

DNSマスターサーバー

名前解決の情報を管理しているサーバー。
その為、コンテンツサーバーのみがマスターになり得る。
対応する名前解決の情報をスレーブに自動転送する。
マスター側が最初にアクセスされるサーバーとは限らない。

DNSスレーブサーバー

名前解決の情報をマスターから受け取って管理する。
マスターと同じ情報を管理する。
コンテンツサーバーのみがスレーブになり得る。

DNSサーバー構築時の注意点

  • 権威サーバーとキャッシュDNSサーバーの兼用はセキュリティ上のリスクがあるので分離した方が良い。
  • キャッシュサーバーはセキュリティ上、基本的に内向けのみとするべき。
  • サーバーダウン時のリスクに備えて冗長化の為のマスタースレーブ構成をした方が良い。