Hi Guys,

I’ve managed to get partway through writing up a solution by modifying the 
dispatchCommandHandlers method in the CommandDispatcher class. 

This modification requires TLS for all connections once the connecting client 
has established a  connection state i.e. EHLO/HELO, if a client doesn't’ send 
STARTTLS and stand up a valid SSL connection a 530 response is returned.

This solution isn’t ideal and needs further development:

1) A way to define which servers to require TLS for (Similar to 
authorizedAddresses map?) 

2) Support for IMAP,POP (This will only work for SMTP?) 

3) Stop AUTH field in the server reply from being sent prior to a TLS 
connection has been started


private static final Response TLS_REQUIRED = new SMTPResponse("530", "5.7.0 
Must issue a STARTTLS command first").immutable();


    @Override
    protected Response dispatchCommandHandlers(ProtocolSession session, Request 
request) {
 
        Object ehloState = session.getAttachment(SMTPSession.CURRENT_HELO_MODE, 
ProtocolSession.State.Connection);
        
        //if the ehloState is established, TLS has NOT been started and the 
next command is not STARTTLS then reject user
        if (ehloState != null && !session.isTLSStarted() && 
!"STARTTLS".equalsIgnoreCase(request.getCommand())) {
            return TLS_REQUIRED;
        } else {
            return super.dispatchCommandHandlers(session, request);
        }
    }




Kind regards,

Johnny Minty




From: Phillip Odam
Sent: ‎Wednesday‎, ‎31‎ ‎July‎ ‎2013 ‎1‎:‎32‎ ‎a.m.
To: James Users List


Trouble with a fastfail hook is that it means the client has sent the 
username and password in the clear for the hook to activate.

On 7/30/13 2:09 AM, Jan-Philipp Hülshoff wrote:
> What about doing it with a Hook for fastfail?
> This hook fails the mail command if it is not authenticated. you could
> also use the session.isTLSStarted() or session.isRelayingAllowed().
>
> I'm using that hook on a second SMTP Server on port 465 to force
> everyone to login.
>
>
> public class AuthenticatedSMTPOnlyHandler implements MailHook {
>        
>        public AuthenticatedSMTPOnlyHandler(){
>                
>        }
>
>        @Override
>        public HookResult doMail(SMTPSession session,
>            MailAddress adress) {
>                //session.isTLSStarted()
>                //session.isRelayingAllowed()
>                if (session.getUser() == null){
>                        return new HookResult(
>                            HookReturnCode.DENY,
>                            SMTPRetCode.AUTH_REQUIRED,
>                            DSNStatus.getStatus(
>                             DSNStatus.PERMANENT,
>                             DSNStatus.SECURITY_AUTH+
>                             " Authentication is required."));
>                }
>                if(session.getUser().trim().length() == 0){
>                        return new HookResult(
>                            HookReturnCode.DENY,
>                            SMTPRetCode.AUTH_REQUIRED,
>                            DSNStatus.getStatus(
>                              DSNStatus.PERMANENT,
>                              DSNStatus.SECURITY_AUTH+
>                              " Authentication is required."));
>                }
>                return HookResult.ok();
>        }
> }
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org
> For additional commands, e-mail: server-user-h...@james.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org
For additional commands, e-mail: server-user-h...@james.apache.org

Reply via email to