POSTFIX: Membatasi tingkat di mana pengguna tertentu dapat mengirim email


13

Kami memiliki pengaturan server CentOS server yang menampung situs web dan server email kami (menggunakan POSTFIX). Kami mengelola sistem menggunakan Virtualmin dan Webmin masing-masing.

Secara umum untuk setiap situs yang kami setup kami menyediakan pelanggan dengan akun email di sistem kami. Satu pelanggan khususnya telah memutuskan itu ide yang baik untuk mengirim ribuan email dalam jumlah besar. Ketika ini terjadi, server email akan menjadi tidak responsif dan email untuk pelanggan lain akan turun saat antrian diproses.

Adakah cara kita dapat membatasi laju pengiriman email untuk satu pengguna sistem tertentu daripada semua orang? Apakah ada pengaturan yang harus kita ubah sehingga tidak ada yang dapat dilakukan pengguna dapat menyebabkan server email mulai gagal untuk pengguna lain?

Terima kasih

Jawaban:



23

Bagi saya, semua jawaban lain untuk pertanyaan lama ini hanya tautan saja. Jadi saya akan menjelaskan dalam beberapa kata bagaimana menerapkan solusi favorit saya untuk pekerjaan ini.

The Link yang @ 84.104 telah menyarankan, meskipun sangat berguna, tidak dapat digunakan untuk tingkat per pengirim benar menerapkan. smtpd_clientbatas bukan untuk kontrol lalu lintas melainkan untuk membantu dengan perangkat lunak klien: "Tindakan terhadap klien yang membuat terlalu banyak koneksi". Meskipun satu dapat menemukan rekomendasi seperti ini salah satu yang pasti dapat membantu. Sebagai @E. Yazici telah menyarankan, addon untuk postfix diperlukan. Secara pribadi saya menemukan policyd seperti yang direkomendasikan oleh @Janne Pikkarainen agak rumit meskipun dianggap standar.

Addon favorit saya adalah postfwd karena ringan dan mudah. Perlu juga dicatat bahwa ini bekerja sangat mudah dengan Plesk atau yang serupa lainnya, tanpa mempengaruhi sekumpulan file konfigurasi Plesk yang rumit. Batas laju email di Plesk hanya diterapkan di versi 12 tetapi fitur kebijakan masih terbatas.

Pertama unduh addon terbaru dari situs di atas. Saya percaya tidak ada rpm untuk CentOS, berbeda dengan Ubuntu dan Debian. Namun demikian, disarankan agar versi terbaru digunakan. Lebih khusus lagi, versi 1.32 (yang ada di mis. Repo Ubuntu 14.04LTS) memiliki bug jahat yang mencegahnya berfungsi dengan tepat. Versi 1.35 menyelesaikan masalah ini.

Pastikan bahwa ini modul PERL yang hadir. Jika menggunakan Debian atau Ubuntu Anda dapat menginstal dari repos sehingga semua dependensi secara otomatis diurutkan dan kemudian ganti /usr/sbin/postfwddengan versi terbaru.

Lalu buat aturan. Buat file seperti /etc/postfwd.cfatau /etc/postfix/postfwd.cfdan tambahkan:

id=R001; sender=~/.*/; action=rate(sender/100/86400/REJECT only 100 messages per day for $$sender)
id=R002; sender=~/.*/; action=rate(sender/50/3600/REJECT only 50 messages per hour for $$sender)

Set aturan di atas jelas memiliki dua aturan yang mengevaluasi semua pengirim. Sintaks ratetindakan adalah:

rate (<item>/<max>/<time in sec>/<action>)

Contoh harga lainnya dapat ditemukan di sini . Referensi ke sintaks dapat ditemukan pada dokumentasi . Diskusi serupa dapat ditemukan di sini . Jika SASL dilaksanakan (misalnya dovecot) Anda dapat dengan aman ganti senderdengan sasl_username. Anda dapat menguji validitas aturan dengan -Copsi:

postfwd -f /etc/postfwd.cf -C

Setelah itu, Anda dapat secara opsional membuat pengguna dan grup khusus postfwdtempat postfwd akan berjalan dan meluncurkannya:

postfwd --daemon -f /etc/postfwd.cf -u postfwd -g postfwd 

Dalam hal menginstalnya dari apt (Debian, Ubuntu dll), harus ada file konfigurasi di bawah /etc/default/postfwddan Anda dapat memulai layanan dengan benar, misalnya sudo service postfwd start.

Kemudian lihat log untuk memverifikasi bahwa postfwd mendengarkan. Postfwd menggunakan log yang sama dengan postfix (misalnya /var/log/mailatau /usr/local/psa/var/log/mailloglain - lain) dan sebuah baris seperti yang postfwd 1.35 ready for inputseharusnya ada.

Kemudian, beri tahu postfix untuk menggunakan postfwd. Edit file conf postfix (biasanya /etc/postfix/main.cf) dan di baris:

smtpd_recipient_restrictions = permit_mynetworks,...

tambah check_policy_service inet:127.0.0.1:10040. Harap pertimbangkan bahwa urutan tempat Anda memasukkan ini smtpd_recipient_restrictionssangat penting dan Anda dapat menghabiskan banyak waktu untuk mendiagnosis apa yang salah. Seperti dijelaskan dalam pertanyaan ini , jika satu pemeriksaan mengembalikan OK atau TOLAKAN maka postfix tidak melanjutkan ke yang berikutnya, jadi Anda mungkin harus menempatkan ini tinggi.

Terakhir, untuk memeriksa apakah ini berfungsi, Anda dapat menentukan batas yang sangat kecil seperti 1 atau bahkan menambahkan aturan id=DEFAULT; action=dunno. Lagipula aturan apa pun akan dicatat. Harap perhatikan juga bahwa batas nilai per pengirim tidak membedakan antara email mulitple dengan satu penerima atau satu email dengan banyak penerima.

Kemudian kirim email dari akun (di server itu) dan lihat log:

grep "RULES" /var/log/mail

Tautan lain: quickstart postfwd .


1
ledakan dari masa lalu pertanyaan ini! terima kasih telah meluangkan waktu untuk memberikan jawaban yang dipikirkan dengan matang. Saya terkesan!
WarpKid

1
versi postfix barfs saya pada sembarang smtpd_recipient_restrictionsentri dengan spasi di dalamnya, jadi saya harus mendefinisikan postfwd_ratelimit = check_policy_service inet:127.0.0.1:10040di /etc/postfix/main.cf dan kemudian merujuknya di /etc/postfix/master.cf assmtpd_recipient_restrictions=...,$postfwd_ratelimit,...
Tom McClure

Untuk me-restart postfix di Ubuntu:sudo postfwd -f /etc/postfix/postfwd.cf --pidfile=/var/run/postfwd.pid --reload
Wtower

Menggunakan Ubuntu 16,04 setidaknya, saya menemukan bahwa saya perlu mengubah wildcard dalam aturan untuk menggunakan .+(setidaknya 1) daripada .*(setidaknya 0) sehingga aturan tidak cocok dengan bidang yang tidak ada.
TommyPeanuts

4

Yang Anda butuhkan adalah tambahan kebijakan untuk Postfix. Ada selusin add-on kebijakan untuk Postfix, beberapa dari mereka memiliki fitur pembatasan tingkat. Anda dapat menemukan daftar tambahan kebijakan Postfix di sini .



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.