POSTFIX: Belirli bir kullanıcının e-posta gönderme hızını sınırlama


13

Web sitelerimizi ve e-posta sunucumuzu (POSTFIX kullanarak) barındıran bir sunucu CentOS sunucu kurulumumuz var. Sistemi sırasıyla Virtualmin ve Webmin kullanarak yönetiyoruz.

Genel olarak kurduğumuz her site için müşteriye sistemimizde bir e-posta hesabı sağlıyoruz. Özellikle bir müşteri, binlerce e-postayı toplu olarak göndermenin iyi bir fikir olduğuna karar verdi. Bu durumda, posta sunucusu yanıt vermeyecek ve kuyruk işlenirken diğer müşteriler için postalar azalacaktır.

Herkesin değil, sistemin belirli bir kullanıcısı için gönderilen e-posta oranını sınırlamanın bir yolu var mı? Ayrıca, kullanıcının yapamayacağı hiçbir şeyin posta sunucusunun diğer kullanıcılar için başarısız olmasına neden olabilmesi için değiştirmemiz gereken bir ayar var mı?

Teşekkürler

Yanıtlar:



23

Bu eski soruya verilen tüm diğer cevapların sadece bağlantıya sahip olması bana çarpıcı geliyor. Bu yüzden, bu iş için en sevdiğim çözümü nasıl uygulayacağımı birkaç kelimeyle açıklayacağım.

Bağlantı olduğunu 84104 @ çok faydalı olmasına rağmen, düzgün gönderen başına oranını uygulamak için kullanılamaz, önerdi. smtpd_clientlimitler trafik kontrolü için değil, istemci yazılımına yardımcı olmak içindir: "Çok fazla bağlantı yapan istemcilere karşı önlemler". Tek bu gibi öneriler bulabilirsiniz rağmen biri kesinlikle yardımcı olabilir. As @E. Yazici önerdi, postfix için bir eklenti gerekli. Şahsen bulmak policyd tarafından tavsiye edildiği @Janne Pikkarainen oldukça zahmetlidir bir standart olarak kabul edilir olsa da.

En sevdiğim eklenti postfwd çünkü hafif ve kolay. Bunun, Plesk'in karmaşık yapılandırma dosyaları setini etkilemeden Plesk veya diğer benzerleriyle çok kolay çalıştığını da belirtmek gerekir. Plesk'teki e-posta hızı sınırı yalnızca sürüm 12'de uygulanmıştır, ancak yine de ilke özellikleri sınırlıdır.

İlk önce yukarıdaki siteden en son eklentiyi indirin. Ubuntu ve Debian'ın aksine CentOS için rpm olmadığına inanıyorum. Bununla birlikte, en son sürümün kullanılması tavsiye edilir. Daha spesifik olarak, sürüm 1.32 (örn. Ubuntu 14.04LTS depolarında bulunur), düzgün çalışmasını engelleyen kötü bir hataya sahiptir. Sürüm 1.35 bunu sıralar.

Bu PERL modüllerinin mevcut olduğundan emin olun . Debian veya Ubuntu kullanıyorsanız , tüm bağımlılıkların otomatik olarak sıralanması ve /usr/sbin/postfwden son sürümle değiştirilmesi için depolardan yükleyebilirsiniz .

Sonra kural kümesini oluşturun. /etc/postfwd.cfVeya gibi bir dosya oluşturun /etc/postfix/postfwd.cfve ekleyin:

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)

Yukarıdaki kural kümesinin tüm gönderenler için değerlendirilen iki kuralı vardır. rateEylemin sözdizimi :

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

Diğer ücret örnekleri burada bulunabilir . Sözdizimi referansı dokümanlarda bulunabilir . Benzer tartışma burada bulunabilir . SASL uygulanması halinde (örneğin güvercinlik) güvenle yerini alabilir senderile sasl_username. Kural kümesinin geçerliliğini şu seçenekle test edebilirsiniz -C:

postfwd -f /etc/postfwd.cf -C

Daha sonra, isteğe bağlı olarak postfwdpostfwd'nin çalışacağı özel bir kullanıcı ve grup oluşturabilir ve başlatabilirsiniz:

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

Apt'den (Debian, Ubuntu vb.) Yüklenmiş olması durumunda, altında bir yapılandırma dosyası da olmalıdır /etc/default/postfwdve hizmeti düzgün bir şekilde başlatabilirsiniz, örn sudo service postfwd start.

Ardından postfwd öğesinin dinlediğini doğrulamak için günlüğe bakın. Postfwd, postfix (örn. /var/log/mailVeya /usr/local/psa/var/log/maillogvb.) İle aynı günlüğü ve postfwd 1.35 ready for inputyerinde olması gereken bir satırı kullanır .

Ardından, postfix'in postfwd kullanmasını bildirin. Postfix conf dosyasını (genellikle /etc/postfix/main.cf) ve satırda düzenleyin:

smtpd_recipient_restrictions = permit_mynetworks,...

ekleyin check_policy_service inet:127.0.0.1:10040. Bunu koyduğunuz siparişin smtpd_recipient_restrictionsbüyük önem taşıdığını ve neyin yanlış olabileceğini teşhis etmek için çok fazla zaman harcayabileceğinizi lütfen unutmayın. Bu soruda açıklandığı gibi , bir onay TAMAM veya REJECT döndürürse, postfix bir sonrakine devam etmez, bu yüzden muhtemelen bu kadar yükseğe yerleştirmelisiniz.

Son olarak, bunun işe yarayıp yaramadığını kontrol etmek için 1 gibi çok küçük bir sınır belirtebilir veya hatta bir kural ekleyebilirsiniz id=DEFAULT; action=dunno. Herhangi bir kural isabeti yine de kaydedilir. Ayrıca, gönderen başına ücret sınırının, tek bir alıcıya sahip birden fazla e-posta veya birden çok alıcıya sahip tek bir e-posta arasında ayrım yapmadığını unutmayın.

Ardından bir hesaptan (o sunucudaki) bir e-posta gönderin ve günlüğe bakın:

grep "RULES" /var/log/mail

Diğer bağlantılar: postfwd quickstart .


1
bu soru geçmişten gelen bir patlama! bu kadar iyi düşünülmüş bir cevap vermek için zaman ayırdığınız için teşekkür ederiz. Etkilendim!
WarpKid

1
postfix barfs sürümümde smtpd_recipient_restrictionsboşluk bulunan herhangi bir girişte, bu yüzden postfwd_ratelimit = check_policy_service inet:127.0.0.1:10040/etc/postfix/main.cf içinde tanımlamak ve /etc/postfix/master.cf dosyasında bunu referans olarak kullanmak zorunda kaldımsmtpd_recipient_restrictions=...,$postfwd_ratelimit,...
Tom McClure

Postfix'i Ubuntu'da yeniden başlatmak için:sudo postfwd -f /etc/postfix/postfwd.cf --pidfile=/var/run/postfwd.pid --reload
Wtower

En azından Ubuntu 16.04'ü kullanarak, joker karakterleri .+(en az 0) yerine .*(en az 0) kullanmak için kurallarda joker karakteri değiştirmem gerektiğini buldum, böylece kurallar eksik alanlarla eşleşmiyor.
TommyPeanuts

4

İhtiyacınız olan şey Postfix için bir politika eklentisidir. Postfix için bir düzine ilke eklentisi vardır, bazıları hız sınırlama özelliğine sahiptir. Postfix ilke eklentilerinin bir listesini burada bulabilirsiniz .



-1

MySQL adresinden yapılandırılabilen bu politika arka plan programına bakın


2
Sunucu Arızasına Hoşgeldiniz! Bu teorik olarak soruyu cevaplayabilirken, cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak tercih edilir.
masegaloeh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.