Logwatch
さて、サーバを立ててはみたものの、週末サバ管としては日がな一日中ログを眺めているわけにもいかない。ログをレポートにまとめて、メールで送ってくれるような仕組みが欲しい。
CentOS 5ではデフォルトでLogwatchが走っているのだが、Ubuntu Server 9.10ではそれに類するプログラムはインストールされていない。/etcをのぞいてみたところ、Logcheckのディレクトリは存在しているが、これは他のパッケージのプログラムがそれぞれのLogcheck用定義ファイルをつっこんだ結果のようだ。
これはLogcheckを使え! というどっかのGNU聖者のお告げかとも思ったが、一時間に一度起動推奨で生ログを送ってくるというLogchekは終末サバ管にはやや重い。興味はあるが先の課題として、ひとまず読み慣れたLogwatchをインストールすることにする。
続きを読むSSL証明書作成
SSL(Secure Socket Layer)はHTTPやPOP3などの通信を暗号化し、セキュアなネットワーク接続を提供する上で欠かせない仕組みだ。とくにUbuntu Server 9.10の標準メール配送エージェントであるDovecotはデフォルトの設定でプレーンテキストでのパスワード認証を禁止しており、事実上SSLは必須の機能となっている。
ところが、デフォルトで作成されるSSLサーバ証明書は、サーバのインストール時のホスト名で登録されており、かならずしも公開時のサーバー名とは一致しない。クライアントのアプリケーションによっては、証明書の情報とサーバーのFQDNが食い違うと毎回警告ダイアログを出す場合があるため、個人用途としても実用的とは言い難い。
自署名のサーバ証明書(いわゆる第四種オレオレ証明書)を作成するための便利なコマンドとして、openssl -signkeyオプションや、それをラップするmake-ssl-certがあるが、今回は勉強のためにも認証局の設置から一通りの手順を踏んで、その過程を記録しようと思う。
最後におまけとして、make-ssl-certを使って一発で自己署名のサーバ証明書を作成する方法も、簡単に記載しておく。
続きを読むDNSサーバ
パッケージ確認
taskselでどのパッケージがインストールされているか確認。
$ tasksel --task-packages dns-server
bind9-doc #BINDのドキュメント
bind9utils #BINDのメンテナンス用ユーティリティ
bind9 #BIND本体
シンプルにBIND関係のパッケージのみらしい。
プライマリDNSの設定
chroot仕様のCentOSと違って、Ubuntuは通常のディレクトリ構成になっているので、設定ファイルは/etc/bindにフラットに配置されている。
設定ファイルのnamed.confは事実上空っぽで、以下の三ファイルをインクルードする仕様。一つのファイルにいくつもの設定をごちゃごちゃ書くよりもわかりやすい。
・named.conf.options # BINDの基本設定
・named.conf.default-zones # ルートサーバやローカルなどデフォルトのゾーン設定
・named.conf.local # ユーザーが追加するゾーンの設定
named.conf
各種設定ファイルをインクルードしているだけなのでほとんど変更点はないが、viewを使う都合上、named.conf.default-zonesはコメントアウト。これはnamed.conf.localのview内で読み込む。
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; //include "/etc/bind/named.conf.default-zones";
named.conf.options
BIND全体のオプションを設定。
options { directory "/var/cache/bind"; allow-transfer { none;}; # 転送を基本禁止。ゾーンごとに許可する version ""; # バナー変更 };
ゾーン転送は個々のゾーンごとに許可する転送先を設定するので、基本は一律禁止する。
ついでにバナーを変更して、BINDのバージョンを隠す。こんなところで設定さらしてるくせに、ささやかなクラック対策。
BINDはバージョン9.4.1-P1以降、再起問い合わせとキャッシュの返答を、デフォルトでlocalhostとlocalnetsに限定するようになったらしい。なのでallow-query,allow-recursion,allow-query-cacheは特に設定しなかった。
named.conf.local
各ゾーンの設定。
// localnetの定義 acl "localnet" { 192.168.1.0/24; 127.0.0.1; }; // seocondary_dnsの定義 acl "secondary_dns" { 202.157.182.142; # ns.twisted4life.com 外部セカンダリDNS 192.168.1.xxx; # ns1.aerialline.com 内部セカンダリDNS }; // 内部ネットワークからのリクエスト向け定義 view "inside" { match-clients { localnet; }; // 標準でインストールされているローカルのゾーンを読み込み include "/etc/bind/named.conf.default-zones"; // 正引き zone "aerialline.com" { type master; file "/etc/bind/db.aerialline.com.local"; allow-transfer { localnet; }; # 内部のセカンダリDNSにのみ転送許可 notify yes; }; // 逆引き zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/db.1.168.192"; allow-transfer { localnet; }; # 内部のセカンダリDNSにのみ転送許可 }; }; // 外部ネットワークからのリクエスト向け定義 view "outside" { match-clients { any; }; // 正引き zone "aerialline.com" { type master; file "/etc/bind/db.aerialline.com"; allow-transfer { secondary_dns; }; # 指定のセカンダリDNSに転送許可 notify yes; }; zone "seotch.net" { type master; file "/etc/bind/db.aerialline.com"; # aerialline.comと同じゾーン設定 allow-transfer { secondary_dns; }; # 指定のセカンダリDNSに転送許可 }; // 逆引き zone "104.5.211.in-addr.arpa" { type master; file "/etc/bind/db.104.5.211"; allow-transfer { secondary_dns; }; # 指定のセカンダリDNSに転送許可 }; }; // rndc.keyのインクルード include "/etc/bind/rndc.key";
db.aerialline.com
外部ネットワーク向け、公開サーバの正引き定義。
外部からのアクセスはルーターでポートごとに振り分けているので、ほとんどgwの仮名(CNAME)になっている。
$TTL 86400 @ IN SOA dns.aerialline.com. seo.aerialline.com. ( 2009112001 ; serial YearMonthDayNumber 3600 ; refresh 1 Hour 900 ; retry 15 Min 1728000 ; expire 20 Days 86400 ; min 24 Hour ) IN NS dns.aerialline.com. ; Primary IN NS ns1.twisted4life.com. ; Secondery IN MX 10 mail.aerialline.com. IN A 211.5.104.xxx dns IN A 211.5.104.xxx mail IN A 211.5.104.xxx gw IN A 211.5.104.xxx www IN CNAME gw ftp IN CNAME gw wiki IN CNAME gw phpmyadmin IN CNAME gw sns IN CNAME gw project IN CNAME gw blog IN CNAME gw seotch IN CNAME gw ubunchu IN CNAME gw
db.aerialline.com.local
内部ネットワーク向け、LAN内ホストと公開サーバの正引き定義。
ゾーン転送禁止の意味ないだろ! とツッコミがきそうだが、たいしたネットワークじゃないのでキニシナイ。内部ネットワークのホストには漫画「うぶんちゅ!」のキャラ名がついていたりする。
$TTL 86400 @ IN SOA dns.aerialline.com. seo.aerialline.com. ( 2010071601 ; serial YearMonthDayNumber 3600 ; refresh 1 Hour 900 ; retry 15 Min 1728000 ; expire 20 Days 86400 ; min 24 Hour ) IN NS dns.aerialline.com. ; Primary IN NS ns1.aerialline.com. ; Secondery IN MX 10 mail.aerialline.com. IN A 192.168.0.1 dns IN A 192.168.0.32 ns1 IN A 192.168.0.1 router IN A 192.168.0.1 lisa IN A 192.168.0.31 akane IN A 192.168.0.32 www IN CNAME akane mail IN CNAME akane ftp IN CNAME akane phpmyadmin IN CNAME akane ubunchu IN CNAME akane
db.104.5.211
外部ネットワーク向け、公開サーバの逆引き定義
$TTL 1H @ IN SOA dns.aerialline.com. seo.aerialline.com. ( 2009112001 ; serial YearMonthDayNumber 3600 ; refresh 1 Hour 900 ; retry 15 Min 1728000 ; expire 20 Days 86400 ; min 24 Hour ) IN NS dns.aerialline.com. ; Primary IN NS ns1.twisted4life.com. ; Secondery 180 IN PTR gw.aerialline.com.
db.1.168.192
内部ネットワーク向け、LAN内ホストの逆引き定義
$TTL 1H @ IN SOA dns.aerialline.com. seo.aerialline.com. ( 2009112001 ; serial YearMonthDayNumber 3600 ; refresh 1 Hour 900 ; retry 15 Min 1728000 ; expire 20 Days 86400 ; min 24 Hour ) IN NS dns.aerialline.com. ; Primary IN NS ns1.aerialline.com. ; Secondery xxx IN PTR gw.aerialline.com. xxx IN PTR akane.aerialline.com. xxx IN PTR lisa.aerialline.com.
設定のテスト
named.confとそのインクルードファイルの書式が正しいかテスト。
$ sudo named-checkconf
各ゾーン定義ファイルの書式が正しいかもチェック。ここでは例としてaerialline.comゾーンの定義をするdb.aerialline.comを表示。
$ named-checkzone aerialline.com db.aerialline.com zone aerialline.com/IN: loaded serial 2009112001 OK
全てエラーが出なければOK。
サーバ再起動
設定を読み込ませて、サーバ再起動。
$ sudo /etc/init.d/bind9 restart
OpenSSH
Taskselでインストールされたパッケージの確認
$ tasksel --task-packages openssh-server
libwrap0 # TCP Wrapperのライブラリ
tcpd # TCP Wrapperのユーティリティ
openssh-server # OpenSSHサーバ
SSH鍵の設定
インストール時点ですでにプレインテキストでのパスワード認証は可能になっているが、公開鍵での認証に限定したいのでSSH用のRSA鍵を設定する。普段とは逆だが、今回はサーバ側で鍵を生成して、秘密鍵をローカルにダウンロードして使うことにする。
SSH鍵ペアの生成
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ユーザ名/.ssh/id_rsa): Created directory '/home/ユーザ名/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ユーザ名/.ssh/id_rsa. Your public key has been saved in /home/ユーザ名/.ssh/id_rsa.pub.
生成した公開鍵を信頼
$ cp .ssh/id_rsa.pub .ssh/authorized_keys
すでに「authorized_keys」が存在する場合は内容を追加
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
秘密鍵をローカルPCにダウンロード
SCPを使いたいところだが、日頃管理に使う端末であるWindows XP君にはそんな気の利いたコマンドはないので、WinSCPを利用してサーバから秘密鍵をダウンロード。