« 2005年11月 | メイン | 2006年01月 »
2005年12月22日
てすと

と
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)はこちら