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

セカンダリDNSの設定

内部セカンダリCentOSなので省略するが、ゾーン転送でプライマリの設定をミラーしている。
外部セカンダリには、http://www.twisted4life.com/のサービスを利用。

課題

/var/log/syslogを見ると、network unreachable resolvingなエラーが頻繁にはき出されている。最近のBINDではIPv6を最初に見に行くので、そこで失敗しているらしい。今のところIPv6は使わないので-4スイッチでBINDを起動して無効にしてしまってもいいのだが……と思いつつしばらく様子見。

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を利用してサーバから秘密鍵をダウンロード。

秘密鍵をローカルPCのターミナルに登録

TeraTermの「RSA/DSA認証を使う>秘密鍵」ダイアログでダウンロードした秘密鍵を選択して登録。
WinSCPにも同様に登録する。

SSHDの設定

設定ファイルは/etc/ssh/sshd_config。
クリアテキストのパスワード認証は無効にして、公開鍵認証でのログインのみを有効にする。
その他の変更点は次の通り。

Port ****** #ポート番号を変更
PermitRootLogin no #ルートのログインを不許可
PasswordAuthentication no #パスワード認証を不許可

課題

ルーターではじいているので、いまのところssh接続できるのはローカルネットワーク限定。
だけどいずれ外部から利用するを考えると、fail2banあたりで防御を固めておいた方がいいかなと思いつつ、とりあえず今日のところはこのあたりで。

Vim

CLIで様々な設定を編集するのに重宝するのが、スクリーンテキストエディタの老舗であるVim。ネットワーク越しでもサクサク動く軽快さが売りでありながら、IDEばりのプログラミング環境まで提供できるすぐれものだ。

ところがRedhat系とは違って、Ubuntu Server 9.10に標準でインストールされているVimのパッケージは、vim-tinyという機能限定の簡易版だ。本腰を入れてプログラミングをするわけではないので必ずしもフルセットが必要なわけではないのだが、本家Vimとは微妙に違う使い勝手に時々とまどう。

ということで、さくっとフル機能版のVimをインストールすることにする。

続きを読む

Ubuntu9.10 Server インストール

さて、いよいよX27DにUbuntu9.10 Serverをインストールをするの巻。

光学ドライブがないので、USBメモリインストールディスクを作成して、そこから起動することにした。

続きを読む