postfix スパムに踏み台にされて防いだ後2
その後もスパムにあってるかもしれないと、ログを定期的にみています。それにしても世の中には、踏み台にしようとサーバに日々、アタックされているんですね。こういうのってむやみやたらに怖がっている人が多すぎて、実態の掴めない世界と感じているエンジニアは多いはず。メールサーバは使わないにしても、自分で立ててみた方が身にしみるんじゃないだろうか。
前回の「フローコントロール、レートコントロール」について、もうちょっとふみこんで実装を記載します。前紹介したサイトは参考になりますが、古いホームページだからかもしれませんが、イマイチこうしろ!っていう記載の仕方が緩いです。要するにどうするの?って読んでて思っちゃいます。
ともあれ、記載はmain.cfの最後当たりに追記します。
vi /etc/postfix/main.cf
以下は、HELLOとかいうログをみたことあるかもしれませんが、スパムのアタック目的のHelloコマンドの疎通確認で、ある条件の時にNGを返す処理みたいです。
smtpd_helo_restrictions = reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_unknown_hostname
記載の意味は以下、
reject_invalid_hostname:
HELOコマンドで提供されるホスト名が有効なホスト名でない時拒否 拒否応答コード501
reject_non_fqdn_hostname:
HELOコマンドで提供されるホスト名がRFCで必須とされる完全修飾名の形式でない時、要求を拒否。拒否応答コード504
reject_unknown_hostname:
HELOコマンドで提供されるホスト名がAレコードもMXレコードも無い時要求を拒否。拒否応答コード450(unknown_hostname_reject_codeで指定も)
だ、そうです。ただ偽装できるし不十分だって、一般人はHelloしないからHello自体ブロックしてもいい気がするけどメールソフトとかが使うのかね??
つづいて、非凡なアクセスしてくるヤツをブロックする記載
smtpd_client_connection_rate_limit = 3
anvil_rate_time_unit = 60s
smtpd_soft_error_limit = 3
smtpd_hard_error_limit = 5
smtpd_error_sleep_time = 20s
smtpd_client_message_rate_limit = 6
smtpd_client_recipient_rate_limit = 6
自分は上記の様にしました。
smtpd_client_connection_rate_limitと、anvil_rate_time_unit:
同一クライアントが60秒間に、3回接続してきたら接続MAXってことでブロックされます。自分しか見ないし、そんなに接続しないし、それ以外はスパム扱いでいいかなと。実際仕事でメールしてても、そのくらいで十二分なはず。
smtpd_soft_error_limit、smtpd_hard_error_limit、smtpd_error_sleep_time:
smtpd_soft_error_limitの設定回数だけエラーを時間内にだしたら、スリープ分アカウント停止します。その後もsmtpd_hard_error_limitの設定回数だけエラーを出したら、接続を解除します。時間内というのは「anvil_rate_time_unit = 60s」です。60s設定でスリープも考慮して、smtpd_hard_error_limitに達するのはスパムだけです。
smtpd_client_message_rate_limit、smtpd_client_recipient_rate_limit:
60秒間に6通のメールと6箇所宛先におくれるという設定です。
smtpd_client_connection_count_limitなどで、接続数も絞る事ができます。
但しこれ、通常は数字を制限しまくることは難しいです。なぜなら多数にメールを送信するなど、仕事上であるはずだからです。自分は個人なのでここをキュッと絞れば、被害がでても小さく済ます事ができますが...そのため、上のlimit系の方が有効なはずです。