Archive for the ‘Perl’ Category



1
6月

mod_process_security


自宅サーバではphpの権限分離にsuPHPを使っていたいのですが、以前mod_process_securityという
あらゆるモノを権限分離できるapacheのモジュールがあるというのと知って、時間にあるときに組み込んでみようと思っていたのです。

で、1か月半くらいまえに実は既に組み込んで本番運用しているのですが、コレいいっすよ!

拡張子で権限分離するモノを指定できるので、ウチではcgi、pl、phpをmod_process_securityに任せてsuexecも停止しました。

suPHPはcgi版のPHPを実行していたのでモッサリ感があったのですが、今はそのモッサリ感もなくなりかなり快適にヽ(´ー`)ノ

まぁ、workerでの運用は無理っぽいのでこれは仕方ないですが、それにしてももういうの作れる人ってすごいね!

22
12月

TortoisesvnでcommitしたらWWWのDocumentRootに自動で反映させる方法(+ポートフォワーディング)


掲題のことを実現するために、まずwebdav経由の方法を考えたのですが、自宅サーバーはcgiはsuexec、phpはsuphpにより実行権限がディレクトリのオーナー(ユーザ)権限で実行されるため、webdavは現実的ではないと判断。(webdav経由だとcommit等がapacheユーザで実行されてしまうため、権限の問題が出てしまうので・・・)

次に、ssh経由の方法を考えたのですが、これも難点があって現実的ではないと判断。

何故かというと、自宅サーバーは外部から接続する場合、ゴニョゴニョして接続元のIPを許可した後、秘密鍵を使ってログインできるようになっています。これだけならいいのですが、許可したIPは一定時間経過すると自動的に無効になるようにしてあるため、commit等を行う度に毎回ゴニョゴニョしてIPを許可して・・・なんて面倒なことをやっていられないわけです。

で、最終的に、sshでポートフォワーディングさせる方法に行き着いたわけです。

■サーバー側の準備
1.svn管理+WWW公開用のアカウントを作成(以下svnuser)
2.svnuserでパスワード無しの公開鍵と秘密鍵を作成

su - svnuser ssh-keygen -t rsa


3.公開鍵をリネーム
cd .ssh/ mv id_rsa.pub authorized_keys


4.秘密鍵(id_rsa)をTortoisesvnを使うクライアントPCに持ってくる
5.svn管理用ディレクトリを作成
mkdir /home/svnuser/svnrepos


6.svnリポジトリを作成
svnadmin create /home/svnuser/svnrepos/hoge(任意の名称)


7.WWWのドキュメントルートが自動更新されるようpost-commitを設置
cd /home/svnuser/svnrepos/hoge/hooks mv post-commit.tmpl post-commit vi post-commit ----- REPOS="$1" REV="$2" #commit-email.pl "$REPOS" "$REV" commit-watchers@example.org #log-commit.py --repository "$REPOS" --revision "$REV" /usr/bin/svn up /home/svnuser/public_html/hoge/ ----- chmod 755 post-commit


8.自動更新の対象となるWWWディレクトリを作成
mkdir /home/svnuser/public_html/hoge


9.自動更新対象のディレクトリをチェックアウト
cd /home/svnuser/public_html/hoge svn checkout file:///home/svnuser/svnrepos/hoge ./

■クライアント側の準備
1.Puttyの公式から「putty.exe」「pageant.exe」「puttygen.exe」をダウンロードしてTortoisesvnのbinフォルダに保存
2.TortoiseSVNの設定メニューからネットワークの設定メニューを出して、SSHクライアントをTortoisePlink.exe(若しくはPuttyの公式からダウンロードしたplink.exe)を選択しておく
3.puttygen.exeを起動して「Load」をクリックしサーバーで作成した秘密鍵(id_rsa)を読み込む(Putty用にコンバートするか?聞かれるのでYesを選択)
4.3が完了したら「save private key」をクリックして適当な名前で保存
5.putty.exeを起動して下記を設定

■Session HostName:SSHの接続先IPまたはホスト Port:SSHの接続先ポート Connection Type:SSH Saved Session:任意の接続名称(例:svnssh) ■Connection>Data Auto-Login username:SSHでログインするユーザ(例:svnuser) ■Connection>SSH>Auth Attempt authentication using Pagent:チェックを入れる Private key file for authentication:4で作成した秘密鍵をセット ■Connection>SSH>Tunnels Source port:1024以上の任意のポート番号を設定(例:10022) Destination:localhost:22(自宅サーバーから自宅サーバーのSSHに接続) Addをクリックして保存


6.Sessionの項目に戻り「Save」をクリックして保存
7.putty.exeで続いて下記を設定
■Session HostName:localhost(クライアントPC自身のIP) Port:5のSource portで設定したポート番号(例:10022) Connection Type:SSH Saved Session:任意の接続名称(例:svntunnel) ■Connection>Data Auto-Login username:SSHでログインするユーザ(例:svnuser) ■Connection>SSH>Auth Attempt authentication using Pagent:チェックを入れる Private key file for authentication:4で作成した秘密鍵をセット Addをクリックして保存


8.Sessionの項目に戻り「Save」をクリックして保存
9.pageant.exeを起動して「Saved Sessions」から「svnssh」>「svntunnel」の順に接続する

これでTortoisesvnでcommitすると「/home/svnuser/public_html/hoge」も自動で更新されるようになるし、毎回パスワードを聞かれることもありません。

これで開発が楽になりました( ´ー`)

See Also
Subversionへポートフォワード+puttyで自動ログイン
【Subversion】mod_dav_svn(apache)経由でCommitした時に自動的にupdateを行う

14
12月

APNICのdelegated-apnic-latestが無くなったと思ったら復活してた件


今朝方、Postfixのスパムメール対策で使っているCIDRのリストが12月11日を最後に更新されていないことに気が付きました。

なんでだろー???と思いcronで1日1回自動取得するスクリプトを手動で動かしてみても更新されず・・・

結局のところhttp://ftp.apnic.net/stats/apnic/delegated-apnic-latestがNot Foundになっていたのが原因だったようです。

で、いろいろ調べてみたらどうやらdelegated-apnic-latestの大元???ならFTPでアクセスできるということで、cronのスクリプトをすべてFTP経由で取得するように変更して無事に解決しました( ´ー`)

しかしhtaccessで国内ホストのみアクセス可能にするスクリプトの方はFTPプロトコルに対応していないのでどうしたものか・・・

と思っていたいのですが、ついさっきhttp://ftp.apnic.net/stats/apnic/delegated-apnic-latestにアクセスしてみたら復活してました!!

よかったよかった( ´ー`)

11
3月

milter manager


milter manager はじめに

これ読んでいてふと思いついたというかやってみようかなと思ったこと。

DNSBLの判定がNGだった場合にグレイリスティングで救済するようにreceivegreyも改良すればもうちょっといい感じになるかもしれない!

まぁ~時間があればやってみようと思います( ´ー`)

14
9月

ホスト名がドットのみ


レンタル掲示板サービスには毎日ものすごい数のスパム投稿があるわけですが、そのスパム投稿の中に前々から気になっていることがあったのです。

ホスト名がドット(.)のみ

そんなの有り?

ドットで正引きしても当然ながらIPを引ける訳もないので、掲示板スクリプトの中にトラップを仕込んでIPを割り出してみました。

IPアドレス:92.48.122.3

逆引き結果
> nslookup 92.48.122.3

Non-authoritative answer: 3.122.48.92.in-addr.arpa name = . Authoritative answers can be found from: 122.48.92.in-addr.arpa nameserver = a.ns.as29550.net. 122.48.92.in-addr.arpa nameserver = b.ns.as29550.net.

whoisの結果
> whois 92.48.122.3

[whois.ripe.net] % This is the RIPE Whois query server #3. % The objects are in RPSL format. % % Rights restricted by copyright. % See http://www.ripe.net/db/copyright.html % Note: This output has been filtered. % To receive output for a database update, use the "-B" flag. % Information related to '92.48.122.0 - 92.48.122.31' inetnum: 92.48.122.0 - 92.48.122.31 netname: PH-V3SERVERS-28069 descr: v3servers country: RS admin-c: SA4464-RIPE tech-c: SA4464-RIPE status: ASSIGNED PA mnt-by: blueconnex-mnt mnt-routes: blueconnex-mnt source: RIPE # Filtered remarks: ****************************************************** remarks: Please contact abuse@v3servers.net for any abuse issues remarks: E-mail sent to other addresses may not be acted upon. remarks: ****************************************************** person: Sogreev Anton address: v3Servers.net address: 12 Knez Mihailova address: apt. 18 address: Belgrade address: 11000 address: Serbia phone: +381 (0)11 124-1264 nic-hdl: SA4464-RIPE mnt-by: blueconnex-mnt source: RIPE # Filtered e-mail: mail@v3servers.net e-mail: abuse@v3servers.net % Information related to '92.48.64.0/18AS29550' route: 92.48.64.0/18 descr: Blueconnex Networks Ltd origin: AS29550 remarks: *********************************** remarks: * * remarks: * Abuse: abuse@blueconnex.net * remarks: * * remarks: * Peering: peering@blueconnex.net * remarks: * * remarks: *********************************** mnt-by: blueconnex-mnt source: RIPE # Filtered

国コードRSってどこだ???

調べてみたらどうやらセルビアらしい( ´ー`)

20
7月

排除率99.97%のスパムメール対策 for postfix


排除率99.97%のスパムメール対策 for postfixをアップしました。

この記事書くのに今日丸1日費やしてしまった・・・

疲れた・・・orz

22
6月

Postfixのスパムメール対策第3段の途中経過


ウチに来るスパムメールは相変わらず減り続けている。で書いたスパム対策の途中経過を報告します。

■postfixの設定は以下のようになっています(細かい説明は後日)

■統計(2008/06/22現在)

■REJECTの各項目
1はreject_unlisted_recipientで拒否した数
2はreject_unverified_senderで拒否した数
3はreject_non_fqdn_senderで拒否した数
4はreject_unauth_destinationで拒否した数
5はcheck_policy_serviceで拒否した数
6はsleepで諦めた数
7はブラックリストでピンポイントで拒否した数
8はprocmail側(dnsbl、urldb、ベイジアンスパムフィルタ)でspam判定された数

■OKは配送されたすべてのメール数

■TRUE JUDGEはOKの中で配送されたスパムの数

■FALSE JUDGEは拒否した非スパムの数

■REJECT RATE(postfix)はpostfixのみの拒否率

■REJECT RATE(ALL)はpostfix、procmailをあわせた拒否率

■1番下のREJECT RATEは設定毎の拒否率

というわけで現在の拒否率はpostfixのみで99.44%、procmailをあわせると99.96%となっています。

reject_non_fqdn_senderとsleepの出番がまったくありません・・・
(唯一6月9日にsleepで6というのがありますが、これは一時的にcheck_policy_serviceの前にsleepを置いてみた結果で、現在はcheck_policy_serviceの後に戻しています。)

見てのとおりreject_unlisted_recipient(User Unknown)だけで40%を拒否しています。
これが最近多いBackscatterというヤツです。

まだ途中ですが概ね合格点といったところでしょうか。

1年前とは比べ物にならない程スパムが減っているのがなにより。

5
6月

Backscatter対策を考えてみた結果導入は諦めたのです。


Backscatter対策を考えてみた。

あれからいろいろ考えてみた結果問題が2つ見つかったのです。

問題その壱
sendmail経由で送信されたメールはポリシーサービスに渡せないので送信履歴(キャッシュ)が残せない

問題其の弐
ウチのサーバー外からウチのドメインを使って送信した場合も送信履歴(キャッシュ)が残せない

つまり上記のメールが宛先不明でバウンスしてウチのサーバーに戻ってきた場合、送信履歴(キャッシュ)が無いので受け取りを拒否してしまうということ。

ということで導入はヤメっ!

まぁ〜reject_unlisted_recipientを入れてるのでほとんどのBackscatterは550で拒否してるからいいんですけどね・・・

たまぁ〜に実在するアドレスに配送されてくることがあるのでいろいろ考えてみたのですが、導入するメリットよりもデメリットの方が大きいので・・・┐(´д`)┌

24
5月

ウチに来るスパムメールは相変わらず減り続けている。


なんでしょうね?

ここ2、3ヶ月は平均200/日程度しか来ていません。

まぁ〜いいことなんですが、せっかく新サーバー機にして新しいスパム対策を施したというのに、なんか張り合いがなくなってしまってちょっとつまらない・・・┐(´д`)┌

続きを読む… »
7
4月

perlで改行せずにカウントダウンさせる


つい最近知ったのですが、UNIXではCR(\r)は行頭に戻るという意味だったのね( ´ー`)

#!/usr/bin/perl $| = 1; for (my $C = 1,my $D = 30; $C < = $D; $D--) { print "Please wait for " . sprintf("%02d",$D) . " seconds more"; sleep 1; print "¥r"; } exit;

↑をコンソール上で実行すると改行しないでカウントダウンしてくれます。

now loading...