[linux] Postfix + Greylist
Lubomir Host
rajo na platon.sk
Středa Prosinec 15 22:28:06 CET 2004
On Wed, Dec 15, 2004 at 09:08:02PM +0100, Lubos Vitek wrote:
> neviem ci toto prave pomoze, aj ked za pokus to mozno stoji. problem je
> v tom, ze do tych tabuliek sa zapisuju, citaju a mazu udaje nasledovne:
>
> -- zo stranky postgrey: --
> When a request for delivery of a mail is received by Postfix via SMTP,
> the triplet CLIENT_IP / SENDER / RECIPIENT is built. If it is the first
> time that this triplet is seen, or if the triplet was first seen less
> than 5 minutes, then the mail gets rejected with a temporary error.
> Hopefully spammers or viruses will not try again later, as it is however
> required per RFC.
> ----
>
>
> kazdy mail klient, ktory sa konektne na server sa teda overuje trojicou
> CLIENT_IP / SENDER / RECIPIENT. Samozrejme tabulka je zindexovana podla
> ip, sender a recipient. V pripade prveho vyskytu sa insertuje novy
> zaznam. V pripade opakovaneho vyskytu sa prislusny zaznam updatne (pole
> last_seen).
>
> paralelne k tomu bezi cronjob, ktory kontroluje a maze vsetky zaznamy,
> ktore maju cas poslednej zmeny > X dni a pass_count = 0 (SPAM servre,
> ktore sa vyskytli len raz a pod.). V praxi to je na nasom servri a pri
> nasej trafike ca. 5000-15000 zaznamov pri kazdom mazani. aj napriek tomu
> mazaniu rastie tabulka spominanou rychlostou 10-100tis zaznamov za
> tyzden.
>
> problem je v tom, ze cas pre selecty aj updaty samozrejme stale rastie a
> mysql z pohladu mailservra timeoutuje.
Ked uz pises, ze mas upraveny postgrey pre MySQL, tak by som ho vylepsil.
Je jasne, ze pri takomto algoritme a vypoctovom vykone, aky mas
k dispozicii, to nemoze zvladat taketo objemy dat.
Hlavny problem je pravdepodobne v query cache. Tu ale asi potrebujes, aby ti
selecty zbehli rychlo. Cize musis zabezpecit, aby sa pri updatoch
zbytocne nezneplatnovala. (To zistis jednoducho: sprav nejaky update
a zapis si cas vykonavania. Zbehni nejake selecty, nech sa dobre
nacachuju. A znovu pusti ten isty update. Cas vykonavania by sa mal
zvysit asi tak zo zlomkov sekund az na desiatky sekund).
Navrhoval by som skusit taketo:
- zrusit niektory z indexov (napr. RECIPIENT). MySQL bude menej casu
travit updatovanim tohto indexu, kedze na serveri mozno nemas az tak
vela userov.
- alebo obmedzit dlzku indexov
- zmenit politiku prace so zaznamami v tabulkach. Vytvorit jednu merge
tabulku, odkial selectujes. Insertovat/updatovat do jednej tabulky. Zvysne
2 miliony zaznamov nechat v tabulkach, ktore nebudes modifikovat tak
casto. Cronom z tej insertovacej tabulky popreklapat starsie zaznamy
alebo uz vyskytujuce sa zaznamy do tych ostatnych tabuliek, pripadne
poupravovat pass_count v tych tabulkach na zaklade insertovacej
tabulky a duplicitne zaznamy z insertovacej tabulky zmazat.
Tolko zopar mojich tipov. Viac ma momentalne nenapada.
rajo
--
Lubomir Host 'rajo' <rajo AT platon.sk> ICQ #: 257322664
Platon Software Development Group http://platon.sk/
http://www.gnu.org/philosophy/no-word-attachments.html
Další informace o konferenci linux