POSTFIX: การ จำกัด อัตราที่ผู้ใช้สามารถส่งอีเมลได้


13

เรามีการตั้งค่าเซิร์ฟเวอร์ CentOS เซิร์ฟเวอร์ซึ่งโฮสต์เว็บไซต์และเซิร์ฟเวอร์อีเมลของเรา (ใช้ POSTFIX) เราจัดการระบบโดยใช้ Virtualmin และ Webmin ตามลำดับ

โดยทั่วไปสำหรับทุกไซต์ที่เราตั้งค่าเราจะให้บัญชีอีเมลแก่ลูกค้าในระบบของเรา โดยเฉพาะลูกค้ารายหนึ่งได้ตัดสินใจว่าควรส่งอีเมลเป็นพัน ๆ ตัวเป็นกลุ่ม เมื่อสิ่งนี้เกิดขึ้นเซิร์ฟเวอร์อีเมลจะไม่ตอบสนองและอีเมลสำหรับลูกค้ารายอื่นจะลดลงในขณะที่มีการประมวลผลคิว

มีวิธีที่เราสามารถ จำกัด อัตราการส่งอีเมลสำหรับผู้ใช้หนึ่งรายของระบบมากกว่าทุกคนหรือไม่? นอกจากนี้ยังมีการตั้งค่าที่เราควรเปลี่ยนเพื่อให้ผู้ใช้ไม่สามารถทำอะไรได้อาจทำให้เซิร์ฟเวอร์เมลเริ่มต้นล้มเหลวสำหรับผู้ใช้รายอื่น

ขอบคุณ

คำตอบ:



23

มันทำให้ฉันรู้สึกว่าคำตอบอื่น ๆ สำหรับคำถามเก่านี้คือลิงก์อย่างเดียว ดังนั้นฉันจะอธิบายในไม่กี่คำวิธีการใช้โซลูชันโปรดของฉันสำหรับงานนี้

ลิงค์ที่@ 84104ได้แนะนำแม้จะมีประโยชน์มากไม่สามารถนำมาใช้จะต้องใช้อัตราการส่งต่อ smtpd_clientขีด จำกัด ไม่ได้มีไว้สำหรับการควบคุมปริมาณการเข้าใช้ แต่จะช่วยด้วยซอฟต์แวร์ไคลเอนต์: "มาตรการต่อลูกค้าที่ทำการเชื่อมต่อมากเกินไป" แม้ว่าหนึ่งสามารถหาคำแนะนำเช่นนี้หนึ่งว่ามันอาจจะแน่นอนช่วยเหลือ ในฐานะ@E Yaziciได้แนะนำเป็น addon สำหรับpostfixเป็นสิ่งจำเป็น โดยส่วนตัวฉันพบpolicydตามคำแนะนำของ@Janne Pikkarainenค่อนข้างยุ่งยากแม้ว่าจะถือว่าเป็นมาตรฐาน

addon ที่ฉันชอบคือpostfwdเพราะเบาและง่าย นอกจากนี้ยังเป็นที่น่าสังเกตว่าสิ่งนี้สามารถทำงานได้อย่างง่ายดายกับ Plesk หรืออื่น ๆ ที่คล้ายกันโดยไม่กระทบกับชุดไฟล์การตั้งค่าที่ซับซ้อนของ Plesk การ จำกัด อัตราอีเมลใน Plesk ได้รับการดำเนินการเฉพาะในเวอร์ชัน 12 แต่ยังคงมีคุณสมบัตินโยบายที่ จำกัด

ดาวน์โหลดแอดออนล่าสุดจากเว็บไซต์ข้างต้นก่อน ฉันเชื่อว่า CentOS ไม่มีรอบต่อนาทีตรงกันข้ามกับ Ubuntu และ Debian อย่างไรก็ตามขอแนะนำให้ใช้เวอร์ชันล่าสุด โดยเฉพาะอย่างยิ่งรุ่น 1.32 (ซึ่งมีอยู่ในเช่น. repos Ubuntu 14.04LTS) มีข้อผิดพลาดที่น่ารังเกียจที่ป้องกันไม่ให้ทำงานได้อย่างเหมาะสม เวอร์ชั่น1.35เรียงลำดับตามนี้

ตรวจสอบให้แน่ใจว่าโมดูล PERL เหล่านี้มีอยู่ หากใช้ Debian หรือUbuntuคุณสามารถติดตั้งจาก repos เพื่อให้การอ้างอิงทั้งหมดได้รับการแยกออกโดยอัตโนมัติแล้วแทนที่/usr/sbin/postfwdด้วยรุ่นล่าสุด

จากนั้นสร้างชุดกฎ สร้างไฟล์เช่น/etc/postfwd.cfหรือ/etc/postfix/postfwd.cfและเพิ่ม:

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)

กฎข้างต้นมีกฎสองข้อที่เห็นได้ชัดสำหรับผู้ส่ง ไวยากรณ์ของการrateดำเนินการคือ:

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

ตัวอย่างอัตราอื่น ๆ สามารถพบได้ที่นี่ อ้างอิงถึงไวยากรณ์ที่สามารถพบได้ในเอกสาร การอภิปรายที่คล้ายกันสามารถพบได้ที่นี่ หาก SASL จะดำเนินการ (เช่นพิราบ) คุณสามารถแทนที่ด้วยsender sasl_usernameคุณสามารถทดสอบความถูกต้องของ ruleset ด้วย-Cตัวเลือก:

postfwd -f /etc/postfwd.cf -C

หลังจากนั้นคุณสามารถสร้างผู้ใช้และกลุ่มเฉพาะpostfwdภายใต้ postfwd ที่จะเรียกใช้และเปิดใช้งาน:

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

ในกรณีที่มีการติดตั้งจากฉลาด (เดอูบุนตู ฯลฯ ) นอกจากนี้ยังควรจะมีการตั้งค่าไฟล์ภายใต้และคุณสามารถเริ่มให้บริการได้อย่างถูกต้องเช่น/etc/default/postfwdsudo service postfwd start

จากนั้นดูที่บันทึกเพื่อตรวจสอบว่า postfwd กำลังฟังอยู่ Postfwd ใช้บันทึกเดียวกันกับ postfix (เช่น/var/log/mailหรือ/usr/local/psa/var/log/maillogอื่น ๆ ) และบรรทัดตามที่postfwd 1.35 ready for inputควรมีอยู่

จากนั้นให้ postfix ทราบว่าใช้ postfwd แก้ไขไฟล์ conf postfix (ปกติ/etc/postfix/main.cf) และในบรรทัด:

smtpd_recipient_restrictions = permit_mynetworks,...

check_policy_service inet:127.0.0.1:10040เพิ่ม โปรดพิจารณาว่าคำสั่งซื้อที่คุณวางไว้ภายในsmtpd_recipient_restrictionsนั้นมีความสำคัญอย่างยิ่งและคุณอาจต้องเสียเวลาในการวินิจฉัยว่าอะไรผิดพลาด ตามที่อธิบายไว้ในคำถามนี้หากการตรวจสอบครั้งเดียวส่งคืนตกลงหรือปฏิเสธไม่ให้โพสต์ต่อไปยังหน้าถัดไปดังนั้นคุณควรวางสูงนี้

ที่ผ่านการตรวจสอบว่างานนี้คุณสามารถระบุวงเงินที่น้อยมากเช่น 1 id=DEFAULT; action=dunnoหรือแม้กระทั่งการเพิ่มกฎเป็น กฎการเข้าชมใด ๆ ก็ตามจะถูกบันทึกไว้ โปรดทราบว่าขีด จำกัด อัตราต่อผู้ส่งไม่ได้แยกความแตกต่างระหว่างอีเมลที่มีจำนวนมากกับผู้รับคนเดียวหรืออีเมลเดียวที่มีผู้รับหลายคน

จากนั้นส่งอีเมลจากบัญชี (ในเซิร์ฟเวอร์นั้น) และดูที่บันทึก:

grep "RULES" /var/log/mail

การเชื่อมโยงอื่น ๆ : QuickStart postfwd


1
ระเบิดจากคำถามนี้ที่ผ่านมา! ขอบคุณที่สละเวลาในการตอบคำถามที่คิดออกมาดี ผมประทับใจ!
WarpKid

1
รุ่น barfix postfix ของฉันในsmtpd_recipient_restrictionsรายการใด ๆ ที่มีช่องว่างในนั้นดังนั้นฉันต้องกำหนดpostfwd_ratelimit = check_policy_service inet:127.0.0.1:10040ใน /etc/postfix/main.cf แล้วอ้างอิงใน /etc/postfix/master.cf เช่นsmtpd_recipient_restrictions=...,$postfwd_ratelimit,...
Tom McClure

ในการรีสตาร์ท postfix ใน Ubuntu:sudo postfwd -f /etc/postfix/postfwd.cf --pidfile=/var/run/postfwd.pid --reload
Wtower

เมื่อใช้ Ubuntu 16.04 เป็นอย่างน้อยฉันพบว่าฉันต้องการเปลี่ยนไวด์การ์ดในกฎที่จะใช้.+(อย่างน้อย 1) แทนที่จะเป็น.*(อย่างน้อย 1) เพื่อให้กฎไม่ตรงกับฟิลด์ที่หายไป
TommyPeanuts

4

สิ่งที่คุณต้องมีคือนโยบายเพิ่มเติมสำหรับ Postfix มี addon นโยบายโหลสำหรับ Postfix บางคนมีคุณสมบัติ จำกัด อัตรา คุณสามารถค้นหารายชื่อของ Postfix addons นโยบายที่นี่



-1

ตรวจสอบนโยบายนี้ daemon กำหนดค่าได้จาก mysql http://www.simonecaruso.com/limit-sender-rate-in-postfix/


2
ยินดีต้อนรับสู่ Server Fault! ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
masegaloeh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.