メールサーバを作りたいと思ったので、まずはDNSサーバの構築から。
DNSサーバ立てる時はよくBINDが使われたりするんですが、
頻繁に脆弱性が見つかるので、脆弱性が少なく安定したPowerDNSを使用してみました。
Power DNS で出来ること
PowerDNSはDNSで出来ることが一通り全てできる。
- 権威サーバー
- ミラーサーバー
- キャッシュサーバー
これらをちゃんと実装している。
さらに、コンテンツサーバーについては、ゾーンとレコードをSQLバックエンドに放り込むことが出来る。
- MySQL
- Oracle
- PostgreSQL
- SQLite
SQLでバックエンドに放り込めるだけでもすごいのに
- bind
- mydns
- tinydns
これらのファイル形式に対応してて、レコードを様々な形で持つことが出来る。
あと、LDAPに格納したレコードも使える。
さらにHTTP機能がある。
WEBサーバー機能があって、PowerDNSのモニタリングができて、HTTP APIまでもがついてくる。
- JSON の API
- HTTP モニタリング
インストールして使ってみる。
今回は以下の構成で進めていきます。
なお、iptablesやfirewallが全てオフとしてあります。
OS | CentOS 6.9 |
DNS | PowerDNS 3.3.3
PowerDNS Recursor |
管理GUI | Poweradmin 2.1.7 |
Apache2.2 | |
バックエンドDB | MySQL5.7 |
IPアドレス | 10.0.0.4 |
事前準備
DNS を扱うのでDNSを扱うのに必要な dig コマンドを用意しておく。
# yum install bind-utils
dig いれたら準備段階として dig の結果とネットワーク疎通を見ておく
# dig google.com +short 172.217.25.206 172.217.25.206 172.217.25.206
PowerDNSのインストール
# yum install -y boost boost-devel // C++で使えるライブラリ郡 # yum install epel-release // PowerDSNSはepelからインストールが必要 # yum install pdns pdns-backend-mysql // mysql をバックエンドに使うので mysql-backend もインストール
DBのセットアップ
次は PowerDNS 用のデータベースを作成します。
予め、データベース作成用の .sql ファイルをダウンロードしておきます。
# curl -O https://raw.githubusercontent.com/sig9org/powerdns-create-db/master/create-database.sql
続いてデータベースを作成して、ユーザーやテーブルを作成します。今回は以下のパラメータとしました。
項目 | 値 |
---|---|
データベース名 | powerdns |
ユーザ名 | powerdns |
パスワード | password |
データベースとユーザの作成が完了したら SOURCE で .sql ファイルを流し込み、PowerDNS 用のテーブルを作成します。
# mysql -u root -p CREATE DATABASE pdns; GRANT ALL ON pdns.* TO 'pdns'@'localhost' IDENTIFIED BY '********'; FLUSH PRIVILEGES; SOURCE create-database.sql exit
設定ファイルの修正
PowerDNS の設定ファイルを以下の内容で修正します。
(再帰問い合わせ先はGoogle Public DNSを指定しています。)
# vi /etc/pdns/pdns.conf setuid=pdns setgid=pdns launch=gmysql local-address=127.0.0.1 local-port=53 allow-axfr-ips=127.0.0.1,10.0.0.0/24,192.168.1.0/24 allow-recursion=127.0.0.1,10.0.0.0/24,192.168.1.0/24 loglevel=4 log-dns-details=on
PowerDNSの起動
ここまできたら一度起動しませう。
# /etc/rc.d/init.d/pdns start
PowerDNS Recursorのインストール
こちらはDNSのキャッシュサーバとしての役割になります。
今のままだと
LAN内のPC
↓
powerDNS権威サーバ
↓
上位のDNSサーバ
となっているので
これではいちいち再帰検索をかけているので遅いってことで
LAN内のPC
↓
powerDNSキャッシュサーバ
↓
powerDNS権威サーバ
↓
上位のDNSサーバ
としましょう。って話。pdns-recursorはキャッシュサーバの役割を果たします。
インストールはyumでインストールしておきます。
# yum install pdns-recursor //標準パッケージ
設定内容
インストールが完了したら以下の設定に変更します。
今回はLAN内のみから接続できる様にしました。
# vi /etc/pdns-recursor/recursor.conf allow-from=192.168.1.0/24, 10.0.0.0/24 # アクセス許可 local-address=10.0.0.4 #自サーバのIPアドレス。 local-port=53 #ここはデフォでいいかも forward-zones-recurse=.=127.0.0.1 #ゾーン転送先
LAN内のPCからは10.0.0.4に対してDNSの問い合わせを行います。
それでも解決できない場合自サーバの権威DNSサーバで名前解決を図る…という流れ。
設定反映
PowerDNS Recursorサービスを起動します。
# /etc/rc.d/init.d/pdns-recursor start # chkconfig pdns-recursor on
ここで一回digしてみましょう。
# dig @127.0.0.1 ;; SERVER: 127.0.0.1#53(127.0.0.1) # こいつが出力されてること # nslookup google.com 127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: google.com Address: 216.58.197.174 Name: google.com Address: 216.58.197.174 Name: google.com Address: 216.58.197.174
ここまでで基本的なDNSとしては機能するようになったはずです。
Poweradminのインストール
このままでも使うことはできますが、
管理しやすいようにPHPベースのGUIであるPoweradminを導入します。
まずはファイルをダウンロード、展開、WEBサーバの公開パスへの配置をします。
※予めapacheをインストールしておいてください。導入方法はここでは割愛します。
# wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz # tar -zxvf ./poweradmin-2.1.7.tgz # mv ./poweradmin-2.1.7/inc/config-me.inc.php ./poweradmin-2.1.7/inc/config.inc.php # mkdir -p /var/www/html/poweradmin # mv ./poweradmin-2.1.7/* /var/www/html/poweradmin
設定ファイル”config.inc.php”にデータベースへの接続情報を記述します。
ここでは”/var/www/html/poweradmin/inc/config.inc.php”の変更部分のみ抜粋
$db_host = 'localhost'; $db_port = '3306'; $db_user = 'pdns'; $db_pass = '********'; $db_name = 'pdns'; $db_type = 'mysql'; $session_key = 'xxx'; //インストール後は任意の文字列に変更しましょう。 $iface_lang = 'ja_JP'; //日本語に設定する場合はこちらに変更。
Apacheのサービスを起動します。
# /etc/rc.d/init.d/httpd start # chkconfig httpd on
WEBブラウザから
“http://10.0.0.4/poweradmin/install”
にアクセスして指示に従ってウィザードを進めます。
※ちなみに自分はここで
「Error: You have to install PHP mcrypt extension!」
と怒られてしまったので、この辺を参考に導入ずみ。
すべてがインストールし終えたら、installディレクトリを削除します。
おわり
すべて成功すればこのような管理画面上で操作が可能となります。
現段階ではゾーン情報の設定やら何も設定してないので、これから設定することになります。
うーむ、メールサーバを動かすまではまだまだ長い道のりみたいですね。。
参考サイト様
https://www.uramiraikan.net/Works/entry-2012.html
http://qiita.com/YamaguchiRei/items/a385d7855d1595c79802
http://sig9.hatenablog.com/entry/2016/12/20/120000
http://try-blog.com/blog-entry-35.html