回答編集履歴
2
#3 Postfix設定のブラッシュアップ
test
CHANGED
@@ -58,3 +58,45 @@
|
|
58
58
|
- 最後の`reject_unauth_destination`でオープンリレーも防げています。
|
59
59
|
- このあとに今回のルールを追加しています。ここまででsenderが自分のドメインであるようなものは上のいずれかのルールでokになっているはずなので、このルールまでたどり着いたものはrejectします。
|
60
60
|
|
61
|
+
### \#3
|
62
|
+
|
63
|
+
上の\#2で当初の目的は達しているのですが、設定内容について若干補足します。
|
64
|
+
|
65
|
+
1. `smtpd_client_restrictions`、`smtpd_helo_restrictions`、`smtpd_sender_restrictions`、`smtpd_recipient_restrictions`のルールはそれぞれコネクション確立、EHLO (HELO) コマンド、MAILコマンド、RCPTコマンドの実行時に評価されるように見えますが、実際は`smtpd_delay_reject = yes` (初期値ではそうなっています) のときは4つともRCPTコマンドの実行時に評価されます。
|
66
|
+
(この動作がデフォルトになっているのは、かつてRCPTコマンドより前で拒否しても気づかずに通信を続けようとするクライアントがあったためだそうです。今日でもこの動作は、スパム送信者からのメッセージを拒否する前に少しだけ時間を無駄にさせる〔=スパム送信の能率が落ちる〕という効果が期待できるので望ましいです。)
|
67
|
+
とにかく、上記4つのルールは`smtpd_recipient_restrictions`にまとめて書くことができます。
|
68
|
+
* ただし`check_client_access`で、テーブル引きの結果が`OK`となる場合、それ以降のルールが無視されてしまいますから修正が必要です。`OK`となるエントリは取り除くか`DUNNO`に書き換える必要があります。
|
69
|
+
|
70
|
+
2. 実は、`smtpd_recipient_restrictions`に書いてある`reject_unauth_destination`は実行されません。Postfix 2.10以降、`smtpd_relay_restrictions`が導入されて`smtpd_recipient_restrictions`の直前に実行されるようになりました。`smtpd_relay_restrictions`の初期値は`permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination`であるため、オープンリレーの試みには`reject_unauth_destination`による永続的エラー (554) ではなく`defer_unauth_destination`による一時エラー (454) が返されます。554にしたいのなら修正が必要です。
|
71
|
+
3. 上でも述べたように、`permit_sasl_authenticated`だけでは認証成功したユーザがなりすましし放題ですから、`reject_sender_login_mismatch`などを使って防ぐ必要があります。
|
72
|
+
|
73
|
+
|
74
|
+
結果として、つぎのようになります (3. は除く)。
|
75
|
+
```
|
76
|
+
...
|
77
|
+
# オープンリレーの試みを一時エラー (454) ではなく永続的エラー (554) で拒否する場合
|
78
|
+
smtpd_relay_restrictions =
|
79
|
+
permit_mynetworks
|
80
|
+
permit_sasl_authenticated
|
81
|
+
reject_unauth_destination
|
82
|
+
|
83
|
+
#smtpd_client_restrictions =
|
84
|
+
#smtpd_helo_restrictions =
|
85
|
+
#smtpd_sender_restrictions =
|
86
|
+
smtpd_recipient_restrictions =
|
87
|
+
permit_mynetworks
|
88
|
+
check_client_access cidr:/etc/postfix/reject_client.cidr
|
89
|
+
reject_unknown_reverse_client_hostname
|
90
|
+
reject_invalid_helo_hostname
|
91
|
+
reject_non_fqdn_sender
|
92
|
+
reject_unknown_sender_domain
|
93
|
+
permit_sasl_authenticated
|
94
|
+
reject_non_fqdn_recipient
|
95
|
+
#reject_unauth_destination #上記参照
|
96
|
+
check_sender_access hash:/etc/postfix/reject_final_destinations.hash
|
97
|
+
#上行は Postfix 3.x以降では次のようにも書ける
|
98
|
+
check_sender_access inline:{ mail.example.org = reject, ... }
|
99
|
+
...
|
100
|
+
|
101
|
+
```
|
102
|
+
|
1
つづき
test
CHANGED
@@ -20,3 +20,41 @@
|
|
20
20
|
|
21
21
|
上記のようなものではなく、当面「自ドメインの送信者を騙るものだけを拒否できればいい」ということなら、Postfixの設定だけで可能だと思います。(書きかけ。しばらくお待ちください)
|
22
22
|
|
23
|
+
(つづき)
|
24
|
+
|
25
|
+
ちょっと考えすぎだったようで、次のようにしてできました。
|
26
|
+
|
27
|
+
```reject_final_destinations.hash
|
28
|
+
mail.example.org reject
|
29
|
+
...
|
30
|
+
```
|
31
|
+
|
32
|
+
```main.cf
|
33
|
+
...
|
34
|
+
smtpd_recipient_restrictions =
|
35
|
+
permit_mynetworks,
|
36
|
+
permit_sasl_authenticated,
|
37
|
+
reject_non_fqdn_recipient,
|
38
|
+
reject_unauth_destination
|
39
|
+
check_sender_access hash:/etc/postfix/reject_final_destinations.hash
|
40
|
+
...
|
41
|
+
```
|
42
|
+
`mail.example.org`は自分のドメインです。自分のドメインが複数あるときは行を追加します。
|
43
|
+
|
44
|
+
Postfix 3.x以降ならインラインテーブルを使って次のようにも書けると思います。
|
45
|
+
```main.cf
|
46
|
+
...
|
47
|
+
smtpd_recipient_restrictions =
|
48
|
+
permit_mynetworks,
|
49
|
+
permit_sasl_authenticated,
|
50
|
+
reject_non_fqdn_recipient,
|
51
|
+
reject_unauth_destination
|
52
|
+
check_sender_access inline:{ mail.example.org = reject, ... }
|
53
|
+
...
|
54
|
+
```
|
55
|
+
|
56
|
+
- `permit_mynetworks`で、自サイト内のリレーには制限がありません。
|
57
|
+
- `permit_sasl_authenticated`で、認証が成功したユーザによる送信も制限がありません (ただし、このままだと認証できたユーザはなりすましが可能なので`reject_sender_login_mismatch`などでチェックしたほうがいいと思いますが)。
|
58
|
+
- 最後の`reject_unauth_destination`でオープンリレーも防げています。
|
59
|
+
- このあとに今回のルールを追加しています。ここまででsenderが自分のドメインであるようなものは上のいずれかのルールでokになっているはずなので、このルールまでたどり着いたものはrejectします。
|
60
|
+
|