こんばんは、おやじ様
以前にもお世話になりましたバードンです。
現在は、メールサーバーを起ててる訳ではないのですが、
Postfixのheader_checks等の機能を使ってみたくなり、正規表現を勉強しようとしているのですが、全く基礎がないのでGoogle等で検索しても、何処から手を着けて良いのやら判らず悩んでいます。
何か良い本とかサイトとかないでしょうか?
『基礎からやるなら、ココが良い!』というサイトなどが在れば教えて頂けませんでしょうか?宜しくお願い致します。
済みません。追伸です。
現在、正規表現で書きたいと思っているルールは、
『FromとReturn-pathが一致しない場合は拒否』と言ったような
事を書きたいのですが、正規表現で掛けますでしょうか?
不躾ですが宜しくお願い致しますm(_ _)m
> 現在は、メールサーバーを起ててる訳ではないのですが、
> Postfixのheader_checks等の機能を使ってみたくなり、正規表現を勉強しようとしているのですが、全く基礎がないのでGoogle等で検索しても、何処から手を着けて良いのやら判らず悩んでいます。
>
> 何か良い本とかサイトとかないでしょうか?
> 『基礎からやるなら、ココが良い!』というサイトなどが在れば教えて頂けませんでしょうか?宜しくお願い致します。
Postfixのheader_checksということであれば、Postfixのドキュメントにも書かれています。
http://www.postfix-jp.info/trans-2.2/jhtml/header_checks.5.html
但し、ここに書かれているとおり、pcre(Perl互換正規表現) と regexp (POSIX 正規表現)の2つがあります。perlにも使えるのでpcreでいいのではないかと思います。
「perl 正規表現」でいくらでも見つかると思います。
自分でルールを書いてテストしてみればよいのでは?
勉強用の簡単なスクリプトです。
下記のようにテスト用のメールのファイルを使って、正規表現をいろいろ設定してマッチするかチェックするスクリプトです。
大文字、小文字は区別しない仕様です。
# cat テスト用ファイル名 | ./check.cgi "正規表現"
[使用例]
# cat test.eml | ./check.cgi "^Received:.*\.aconus\.com"
------ここから(check.cgi)-------
#!/usr/bin/perl
# 正規表現データ読み込み
$filter = $ARGV[0];
# チェック対象を標準入力から読み込み
@mes = <STDIN>;
print "@mes";
foreach (@mes) {
if($_ =~ m|$filter|i){ print "OK!!\n\n$filter\n$_\n\n"; exit;}
}
print "NG!!\n\n$filter\n\n";
exit;
--------ここまで----------
> 現在、正規表現で書きたいと思っているルールは、
> 『FromとReturn-pathが一致しない場合は拒否』と言ったような
> 事を書きたいのですが、正規表現で掛けますでしょうか?
Postfixはドキュメントにかなりのことが書いてあり、Apacheよりは説明もわかりやすいと思いますので、先のURLをよく見てください。
ただ、header_checksを使用しても、「バグ」のところを見てもらえば、上記の書きたい例は2つの点でできないことがわかると思います。
1. 複数行に跨っての評価はできない。
2. デーモン自身によって付加されたメッセージヘッダ(From:、To:、Message-ID:、Date:)は検査から除外される。
複雑なものは、filterあたりを使わないと無理では?ないでしょうか?
http://www.postfix-jp.info/trans-2.2/jhtml/FILTER_README.html
こんばんは、おやじ様。
ご指導下さり有難う御座います。
PCRE(Perl互換)の正規表現を覚えた方が良さそうですね。
教えて頂いたURLとおやじ様が書いて下さったcgiを元に
勉強してみます。
よく分かってないのに何ですが、デーモンが付加するヘッダは、無視されるんですね....知りませんでした。勉強になりましたm(_ _)m
取り合えず、cgiの方を試してみます。有難う御座いました。