JAFS short from Just Another Ftp Server is an enterprise class FTP RFC implementation written in Java.
JAFS can handle multiple FTP server instances concurrently and implements the most modern FTP releated technologies as well as some "home-made" features.
Here are the other main goals :
· A comprehensive configuration interface.
· Must support heavy client load.
· The server must work in any network environment ( ADSL routers ).
· The server architecture is scalable and FTP command implementation can be easily modified/added.
· The server must provide tools and APIs for an easy integration into the server IT environment.
· Reaching a level of functionality equal to commercial software.
· The server must be secure and implement all security related RFC.
Some of these primary goals are reached, but there is still work left to do, especially to complete the JMX administration interface and client load (NIO migration). Provided a better ( on the usability view point ) Web based interface. Finally, many efforts have been made on the security side and this direction will continue to be followed.
Here are some key features of "JAFS":
· Runs on any Java 1.4+ compatible platform tested with most OS JDKs
· Scripts provided for an easy installation as a Windows or Linux system service.
· J2EE Application servers integration. Supports JBoss, Geronimo or Sun AS.
· JBI support (JSR 208), JAFS events sent on the JBI messaging bus to registered JBI components.
· HTTP administration console for server management, SSL or TLS compatible for security, JMX based for scalability. JAAS based for authentication.
· JMX based administration of FTP servers and FTP client sessions.
· Other remote management with external JMX (JSR160) compatible admininistration console via JRMP or IIOP connectors, SSL or TLS based JRMP connector for security. UPnP compatible for RPC NAT traversal. JAAS based for authentication. JMX SOAP connector for web services oriented administration. UPNP JMX connector to access the JMX interface with the UPNP protocol.
· Easily pluggable custom JMX connectors.
· Powerful asynchronous events engine with different events publishers : standard console, JMS messaging, JMX notifications, Jabber IM and E-mail. Perfectly suitable for Enterprise Application Integration and easily pluggable new events listeners for custom EAI needs.
· Generic Unix syslog events listener suitable for IDS integration, Netgear DG834 proof of concept implementation.
· Multiple language support ( English and French, others to come ) for administration console and server clients sessions output.
· JAAS based users authentication realms with differents modules like Windows NT/2K/XP users module or RADIUS module for connection with Radius servers. Easy extendable others JAAS modules.
· One Time Password ( aka S/KEY ) authentication support.
· Powerful logging capabilities using Apache log4j.
· E-mail based server activity report ( using the events engine ).
· Scripting capability for certain outgoing messages.
· Sound events playback support ( new connections, logout ... ).
· Daily, weekly and monthly statistics for total of files uploaded/downloaded, bytes sent/received and more.
· FTP protocol 95% RFC 959 compliant ( SMNT,STRU,ALLO,SITE not implemented ), tested with most popular ftp clients
· Extremely configurable and designed to be easily extended with new custom commands. All protocol commands can be easily reimplemented.
· Server file system directories search command and Wildcard search support for path or file commands ( CWD *some*directory* ).
· Multiple character set support ( CHARSET feature command ) for internationalization.
· On-the-fly compression (MODE Z) support for data transferts.
· FTPS with SSL and TLS support for secure FTP transactions with configurable X509 certificates based access for high security.
· Certificate Revocation List checks to reject revoked X509 certificates.
· Pluggable custom X509 trust managers to check certificate content.
· Use multiple server certificates.
· Multiples network interfaces support for communication.
· IPv6 support for FTP servers and HTTP JMX console.
· IP Black list : block certain IP ranges from your server. Shield against undesired visitors.
· PeerGuardian 1 and 2 IP Block list support, one of the most popular IP block list.
· UPnP support for automatic NAT traversal through UPnP enabled devices. First Java FTP server to bring UPnP support on any OS supporting Java.
· Fully working with hosts using dynamic IP, such as ADSL based internet access, DynDNS integrated client for dynamic IP's updates.
· Independent filesystem rights configuration for each files and directories. More available rights than OS rights which follow FTP protocol fonctionnalities.
· Integrated WHOIS client using Geektools whois server.
· Site content list and news list generator.
· Server side SVF checksum files generation.
· XCRC and MD5 commands support for files integrity checks after download/upload.
· Extendable upload and download filter to control incoming and outgoing file content.
· Unique feature : MP3 filter implementation provided to reject or accept uploaded MP3 files according to user defined settings ( minimal bitrate... ).
· Read MP3 files properties on the server.
· Server side M3U files generator.
What's New in This Release:
· Providing a new JBI Jafs release, the implementation allows deploys jafs as an JBI components and allows others components on the JBI container to register for JAFS events notifications. A client component is also provided to simplify registration/unregistration and events reading. (SBB)
· Adding new classes to deploy JAFS as a JBoss service (net.sbbi.jafs.services.as.JbossFtpServerService), as a Sun AS / Glassfish lifecycle module (net.sbbi.jafs.services.as.SunFtpServerService) and finally as a Geronimo GBean (net.sbbi.jafs.services.as.GeronimoFtpServerServiceGBean). Look at the classes Javadoc and integration doc for instructions. (SBB)
· RFC 4217 compliance (Securing FTP with TLS), adding CCC commmand implementation and two new user settings ( secureControlTransport and secureDataTransport ) to define if a logged in user must use or not secure data or control channels. (SBB)
· The username setting can now be evaluated as an regular expression, as well as the user name filesystem config binding. The userhome can also be evaluated with the provided username at runtime using the $USERNAME and $UNRE:$regexp:$UNRE keywords. (SBB)
· New UPNP Adapter added : net.sbbi.jafs.management.UPNPMBeansAdapter. Expose the JAFS JMX interface as UPNP devices. (SBB)
· Adding an new mbeans-prefix setting to the JMX config. (SBB)
· New events listener added (net.sbbi.jafs.eventslisteners.JMXNotificationEventsListener) to forward received events as JMX notifications using a model MBean. (SBB)
· New setting (asynchronous) to define if an events listener must handle events asynchronously or not. (SBB)
· Some events fields where not correctly reset after event dispatching and always resend even when not needed. (SBB)
· New script provided ( bin/compile.bat|sh ) to easily recompile the source code. Another script ( bin/SDK_unpack.bat|sh ) to convert lzma archives to jar archives and to repack jar archives to lzma archives ( bin/SDK_pack.bat|sh ). (SBB)
· Adding an input/output buffer size setting to network interface config. (SBB)
· Opts and UTF8 commands support added. New setting added to the Mode command to define the compression level in MODE Z. (SBB)
· Changing the server behaviour to be RFC compliant when a bad username/password pair is provided. The server does not disconnects anymore the client. (SBB) Thanks to Heri.
· Fixing a bug with hidden files and adding a new filesystem setting (hf) to manage hidden files settings. (SBB) Thanks to Heri.
· Adding a new setting : active mode down and up source sockets ports range to fine tune your firewall. (SBB) Thanks to Desummoner.