OXY NOTES

BIND DNSで行う名前解決と、各種ネットワークの設定

セキュリティに配慮しつつ、外部から正常にアクセスできるようにします

前回」に続いて「GMO VPSを契約してWordPressを安定動作させるまでのサーバ設定方法」第二弾。

このページではドメインとIPの関連付けを行うためにBINDを設定し、合わせて各種ネットワークの設定や脆弱性への対応も済ませます。

今回の解説で利用したVPSはこちら


目次


BINDのインストールと設定

前回に続いてBIND DNSをインストールして名前解決できるようにします。

# yum install bind
(省略)
Dependencies Resolved

================================================================================
 Package          Arch        Version                        Repository    Size
================================================================================
Installing:
 bind             x86_64      32:9.8.2-0.23.rc1.el6_5.1      updates      4.0 M
Installing for dependencies:
 bind-libs        x86_64      32:9.8.2-0.23.rc1.el6_5.1      updates      879 k
 portreserve      x86_64      0.0.4-9.el6                    base          23 k

Transaction Summary
================================================================================
(省略)

ルートネームサーバの情報を取得

/etcディレクトリにルートネームサーバの情報をダウンロードしておきます。

# cd /etc
# wget ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/named.cache
# mv named.cache db.cache

正引きのゾーンファイルの作成

今回は便宜上ドメイン名を「example.com」、IPを「192.168.0.1」で設定します。
設定するのは以下のとおり。

ドメイン IP
プライマリネームサーバー ns.example.com 192.168.0.1
メールサーバ mail.example.com 192.168.0.1
web用エイリアス www.example.com 192.168.0.1
ftp用エイリアス ftp.example.com 192.168.0.1

ドメインを管理するレジストラにネームサーバの情報を登録しますが、「.com」などはプライマリネームサーバにくわえて、セカンダリネームサーバも設定する必要があります。

プライマリネームサーバはこのサーバが担当しますが、このままではセカンダリネームサーバの設定ができません。
そこでセカンダリネームサーバを「無料のセカンダリDNS マイハマネット」で代用します。
ありがたいことに無料で利用できます。

今回取得したマイハマネットのセカンダリネームサーバのドメインは以下のとおりです。

ドメイン IP
セカンダリネームサーバー1 ns2.maihama-net.com 198.104.58.211
セカンダリネームサーバー2 ns3.maihama-net.com 153.120.38.37

example.comの正引き用ファイルの作成

# vi /var/named/example.com.hosts
$ttl 38400
example.com.	IN	SOA	ns.example.com.	info.example.com. (
		2015012100			; シリアル番号
		10800				; リフレッシュ間隔
		3600				; リトライ間隔
		604800				; ゾーンの有効期
		38400 )				; ネガティブキャッシュ有効期間
example.com.	IN	NS	ns.example.com.		; このゾーンのプライマリマスタ
example.com.	IN	NS	ns2.maihama-net.com.	; マイハマnetのセカンダリマスタ
example.com.	IN	NS	ns3.maihama-net.com.	; マイハマnetのセカンダリマスタ
example.com.	IN	MX	10 mail.example.com.	; メール用
ns.example.com.	IN	A	192.168.0.1
example.com.	IN	A	192.168.0.1
ns2.maihama-net.com.	IN	A	198.104.58.211
ns3.maihama-net.com.	IN	A	153.120.38.37
mail.example.com.	IN	A	192.168.0.1
www.example.com.	IN	CNAME	example.com.		; web用エイリアス
ftp.example.com.	IN	CNAME	example.com.		; ftp用エイリアス

シリアル番号は「年+月+日+設定番号」で管理すると更新忘れが防げるのでお勧めです。

また、他にもドメインがある場合は同じようにドメイン名のhostsファイルを作成しておいてください。

逆引きの設定はGMO VPS契約時に設定したと思うので、ここでは省略します。設定していない場合はコントロールパネルから設定しておいてください。


BINDの設定

正引き用のファイルを作成したのでBINDで指定します。

# cp /etc/named.conf /etc/named.conf.org
# vi /etc/named.conf
//ルートネームサーバのパス
zone "." {
	type hint;
	file "/etc/db.cache";
};

acl my-network {
	# 問い合わせを許可するアドレスの指定
	192.168.0.1;
};

options {
	# キャッシュサーバの場合yes
	recursion yes ;

	# 定義したネットワークからのアクセスを許可
	allow-query {
		localhost;
		my-network;
	};

    # セカンダリネームサーバ用(マイハマネット用)
    allow-transfer {
            153.120.38.37;
            198.104.58.211;
    };

    # IPV6の機能を停止
    listen-on-v6 { none; };

    # namedデーモンのワークディレクトリを指定
    directory "/var/named";

    # PIDファイルの指定
    pid-file "/var/run/named/named.pid";

    # キャッシュポイズニング対策でDNSSEC対応
    dnssec-validation auto;
};

zone "example.com" {
	type master;
	file "/var/named/example.com.hosts";
	# optionsで拒否しているのでこのゾーンファイルに関しては外部からのアクセスを許可する設定
	allow-query { any; };
        allow-transfer {
                153.120.38.37;
                198.104.58.211;
        };
};

BINDのpid用ディレクトリを作成

オプションで指定したpidファイル用のディレクトリを作成
(カーネル2.4.xでは/var/run/named.pidが作れるので問題ないが、2.2.xだとpidが作れずエラーになるため)

# mkdir /var/run/named/
# chown named.named /var/run/named/

rndc用の共通鍵の作成

BIND付属のrndc-confgenコマンドで作成。
rndc-confgenについては詳しくはmanで見てもらうとして、以下のコマンドでは新規ファイルを鍵長512bitでランダムファイルで「/dev/urandom」を利用して作成しています。

# rndc-confgen -a -b 512 -r /dev/urandom

BINDの再起動

# /etc/init.d/named restart

BINDの自動起動設定

調べて3がONでないならonにする。

# chkconfig --list named
# chkconfig named on

正しく起動しているかログの確認

# vi /var/log/messages

ドメインのレジストリ・レジストラの登録

ネームサーバの設定を移管する。
これはレジストラによって異なる。「ムームードメインの場合はこちら」で解説した通り。

自分で作ったプライマリネームサーバのIPとドメインを関連付け、合わせてセカンダリ用のマイハマnetのドメインも設定すること。

最終的には正しく名前解決できているかは「DNSの設定チェック」で調べることができる。
(初回に設定したばかりだと反映されていない場合があるので数日待つべし)


hostsファイルを編集

サーバ内では外部へ問い合わせる必要は無いのでhostsファイルを編集する。
(192.168.0.1の部分は自分のサーバのIPアドレスに。)

# vi /etc/hosts
127.0.0.1       localhost
192.168.0.1  example.com ns.example.com 2nd.example.com mail.example.com ftp.example.com

ipv6を無効にする

# vi /etc/modprobe.d/disable-ipv6.conf
alias net-pf-10 off
alias ipv6 off

自動起動のチェック。3がonならoffにする。

# chkconfig --list ip6tables
# chkconfig ip6tables off

ネットワークの再起動(サーバの再起動しないとダメな場合あり)

# service network restart

DNSクライアントを設定

# vi /etc/nsswitch.conf

hostsの項目を編集

hosts:      files dns
↓
hosts: files nisplus nis dns

ネットワークの設定

# vi /etc/sysctl.conf
このファイルは値の後に#してコメントすると正常に設定されないので注意。
またアクティブ100程度の小規模サイトを想定しています。
# TIME_WAIT状態の軽減
# net.ipv4.tcp_tw_recycle = 1 携帯やロードバランサ導入時に問題になる可能性あり
net.ipv4.tcp_tw_reuse = 1

# 30にしていたが、600位上でてるため更に半分の15秒に変更。
net.ipv4.tcp_fin_timeout = 15

# コネクションのタイムアウト時間の設定。デフォルト7200
net.ipv4.tcp_keepalive_time = 100
# 検査の回数。デフォルト9
net.ipv4.tcp_keepalive_probes = 2
# 次の検査を実行するときの待ち時間。デフォルト75
net.ipv4.tcp_keepalive_intvl = 3

# RFC1337に準拠させる。TIME_WAIT状態のときにRSTを受信した場合、TIME_WAIT期間の終了を待たずにそのソケットをクローズする
net.ipv4.tcp_rfc1337 = 1

# nmapなどでuptime(システムの連続稼働時間)を探られるのを防ぐ。
net.ipv4.tcp_timestamps = 0

# ipv6を無効
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

以下はコメントアウト。

# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
↓
# Disable netfilter on bridges.
# net.bridge.bridge-nf-call-ip6tables = 0
# net.bridge.bridge-nf-call-iptables = 0
# net.bridge.bridge-nf-call-arptables = 0

設定の反映。

# /sbin/sysctl -p

NTPサーバーの脆弱性に対応

詳しくは「NTPを利用したNTPリフレクション攻撃の概略と対策」をご覧ください。

# vi /etc/ntp.conf

NICT公開NTPサービスを利用する。

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
↓
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
server -4 ntp.nict.jp iburst
server -4 ntp.nict.jp iburst
server -4 ntp.nict.jp iburst

最終行に追加。

# NTP Dos攻撃対策
disable monitor

再起動して設定を反映。

# /etc/init.d/ntpd restart

今回の解説で利用したVPSはこちら
GMOクラウドのVPS

これでBINDとネットワーク関連の調整は完了です。
次は「iptablesの設定とログファイルのローテーション」です。