みなさんこんばんは、(っ´∀`)っ ゃー です。
ここんとこ無駄に忙しくてpopopoに書けるようなネタに困っていたのですが、
今日は久々に新しい小ネタができました。
(っ´∀`)っ ゃー がいる会社ではDNSサーバを持っているのですが、
外向きにはコンテンツサーバとして稼動させていて、再帰検索は
許可していませんでした。しかし、お客様から急遽「キャッシュサーバ作って♪」と
気楽に依頼されてしまったので、いそいそと作業することに。
■■ 環境
OS CentOS release 4.6 (Final)
インストールしたもの bind-9.2.4-28.el4
■■ bindインストール
■ yum コマンドでインストール
[root@hoge ~]# yum install bind
■■ named.conf編集
[root@hoge ~]# cd /etc/
※ デフォルトのnamed.confはこうなっています。
// Default named.conf generated by install of bind-9.2.4-28.el4
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
};
include "/etc/rndc.key";
ここに、必要な事項を書き加えてやります。
まずはオリジナルのファイルをバックアップしましょう。
[root@hoge etc]# cp -p named.conf named.conf.orig
そしてnamed.confの編集です。
[root@hoge etc]# vi named.conf
// Default named.conf generated by install of bind-9.2.4-28.el4
options {
directory "/var/named";
// dump-file "/var/named/data/cache_dump.db";
// statistics-file "/var/named/data/named_stats.txt";
allow-query { any; };
};
// prime the server with knowledge of the root servers
zone "." {
type hint;
file "/var/named/db.root";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "0.0.127.in-addr.arpa";
};
include "/etc/rndc.key";
■ ゾーンファイル作成
次に、ルートサーバのゾーンファイルと自分自身の名前解決のための
ゾーンファイルを作ってやります。
[root@hoge etc]# cd /var/named/
ルートサーバのnsレコードを検索して、db.rootというファイル名で
保存してやります。以下のコマンド一発でOKです。
[root@hoge named]# dig @A.ROOT-SERVERS.NET . ns > db.root
できあがったファイルを確認してみましょう。
[root@hoge named]# cat db.root
; <<>> DiG 9.2.3 <<>> ns . @a.root-servers.net.
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18944
;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 518400 IN NS A.ROOT-SERVERS.NET.
. 518400 IN NS B.ROOT-SERVERS.NET.
. 518400 IN NS C.ROOT-SERVERS.NET.
. 518400 IN NS D.ROOT-SERVERS.NET.
. 518400 IN NS E.ROOT-SERVERS.NET.
. 518400 IN NS F.ROOT-SERVERS.NET.
. 518400 IN NS G.ROOT-SERVERS.NET.
. 518400 IN NS H.ROOT-SERVERS.NET.
. 518400 IN NS I.ROOT-SERVERS.NET.
. 518400 IN NS J.ROOT-SERVERS.NET.
. 518400 IN NS K.ROOT-SERVERS.NET.
. 518400 IN NS L.ROOT-SERVERS.NET.
. 518400 IN NS M.ROOT-SERVERS.NET.
;; ADDITIONAL SECTION:
A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4
B.ROOT-SERVERS.NET. 3600000 IN A 192.228.79.201
C.ROOT-SERVERS.NET. 3600000 IN A 192.33.4.12
D.ROOT-SERVERS.NET. 3600000 IN A 128.8.10.90
E.ROOT-SERVERS.NET. 3600000 IN A 192.203.230.10
F.ROOT-SERVERS.NET. 3600000 IN A 192.5.5.241
G.ROOT-SERVERS.NET. 3600000 IN A 192.112.36.4
H.ROOT-SERVERS.NET. 3600000 IN A 128.63.2.53
I.ROOT-SERVERS.NET. 3600000 IN &nbs
p; A 192.36.148.17
J.ROOT-SERVERS.NET. 3600000 IN A 192.58.128.30
K.ROOT-SERVERS.NET. 3600000 IN A 193.0.14.129
;L.ROOT-SERVERS.NET. 3600000 IN A 198.32.64.12
L.ROOT-SERVERS.NET. 3600000 IN A 199.7.83.42
M.ROOT-SERVERS.NET. 3600000 IN A 202.12.27.33
;; Query time: 81 msec
;; SERVER: 198.41.0.4#53(a.root-servers.net.)
;; WHEN: Sun Feb 1 11:27:14 2004
;; MSG SIZE rcvd: 436
次に、ローカルホストの正引ファイルを作ってやります。
[root@hoge named]# vi localhost.zone
$TTL 300
@ IN SOA localhost. root.localhost.(
2008013001 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Minimum
IN NS localhost.
IN A 127.0.0.1
そして、ローカルホストの逆引ファイルを作ってやります。
[root@hoge named]# vi 0.0.127.in-addr.arpa
$TTL 300
@ IN SOA localhost. root.localhost.(
2008013001 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
■■ 確認
named-checkzoneコマンドで、ゾーンファイルの書式を確認します。
[root@hoge named]# named-checkzone localhost localhost.zone
zone localhost/IN: loaded serial 2008013001
OK
[root@hoge named]# named-checkzone 127.0.0.1 0.0.127.in-addr.arpa
zone 127.0.0.1/IN: loaded serial 2008013001
OK
named-checkconfコマンドで、named.confの書式を確認します。
[root@hoge named]# named-checkconf /etc/named.conf
■■ named起動
■ syslog (/var/log/messags) をtailしながら、namedを起動
[root@hoge named]# cd
[root@hoge ~]# /etc/init.d/named start
Starting named: [ OK ]
[root@hoge ~]# tail -f /var/log/messages
Jan 30 16:25:08 hoge named[7117]: starting BIND 9.2.4 -u named
Jan 30 16:25:08 hoge named[7117]: using 1 CPU
Jan 30 16:25:08 hoge named[7117]: loading configuration from '/etc/named.conf'
Jan 30 16:25:08 hoge named[7117]: listening on IPv4 interface lo, 127.0.0.1#53
Jan 30 16:25:08 hoge named[7117]: listening on IPv4 interface eth0, 219.94.xxx.xxx#53
Jan 30 16:25:08 hoge named[7117]: command channel listening on 127.0.0.1#953
Jan 30 16:25:08 hoge named[7117]: command channel listening on ::1#953
Jan 30 16:25:08 hoge named[7117]: zone 0.0.127.in-addr.arpa/IN: loaded serial 2008013001
Jan 30 16:25:08 hoge named[7117]: zone localhost/IN: loaded serial 2008013001
Jan 30 16:25:08 hoge named[7117]: running
Jan 30 16:25:08 hoge named: named startup succeeded
■ namedの自動起動設定
まずは現状確認
[root@hoge ~]# chkconfig named --list
named 0:off 1:off 2:off 3:off 4:off 5:off 6:off
自動起動
[root@hoge ~]# chkconfig named on
自動起動確認
[root@hoge ~]# chkconfig named --list
named 0:off 1:off 2:on 3:on 4:on 5:on 6:off
プロセス確認
[root@hoge ~]# ps auxwww | grep [n]amed
named 7117 0.0 0.1 37240 2512 ? Ssl 16:25 0:00 /usr/sbin/named -u named
■■ iptablesの設定
これまで、hogeサーバはメールサーバとして機能させていたので、tcp/udpの53番は
許可していませんでした。なので、iptablesの穴をあけてやることにします。
■ /etc/sysconfig/iptablesファイルの修正
[root@hoge ~]# cd /etc/sysconfig/
[root@hoge sysconfig]# cp -p iptables iptables.20080130
[root@hoge sysconfig]# vi iptables
以下を追記
# DNS
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p tcp --dport 53 -j ACCEPT
[root@hoge sysconfig]# diff iptables iptables.20080130
56,59d55
< # DNS
<
-A INPUT -p udp --dport 53 -j ACCEPT
< -A INPUT -p tcp --dport 53 -j ACCEPT
<
■ iptablesの解除タイマーを仕込む
万が一のOPミスでサーバにログインできなくなったらどうにもならないので、
iptablesをstopさせるよう、cronに仕込んでおきます。
[root@hoge sysconfig]# cd /etc/cron.d
[root@hoge cron.d]# vi iptables_clear
以下を追記
0,10,20,30,40,50 * * * * root /etc/init.d/iptables stop
■■ 事前確認
[root@hoge cron.d]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 210.255.xx.xx/28 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 218.219.xxx.xxx 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 219.94.xxx.yyy 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 219.94.xxx.zzz 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 210.255.xx.xx/28 0.0.0.0/0 tcp dpt:23
ACCEPT tcp -- 219.94.xxx.yyy 0.0.0.0/0 tcp dpt:23
ACCEPT tcp -- 219.94.xxx.zzz 0.0.0.0/0 tcp dpt:23
ACCEPT tcp -- 210.255.xx.xx/28 0.0.0.0/0 tcp dpt:4949
ACCEPT tcp -- 210.255.xx.xx/28 0.0.0.0/0 tcp dpt:21
ACCEPT tcp -- 218.216.xx.yyz 0.0.0.0/0 tcp dpt:21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:465
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:587
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
ACCEPT tcp -- 210.255.xx.xx/28 0.0.0.0/0 tcp dpt:5432
ACCEPT tcp -- 219.94.xxx.zzz 0.0.0.0/0 tcp dpt:5432
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:110
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:995
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:143
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:993
ACCEPT udp -- 210.255.xx.xx/28 0.0.0.0/0 udp dpt:161
DROP all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
■■ iptables 再起動
[root@hoge cron.d]# /etc/init.d/iptables restart
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]
■■ 事後確認
[root@hoge sysconfig]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 210.255.xx.xx/28 0.0.0.0/0 tcp
dpt:22
ACCEPT tcp -- 218.219.xxx.xxx 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 219.94.xxx.yyy 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 219.94.xxx.zzz 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 210.255.xx.xx/28 0.0.0.0/0 tcp dpt:23
ACCEPT tcp -- 219.94.xxx.yyy 0.0.0.0/0 tcp dpt:23
ACCEPT tcp -- 219.94.xxx.zzz 0.0.0.0/0 tcp dpt:23
ACCEPT tcp -- 210.255.xx.xx/28 0.0.0.0/0 tcp dpt:4949
ACCEPT tcp -- 210.255.xx.xx/28 0.0.0.0/0 tcp dpt:21
ACCEPT tcp -- 218.216.xx.yyz 0.0.0.0/0 tcp dpt:21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:465
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:587
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
ACCEPT tcp -- 210.255.xx.xx/28 0.0.0.0/0 tcp dpt:5432
ACCEPT tcp -- 219.94.xxx.zzz 0.0.0.0/0 tcp dpt:5432
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:110
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:995
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:143
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:993
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 ← ここ
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 ← ここ
ACCEPT udp -- 210.255.xx.xx/28 0.0.0.0/0 udp dpt:161
DROP all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
■ iptablesの解除タイマーをoffにする
[root@hoge cron.d]# vi iptables_clear
以下、コメントアウトする
#0,10,20,30,40,50 * * * * root /etc/init.d/iptables stop
以上で、キャッシュサーバのできあがりです。
ね、簡単でしょ?