TurbolinuxでDRBDインストール

Linux, コラム No Comments

Turbolinux 11 serverでDRBDのインストールに成功しました。これから色々とテストを行って実験して行くことになるのですが忘れるといやなので取り急ぎメモとして残します。

debianやCentなどでパッケージが存在しますので、DRBDの為にわざわざTurbolinuxを使用する必要はないとかもしれませんが商用のパッケージという縛りかつlinuxかつコストパフォーマンスを考えていくとTurboになったという経緯があります。

ではインストールを開始していきます。あ、DRBDのバージョンは2009年5月23日現在で最新の8.3.1を利用します。事前に
gcc-c++
・kernel-source
・flex
のインストールをturbo+などを利用してインストールして下さい。ここではインストールされているとして作業を進めていきます。またパッケージが存在しないので当然ですがソースコードからインストールを行っていきます。
インストールは大きく分けて
・カーネルのモジュール作成
・DRBDコンパイル&&インストール
という2ステップが必要です。CentOSではカーネルのソースコードをインストールしただけでカーネルモジュールが存在しているようなので最初のステップは無視できます。Turbolinuxなどのモジュールが存在しないlinuxでは、ここで紹介するステップを踏んでいくことでインストールが可能だと思います。

では最初のステップ、カーネルのモジュール作成から開始しましょう。当然ですがroot権限が必要です。suでrootユーザになって下さいね。
Turbolinuxは[/usr/src/linux]にソースが存在します。[make mrproper]にて環境を初期化して[SetupKernelSource.sh i686]で設定ファイル(.config)を作成、モジュールを作成します。

# cd /usr/src/linux
# make mrproper
# ./SetupKernelSource.sh i686
# make modules

上記コマンドを実行、エラーが発生しなければモジュール作成が完了です。次にDRBDをインストールします。技術評論社、24時間365日サーバ/インフラを支える技術などを読むとなるべく最新版を使用すべきと紹介されていましたので最新バージョンを利用しました。(安定版は8.0系のようです。ですので8.0系を利用するのも有りだと考えています。)ソースコードはいつも通り[/usr/local/src]を利用することにします。
最新版はhttp://oss.linbit.com/drbd/を確認してみて下さい。

# wget http://oss.linbit.com/drbd/8.3/drbd-8.3.1.tar.gz
# tar xvzf drbd-8.3.1.tar.gz
# cd /usr/local/src/drbd-8.3.1
# make clean all KDIR=/usr/src/linux
# make KDIR=/usr/src/linux
# make install
# mv /etc/drbd.conf /etc/drbd.conf.ORG

ポイントはKDIRオプションを用いてソースコード場所をmake時に指定することでしょうか。また設定ファイルは削除せずに上記の通り違う名前で保存しておいて、参考にするとよいでしょう。

設定は時間があって自分なりの検証が終わったらアップしたいと思いますが何時になるか(笑)

【番外編】Turbolinuxを触ってみての感想
少し触った感じではブート時のサービス起動の少なさと言い、デフォルトでインストールされるパッケージと言い、なかなか考えられているなぁと思いました。でも
・popt-develパッケージが存在しない(keepalivedのインストールに必要、結局ソースコードからインストールしてしまいました。バージョン8の時代には存在したみたいなんだけど。)
・dovecotがない(確かにまだまだこなれていない部分がありますが、通常の使い方では十分だと思うんだけどな。)
・情報が少ない(昔は吸気系加圧器か赤い帽子かと言われていたのに)
・yumなどのコマンドラインから使用しやすいパッケージ管理ツールがない(Turbo+も良いとは思うんだけど、パッケージが探しにくい。パッケージ名を検索できるようになったら、もっと使い勝手があがると思います)
という欠点が目につい来ました。でもでも最大の欠点は
・カーネルのビルドは出来てもinstallが出来なかった(なぜ!?)
点です。いや、多分間違いなく自分がなにか致命的なミスをしているか、何かだと思いますからTurbolinuxそれ自体は悪くないです。でも何が原因か分からないんですよね。。。。。。
今の所サポートが必要な状況に追い込まれていないので、サポートがどうかなどの判断ができません。なのでいろんな意味で判断は保留なのですが、超個人的意見をいえばTurbolinuxは商用で有れば次も使いたいと思ってます。

qmail+vpopmai+ClamAV+SpamAssassin+simscanでメールサーバ構築[インストール編]

FreeBSD, mail No Comments

メールサーバの運営って難しいですよね?SPAM攻撃にさらされますし、ちょっとした設定ミスでメールの受け取りや送信が出来なくなるし、受信が出来なくなるだけならまだしもSPAM発信基地となってしまう可能性もあるわけです。そのため高額なメールアプライアンスサーバーいろんな場所で活躍しています。

しかしながら個人用途でそのような専用の機器はなかなか利用出来ません。ですがFreeBSDやLinuxでも「がんばれば!」負けないくらいのメールサーバが構築出来るハズ、と自分を励ましつつ構築・運営を行ってきました。そこでせっかくですから自分なりのノウハウというかメールサーバ構築方法を公開?したいと思います。

今回の構築に当たって使用するソフトウェアは
qmail+vpopmai+ClamAV+SpamAssassin+simscan
を利用します。最近ではpostfixを用いてサーバ構築を行っているのですが今回は過去経緯よりqmailを用います。もう一点、自分がvpopmailが好きであるという理由も大きいのですが。

まずqmailの弱点を考えてみましょう。自分が考えるqmailの弱点は、

その1 ・指定されたメールアドレスを有するユーザがサーバ上に存在するかしないかにかかわらず
        「とりあえず」 受け取ってしまう。
       ・受け取ったメールに対してエラーメールを発信してしまう。
     ・SPAMの場合、偽装された送り主にエラーメールが送られてしまう。
その2 ・double bounce (ダブルバウンス)が #@[] という不正なメールアドレスで送信される。
その3 ・メール1つに対してTCP接続/切断が1回起こる。
その4 ・同一ドメインに対して何度も接続/切断が発生する。
その5 ・同一ドメインに対する同時接続数の制限がない。
その6 ・SMTP Auth に非対応
その7 ・TLS 非対応
その8 ・IPv6 非対応

特に問題なのが1で、qmailサーバでディクショナリーアタックを受けるとサーバのCPUパワーを空費し、バウンズ不可能な不達通知メールでキュー溢れをおこしてしまいます。実際、過去何回か痛い目を見ました。。。。。

そこで現在のネット環境に合わせて

・SUBMISSIONポートによるメール送信をサポート。
・SUBMISSION利用時はSMTP認証を必須。
・POP before SMTPをサポート[25番ポート利用時]
・アカウント管理はmysqlで行う。
・ドメイン単位でのSPAMフィルタ及びウィルスチェックの利用可否設定
・ディクショナリーアタック対策

以上の機能をサポート出来るようにインストール及びソフトウェア設定を行っていきます。オリジナルのqmailでは対応していなのでパッチを当てて機能拡張を行います。その3とその4とその5、及びその8の弱点は今回は無視することとします。

それでは当てるパッチの紹介です。

qmail-1.03.errno.patch
glibc-2.3.1以降に対応するためのパッチ。FreeBSDでは不要だが念のため。

netqmail-1.05-09-msp.patch
RFC2476に従ってSUBMISSIONポートを使用するためのパッチ。

netqmail-qregex-20040601-vrt.patch
qregex-20040601とvalidrcpttoを併用できるように修正されたパッチ。validrcptto ファイルにも正規表現を使えるように拡張されており、今回の肝になるパッチ。Stray Penguin様のサイト(http://www.asahi-net.or.jp/~AA4T-NNGK/index.html)で公開されているのを発見しまして、このたび有り難く使用することにしました。本当に感謝しています。
(qregex-20040601・・・・・badmailfromというファイルを用いてfromヘッダで通知されたメールアドレスを判定、リストにメールアドレスが存在した場合にメール受け取りを拒否するが、そのリストの記入に正規表現が利用できるようにしたパッチ。badmailtoファイルにtoヘッダで通知されたメールアドレスの場合受け取りを拒否出来るようにもなる。むろん正規表現が利用可能)
(validrcptto・・・・・メールサーバでメールを受け取るユーザをvalidrcpttoファイルに記載、記載がないユーザの場合はメールの受け取りを拒否するためのパッチ。今回利用するパッチを使った場合、正規表現が利用可能になる。)

qmail-date-localtime.patch
Received などの行の時刻をローカルタイムにするパッチ。

qmailqueue-patch
境変数QMAILQUEUEを使えるようにするパッチ。simscanでウィルス判定及びSPAM判定を行うため
に必要です。

netqmail-1.05-smtpd-auth-0.31.patch
SMTP認証機能を追加します。 オリジナルのパッチではqmail-smtpd-auth-0.31 を解凍するとできる base64.c, base64.h, README.auth を qmail のソースdir にコピーしてからパッチを行うのですが、一つ一つ当てていくのは大変なのでStray Penguin様のサイトで配布されている、いきなりパッチだけで済むパッチを利用させて頂きます。

FreeBSDで元々あたるパッチ
sendmail-flagf.patch
qmail 付属の sendmail ラッパーを、”-f” オプションで呼んだ時に sendmail 同様に From:ヘッダを設定するように修正するパッチ

qmail-103.patch
DNSに関するUDPパケットが512バイトを超えると処理できなくなる問題の修正パッチ

patch-qmail-1.03-rfc2821.diff
RFC2821 に準拠するようにするパッチ。挨拶時(接続直後とHELO)が結果コード 5xx の場合、永続エラーにしたり、挨拶時(接続直後とHELO)エラーの場合、複数の MX があるなら別の MX を試すようにするらしいです。

事前準備として必要とするパッチをダウンロードしましょう。パッチダウンロード用のフォルダは[/root/qmail-patch]とします。

# mkdir /root/qmail-patch
# cd /root/qmail-patch

# fetch http://pub.kaone.net/public/qmail-1.03.errno.patch
# fetch http://www.ksknet.net/sample/qmail-date-localtime.patch
# fetch http://www.qmail.org/qmailqueue-patch
# fetch http://www.aripollak.com/files/netqmail-1.05-09-msp.patch.txt
# fetch http://www.asahi-net.or.jp/~AA4T-NNGK/codes/netqmail-qregex-20040601-vrt.patch
# fetch http://www.asahi-net.or.jp/~AA4T-NNGK/codes/netqmail-1.05-smtpd-auth-0.31.patch
# mv netqmail-1.05-09-msp.patch.txt netqmail-1.05-09-msp.patch

 

早速、portsを利用してインストールを行っていきましょう。パッチを当ててインストールを行うためにいつもの「make install」ではなく「make patch」コマンドを実行します。
また、コマンド実行時にオプション選択を聞いてきますが「RCDLINK」、つまりリンクを自動で作成するオプション以外はすべて無効にして下さい。一つ一つ手でパッチを当てていきます。

# cd /usr/ports/mail/qmail
# make patch

上記コマンドを実行すると、qmailのソースコードとFreeBSD標準で適応されるパッチをダウンロード、workフォルダに解凍されソースにパッチが適応された状態で中断します。
一つ一つパッチを適応していくこととします。

 

# cd work/qmail-1.03/
# patch -p1 < /root/qmail-patch/netqmail-1.05-09-msp.patch
# patch -p1 < /root/qmail-patch/qmail-date-localtime.patch
# patch -p1 < /root/qmail-patch/netqmail-qregex-20040601-vrt.patch
# patch -p1 < /root/qmail-patch/qmailqueue-patch
# patch -p1 < /root/qmail-patch/qmail-1.03.errno.patch
portsに展開されたファイルへのパッチの適用が終わったら、コンパイルとインストールを続けて行います。

# cd ../..
# make
# make install

インストールが完了したら下記の通りコマンドを入力してsendamilを無効に、qmailを有効にします。
その後「make clean」を実行しましょう。

# /var/qmail/scripts/enable-qmail
# make clean

SUBMISSION用のqmailをビルドします。作業フォルダは[/root/qmail-1.03]とします。上記手順でqmailのインストールを行った場合[/usr/ports/distfiles]配下にqmail用のソースがダウンロードされていますのでそのまま利用します。
# cd /root/
# tar xvzf /usr/ports/distfiles/qmail/qmail-1.03.tar.gz
# cd qmail-1.03/
# patch -p1 < /root/qmail-patch/netqmail-1.05-09-msp.patch
# patch -p1 < /root/qmail-patch/qmail-date-localtime.patch
# patch -p1 < /usr/ports/distfiles/qmail/patch-qmail-1.03-rfc2821.diff
# patch -p1 < /usr/ports/distfiles/qmail/qmail-103.patch
# patch -p1 < /root/qmail-patch/netqmail-1.05-smtpd-auth-0.31.patch

FreeBSDのportsインストールでqmailのインストールを行った場合、「qnofiles」というグループが作成されています。なのでFreeBSD環境に合わせてグループ名を下記の通り書き換えます。

# cp conf-groups conf-groups.org
# ee conf-groups

——————————————————————
qmail    ←1行目
nofiles  ←2行目
——————————————————————
       ↓
——————————————————————
qmail    ←1行目
qnofiles ←2行目
——————————————————————

書き換えが完了したらビルド及びインストールを行います。

# make
# cp -i qmail-smtpd /var/qmail/bin/qmail-smtpd-submission

以上でqmailのインストールは完了しました。続いてウィルスチェックソフトやSPAMフィルターのインストール、POP3サーバのインストール等々、必要とするソフトをインストールしていきます。ここからは手作業でのパッチ当てがないので(多分)幾分、作業が楽です。

最初に「tcpserver」のインストールを行います。tcpserver はqmailを実行するのに使用します。
# cd /usr/ports/sysutils/ucspi-tcp/
# make install clean
ウィルスチェックの為、ClamAV のインストールを行います。
# cd /usr/ports/security/clamav
# make install clean

SPAMフィルターのインストールを行います。
# cd /usr/ports/japanese/p5-Mail-SpamAssassin
# make
# make install clean

オプションは下記の通りです。
WITH_AS_ROOT=true
WITH_SPAMC=true
WITHOUT_SACOMPILE=true
WITHOUT_DKIM=true
WITH_SSL=true
WITH_GNUPG=true
WITHOUT_MYSQL=true
WITHOUT_PGSQL=true
WITH_RAZOR=true
WITHOUT_SPF_QUERY=true
WITHOUT_RELAY_COUNTRY=true

 

# cd /usr/ports/mail/simscan
# make install clean

オプションは下記の通りです。
WITH_CLAMAV=true
WITH_RIPMIME=true
WITH_SPAMD=true
WITHOUT_USER=true
WITH_DOMAIN=true
WITH_ATTACH=true
WITHOUT_DROPMSG=true
WITHOUT_PASSTHRU=true
WITH_HEADERS=true

インストールが完了と同時にspamassassin作業用のディレクトリを作成します。FreeBSDではユーザーnobodyのホームディレクトリが”/nonexistent/”に設定されています。しかしながら実際にはそんなディレクトリは存在しません。単にログインさせないユーザーのホームディレクトリという意味で使用しているようです。(nonexistentは実在しないという意味ですし)

そのままSpamAssassinを実行するとエラーが出ますので下記のようにディレクトリを作成してspamassassinプログラムが読み書き出来るようにディレクトリに権限を付与します。

(ちなみにCentOS5.3ではユーザーnobodyのホームディレクトリは[/]、つまりドキュメントルートに設定されてました。よってLinuxでは下記のディレクトリを作成しなくとも動作可能と思われます)

# mkdir /nonexistent/
# mkdir /nonexistent/.spamassassin/
# chown -R simscan:spamd /nonexistent/.spamassassin

 

引き続きvpopmail のインストールを行います。

vpopmailのセットアップですが、下記2つの要件に対応出来るように設定します。

・アカウント管理にmysqlを利用する
・POP before SMTP が利用できるようにする

ただし現在のインターネット環境を考えるに、SUBMISSION+SMTP認証をためらう理由が見あたらないことから新規にメールサーバを構築する場合は[POP before SMTP]は利用できないようにすべきでしょう。自分が管理しているサーバは過去の経緯よりどうしてもサポートしなければならないのでサポートするようにしているだけです。

また、mysqlの利用も一般ユーザが利用する位で有れば使用しない方が良いかもしれませんね。ここら辺は一長一短だとは思いますが。。。。。ただ、SMTP認証はmysqlを利用した環境でしか自分はチェックしていません。

MySQLにてユーザ管理を行うために、当然ですがmysqlのインストールが必要です。サクッとインストールを行いましょう。
# cd /usr/ports/databases/mysql50-server/
# make WITH_CHARSET=utf8 WITH_XCHARSET=all
# make install clean

続いてvpopmailをインストールします。APOPを利用出来るようにするのとドメインごとにクォータ制御を行うので下記のようなmakeを発行、インストールを行います。
# cd /usr/ports/mail/vpopmail
# make WITH_MYSQL=yes WITH_CLEAR_PASSWD=yes WITH_DOMAIN_QUOTAS=yes
# make install clean

[mysqlを利用しない場合 : makeのみ]
[POP before SMTPを利用しない場合 : make WITHOUT_ROAMING=yes]
[APOPを利用する場合 : make WITH_CLEAR_PASSWD=yes]
[ドメイン単位でquotaを行う場合 : make WITH_DOMAIN_QUOTAS=yes]

以上でソフトウェアのインストールが完了しました。

引き続き、ソフトウェアの設定が必要ですが、まずはインストールそのものは上記手順にて完了です。

設定編は時間を見計らって後日記載したいと思います。

MaxloginsでSSH不正アクセス対策

FreeBSD No Comments

謹賀新年のコメントをPOSTしてからはや一ヶ月。そろそろ更新しなきゃな~~と思ってましたが身近な後輩から

「dorakenさん、謹賀新年から1ヶ月も更新されてないっすよ~~、早く更新して下さいよ♪(* ̄ー ̄)v」

という突っ込みが。

「・・・・・・・・ ( ̄  ̄;) うーん 時間がねぇ」と思いつつもさすがにこのまま放置というわけにも行かないので今回は小技にあたるSSHアタック対策の一つ、MaxloginsでSSH不正アクセス対策を行ってみたいと思います。

このソフトを使うと何が出来るかというと「パスワードを規定回数間違えたIPアドレスからのアクセスを一定時間アクセス禁止にする」事が可能です。過去に紹介した日本国内からSSHsshでログインできるユーザーを決めましょうと併せて対策を行うことでFreeBSD単体で強固な対策が可能になります。出来ればルータでアクセスできるIPアドレスを制限したり、ポート番号を変更したりなどの対策を施せばベストなのですけどね。

Maxloginsはperlで記述されています。オフシャルサイトを見ると「Tested under Perl 5.8.4 and 5.6.1, and FreeBSD 4.7.」と記載がありますのでperl5であればLinuxであっても問題なく使用可能と思います。dorakenはFreeBSD6.4Rで使用しています。

rootでログインした後、オフシャルサイトからプログラム本体をダウンロードするところから始めまてインストール及び調整を行っていきましょう。ディレクトリは何処を使用しても問題有りません。dorakenは「/root」フォルダ直下にダウンロードしました。

fetch http://www.teamits.com/resources/maxlogins.txt

 

次にダウンロードしたプログラムを[/usr/local/bin]にコピーして、syslogからmaxlogins.plを読み出し、利用できるように調整します。

# cp maxlogins.txt /usr/local/bin/maxlogins.pl
# chown root:wheel /usr/local/bin/maxlogins.pl
# chmod 750 /usr/local/bin/maxlogins.pl
# vi /etc/syslog.conf
auth.info;authpriv.info /var/log/auth.log       # 元々記述されている
auth.info;authpriv.info |exec /usr/local/bin/maxlogins.pl  # 上記直下に追記する。

最後に[/etc/hosts.allow]にmaxloginsで書き出しされたIPをブロックする設定を記述します。ローカルホストからのログインは常に有効にしたいので下記のようにループバックアドレスの直下に起きましょう。

# vi /etc/hosts.allow
sshd : 127.0.0.1 : allow
sshd : /var/log/maxlogins : deny

最後にsyslogdの再起動を行ってmaxlogins.plがsyslogdから自動的に呼ばれる設定を有効にします。

# killall -HUP syslogd

以上で対策は完了しました。dorakenは最初に説明したとおり、日本国内からのSSHアクセス以外はすべて不許可の設定にしていますので

sshd : 127.0.0.1 : allow
sshd : 常に許可したい接続IPアドレス : allow
sshd : /var/log/maxlogins : deny
sshd : 日本国内のIPアドレス : allow
sshd : ALL : deny

になっています。つまりlocalhostと自分が使用しているプライベートIPアドレスは何があってもSSH接続を許可、maxloginsに記述されたIPはすべてアクセス禁止、日本国内からのアクセスは(基本的に)許可、それ以外は禁止、という設定です。

maxloginsは何日アクセスを禁止するか、何回パスワード認証に失敗したらアクセス禁止IPとするかなどを決めることが可能ですが、それらは後日追記したいと思います。

謹賀新年

コラム No Comments

 あけましておめでとうございます。去年から始めたこのブログサイトですが、ちょっとづつでも良いので今年も最低1ヶ月に1回は更新していきたいと考えております。また本年からはソフトウェア関連だけでなくPCやサーバに関連した、自分が感じたり考えたりしたことなども、このブログに記載したいと考えてます。 で、新年らしく今年の目標をここに書き込みして自分の退路?を断ちたいとめました。

本年の目標:Rubyでなにかソフトを一つ作る

dorakenの仕事は自己紹介に記載したとおりですが、最近は仕事で出張していることが多く、なかなか時間も取れません。けれども、がんばって一つでいいからソフトを作りたいなぁっと。最近Rubyが元はやされているのでめちゃめちゃ興味がありますし、いっちょがんばってみるかなぁっと思いまして。

 宣言しただけで年末になって「何も出来へんかった~~(泣)」にならないよう、がんばっていきます。

ZABBIX設定・メール送信内容をカスタマイズ

FreeBSD, zabbix No Comments

 zabbixで監視しているサーバでサービスがダウンしたりした場合、E-Mailでメッセージが送信できます。が、標準のメッセージは分かりづらいです。また細かく細かく設定できますし日本語でメールを送信する方法も雑誌で紹介されていますがdoraken的には、いつ、どのような時に、どんな場所でメールを受け取るか分かりませんので、どんな環境でもメールの内容が確認できるように英語でメッセージを受け取りたいと考えてました。

 下記設定はサービスがダウンしたときには「サービス名 server is down on [サーバ名]: Failure Report!」、回復したときには「Trouble retuen Report: サービス名 server is down on サーバ名」という件名でメールを送信します。

サービスがダウンした時のメール設定
send-down-message

サービスが回復した時のメール設定
send-up-message

注意点としてはNewConditionにてターゲットを設定したときに「追加」ボタンをおして設定を確定することでしょうか?あと、E-mailアドレスの設定などありますがそれらはまた今度。

« Previous Entries