2009年03月31日
postfix の relayhostの先をSMTP Authが必要なメールサーバにする(OP25B対策)
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ][ カテゴリ : ★postfix ]
要するに LAN 内に postfix が動いてるサーバがあって、
たまに LAN外にメールしたいことがあって、
だけど、ISP は OP25B してるし、ISP の SMTPサーバは SMTP AUTH を要求する、
そんな状況の場合。
smtp.example.jp のポート587 番に
SMTP AUTH (user: accountname@dokka.domain, pass: password_da)の
PLAIN(平文)で認証して、relay してもらう方法。
参考にしたサイト:
http://www.vividfire.net/knowledges/postfix/relayhost-smtpauth/
ハマったところ:
relayhost の [] をつけわすれてた。最初のファイル(smtprelaypass)と同じ文字列にしなければ。
postfix が 参照するファイル名は *.db なんだが、main.cfg には .db は書かない。
(hash って書いてあると、.db が自動的に追加される様子)
2007年04月02日
logrotate で日付つきファイル名でローテートする
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ][ カテゴリ : ★Linux ログ管理 ]
なんか Vine 4.0 になってからだと思うけど、世の postrotate で `date` とかやってって方法がうまくいかないので調べたら・・・・
postrotate スクリプト書くまでもなく、logrotate.d/* の定義で
dateext
ってオプション使うだけで良いことが発覚(汗
簡単でよろしいですね。
にしても、なんで従来方法(ネットでぐぐると山ほど出てくる)じゃダメなんかなぁ。
$1 の仕様が変わったんだろうか。
2007年03月12日
listen してるのは誰? in Linux
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]netstat -tap とか。
p はアプリ名が出るのである。
稼働中のインターネット接続 (サーバと確立)
Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態 PID/Program name
tcp 0 0 *:mysql *:* LISTEN 24510/mysqld-max
tcp 0 0 *:submission *:* LISTEN 24594/master
tcp 0 0 *:pop3 *:* LISTEN 2062/inetd
とかいうノリである。(流石に全部見せるわけにはいかないw)
で、今回びびったのは、1023番でよくわからんのが開いている。
調べたら dracd (for POP before SMTP)だった。
てか、前も同じことでびびったきがしますwww
2006年12月11日
Vine4.0時代の SMTP AUTH と Submission port
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ][ カテゴリ : ★postfix ]
Vine4.0 の postfix-2.2.10-0vl6 は -lsasl2 されているので、普通に(コンパイルとかしないで)SMTP認証の設定ができる。
うちは以前は sasl2 ではなく sasl だったので、設定はまるごと必要だが。
うちで入ってる関連rpm パッケージ
postfix-2.2.10-0vl6
cyrus-sasl-md5-2.1.18-0vl6
cyrus-sasl-plain-2.1.18-0vl6
cyrus-sasl-devel-2.1.18-0vl6
cyrus-sasl-2.1.18-0vl6
(devel は本件ではいらんはずだが)
で、SMTPユーザーの登録のしかた。例によってアカウントとしては存在しない smtpsender とかで登録してみる。
まぁ、LDAP がきっちり動けばソレ使いたいものなんだが。
# /usr/sbin/saslpasswd2 -c -u `/usr/sbin/postconf -h myhostname` smtpsender
とかやったら、/etc/sasldb2 が出来るので、postfix から読めるようにしてやる。
# chgrp postfix /etc/sasldb2
# chmod 640 /etc/sasldb2
あとは、自分は既にやってあるが、/etc/postfix/main.cf で
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
とかなんとかやってpostfix側で認証を利用するようにする。
認証通った場合にはok扱いする、ってのがあちこちに設定が必要で、うちでは smtpd_helo_restrictions,smtpd_recipient_restrictions,smtpd_sender_restrictions で permit_sasl_authenticated を追加しておいた。
★Submission port (587)
ついでに Submission port の設定もしておく。
いや、してあったんだけどんだが、バージョンアップした場合 /etc/postfix/master.cf.rpmsave とかなっ てしまってるので master.cf に再度定義する。
submission inet n - n - - smtpd
-o smtpd_sender_restrictions=permit_sasl_authenticated,reject
の2行追加。
★SMTP認証/Submission port の動作確認
$ telnet localhost 25
とかやって、繋がったら
EHLO localhost(改行)
とかやると応答がくる。その中で
>250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
みたいな応答があればよし。
どんな応答がこようが
QUIT(改行)
すれば接続は終わる。
Submission port を生かす場合は、telnet 587 でもやってみる。
ためしに localhost からやると MAIL FROM: と RCPT TO: 入れるだけで Sender Address が駄目だと言われる。
port 25 は localhost からは受け付けるわけだが、Submission port は SMTP AUTH 通らないと駄目(ってそうなるように master.cf に書いたわけだが)
そいつを利用して localhost の Wanderlust から 587番経由でメールを送ってテストしてみた。
パスワード間違ってみたりもして、適切な動作が確認できましたとさ。
Vine4.0移行苦戦中
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]MovableType/xoops と MySQL については書いてるとおりで、その他
・SMTP認証がとおらない
これは以前から sprm いじってとかやってたんで当然か。
・openldap が起動すらしない
slapd.conf.rpmsave とかなってるのでw
でも、軽く元のオプションコピペしたら怒られたorz
・openldap を利用した courier-authlib を利用する courier-imap が死亡
なんか、ldap オプション殺したら userdb か pam かしらんが古い設定が有効になって動いてるよ?w
mobileimap も無事動作
・X 起動したら固まった
再度試すべきか、Xの利用をやめるべきか、それが問題だw
これくらいか?(汗
すんなり動いたのは
・postfix の他のメールサーバから受け付ける部分
・inetd + qpopper
・jdk + airproxy
・sshd
・kernel2.6 だからか
とかかな~
まだいじってない部分ありそうだから、わからんが。
あ、そういえば apt-get dist-upgrade したらLANカードの認識おかしかった。
CD から upgrade install にしたら(4.0 から 4.0へのアップグレードのくせに)
kernel 入れ替えて、Anthy とかたまごとか数個追加されて、直った(汗
MovableType と MySQL 4.1 (or later)
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]文字コードうんたらかんたらで死にましたとさ。
で、Vine4.0のrpm で入った MySQL と MT3.2 の折り合いのつけさせかた。
(なんで設定ファイルの場所とか違ったらごめんなw)
1:過去の間違い
過去の mysqldump の結果が --default-character-set 指定してないのでおかしい。
どうやら utf8 を ujis(EUC) とみなして utf8 に変換かけるとか変なことされたらしい。
よって使えなかったんだが、投入してしまった(汗
ちなみに、もともと MySQL の中身がどうなってるかわからん人があわてて後述のオプション指定すると変な変換かけてデータ壊す恐れがあると思うんだ。
そういうことする前に、 mysqldump で --default-character-set=binary でダンプとっておくといいと思うんだ。
latin1 や utf8 な入れ物に EUC を無理矢理つっこんだデータを安全に取りだしておくとかするには binary から試してみるといいらしいんだ。
いや、やってないんだけど。その前に壊したし(爆)
おかげで MovableType の html(utf8) から下記情報をsql形式でひっこぬくスクリプト完成(爆)
entry_id,entry_title,entry_text,entry_text_more,comment_id,comment_author.
mt_blog,mt_category,mt_template あたりは sqldump の結果と html を見て手作業修正(爆)
まぁ trackback 関係以外は直ったからいいや(よくない)
2.ただしい設定(MT3.2)
2-1.MovableTypeの文字コード:utf8 ってことにする
→mt-config.cgi で、PublishCharset を "utf8" とかやる。
いや、今生きてる設定そのままにしておけよ?w
2-2. MovableType が MySQL に utf8 でデータを渡す際「あいすぴーくゆーてーえふはち!」と宣言するようにする
→mt-config.cgi で SQLSetNames 1 を指定する(1を指定すると2-1で指定したutf8だと主張するらし)
ちなみに SQLSetName 1 と書いて爆死したアホがいますよ。
どうなるかわからない例
PublishCharset Shift_jis
SQLSetNames ujis
みたいに別のを指定するとどうなるんでしょう?たぶん死ねます(SetNames は名前指定するだけぽい)
MySQL の文字コード名がわからん人は下記2-5あたりを見るといいと思うんだ。
2-3. MySQL が内部データを utf8 で持つようにする。
my.cnf で、[mysqld] default-character-set=utf8
2-4.MySQLの mysqldump でバックアップ取るときもutf8 で吐き出すようにする。
/etc/my.cnf (Vine4.0のrpmの場合)の [mysqldump]で以下同文。やってないけど、たぶんそんな。
2-5.MySQLの mysql が吐き出す文字コードは、、、
my.cnf [mysql]に書けるらしいが、正直毎回明示してやるのがいいと思うんだ。
mysql --default-character-set=ujis
ujis ってのは EUC のことなんだ。
mysql --default-character-set=EUC
とかやると、"EUCなんて言葉は某ファイルで定義されてません" とかでるので、当該某ファイルを見るとたしかに EUC じゃなく ujis って書いてあるんだ。utf-8もおこられるんだ。
2-6.じゃー [client]って何よ?
なんだろ(爆)
2-7.つーか、MySQL の文字コード設定おおすぎね?
$ echo "show variables like 'character%';" | mysql -u root -p
とかやってパスワード入れるとずらずらでるねw
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
どれが何だかしらべておかないといけない気がするんだ。
面倒だからなるたけutf8に統一して、MT については正しく動作するようにしたけど、、、、、xoops が EUC 使ってるからまた頑張る必要があるんだ。
投稿者 JK : 10:36 | コメント (2) | トラックバック
2006年12月08日
Vine4.0奮闘・mysqld
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]Vine4.0 にしようとしたら、こんなにエラーが・・・
# tail /var/lib/mysql/*.err
061208 9:22:52 [ERROR] bdb: unable to initialize mutex: Function not implemented
061208 9:22:52 [ERROR] bdb: process-private: unable to initialize environment lock: Function not implemented
061208 9:22:52 [Warning] './mysql/host' had no or invalid character set, and default character set is multi-byte, so character c
olumn sizes may have changed
061208 9:22:52 [Warning] './mysql/user' had no or invalid character set, and default character set is multi-byte, so character c
olumn sizes may have changed
061208 9:22:52 [Warning] './mysql/db' had no or invalid character set, and default character set is multi-byte, so character col
umn sizes may have changed
061208 9:22:52 [ERROR] Fatal error: mysql.user table is damaged or in unsupported 3.20 format.
061208 09:22:52 mysqld ended
んで my.cnf の[mysqld]にskip-bdb を加えた後、[ERROR] bdb: は消えたが、mysql.user がどったら、が消えない。
思い起こせば rpm (apt)したとき
NOTE: If you are upgrading from a MySQL <= 3.22.10 you should run
the /usr/bin/mysql_fix_privilege_tables. Otherwise you will not be
able to use the new GRANT command!
って出てたので(もとから4.xx だったと思うのだがなぁ)
# mysqld_safe --user=mysql --skip-grant-tables &
# /usr/bin/mysql_fix_privilege_tables
# pkill mysqld
さてどうなった?・・・・・起動したぞ!・・・・・って!
061208 11:09:00 [Warning] Found invalid password for user: 'root@localhost'; Ignoring user
root アカウントが壊れた~ww (@hostname も一緒にw)
またまた修正。--skip-grant-tables で突入して -u root で mysql.user 書き換えてしまうと。
# service mysql stop
# mysqld_safe --user=mysql --skip-grant-tables &
# mysql -u root
mysql>select user, password, host from mysql.user;
mysql>UPDATE mysql.user SET password=PASSWORD('password') WHERE user='root';
mysql>quit
# pkill mysqld
# service mysql start
# mysql -u root -p
mysql> (他の壊れたユーザーの方々の mysql.user レコード更新)
ちなみにこれがMT投稿テスト(BerkeleyDB だけどさw)
投稿者 JK : 11:36 | コメント (2) | トラックバック
2006年10月23日
Linux でライブラリがわからんとき
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]#include <math.h> で sqrt() とか使ったら、
undefined reference言われて困ったとき。
$ nm -o /lib/lib*.{a,so.*} /usr/lib/lib*.{a,so.*} | grep -w sqrt | grep T
とかやるといいらしい。
んだが、どうもメッセージが日本語だとうまくない感じ。もうちょい要調査。
投稿者 JK : 14:19 | コメント (1) | トラックバック
2006年02月08日
Vine で named(bind)
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]http://www.zoneedit.com/ のサービスを使っていたら、障害で通らなくなったりしてたので、自前のプライマリ、zoneedit.com のセカンダリという作りに変更してみた。
参考
http://cyberam.dip.jp/linux_server/dns/bind_main.html
1. Vine の rpm で bind をインストール
# apt-get install bind
2./etc/named.conf を作る
- ログは /var/log/named/named.log。ただし /var/log/message にも残る
- zone ファイルのディレクトリは /var/named/
options {
directory "/var/named"; // ZONE FILE の置き場所
forwarders { // 自前で名前解決できないときに問い合わせる外部DNSサーバ
XX.XXX.XXX.XX; // 利用している ISP のを使っている。
YY.YYY.YYY.YY;
};
allow-transfer {AAA.AAA.AAA.AAA; BBB.BBB.BBB.BBB ;}; // zoneedit.com の slave server へのZONE転送許可
};
logging { // ログの設定。よくわからんが、こんなで。
channel default-log {
file "/var/log/named/named.log" versions 5 size 1m;
severity info;
print-time yes;
print-category yes;
};
category default {
default-log;
};
};
zone "localhost" IN { // localhost 正引きファイルの指定
type master; // secondary DNS なら slave (以下同様)
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN { // localhost 逆引きファイルの指定
type master;
file "0.0.127.in-addr.arpa";
};
zone "pizzica.to" IN { // 独自ドメイン正引きファイルの指定
type master;
file "pizzica.to";
};
192.168.*.* とかをLAN内で扱って、DNSサーバに扱わせる場合は、そのあたりの内部情報は外部から引けないように設定する必要あり。そゆときは、たぶん1つの host を LAN では local ip address で、外部からは global ip address で引きたい場合になるだろうから、 view と match-client 使って分ける。
うちではやってないけど。
あと、zone "." について、キャッシュを置くのが一般的らしいので、そのうちやろう。
このあたり、全部参考URLに書いてあった気がする。
3.
/var/log/named ディレクトリを owner named:named で作る。
/etc/logrotate.d/named を直す(/var/log/named/named.log を指すように) 。
4./var/named/の中にzoneファイルを作る
- localhost 正引きファイル
- localhost 逆引きファイル
- 独自ドメイン正引きファイル
独自ドメインを 固定 IP Address でやっているが、
逆引きは ISP の DNS に登録されているので、独自ドメイン逆引きはやらない。
以下設定そのまんま。dig れば解ることなんだけど、一応一部伏せつつw
file:localhost.zone
$TTL 1D
@ IN SOA localhost. root.localhost. (
2005021401
3H
15M
1W
1D )
IN NS localhost.
IN A 127.0.0.1
file:0.0.127.in-addr.arpa
$TTL 1D
@ IN SOA localhost. root.localhost. (
2005021401
3H
15M
1W
1D )
IN NS localhost.
1 IN PTR localhost.
file:pizzica.to の抜粋
$TTL 3600
@ IN SOA jk4.pizzica.to. hogeroot.pizzica.to. (
2006020801 ;serial
3H ;Refresh 3H
15M ;Retry 15M
1W ;Expire 1W
1D ;Minimum 1D
)
IN NS XXxXXxXXxXXX.xxxx.xxxx.xxxx.ne.jp.
IN NS nsXX.zoneedit.com.
IN NS nsXX.zoneedit.com.
IN MX 10 eighty.pizzica.to.
IN MX 20 jk.pizzica.to.
@ IN A 59.87.28.134
jk IN A 59.87.28.130
eighty IN A 59.87.28.134
www IN A 59.87.28.134
om IN CNAME www
・$TTLは、他のサーバがキャッシュする時間なので、設定変更中は短く最終的には長く。全てのファイルで指定。・SOA/NS は全てのファイルで指定。
・SOA 行頭の @ は、 named.conf で定めたドメイン名(pizzica.to.)になる。他でも同様。
・IN は internet のことだそうで、常にIN。NS でも MX でも A でも CNAME でも。
・hostname 等の最後は . をつける。つけないと、ドメイン名が追加される。
om = om.pizzica.to. om.pizzica.to. = om.pizzica.to. om.pizzica.to = om.pizzica.to.pizzica.to と解釈される。
・SOA は hostname serveradmin で、server admin はメアドだが、@ ではなく.をつけ、最後の.も忘れずに。
・SOA のカッコ内は、pizzica.to ファイルのコメントのとおりだが、Serial ってのは、ファイルを変更する都度数字を増やす。増やし忘れていると、セカンダリが情報を更新されてないとみなしてしまう。日付+枝版にするのが解りやすくていいらしい。Serial 以外はよくわからん(爆)
・NS はネームサーバ。セカンダリを指定しておかないと、情報が転送されない。自分自身も指定しておく。
・NS 登録は localhostの正/逆引きでは localhost だけでいい。
・NS の zoneedit.com の奴はもちろん、zoneedit.com が指定するものを。
・MX はメールサーバ。優先順位を示す番号をつける他はNSと同様。IPアドレスではなく hostname で書くものらしい。
・A は正引き用の名前とIP アドレスの対応づけを定義する。 「名前 IN A IPアドレス」
・CNAME は別名を定義する。
・PTR は逆引きの定義なので、逆引きファイルにしか書かれていない。
たぶん、行頭の1 は 127.0.0."1" の 1なんだろうな。(引けるからいいや)
5.設定確認 /sbin/chkconfig で自動起動の設定。 /sbin/service で起動。
設定ファイルのチェックは
#/usr/sbin/named-checkconf /etc/named.conf
#/usr/sbin/named-checkzone pizzica.to /var/named/pizzica.to
とかやることで出来る。エラーでないのを確認したら、chkconfig/service で起動。
# /sbin/chkconfig named on
# /sbin/service named start
/var/log/messages, /var/log/named/named.log を確認する。
6.zoneedit.com で slave として登録をしてやる。
無料でプライマリセカンダリ両方でも、セカンダリ2つでもできるというサービスなり。
英語読めない人にはつらいのかもしれないけど、日本語でも似たサービスあるんじゃないかと。
7. dig で動作確認
dig が入ってないなら、 apt-get install bind-utils で。nslookup もこれで入る。
$ dig @localhost ANY pizzica.to
$ dig @other-dns-server.zoneedit.com SOA pizzica.to
$ dig @other-dns-server.dokkanodomain.com SOA pizzica.to
$ dig om.pizzica.to
$ dig MX pizzica.to
$ dig @localhost 1.0.0.127.in-addr.arpa
とかやって引けるかどうか。@でDNSサーバを指定できるので、zoneedit.com のセカンダリや、関係ない外部DNSサーバなんかを指定して情報の流通状況を把握し、行き渡ったら終了。
DNSサーバの指定がない場合、/etc/resolv.conf の中のサーバ使ってくれる。
ちなみに、最後のは逆引きの確認。arpa とかよくわかんないってんなら、
$ nslookup 127.0.0.1 -server localhost
とかやってもいい。
うまくいかないなら、ps aux で named 走っているかってのと、ログの内容見直すのと。
まぁ、当然 slave が情報もっていくまで時間はかかるが、ZONE転送があると履歴がログに残るので、それ見てから。
8./etc/resolv.conf は好きに書き換える。
自分は敢えて ISP のを指定して、ヨソで正しく引けているか確認している。
投稿者 JK : 15:41
2006年02月07日
postfix で queue に溜まりっぱなしのメールを調べたり消したり
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ][ カテゴリ : ★postfix ]
まぁ、明らかに存在しないアドレスへの再送信試行がやたらログに残っちゃってるときとかに。
# postqueue -p
で、ID のリストを見る。
9DE9182F10 とかいう ID はここでわかる。
(ログなり spool のファイルなり漁ってもわかるけど)
# postqueue -f
で、全部の溜まってるメールの再配送を試みる。
もう、配送しなくていいやってメールは
# postsuper -d 9DE9182F10
とかやって消す。
以上。
2006年02月01日
postfix で virtual domain
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ][ カテゴリ : ★postfix ]
main.cf (Vine なら /etc/postfix/main.cf) で
virtual_alias_domains = om.pizzica.to
virtual_alias_maps = hash:/etc/postfix/virtual
とか書いて、 /etc/postfix/virtual で
address@virtualdomain address@realdomain
みたいなのをずらずら書けばいい。
virtual_alias_domains に書いたドメインは、mydestination に書かなくても平気。
簡単だった。
2006年01月11日
secondary な exim のメモ
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]前にネタにしたとおり、うちの secondary MTA は、 cygwin の exim なんだが、設定ファイル関連で、自分用メモ追加。
1.secondary の hostname はどうするか。
自宅サーバにつき、独自ドメインの名前はあるものの、逆引きすると違う名前が出てくる。
で、SMTP サーバによっては、逆引き正しくできないとハジいたりするらしいんだが、primary に投げるだけなので、気にしない。
よって、独自ドメインのホスト名にすると。
2. 自 host 宛のメールはどーするか
ちなみに、CYGWIN crond がメール出すときは、差出人と宛先が (root|WindowsUserName)@hostname.defined.in.exim.conf みたいになるので、そのメールが適切に届くようにせにゃならん。
まぁ、DNS 引けばわかることなのであるが、a4.pizzica.to みたいなのが primary で
a.pizzica.to みたいなのが secondary。
じゃー、 hogehoge@a.pizzica.to 宛にくるメールはどうするかと。
まぁ、宛先 a.pizzica.to の MX として、a4.pizzica.to サーバを指定しておけばほぼ平和。
もちろん、primary で、 @a.pizzica.to 宛を(自分は a4 であるにも関わらず)受け付けるようにする必用あり。
(postfix だと mydestination に入れる)
なんだけど、 secondary の exim.conf で
local_domains = @
みたいに定義してあると、それヘンじゃね?ってことで、
local_domains =
にしてみた。
@ は、「localhost の名前」ってことらしいので。
つってもまぁ、実は、 router のほうで *.pizzica.to は全部 primary に投げることにしてあるので、@ のままにしておいても、メール届くわけだが。むしろ、a4 を逆引きすると、違うドメイン名が出てくるのであるが、そこ宛メールをうけつけない設定になる。
3.callout verify すらしたくない、無視するアドレスリスト
uucp@ とか、そんなアドレスは存在しないのに、primary と secondary 両方をトライするアホがいる。
secondary は毎回 primary にそういうアドレスがあるかどうか確認するので(キャッシュ設定すれば別かな?)
primary と secondary の両方のログに履歴が残ってうっとうしい。
そこで /etc/denyaddress.txt とかに、1行ごとに uucp だの accounting だの入れておく。
で、 acl_check_rcpt の中で
deny local_parts = /etc/denyaddress.txt
message = invalid recipient
log_message = 5.invalid recipient defined in /etc/denyaddress.txt
とかってしておくと、callout せずにはじいてくれる。
message は、SMTP client に対する返答で、log_message はログに記録するメッセージ。
SPAM filter とかは仕込んでないので、手動で txt 編集してるが、うちの場合それで足りるw
なお、5. ていうのは、log を grep とかするときにやりやすいように個人的につけている。
いまのところ、そんなで。
2005年12月20日
セカンダリメールサーバを cygwin exim で
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]といいながら、プライマリが Vine の postfix である場合のメモ。
Vine 側は普通に動けばいい、、とみせかけて、謹製 /etc/postfix/main.cf の中で、
unknown_local_recipient_reject_code = 450
になってるのは、550 にすること。
これは、セカンダリがうけつけた「存在しないユーザ宛メール」に対して、「一時的エラー」として返すのではなく「致命的エラー」として返すようにという設定。
一時的エラーとしてしまうと、セカンダリのほうで「あとでリトライしよー」ということになってしまい、結果セカンダリの一時フォルダに SPAM とかがチクセキしてしまうのでした。(気付くのに相当かかったよコレ)
うちで使ってるのは SMTP AUTH 対応化したヤツなので、過去の記事でも見てください。
~
で、Secondary のほうは cygwin の setup.exe で入れて、exim-config やると、
Windows サービスとして登録されるので、あとはサービス起動するようにすればいい。
んで /etc/exim.conf の設定のみメモ。
acl_check_rcpt で、プライマリに存在しないユーザー宛のメールをはじくため、
deny
domains = +relay_to_domains
message = unknown user
log_message = 3 unknown user in callout check
!verify = recipient/callout=20s,defer_ok,no_cache
とかいうのを
accept domains = +relay_to_domains
endpass
verify = recipient
の前に入れる。これは、配送先サーバに問い合わせして受取人チェックをするが、
問い合わせできない場合は受け容れる。そしてキャッシュをしない、というもの。
(postfix はこれに550 って返してくれないといけない)
あと、配送は begin routers の後にでも
sendback_to_primary:
driver = manualroute
transport = remote_smtp
domains = +relay_to_domains
route_list = "*domainame primary.servername byname"
host_find_failed = defer
no_more
とか。
で、当然 relay_to_domains とかはしっかり設定して、リレー禁止とかになるようにと。
終わってみれば簡単なんだけど、苦労した。
2005年12月17日
Win2000 でも cygwin ssh のログ監視してIPアドレス指定ブロック
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ][重要加筆]
netsh で必用な Remote Registry Service ですが、設定に必用なだけで設定が終わったらサービスを止めても良いようです。
リモートからレジストリいじるサービスをそのままにしておくのが気になる人は、必用なときに
net start "Remote Registry Service" で起動し、
設定スクリプトを走らせたのち
net stop "Remote Registry Service" でサービス終了しておくのがナイスかと。
Linux でやったことを、Windows でもやる。
まず、cygwin sshd は、イベントログのアプリケーションログに Failed password とか吐き出すので,そのログを見張る必要性から、dumpel を入れる。これは Eventlog の内容を拾い出せる MS 謹製 console application 。ダウンロードしたヤツはインストーラなので、適当に入れる。
で、krfilter は入っていることとする。ここ参照。一緒に perl は入るし netsh でのフィルタリングも可能になるように。
あとは、こんな具合。
eventlog に残っているヤツを全部はじくという流れなので、再起動後にコレやれば、過去分含めて設定される。
そして定期実行が必要。繰り返し実行しても重複登録にはならないよう、netsh にフィルタ登録済みかどうか確認してから追加しているので、数分単位でやってもいいんじゃないかと。
krfilter はそれまでのフィルタ設定を解除してしまうので、 krfilter の設定スクリプトの最後でこれを呼ぶのもよかろう。
投稿者 JK : 01:12
2005年12月13日
swatch でログを監視し煩い host をハジく/VineLinux にて(その2~4)
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]結局まとめて書いてしまう。
その2:attack_block.pl
swatch から呼ぶ奴。 $ARGV[0]に IP Address を入れて swatch から呼ぶ仕様。
その3:attack_block_again.pl
その1の iptables 設定スクリプトから呼ぶ奴。 attack_block.pl が保存したファイルを読んで、iptables 再設定。
スクリプトの中のパスとかメアドは適当に自分用に書き換えるべし。
その4:については追記にて。
Vine Linux のパッケージではナイので、tarball で落としてきて、
tar zxvf とかで展開して、
$ perl Makefile.PL
$ make
# make install
とかやればとりあえず入る。あ、必要な perl module もあるので、まぁ
http://www.aconus.com/~oyaji/security/swatch.htm
とか参考にしてくれ(爆)
そして設定。
今回は sshd へのアクセスを /var/log/secure で監視するようにしている。
Dec 13 10:12:18 hostname sshd[23718]: Failed password for invalid user distributions from XX.XXX.XXX.X port 40491 ssh2
とかいうのに反応して、 attac_block.pl を実行したい。で、第一パラメータに IP アドレスを渡したい。
/root/.swatchrcあたりに
watchfor /Failed password for.*from (\d+.\d+.\d+.\d+) /
exec "/path/attack_block.pl $1"
と書いてやる。ここで /var/log/secure というのは出てこない。
正規表現は perl のと一緒( swatch が perl で書かれているモノだし)
で、これで swatch を起動すればいいのかというと、そうではない。
logrotate でログをローテーションしてる場合、ローテート後正しく動かないらしいので、
そこで再起動してやるよう、 /etc/logrotate.d/syslog も設定してやる。
うちの場合
/var/log/messages /var/log/secure /var/log/maillog /var/log/sudo.log /var/log/iptables.log {
sharedscripts
postrotate
/etc/rc.d/init.d/swatch restart > /dev/null || true
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
EXT=`date +%Y%m%d`
for f in $1;
do mv $f.1 $f.$EXT;
done
endscript
}
とかってしている。postrotate の後に、swatch の再起動があるのがミソ。
(他はウチの私的設定)
さて、 /etc/rc.d/init.d/swatch なんて気の利いたのは自分で入れてやる必要がある。
http://fstyle.ddo.jp/archives/2005/08/vinelinux-swatc.html
の service に登録、ってヤツをやっておく。
swatchrc のパスに注意。今回は1つだけ設定だが、監視したいログファイルの個数、swatch 起動行が必要。/var/log/secure を見張る設定として、/etc/swatchrc を使う場合は
/usr/bin/swatch -c /etc/swatchrc -t /var/log/secure &
のような設定をする。
あとは、
・chkconfig で再起動時 に 起動されるよう設定
・/sbin/service swatch start で開始
これで、
・krfilter 有効
・swatch が常時 /var/log/secure を監視し、
・secure に Failed password とかいう行が出てきたら、IPアドレスをパラメータに attack_block.pl を実行
・attack_block は IP アドレスごとの Failed password の回数をファイルに保存し、10回目のときに iptables で check_attack ってチェインに禁止ルールを追加し、自分に「追加したよ」ってメールする。
・再起動時とかで、これらを継続的に禁止したい場合は attack_block_again.pl を呼べばよし
という状態。
別の Windows マシンでも同様の設定をしたいところ。
IPアドレスが近いからか、いっつも似た時刻にアタックがくるので、(同時だったり Linux のが先だったり)ホントどうにかしたい。 Vine 側で iptables で DROP するようになったとたん、Windows 側も終わる相手もいれば、対策できてない Windows 側にえんえんログを羅列してくれるところもある。
swatch みたいな event log 監視ツールがあれば、あとは、iptables の変わりに netsh つかえばいいわけだが・・・
2005年12月12日
swatch でログを監視し煩い host をハジく/VineLinux にて(その1)
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]krfilter を導入しても、APNIC なホストから煩い connection はいっぱいくるのです。
sshd のログに Invalid user とか Failed password とか並びまくり。
鬱陶しいので、swatch にログ監視させて、10回失敗した IP アドレスを iptables でハジくようにしてみた。
もちろん、krfilter とも併用。
その1,では、 iptables 設定用スクリプトの仕組みを備忘録として。
OUTPUT 側は省略で。
iptables の流れとしては $IPADDR にグローバルIPアドレス、$EXTERNAL_IF にインターフェイス名(eth0とか)が入ってるとして、 shell script で、以下のようなノリで設定している。
0.使う -N 設定
以下のとおり使ってます。
iptables -N block_in
iptables -N block
iptables -N KRFILTER
iptables -N KRFILTERED
iptables -N check_attack
iptables -N block_attack
1. INPUT
デフォルトは受け付けるルールにしている。
ログも残さずハジくヤツはここでハジく。
ログも残さず受け付けるヤツはここで受け容れる。(-i lo とか)
該当しなければ 常に block_in に飛ぶ。
2,block_in と block
怪しげなヤツ(外からの local ip address source なパケットなど)はログを残してサヨナラする。
そうでなくて、--state NEW のものは、KRFILTER に飛ばす。
KRFILTER に飛ばないヤツは(途中でも蹴落としたいので)NEWかどうかに関わらず check_attack に飛ばす。
#block_in の一部 (netbios 関連は省略)
iptables -A block_in -i $EXTERNAL_IF -s 10.0.0.0/8 -j block
iptables -A block_in -i $EXTERNAL_IF -s 172.16.0.0/12 -j block
iptables -A block_in -i $EXTERNAL_IF -s 192.168.0.0/16 -j block
iptables -A block_in -i $EXTERNAL_IF -s $IPADDR -j block # self source
iptables -A block_in -m state --state NEW -j KRFILTER
iptables -A block_in -j check_attack
# block
iptables -A block -j LOG --log-level debug --log-prefix 'iptables: block: '
iptables -A block -j DROP
3.KRFILTER と KRFILTERED
KRFILTER は、全て 1つ前の投稿で書いた、ヨソ様のスクリプト(ALL.sh.txt)で設定するが、設定したあとに、1コだけ追加する。
sh /path/ALL.sh.txt
iptables -A KRFILTER -j check_attack
これは、krfilter でひっかからなかったモノは、全て check_attack にゆき、そこも通過したら accept される。
KRFILTERED は、 block とほぼ同じなので省略。(--log-prefix のみかえてある)
4.check_attack と block_attack
check_attack は、別途 perl script (後述その3)を走らせて、それで設定している。
check_attack にひっかかったら、 block_attack に飛ぶ。
block_attack は、 block とほぼ同じなので省略。(--log-prefix のみかえてある)
ここを抜けたらようやくアクセスできる。
で、あとは
その2.attack_block.pl
swatch が、IPアドレスをパラメータに呼び出すスクリプト。
当該IPアドレスから、今、怪しいアクセスがありました! という通知の処理。
IPアドレスごとのアクセス失敗回数をファイルに記録しておくようにしてある。
さらに IPアドレスごとの、アクセス失敗回数を記録し、回数が上限を超えたら、ここで iptables で拒絶設定する。(check_attack に この IPアドレスなら -j block_attack へ、というルール)
その3.attack_block_again.pl
swatch で記録したアクセスブロックしたい IP アドレスリスト(ファイルに記録してあるもの)を参照して、 check_attack を再設定する perl スクリプト。
その4.swatch そのもの(/var/log/secure が更新されたら、その2のスクリプトを走らせるための設定)
を仕掛ければヨシと。
とりあえず、今日はここまで書いておこう(汗)
2005年12月09日
krfilter (Windows で)
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]まぁ、とにかく、sshd ログイン失敗のエラーが山ほどあって、どこのどいつだと思って whois 引いたら韓国だ中国だってんでアタマきたから、APNIC で出してる IP アドレスリストで国ごとハジいちゃえ!という設定について。
Linux については http://www.hakusan.tsg.ne.jp/tjkawa/lib/krfilter/index.jsp のとおりなので省略。
iptables 使えてる人ならこれで足りるはず。
Windows2000 Pro でどうするか。ちなみに我が家の Windows マシンは Norton が動いているが、Norton で設定するのは面倒なのであきらめた。
---
[重要加筆]
netsh で必用な Remote Registry Service ですが、設定に必用なだけで設定が終わったらサービスを止めても良いようです。
リモートからレジストリいじるサービスをそのままにしておくのが気になる人は、必用なときに
net start "Remote Registry Service" で起動し、
設定スクリプトを走らせたのち
net stop "Remote Registry Service" でサービス終了しておくのがナイスかと。
で、 netsh というので、iptables ほどではないが、フィルタリング設定ができるらしい。
「こういうのと、こういうのはハジく!」とかいうのが出来る。
ただ「こういうのは受け付けるけど、こういうのはハジく!」ができない。
デフォルト ok なら、「例外的にダメな条件」しか指定できないし、
デフォルト ng なら、「例外的に通す条件」しか指定できない。
で、Norton でヤバそうな接続ははじいてるので、netsh では、例外的にダメな条件を指定して Windows で krfilter を実現する。
1.perl を入れる
Active Perl でも、cygwin のでもいいが、とにかく perl。cygwin 通さないほうがいいんじゃないかな。
うちは両方入ってるけど。
2.libwww-perl (LWP) を入れる。
参考:http://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2FLWP#i0
Active Perl ならコマンドプロンプトで ppm install libwww-perl (改行って)ってやるといいみたいです。
うちでは、とっくに入れてあるので、 already installed って出ちゃうけど。
cygwin なら CPAN 使えるんじゃないかと。(install LWPだった、なぜか)
ちなみに Vine だと、rpm があります。ありますが、Plus とか だったかも。
3.netsh でのフィルタリングが出来るようにする。
具体的には、以下のサービスを有効にする(自動に設定して、起動時にサービス開始するようにする)
RRAS(Routing and Remote Access Service)
Remote Registry Service
設定はコントロールパネルの管理ツールのサービス開いて、該当サービス選んでプロパティを開く。
画面、全体タブの中にある、スタートアップの種類を自動にしてok。
(まぁ、自分はこんなのメモる必用ないけど一応書いてみた)
ただし、Remote Registry Service については設定に必要なだけなので、設定スクリプトの最初でオンにして、設定スクリプトの最後でオフにするのが無難。でも「無効」ではなく「手動」にしておく。
4.netsh を実行しまくる。
つってもスクリプトつくっちゃたので説明略w
netsh については http://www.usupi.org/win/netsh.html で。
krfilter のサイトから ALL.sh.txt 落としてきて、 netsh に書き換えて実行する perl script です。
$if だけ必用に応じて書き換えればよし。(大抵はそのままでいいはず)
あと、Remote registry service については未反映。
コマンドラインは net start/stop "Remote Registry Service" でスタート/ストップできるので、system でこいつら読んでやればいいと思う。
スクリプト(perl)はこちら
2005年03月31日
Vine の apt で入れられるパッケージ名を探す
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]まぁ、 ftp で見るとか言う手もあるんだが、そこまでしなくても良い場合も多い。
「samba ナントカってパッケージは何があるの?」とかいうときだ。
そんなときは
# strings /var/cache/apt/pkgcache.bin | grep samba
とかやればよい。早いし。
strings は binutil に入ってます。
でも、もっとまっとうな方法もありそうなもんだが。
#コメントいただきましたが、 apt-cache search ってのがまっとうな方法のようですw(でも遅いよな、これ)
投稿者 JK : 13:52 | コメント (3) | トラックバック
2005年03月29日
Vine 3.1 の apache で 特定 Virtual Domain で suEXEC する。
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]1:
# chmod 4711 /usr/sbin/suexec
する。
2:
IP Addresss xxx.xxx.xxx.xxx で
virtualdomainname.pizzica.to というホスト名によるバーチャルドメインで
User: username, Group: groupname という権限で cgi を動かす場合の httpd.conf 例
NameVirtualHost xxx.xxx.xxx.xxx
<VirtualHost xxx.xxx.xxx.xxx>
User username
Group groupname
ServerAdmin mailaddress@yourdomain
DocumentRoot /home/httpd/html/somefolder
ServerName virtualdomainname.pizzica.to
ErrorLog /path/error_log
CustomLog /path/access_log combined
</VirtualHost>
NameVirtualHost はどこかで1つだけ指定する。
★重要
/home/httpd/html/somefolder は /home/httpd/html/ の中にある必要がある。
/home/httpd/html/ の外へのシンボリックリンクも不可。
3:
/home/httpd/html/somefolder/index.html が
http://virtualdomainname.pizzica.to/index.html に対応するって具合なので、好きにファイルをいろいろ置く。
ただし、(重要)
cgi を置くサブディレクトリの permission は 755 とかに。
cgi の permission も 755 とかに。
(ユーザー権限で、誰でも書き換えられるファイル・誰でも書き換えられるディレクトリ内のファイルを cgi として実行するのは危険なので、やってくれない)
4:
# /sbin/service httpd restart
して再起動。
うまくいかないときは、
上記 httpd.conf に書いた error_log とか
/var/log/httpd/suexec.log とか
/var/log/httpd/error_log とか
そのへんを見る。
2005年02月24日
webalizer (Vine3.1)
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]apache のログ解析のために、webalizer を入れてみた。
VinePlus か extras か知らないけど、
# apt-get install webalizer
で入る。
入れたら、とりあえず
/etc/cron.weekly/webalizer.cron
を無効にする。何されてるのかわかんないので。
ファイルを削除するなり、違うディレクトリに移動するなりしておく。
実際は /etc/webalizer.conf に従ったログ処理をするんだが、
/etc/webalizer.conf が何するかわからんのでまず止める。
実際、よくよく見ると、 /home/httpd/html/webalizer に結果を吐き出す設定だったりするんだが
そのまま使うと誰でもみえちゃうじゃありませんかー。
そういうのを止めないとというのは、「なんか自動化されてそーだなぁ。
rpm -ql webalizer とかやってみっかー」とかやって気付くわけで、
俺が気付かなかったらどうしてくれんのさ(誰に言ってる?)
で、まず、apache が IP アドレスでログを取っているので、
webalizer の解析も IPアドレスだが、わかりにくい。
解りにくいので webalizer が DNS 逆引きをするように、、、、する方法もあるんだが、
src.rpm 持ってきて spec 書き換えて rpm -bb とかやった挙げ句、
逆引きしてる時間が長くてイヤなバージョン にしかならんのでパス。
apache 側で逆引きさせたほうがいいわ。
/etc/httpd/conf/httpd.conf で
HostnameLookups On
にしてやると。ちなみにうちの場合はバーチャルドメインで個別に On/Off してる。
(まぁ、ログがバーチャルドメイン単位だから当然っちゃー当然)
設定変えたらもちろん httpd は再起動するんだが、
過去ログまでは Lookup してくんないので諦める。
(もしくは自分でガリガリどうにかする)
さて、webalizer の conf の設定。
バーチャルドメイン毎のログだから、conf もそうすることに。
いじったのは下記くらいか
LogFile /p/a/t/h/logs/access_log.2
LogFile /p/a/t/h/logs/access_log.1
LogFile /p/a/t/h/logs/access_log
OutputDir /p/a/t/h/logs/webalizer
HostName om.pizzica.to
とかってのは基本中の基本。
あと HideSite 指定で自分が参照した分は隠すようにした。
それから、
SearchEngine google.com q=
ってのがあるので、すぐ下に
SearchEngine google.co.jp q=
を追加。これしないと、「どういう検索でいらっしゃったのか」が全然記録されない。最初バグかと思ったよ(爆)
まぁ、そんなで、あとは 設定ファイルを om.webalizer.conf とすれば
$ webalizer -c om.webalizer.conf
とかやると、 OutputDir にいろいろできるので、
html ファイルを見てやればよし。
ここまで把握してから、 cron の設定を自分でやることに。
weekly じゃなく hourly でもいいくらいの気分なのでそうする。
で、OutputDir はもちろん一般の皆様には見えないところに。
(つーか w3m で見てるんだよな、実際(笑))
投稿者 JK : 15:11 | コメント (2) | トラックバック
2005年02月23日
webmaster
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]うちのドメインは、webmaster 宛のメールは reject してるんだが、いいんだろうか?
いいよね、SPAM しかこないし。
うちには webmaster なんて奴いないんだよ!わーったか!w
投稿者 JK : 23:25
2005年02月18日
sudo のログも分ける
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ][ カテゴリ : ★Linux ログ管理 ]
sudo 使ってますか?私は10分に1回くらい使ってます(使いすぎだ)
というわけで、 /var/log/message に sudo のログがいるのはうざいので分けるのです。
syslog の設定ですな。
1. root で visudo して、Defaults syslog=local3 とかいう行を入れる
sudo の syslog の facility を local3 にする。
変えないと他の奴と混ざってしまうらしいです。
2. root で /etc/syslog.conf を書き換えます。
local3.* /var/log/sudo.log
とかいう行があればよいでしょう。
3.お好みで logrotate の設定も変えましょう。
以上、簡単でございやした。
投稿者 JK : 23:38
Vine3.1 で courier-imap で imap 接続のときにCRAM-MD5 認証する!(改)
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]courier-authlib-0.54-0vl1 が Vine にあがっとるー!
しかも makedatprog がついとるー!
。。。。。書き直すか。
#いずれ postfix の sasl についても書き直す日が来そうな気がするなー。
我が家では
courier-imap-4.0.1-0vl2
courier-authlib-0.54-0vl1
を使ってるのです。Vine3.1 用の VinePlus の rpm なんです。
さて、CRAM-MD5 認証のやり方を調べるとですね、
1. /etc/courier-imap/imapd を編集して、CAPABILITY にAUTH=CRAM-MD5 が入ってる状態にする。(/etc/courier-imap/imapd-ssl はいじらなくても imapd の設定が有効になる)
既にコメントとして例があるので簡単に設定できるでしょう。
2. /etc/authlib/userdb というファイルを適切に作って、/usr/sbin/makeuserdb を実行することで、各ユーザーの CRAM-MD5 パスワードを設定できる。
なお、「そのようなファイルやディレクトリはありません」とか言われちゃう人は # apt-get update; apt-get upgrade とかして上のバージョンにしてください。courier-authlib-0.53-0vl1 の場合文句言われましたので。
1についてはもうこれ以上書くことはないので2を。
まず、一番最初、 /etc/authlib/userdb が無い場合(既にあるところに別のユーザーを追加するのは後述)、root で下記のようにして、まず作る。
# pw2userdb | grep ^username > /etc/authlib/userdb
# chmod 600 /etc/authlib/userdb
しかし、これには /etc/passwd /etc/shadow から取れる情報しか入っていない。
ためしに cat /etc/authlib/userdb してみよう。
userdb ってファイルの中身がどんなか、ちょっとだけ解るよね?
で、情報を追加していく。
# userdb username set mail=/home/username/Maildir
ためしに cat /etc/authlib/userdb してみよう。
userdb ってファイルの中身がどんなか、よりいっそう解るよね?
で、以下で本命のパスワード設定だ。
# userdbpw -hmac-md5 | /usr/sbin/userdb username set hmac-md5pw
(パスワードを聞かれるので入れる)
ここでもためしに cat /etc/authlib/userdb してみよう。
userdb ってファイルの中身がどんなか、、、、、もういいって?(笑)
まぁ、中身は理解しておこうじゃないのさ。
そうでないと、ユーザーが複数いる場合は、最初の pw2userdb のとき > ではなく >> にして2行にしてやればいいんだろうなとかいう感覚がつかめないでしょ(笑)
とにかく、これで userdb が完成するわけだ。
二つの IMAP アカウントを設定するのであれば、userdb は二行必要である。三つなら三行だ。 これは最初に一人つくって、後からもう一人追加する場合でも同様である。よってユーザー追加するなら
# pw2userdb | grep ^username2 >> /etc/authlib/userdb
(> ではなく >> ね)
とかやって、userdb を二行にしてから
# userdb username2 set mail=/home/username2/Maildir
# userdbpw -hmac-md5 | /usr/sbin/userdb username2 set hmac-md5pw
とかやることになる。
勘違いして pw2userdb を二回やってしまうと、username2 のエントリが二行あるアホらしい状態になったりもする。心配なら userdb の中身は cat して確認しながらやるべきでしょう。(だからさきほど cat して中身把握しとけとうるさかったワケよ)
さて、あとは makeuserdb するだけだ。
# makeuserdb
うまくいかない場合は courier-authlib-0.54-0vl1 か、それより新しいの使おう(今日現在は存在しないが)
きちんとユーザーが登録されてるかどうかは
# strings /etc/authlib/userdb.dat
とかやってみよう。
(/usr/bin/strings は binutils package に入ってる)
投稿者 JK : 00:48
2005年02月17日
iptables のログを分けるぞ
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ][ カテゴリ : ★Linux ログ管理 ]
要約すると、syslog facility は kern 固定なので、
syslog priority (severity) を debug あたりにして、kern.=debug だけ別ログればよし。
(他に kern.debug なんて飛んでこないからそれでいいんだってさ)
よって
iptables で --log-level debug
syslog.conf は kern.=debug /var/log/iptables.log
なんか、追記する必要もないけど、当初書いた、もっと詳細なメモは下記の通り。
とりあえず、 ファイルを準備してみよう
# touch /var/log/iptables.log
# chmod 600 /var/log/iptables.log
iptables の LOG 機能で syslog に吐き出されるログのデフォルトの facility/severity は kern.warning らしい。
facility は固定なので、severity を --log-level debug とかで変更してやれらしい。 kernel.debug なんて使われてないからいい感じで iptables の情報だけ取れるってよ。
/etc/syslog.conf あたりで
kern.=debug /var/log/iptables.log
とかやればいいらしい。
=debug を単なる debug にすると、関係ないのも吐き出されるぞ。
参考/man syslogd.conf より抜粋
> You may precede every priority with an equation sign (``='')
> to specify only this single priority and not any of the above.
まぁ、でも、iptables.log よりは kernel.debug のほうがいいかなー
あとはお好みで logrotate の設定も変えましょう。
投稿者 JK : 23:38
2005年02月11日
Vine3.1 で courier-imap で imap 接続のときにCRAM-MD5 認証する!
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]★★★★★★★★★★★★★★★★★★★★★★★★★★★
★ この情報は古くなりました!
★ こちらの情報を見てください
★
★ 以下は古い情報がそのまま記載してあります
★★★★★★★★★★★★★★★★★★★★★★★★★★★
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我が家では
courier-imap-4.0.1-0vl2
courier-authlib-0.53-0vl1
を使ってるのです。Vine3.1 用の VinePlus の rpm なんです。
さて、CRAM-MD5 認証のやり方を調べるとですね、
1. /etc/courier-imap/imapd を編集して、CAPABILITY にAUTH=CRAM-MD5 が入ってる状態にする。(/etc/courier-imap/imapd-ssl はいじらなくても imapd の設定が有効になる)
既にコメントとして例があるので簡単に設定できるでしょう。
2. /etc/authlib/userdb というファイルを適切に作って、/usr/sbin/makeuserdb を実行することで、各ユーザーの CRAM-MD5 パスワードを設定できる、、、、、はずが VinePlus (3.0/3.1用) の rpm で courier-authlib と courier-imap を入れた場合、 makeuserdb が動かない!これをどうにかする必要もある!(シンボリックリンク1つ張ればどうにかなる。)
1は簡単なので、問題は2だ。 まず、一番最初、 /etc/authlib/userdb が無い場合(既にあるところに別のユーザーを追加するのは後述)、root で下記のようにして、まず作る。
# pw2userdb | grep ^username > /etc/authlib/userdb
# chmod 600 /etc/authlib/userdb
しかし、これには /etc/passwd /etc/shadow から取れる情報しか入っていない。
ためしに cat /etc/authlib/userdb してみよう。
userdb ってファイルの中身がどんなか、ちょっとだけ解るよね?
で、情報を追加していく。
# userdb username set mail=/home/username/Maildir
ためしに cat /etc/authlib/userdb してみよう。
userdb ってファイルの中身がどんなか、よりいっそう解るよね?
で、以下で本命のパスワード設定だ。
# userdbpw -hmac-md5 | /usr/sbin/userdb username set hmac-md5pw
(パスワードを聞かれるので入れる)
ここでもためしに cat /etc/authlib/userdb してみよう。
userdb ってファイルの中身がどんなか、、、、、もういいって?(笑)
まぁ、中身は理解しておこうじゃないのさ。
そうでないと、ユーザーが複数いる場合は、最初の pw2userdb のとき > ではなく >> にして2行にしてやればいいんだろうなとかいう感覚がつかめないでしょ(笑)
とにかく、これで userdb が完成するわけだ。
二つの IMAP アカウントを設定するのであれば、userdb は二行必要である。三つなら三行だ。 これは最初に一人つくって、後からもう一人追加する場合でも同様である。よってユーザー追加するなら
# pw2userdb | grep ^username2 >> /etc/authlib/userdb
(> ではなく >> ね)
とかやって、userdb を二行にしてから
# userdb username2 set mail=/home/username2/Maildir
# userdbpw -hmac-md5 | /usr/sbin/userdb username2 set hmac-md5pw
とかやることになる。
勘違いして pw2userdb を二回やってしまうと、username2 のエントリが二行あるアホらしい状態になったりもする。心配なら userdb の中身は cat して確認しながらやるべきでしょう。(だからさきほど cat して中身把握しとけとうるさかったワケよ)
さて、あとは makeuserdb するだけだ。
makeuserdb (in the package "courier-authlib") を実行すると
「そのようなファイルやディレクトリはありません」
と言われるじゃねーか。CRAM-MD5 のパスワードが設定できねーよ!
そして俺は言いたい。
「どのようなファイルやディレクトリがないのでしょうか?」
調べてみると「無いファイル」は
/usr/libexec/courier-authlib/makedatprog
らしい。
ちなみに、courier-imap のために courier-authlib を入れている俺なので、下記のようなファイルならあったりする。
/usr/libexec/courier-imap/makedatprog
単に makedatprog を使いたいだけであれば、
# ln -s /usr/libexec/courier-imap/makedatprog /usr/libexec/courier-authlib/makedatprog
とやれば、 makeuserdb が使えるようになる。使えるようになったらもちろん
# makeuserdb
だ。
きちんとユーザーが登録されてるかどうかは
# strings /etc/authlib/userdb.dat
とかやってみよう。
(/usr/bin/strings は binutils package に入ってる)
投稿者 JK : 07:21
2005年02月09日
Vine3.1 + postfix で SMTP AUTHする。
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ][ カテゴリ : ★postfix ]
#Vine 4.0 ならもっと簡単
# 詳しくは http://om.pizzica.to/archives/2006/12/vine40_smtp_aut.html
やるからには CRAM-MD5 だろ。
というか、 spec ファイルとか見てると、cyrus-sasl を使って対応バイナリを配布してそうな雰囲気だが、実際は rpm は cyrus-sasl を要求するのに ldd /usr/sbin/postfix すると sasl の libなんざしったこっちゃーない状態。どうなのそれ?
目次:
1:cyrus-sasl 関連のは rpm で入れる
2:postfix は SRPMS から作り直す
3:/usr/lib/sasl/smtpd.conf を手作業で作る
4:saslpasswd -c -u hostname username でパス設定
5:/etc/postfix/main.cf をあれこれ設定
1:cyrus-sasl 関連のは rpm で入れる
# apt-get install cyrus-sasl cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-md5
devel は運用じゃなくて、postfix の再構築で必要なんじゃないだろうか。よくわからんが。
2: SRPM から作り直した postfix を入れる
2-1: postfix が入っているならもちろん消す。
# apt-get remove postfix
2-2: SRPM を持ってくる。
$ wget ftp://www.ring.gr.jp/pub/linux/Vine/Vine-3.1/SRPMS/SRPMS/postfix-2.0.20-0vl5.src.rpm
とか、そのへんで適当にどうぞ。
2-3: SRPM を展開する
$ rpm -i postfix-2.0.20-0vl5.src.rpm
これやると、~/rpm/SPECS とか ~/rpm/SOURCES とかにいろいろ出てくる。
2-4: ~/rpm/SPECS/postfix.spec を直す
とりあえず、Release の行は
Release: 0vm5
とか、0vl5 より後っぽいバージョン番号にする。
あと、%build の後にある make makefiles のあたりをいかのような具合に。
make makefiles \
CCARGS="-DMAX_DYNAMIC_MAPS \
-DHAS_LDAP \
-DUSE_SASL_AUTH -I/usr/include \
-DHAS_PCRE -I/usr/include/pcre \
-DHAS_MYSQL -I/usr/include/mysql \
-DHAS_PGSQL -I/usr/include/pgsql" \
AUXLIBS="-L/usr/lib -lsasl"
-DUSE_SASL_AUTH の行を追加してんのと、sasl の LIB 読みにいくようにするのと。
2-5: build に必要な devel rpm を入れる
# apt-get install openldap-devel pcre-devel MySQL-devel postgresql-devel pam-devel db4-devel gdbm-devel
なにが必要なのかわからない人は 2-6 やってみて怒られたら入れるくらいでいいよ、うん。
俺は spec 見て適当に入れたので、入れすぎてるかも(爆)
でも人によっては gcc が入ってなかったりするわけだろうしなー・・・
2-6: rpm rebuild
$ rpm -bb ~/rpm/SPECS/postfix.spec
これで RPM が出来上がるんだから、楽なもんだ。
できあがり場所は ~/rpm/RPMS/i386 とかその辺のはず。
mysql だ ldap だ出来てくるけど、とりあえず、
postfix-2.0.20-0vm5.i386.rpm
みたいのだけで大丈夫。
0vm5 ってのは2-4 で決めた Release 番号になる。
なんだから、openldap-devel だの postgresql-devel だのを入れずに、必要最小限の rpm だけ build という手もありそうなもんだが、面倒なので(devel 入れまくるほうが楽なので)パス。
2-7: rpm install
# rpm -Uvh postfix-2.0.20-0vm5.i386.rpm
とか、そんな具合。当たり前だろ!とか思うかね?
でも、Release 番号でヘンなのを入れると、ここではじかれるんだよねー。
0vl5 -> 0vm5 みたいにやってれば大丈夫なはずだが、最悪 --force でもなんでもどうぞ。
3:/usr/lib/sasl/smtpd.conf を手作業で作る
中味はたった1行
pwcheck_method:sasldb
だけ。以上。
4:saslpasswd -c -u hostname username でパス設定
重要:初めての saslpasswd のときは失敗するようなので、2回やってみる。
SMTP AUTH のユーザー名は実際の account がある必要はないので、適当に smtpsender とかいうアカウントをでっちあげてしまうのがいいと思う。
# /usr/sbin/saslpasswd -c -u `/usr/sbin/postconf -h myhostname` smtpsender
ここで、 `` の中は、postfix の main.cf で定められた myhostname をつれてくる呪文なので、そのままでよい。ちなみに、-c が新規ユーザーを追加する create の c で、ユーザーを削除したい場合は、-d になる。
これをやると /etc/sasldb というファイルが出来るので、そいつを postfix で読めるようにする
# chgrp postfix /etc/sasldb
# chmod 640 /etc/sasldb
ちゃんと登録できているかどうかは
# sasldblistusers
である程度解る。
5:/etc/postfix/main.cf をあれこれ設定
最低限、下記2行はいるだろ。
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
で、あとは、認証通ったらなんの制限を緩和してやりたいかにより設定する。うちでは3項目。
smtpd_helo_restrictions, smtpd_recipient_restrictions, smtpd_sender_restrictions で permit_sasl_authenticated というのを入れある。
こうすると、認証通ってれば
「HELO がおかしかろうがok」
「宛先が誰でどこに relay しようがok」
「sender が誰名義であろうが ok 」という設定にそれぞれなる(はずだ)。
(smtpd_client_restrictions も設定したほうがいいんだろうか。)
main.cf 書き換えたら
# /sbin/service postfix restart
とかして postfix の再起動を忘れないように。
postfix は本当に AUTH CRAM-MD5 とかに対応したかを一応確認する。 これは、つないでみて EHLO の応答を見ればよい。
$ telnet localhost 25
とかやって、繋がったら
EHLO localhost(改行)
とかやると応答がくる。その中で
>250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
みたいな応答があればよし。
どんな応答がこようが
QUIT(改行)
すれば接続は終わる。
投稿者 JK : 00:13