topimage

blog@U-o-U.net

SMTP over SSL authenticated by おれおれ証明書 2005-08-02

基本方針
postfix & courier-imap を使用
外から:
SMTP over SSL(465)
IMAP over SSL(993)
中から:
SMTP(25)
IMAP(143)
POP3(110)

POP3 over SSL(992)イラネ

先ずは必要そうなモノをインストール

# aptitude install postfix-tls libsasl2-modules sasl2-bin courier-imap-ssl
(中略)
以下の新しいパッケージが自動的にインストールされます:
courier-authdaemon courier-base courier-imap courier-ssl fam
libasn1-6-heimdal libdb4.1 libfam0c102 libgssapi1-heimdal
libkrb-1-kerberos4kth libkrb5-17-heimdal libroken16-kerberos4kth
以下の新しいパッケージがインストールされます:
courier-authdaemon courier-base courier-imap courier-imap-ssl courier-ssl
fam libasn1-6-heimdal libdb4.1 libfam0c102 libgssapi1-heimdal
libkrb-1-kerberos4kth libkrb5-17-heimdal libroken16-kerberos4kth
libsasl2-modules postfix-tls sasl2-bin

途中で、webベースで管理するためにディレクトリを作成しますか?って聞いてくるのですが
よくわからないのでNoとしました。

インストールが終わりサクサクっと基本設定とエイリアスの設定を

alias_maps = hash:/etc/postfix:aliases
alias_database = hash:/etc/postfix/aliases
newaliases_path = /usr/bin/newaliases


/etc/postfixに
webmaster: root
形式で書いて

# newaliases

すると
/etc/postfix/aliases.db
ってファイルができてエイリアスが有効になります。

次にSMTP認証をできるように/etc/postfix/main.cfに追加します。

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_mynetworks,
permit_auth_destination,
permit_sasl_authenticated,
reject
smtpd_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous, noplaintext
# outlook用
# broken_sasl_auth_client = yes


パスワードを作ります。

# saslpasswd2 -c -u u-o-u.net usename
Password:***********
Again (for verification):***********
# chmod 640 /etc/sasldb


Postfixは、/etc/sasldb2を見に来る事ができないそうなので、

# ln /etc/sasldb2 /var/spool/postfix/etc/sasldb2
# chmod 640 /var/spool/postfix/etc/sasldb2

postfixをsaslグループに追加

# usermod -G sasl postfix


/etc/postfix/sasl/
にsmtpd.confファイルを作る。

pwcheck_method: sasldb


これで、SMTP-AUTHまではOKなのでここらで、ルーターの設定を変えて外部とつなげます。
で、不正中継のチェック

$ telnet relay-test.mail-abuse.org
(中略)
System appeared to reject relay attempts
Connection closed by foreign host.


OKです。ダメな場合は

System appeared to accept (ダメな数) relay attempts
Connection closed by foreign host.

と、でるそうです。

ここからはSSLへの対応です。

秘密鍵 server.keyを作ります。

# openssl genrsa -out server.key 1024

オレオレ証明書を作ります。

# openssl req -new -x509 -key server.key -out server.crt
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Okayama
Locality Name (eg, city) []:Okayama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:oreore_CA
rganizational Unit Name (eg, section) []:Admin
Common Name (eg, YOUR name) []:u-o-u.net
Email Address []:webmaster@u-o-u.net


/etc/postfix/main.cfをsslに対応させます。

### smtp over ssl ###
smtpd_tls_cert_file = /etc/postfix/key/server.crt
smtpd_tls_key_file = /etc/postfix/key/server.key
smtpd_tls_session_cache_database = sdbm:/etc/postfix/ssl/smtpd_scache
smtpd_tls_loglevel = 3
smtpd_use_tls = yes


/etc/postfix/master.cfも対応させます。

tlsmgr fifo - - n 300 1 tlsmgr
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

のコメントを外します。

これで、SMTP-AUTH over SSLになったはずです。。。

Courier-imap SSL対応

postfixで使った鍵と証明書で

# cat server.key server.crt > /etc/courier/imapd.pem


/etc/courier/imapd-sslを

IMAPDSSLSTART=YES
IMAPDSTARTTLS=YES
TLS_CERTFILE=/etc/courier/imapd.pem

とするそうなんですが、初めからなってました。

ここで気が付きました。
courier-pop
がインストールされてません。ママさん用に入れておきます。が、外部からはアクセスできません。

# aptitude install courier-pop

Apacheインストールその2 2005-07-16

mod-perlもインストールしたのですが、結局設定が難しいので…ボツになりました。
なんか思っていたものと違ったし…>mod-perl

前回、Apache&mod-php4インストールは完了。
まぁ設定を見てみようと…

# vi /etc/apache2/httpd.conf

すると…

# This is here for backwards compatability reasons and to support
# installing 3rd party modules directly via apxs2, rather than
# through the /etc/apache2/mods-{available,enabled} mechanism.
#
#LoadModule mod_placeholder /usr/lib/apache2/modules/mod_placeholder.so

へっ?何これ?
どうやら、apache2.confが本物らしい。

さらに
/etc/apache/以下に
sites-available
sites-enabled
mods-available
mods-enabled
ってフォルダがある。
availableにファイルの実体があり、enabledはシンボリックリンクです。
/etc/init.d/みたいな感じのようです。
で、availableにファイルを作って

# a2enmod ***

# a2dismod ***

で、使うモジュールのオンオフ

# a2ensite ***

# a2dissite ***

で、使うバーチャルホストの設定をオンオフできるようです。
便利なんだか独自性が強くて不便なのか…まぁ使ってみることにしました。

apache2.confをみてみると…

#<Directory /home/*/public_html>

ユーザ別の公開ディレクトリはコメントアウトされているのですが…
なぜか使えちゃいます。不思議だ…
と、思ったら、
/mods-available/usedir.confにちゃんと書かれていました。
『設定バラバラ事件』はホントに便利なのか?

apache2.confの変更点は
LanguagePriorityのjaを先頭に持ってくるのと
AddHandler Cgi-script .cgi .pl
くらいかな?

あとはVirtualHostの設定を適当に書いて取り合えずOK

次はMySQLを入れてみましょう。

# aptitude install php4-mysql mysql-server mysql-client
(中略)
以下の新しいパッケージがインストールされます:
 exim4 exim4-base exim4-config exim4-daemon-light
 libdbd-mysql-perl libdbi-perl libmysqlclient12
 libnet-daemon-perl libplrpc-perl mailx
 mysql-client mysql-common mysql-server php4-mysql


えっなんですか?exim4って、要らないんですけど…

Postfix入れるんで勘弁してくださいってことで、

# aptitude install php4-mysql mysql-server mysql-client postfix
(中略)
以下の新しいパッケージがインストールされます:
 libdbd-mysql-perl libdbi-perl libmysqlclient12
 libnet-daemon-perl libplrpc-perl mailx
 mysql-client mysql-common mysql-server php4-mysql
 postfix resolvconf

勘弁してくれました。
apacheを再起動してLAMP環境完成!

mysqlってメールサーバ必須なのかな?

# mysqladmin -u root password ****
# mysql -p -u root
mysql> use mysql;
mysql> delete from use where password="";


これでひとまずOK。次回は成り行きで入ってしまったpostfixの設定をしようと思います。

Apacheインストールその1 2005-07-09

Apacheのインストール。さくさくっと

# aptitude install apache2

apache2 apache2-common apache2-mpm-worker apache2-utils libapr0 libexpat1 openssl ssl-cert
これらがインストールされました。
ページもちゃんと表示されるのですが…
psでみてみると57個?もapacheが動いているように見える。が、pstreeでみると元は1個なのでこれでいいのかな?

どうやら、Apache2には
apache2-mpm-prefork
apache2-mpm-threadpool
apache2-mpm-worker
apache2-mpm-prechild
の4つがあるらしい。で、workerだとこうなるらしい。1.3系に近いのはpreforkらしい。

Noppi@http://www.noppi.jp/nlbbs/
Prefork っていうのは、あらかじめ Apache の待ち受けプロセスを複数あらかじめ生成(Prefork)しておいて、80番ポートにアクセスが来たら、空いてるプロセスにその処理を割り当てる方式です。
Worker っていうのは、Prefork + マルチスレッドみたいな形で、待ち受けプロセスをあらかじめ生成しておいて、アクセスが来たら一番スレッド数が飽和していないプロセスに処理を受け渡して、そのプロセスは新しいスレッドを生成してそのセッションの処理を行います。
両方ともやっていることは似ていますが、Prefork がプロセス数可変なのに対し、Worker はプロセス数固定でスレッド数が可変なのが特徴です。
一般的にプロセスを生成(fork)するより、スレッドを生成する方が処理が軽いので Worker の方がパフォーマンスが高いといわれています。
…が、Linux の fork の仕組みは特殊で、COW(Copy On Write) などの技術で LinuxThread のスレッドの実装と比べてもパフォーマンス的に遜色ないといわれています。
NPTL と比べれば違うのかもしれませんが…。
しかも、現在の Apache2 の Worker の実装はバグバグで、PHP を利用する時には Prefork MPM を使うことが前提とされています。
…っていうか、PHP は Apache2 での使用を推奨していませんが…。

と、教えていただいたので、preforkを入れてみよう。
ただ入れるのではつまらない?ので、aptくんの実力を試すときだ!

# aptitude install libapache2-mod-php4
(中略)
以下の新しいパッケージがインストールされます:
 apache2-mpm-prefork libzzip-0-12 php4-common
以下のパッケージが自動的に削除されます:
 apache2-mpm-worker

やっぱりAptくんは偉大です。

ユーザー削除・ntpdate・vi→vim 2005-07-02

ここで、viが日本語に対応していない事に気が付いた…

ファイル名で日本語は使えるのですが、viで日本語を表示させようとすると…
てすとん→\xa4\xc6\xa4\xb9\xa4\xc8\xa4\xf3
(実際には\はバックスラッシュ)になってしまいます。

/usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/nvi

このnviですが何か良くないらしい。
nvi-m17n か vim がよいらしいので…


# apt-get install vim


これで、
/usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim
になりviでも日本語表示が可能になりました。

いらないユーザーを消そう!

# cd /etc
# cat passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
Debian-exim:x:102:102::/var/spool/exim4:/bin/false (前回exim消しているので実は居ません)
おいら:x:1000:1000:おいらの名前,,,:/home/taku:/bin/bash
identd:x:100:65534::/var/run/identd:/bin/false
sshd:x:101:65534::/var/run/sshd:/bin/false
canna:x:104:104:Canna server,,,:/var/lib/canna:/bin/false


う~ん、なんかいっぱい居ますね。
この人たちが誰なのかは、Debianのマニュアルに載っています。

なぜかnobodyさんまでログインシェルを持っているので、みなさん/etc/falseにしておきましょう。


# sed 's/\/bin\/sh/\/bin\/false/g' passwd


syncさんだけ書き換わらないのでここだけviで…

これで良しなのかな?とも思ったんですけど…newsさんとかlpさんとか要らないので

# find / \( -user lp \) -exec ls -lad {} \;

とかして、所有しているファイルを検索。
/var/spool/lpd
/var/spool/lpd/lp
/var/spool/lpd/remote
とかでるので

# rm -rf /var/spool/lpd/

その後

# userdel lp

しちゃいましょう。

同様に
sync games lp news uucp proxy backup list irc
さんも要らなさそうなんで消しちゃいました。

cannaさんなんてやっぱりパッケージごとさようなら~
2chを見ていて、インストール時に躓いたaptitudeがコマンドラインからも使えることを知りました。
# aptitude purge canna としようとして間違えて
# aptitude remove --purge cannna
って打ったら、間違ってますよぉって使い方が出てきた。その最後に…
aptitudeはスーパー牛さんパワーなど持っていません
って、イースターエッグ関係かな?
なぜかファイルが消しきれないので

# rm -rf /var/lib/canna/


ここで所有者のないファイルも消しちゃいましょう。

# find / -nouser -nogroup

/var/log/news/がそうらしいので削除。

これだけではつまらないので…NTPくらいはインストールしておきます。


# aptitude install ntpdate


あとは/etc/default/ntpdateにNTPサーバを登録すれば良いのですが、NiftyにはなぜかNTPサーバがない
無難に
ntp1.jst.mfeed.ad.jp
を登録しておきます。
cronで自動的にやってほしいので


# cd /etc/cron.daily/
# ln -s /etc/init.d/ntpdate


これで完了。

ここであることに気が付いた。。。
日本語表示できなくなってる。
cannaさんを消した辺でrm -rfがあやしい…
とも思ったけど
export LANG=ja_JP.eucJP
で復活…いつの間にか英語環境になってただけでした。

Sargeメモ(不要デーモン停止&SSH設定) 2005-06-09

Noppi@www.noppi.jp/nlbbs > RPC(リモートプロシージャコール)っていうのは、文字通りネットワーク越しの別のコンピュータにあるプログラムを実行する為のプロトコルです。とりあえず特定のポート番号がRPC用に予約されて、そこを通して別のサービスが本当に使うポート番号をお知らせします。この「サービスごとに使うポート番号をお知らせするサーバ」が portmap です。Windows では DCOM という機能で利用されていたりしますが、Unix では NFS が RPC を使う代表的なサービスです。ってことで、NFS を使う必要がなければ RPC はほとんど必要ないと言えます。あと、個人的には atd も使わない気がしる…。crond だけあれば大抵は用が足ります。rpc.statd というのは NFS サーバの状態をチェックする為のサーバで、これも NFS を使わなければ不要ですね。

reiserfs の利点は i-node が無限に使えることですね。あと、小さいファイルのパフォーマンスが高いのれす。

と、教えていただきました。感謝。

で、不要なサービスを止めていきます。
cannaを例にとってみると

# /etc/init.d/canna stop

で、再起動しても立ち上がらないように

# rm /etc/rc2.d/S20canna

とかして消しちゃいます。

update-rc.dってコマンドでもできるはずです。

# update-rc.d canna remove
update-rc.d: /etc/init.d/canna exists during rc.d purge (use -f to force)

って言われちゃいます。
「/etc/init.d/cannaがあるから、-f オプションで強制的に殺れっ」ってコトみたいです。
/etc/init.d/cannaを消してからやっても良いけど、必要になりそうなのは/etc/init.d/の方は残しておいた方が良いかもしれません


# update-rc.d -f canna remove
Removing any system startup links for /etc/init.d/canna ...
/etc/rc0.d/K20canna
/etc/rc1.d/K20canna
/etc/rc2.d/S20canna
/etc/rc3.d/S20canna
/etc/rc4.d/S20canna
/etc/rc5.d/S20canna
/etc/rc6.d/K20canna


こんな風に消えてくれます。

戻したいときには

# update-rc.d canna start 20 2 3 4 5 . stop 20 0 1 6 .

でOKです。runlevelの最後の「.」を忘れずに…

二度と使うこともないようなモノはパッケージも消しちゃいます。

# dpkg -l|grep exim
ii exim4 4.50-8 metapackage to ease exim MTA (v4) installati
ii exim4-base 4.50-8 support files for all exim MTA (v4) packages
ii exim4-config 4.50-8 configuration for the exim MTA (v4)
ii exim4-daemon-l 4.50-8 lightweight exim MTA (v4) daemon
# apt-get --purge remove exim4 exim4-base exim4-config exim4-daemon-l
Reading Package Lists... Done
Building Dependency Tree... Done
E: Couldn't find package exim4-daemon-l


exim4-daemon-l → exim4-daemon-light でした(T_T)
dpkg -l で表示しきれない名前はどうすれば表示できるんだろう??

ウェブサーバとして動き出したらSSHでログインするので、直接ログインすることはほとんどないと思われる。ってか、キーボードも液晶も繋がってないので、物理的に難しいし…1つあればいいや。
/etc/inittab

1:2345:respawn:/sbin/getty 38400 tty1
# 2:2345:respawn:/sbin/getty 38400 tty2
# 3:2345:respawn:/sbin/getty 38400 tty3
# 4:2345:respawn:/sbin/getty 38400 tty4
# 5:2345:respawn:/sbin/getty 38400 tty5
# 6:2345:respawn:/sbin/getty 38400 tty6


再起動してps aux

root [ksoftirqd_CPU0]
root [kswapd]
root [bdflush]
root [kupdated]
root [kreiserfsd]
root [khubd]
root /sbin/syslogd
root /sbin/klogd
root /usr/sbin/inetd
root /sbin/cardmgr
root /usr/sbin/cron
root /usr/sbin/sshd
root bash

非常にすっきりしました。メモリも節約できました。

SSHの設定ですが…
/etc/ssh/sshd_config

port 22
protocol 2
PermitRootLogin no
AuthorizedKeysFile %h/.ssh/authorized_keys
PermitEmptyPasswords no
PasswordAuthentication no

主要なトコはこれでOKなはず、

Windows機で
PuTTY Key Generator(puttygen.exe)起動
Parameters→SSH2_RSA 2048
Generateボタン

マウスを適当に動かす

Key comment:適当に
Key Passphase:パスワード
Confirm passphase:パスワード再入力

Save private Key→秘密キー保存
Save public Key→公開キー保存


$ mkdir .ssh
$ chomod 700 .ssh

上で保存した公開キーを $HOME/.ssh/に入れる
このままではOpenSSHでは使えないらしいので

$ ssh-keygen -X -f PUBLICKEY > authorized_keys

で、変換&ファイル名も変更
PUBLICKEYは要らないので捨てる

$ rm ./PUBLICKEY
$ chmod 600 authorized_keys


これで準備は完了。Windows機からPuttyでログイン!
鍵認証で入れる!
が、パスワード認証でも入れる????

再度sshd_configを見直してみると…
最後の方に
UsePAM yes
なんじゃこりゃ?Woodyではなかった項目です。
UsePAM no
これで無事に鍵認証が出来上がりました。