Differences between revisions 30 and 31
Revision 30 as of 2007-03-26 19:26:54
Size: 4480
Editor: SteveBrewin
Comment:
Revision 31 as of 2009-09-20 22:58:32
Size: 4514
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 25: Line 25:
[http://james.apache.org/javadocs/org/apache/james/smtpserver/SMTPServer.html SMTPServer] block - the __New SMTP Block__. [[http://james.apache.org/javadocs/org/apache/james/smtpserver/SMTPServer.html|SMTPServer]] block - the __New SMTP Block__.
Line 28: Line 28:
[http://james.apache.org/javadocs/org/apache/james/transport/JamesSpoolManager.html JamesSpoolManager]:
 * [http://james.apache.org/javadocs/org/apache/james/transport/JamesSpoolManager.html JamesSpoolManager] hosts a family of ([http://james.apache.org/javadocs/org/apache/mailet/Matcher.html matcher] [http://james.apache.org/javadocs/org/apache/mailet/Mailet.html mailet]) pairs
[[http://james.apache.org/javadocs/org/apache/james/transport/JamesSpoolManager.html|JamesSpoolManager]]:
 * [[http://james.apache.org/javadocs/org/apache/james/transport/JamesSpoolManager.html|JamesSpoolManager]] hosts a family of ([[http://james.apache.org/javadocs/org/apache/mailet/Matcher.html|matcher]] [[http://james.apache.org/javadocs/org/apache/mailet/Mailet.html|mailet]]) pairs
Line 43: Line 43:
Similar to [http://loom.codehaus.org/Component+layers Regular Phoenix Blocks] ./ProtocolLet s will be able to depend on other Blocks inside James Phoenix Application. Similar to [[http://loom.codehaus.org/Component+layers|Regular Phoenix Blocks]] ./ProtocolLet s will be able to depend on other Blocks inside James Phoenix Application.
Line 46: Line 46:
If timeframe permits I may try to implement integration with scripting languages. There's nothing impossible in ./ProtocolLet s being written in [http://www.beanshell.org/ BeanShell], [http://www.jython.org/ Jython], [http://www.mozilla.org/rhino/ JavaScript]. If timeframe permits I may try to implement integration with scripting languages. There's nothing impossible in ./ProtocolLet s being written in [[http://www.beanshell.org/|BeanShell]], [[http://www.jython.org/|Jython]], [[http://www.mozilla.org/rhino/|JavaScript]].
Line 53: Line 53:
 * Totally revamped drop-in replacement for the existing [http://james.apache.org/javadocs/org/apache/james/smtpserver/SMTPServer.html SMTPServer]  * Totally revamped drop-in replacement for the existing [[http://james.apache.org/javadocs/org/apache/james/smtpserver/SMTPServer.html|SMTPServer]]
Line 57: Line 57:
[http://archive.apache.org/dist/avalon/phoenix/ Apache Phoenix], [http://junit.sourceforge.net/ JUnit], [http://mx4j.sourceforge.net/ MX4J], [https://sourceforge.net/projects/mc4j/ MC4J], in the optimistic scenario [http://www.beanshell.org/ BeanShell], [http://www.jython.org/ Jython], [http://www.mozilla.org/rhino/ JavaScript]. [[http://archive.apache.org/dist/avalon/phoenix/|Apache Phoenix]], [[http://junit.sourceforge.net/|JUnit]], [[http://mx4j.sourceforge.net/|MX4J]], [[https://sourceforge.net/projects/mc4j/|MC4J]], in the optimistic scenario [[http://www.beanshell.org/|BeanShell]], [[http://www.jython.org/|Jython]], [[http://www.mozilla.org/rhino/|JavaScript]].
Line 62: Line 62:
||12 Jul||0.1|| New SMTP Server instantiates ./ProtocolLet s injects dependecies[[BR]]XML configuration reading/writing works|| ||12 Jul||0.1|| New SMTP Server instantiates ./ProtocolLet s injects dependecies<<BR>>XML configuration reading/writing works||
Line 65: Line 65:
||1 Sep||1.0||Discovered bugs fixed [[BR]] Some requests for enhancement implemented [[BR]] If timeframe has permitted initial scripting language integration implemented|| ||1 Sep||1.0||Discovered bugs fixed <<BR>> Some requests for enhancement implemented <<BR>> If timeframe has permitted initial scripting language integration implemented||

Hello!

I'm Sergey Lubinskiy. I study at http://www.msu.ru/en/ department of physics. I'm keen of programming. Although I don't specialize in it I posses a considerable load of knowledge on Java and internet. I like hacking hiking and bike-riding :-)

My friends think that I tend to think and code a bit too academically. But I hope this will only help me to participate in the summer of code program. Here's my proposal.

Problem

James mail server performs reasonably well under normal load. Heavy spam and virus traffic or dos attacks can significantly degrade its performance. Under the current design we can not discard SMTP message until it has been completely recieved and saved to filesystem or database. Combating spam requires us to adopt an alternative strategy - cut TCP connections judging on senders IP, RCPT, FROM and alike without even looking inside the message.

Another issue is that under the current design very little control is possible over a running instance of James mail server - the main configuration method is to edit configuration manually and then restart (which takes significant time).

Proposed solutions

Following FastFail proposal by DannyAngus and NoelBergman I intend to implement a drop-in replacement for SMTPServer block - the New SMTP Block.

The New SMTP Block will be close in design to JamesSpoolManager:

POJO/JMX/XML Configuration Convergence

One of the key features of the proposed ./ProtocolLet desing is a rich runtime configuration model. The New SMTP Block will be able to

  • read/write configuration of each ./ProtocolLet in XML format

  • expose all of the ./ProtocolLet s as managed beans

  • for each of ./ProtoclLet s' managed beans provide a JMX attribute for setting and getter configuration

  • expose JMX operations for reordering ./ProtocolLet s taking them down and creating new ones

All the metadata about a ./ProtocolLet will be extracted by introspecting the implementating class. Both XML format and JMX interface will be derived products.

ProtocolLets As A New Kind Of Components

Similar to Regular Phoenix Blocks ./ProtocolLet s will be able to depend on other Blocks inside James Phoenix Application.

Future Directions

If timeframe permits I may try to implement integration with scripting languages. There's nothing impossible in ./ProtocolLet s being written in BeanShell, Jython, JavaScript.

Advantages for ASF

  • A solid foundation for RBL/SPF/white-gray listing/Fill-In-Yours FastFail spam blocking

  • Possibly a new insight on COP via POJO/XML/JMX configuration convergence

Deliverables

  • Totally revamped drop-in replacement for the existing SMTPServer

  • Possibly patches for ASF COP containers.

Open Source Software Used

Apache Phoenix, JUnit, MX4J, MC4J, in the optimistic scenario BeanShell, Jython, JavaScript.

Schedule

Date

Milestone

Features

22 Jun

The expected end of examination session, start active coding

12 Jul

0.1

New SMTP Server instantiates ./ProtocolLet s injects dependecies
XML configuration reading/writing works

25 Jul

0.2

JMX management of ./ProtocolLet s works

14 Aug

0.5

Several real-life ./ProtocolLet s are written, they do some useful spam blocking

1 Sep

1.0

Discovered bugs fixed
Some requests for enhancement implemented
If timeframe has permitted initial scripting language integration implemented

SummerOfCode2005/SergeyLubinskiyFastFail (last edited 2009-09-20 22:58:32 by localhost)