• ホーム
  • サーバ
  • Postfix
  • main.cf
  • 制限の設定
  • 制限の設定

    
    様々な条件で制限を行うには下記4つのパラメータを使用します(以下デフォルトの状態)
    1、smtpd_client_restrictions =	接続時クライアントIP又はホスト名による制限
    				※なお実際はRCPT TO:コマンドが発行された時、拒否される(ログを残す為に)
    2、smtpd_helo_restrictions =	HELOホストによる制限
    3、smtpd_sender_restrictions =	MAIL FROMアドレスによる制限
    				↓RCPT TO送信元による制限
    4、smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
    
    ●1、smtpd_client_restrictions(接続時クライアントIP又はホスト名による制限)
    permit_mynetworks			mynetworksは全て許可(以外の条件ノーチェック)
    reject_unknown_client		DNSで逆引きできないホスト。又は一致しないホストを拒否する
    				※使用注意※ 普通に逆引きできないホストは結構存在する
    				拒否応答コード450
    reject_rbl_client spamcop.net,		RBLのデータベースに登録されているIPからの接続を拒否
    reject_rbl_client dynablock.wirehub.net,	※使用注意
    reject_rbl_client opm.blitzed.org,		RBLに登録されている情報が正しい保障はない
    reject_rbl_client sbl.spamhaus.org,
    	なおDBサーバが落ちている(ダウンしている)場合、リストが更新されなく下記のような554のエラーログが残る
    	554 Service unavailable
    
    check_client_access dbm:/etc/postfix/bad_clients等ファイルリストを指定(リストにはキーと値を指定
    	リストの記入方法はルックアップテーブルを参照
    	リストを更新したときは、インデックスファイルの再生成をお忘れなく(postmap ファイル名)
    	※postfix reloadは不要です。実際に拒否されるのはRCPT TO:の時です(下記そのエラー)
    	 詳しくは smtpd_delay_reject を参照
    	554 5.7.1 : Client host rejected: Access denied
    
    例 smtpd_client_restrictions = permit_mynetworks,
    	check_client_access dbm:/etc/postfix/bad_clients,
    	permit
    	○mynetworksは全て許可(以下ノーチェック)、リストに記載されているのは拒否、その他は許可
    
    ●2、smtpd_helo_restrictions(HELOホストによる制限)
    ※もちろんHELOのホスト名は偽装が容易なので、これによる制限だけでは不十分の可能性がある
     HELOで通知されるホスト名は、本来相手側のホスト名なので自分のホスト名等を名乗ったり
     localhostを名乗るホストを拒否する等に使用する
    check_helo_access dbm:/etc/postfix/bad_helo	ここに書く
    reject_invalid_hostname	HELOコマンドで提供されるホスト名が有効なホスト名でない時拒否
    			拒否応答コード501
    reject_non_fqdn_hostname	HELOコマンドで提供されるホスト名がRFCで必須とされる完全修飾名の
    			形式でない時、要求を拒否。拒否応答コード504
    reject_unknown_hostname	HELOコマンドで提供されるホスト名がAレコードもMXレコードも無い時
    			要求を拒否。拒否応答コード450(unknown_hostname_reject_codeで指定も)
    
    ●3、smtpd_sender_restrictions(MAIL FROMアドレスによる制限)
    ※もちろんFROMも容易に偽装が可能なので、実際に使うことはほとんど無い
    check_sender_access dbm:/etc/postfix/bad_from	ここに書く
    reject_non_fqdn_sender		MAIL FROMコマンドで提供されるホスト名がRFCで必須とされる
    				完全修飾名の形式でない時、要求を拒否。拒否応答コード504
    reject_unknown_sender_domain	MAIL FROMコマンドで提供されるアドレスのドメインがAレコードも
    	MXレコードも無い場合拒否。拒否応答コード450(unknown_address_reject_codeで指定も)
    
    ●4、smtpd_recipient_restrictions(RCPT TOアドレスによる制限)
    check_recipient_access dbm:/etc/postfix/bad_to	ここに書く
    permit_auth_destination		最終配信先(リレーも同じ)と一致する場合に要求を許可
    	配信先はmydestination、inet_interfaces、virtual_alias_maps、virtual_mailbox_maps、
    	リレーはrelay_domains一致が見つからない場合、REJECTではなくDUNNOを返します。
    	よって次の制限のチェックを続けます
    reject_unauth_destination
    	★これを基本的に外してはいけない(デフォルトで有効)外すとオープンリレーになる
    	最終配信先(上記permit_auth_destinationと同じ)と一致しない場合、要求を拒否
    permit_mx_backup		MXレコードのエントリーにあるドメイン宛のメッセージを許可
    reject_non_fqdn_recipient	RCPT TOで提供されるアドレスが、RFCで必須とされる完全修飾名の
    				形式でない時、要求を拒否。拒否応答コード504
    reject_unknown_recipient_domain	RCPT TOで提供されるアドレスが、AレコードもMXレコードも無い場合
    			要求を拒否。拒否応答コード450(unknown_address_reject_codeで指定も)
    
    
    
    
    フローコントロール、レートコントロール
    smtpd_client_connection_rate_limit 一定時間内に同一クライアントから接続できる回数を制限 デフォルト0(制限なし)、時間の指定はanvil_rate_time_unit(デフォルト60秒)にて指定 制限にかかると以下のようなログが残ります Mar 14 22:27:20 host1 postfix/anvil[981]: [ID 197553 mail.info] statistics: max connection rate 3/60s for (smtp:192.168.1.10) at Mar 14 22:24:00 smtpd_client_connection_count_limit 1つのSMTPクライアントの最大同接続数 デフォルト:50 smtpd_client_message_rate_limit 単位時間内送信許可数 デフォルト:0(制限なし) smtpd_client_recipient_rate_limit 単位時間内宛先数 デフォルト:0(制限なし) anvil_rate_time_unit クライアントの接続速度やその他の速度の計算に用いられる 単位時間 デフォルト:60s smtpd_client_event_limit_exceptions 接続カウントや接続速度、SMTP要求速度の制限から除外される クライアントの指定 デフォルト:$mynetwork ■プロセス、配送制御等 default_process_limit = 100 smtpd最大子プロセス数の指定 ※この設定はmaster.cfを参照 default_destination_concurrency_limit 同じ配送先に同時に送ることができるメッセージの数 デフォルト: 20 local_destination_concurrency_limit 同じローカル受信者に対して同時に配送するメッセージの数 デフォルト: 2 smtpd_recipient_limit = 1000 1メッセージ当たりの受信者数の制限。CCやBCCを使った場合のこと message_size_limit = 10240000 1通あたりの受け付けるメッセージサイズ(デフォルト10MB)。0なら無制限
    その他
    smtpd_helo_required = yes SMTP RFCが既定するとおりHELO/EHLOを使って対話を始めなければいけません クライアントがこの手順を省略するとメッセージを拒否します disable_vrfy_command = yes VRFYコマンドの禁止 soft_bounce = yes これをyesにするとハード拒否(5xx)がソフト拒否(4xx)に変わります 実際には拒否されない為、ログで確認後正規運用が行えます warn_if_reject パラメータ 特定のパラメータだけを上記と同じ条件にする方法 例 warn_if_reject reject_invalid_hostname smtpd_delay_reject = no 規則の中でREJECTで拒否された場合、デフォルトでは実際にはRCPT TOコマンドを 送信するまではメッセージを拒否しません これはSMTPクライアントによっては、トランザクションの間は拒否されたかチェックを行わず 配信を続けようとするものがあり、この場合通常よりも接続が長く続きログにも大量の警告が 残る。また、より完全なログを残す為でもある。 この設定を変更し、拒否の応答を早く行いたい場合は(接続段階時)、このパラメータにnoを設定 smtpd_error_sleep_time = 1s 遅延時間1秒 smtpd_soft_error_limit = 10 10個目のエラーまでは許容 smtpd_hard_error_limit = 20 20個目のエラーが発生したとき接続を切断する  つまり上記の場合、10個目のエラーを検出するとそれ以降のエラーごとに1秒ごと遅延させる  エラー数が20に達すると、クライアントとの接続が切断される。  なお再度要求があった場合も以後繰り返し ■エラーコードについて 4xxエラー クライアントはメッセージをキューに入れ、後で再配送を試みます 5xxエラー 永続的なエラーを示し、メッセージの送信を停止するようクライアントに指示します ■■■テスト telnet 192.168.1.100 25 25番ポートへアクセス helo 自分のFQDNなど mail from:<自分のメールアドレス> コロンとカッコは必要です rcpt to:<相手のメールアドレス>

    前へ  トップへ inserted by FC2 system