## ProFTPD Modules

Modules ProFTPD uses APIs and a build system capable of including plugins, or modules, to enable new functionality or to enhance existing behavior.

Default Modules The following modules are always included in a ProFTPD build. The source code for these modules resides in the `modules/` directory.

Module | Description
`mod_auth` | Implements FTP authentication commands: `USER`, `PASS`, `ACCT`, `REIN`
`mod_auth_file` | Implements file-based authentication
`mod_auth_unix` | Implements traditional Unix-based authentication
`mod_core` | Implements most of the main FTP commands
`mod_delay` | Implements algorithms to protect against information leaks via timing attacks
`mod_facts` | Implements modern FTP commands for directory listing
`mod_log` | Implements main ProFTPD logging
`mod_ls` | Implements legacy FTP commands for directory listing
`mod_site` | Implements FTP `SITE` commands
`mod_xfer` | Implements FTP file transfer commands: `STOR`, `RETR`, `APPE`, `REST`, `ABOR`, `TYPE`, `STRU`, `MODE`, `ALLO`, `SMNT`, `STOU`

Conditional Modules These modules will be automatically included by the build system, if it detects OS/platform support for them:

Module | Description
`mod_auth_pam` | Interfaces with the PAM library; see the authentication howto for details
`mod_cap` | Interfaces with Linux capabilities; see the module docs for more information

Special Modules Some modules require special build system support, and thus will be included in the build only when requested using special command-line options to the `configure` command:

Module | Configure Option | Description
`mod_ctrls` | `--enable-ctrls` | Enables Controls functionality
`mod_dso` | `--enable-dso` | Enables dynamically loadable module functionality
`mod_facl` | `--enable-facl` | Enables support for POSIX filesystem ACLs; see the module docs for more information
`mod_lang` | `--enable-nls` | Enables Natural Language System (NLS) support; see the module docs for details
`mod_memcache` | `--enable-memcache` | Enables Memcache support; see the module docs for details
`mod_redis` | `--enable-redis` | Enables Redis support; see the module docs for details

Contributed Modules And finally, there are the contributed modules. These are modules that were contributed to the ProFTPD Project over the years, developed by the ProFTPD community at large for their various use cases. Many of these became so popular with the community that the ProFTPD Project decided to include (or "bundle") these contributed modules as part of the source distribution, to help ensure that these popular modules would continue to be maintained alongside the core engine code. The source code for these modules resides in the `contrib/` directory.

Module | Description
`mod_ban` | Supports dynamic blocklisting of clients; see module doc for details
`mod_ctrls_admin` | Common `ftpdctl` actions; see module doc for more info
`mod_dynmasq` | Automatically update configuration for DynDNS-using servers; see module doc to learn more
`mod_exec` | Execute scripts based on session events; see module doc to learn more
`mod_geoip` | Supports blocking clients by geo information; see module doc for info
`mod_ifsession` | Conditional configurations applied per-user/group/class; see module doc for details
`mod_ldap` | Support authentication using LDAP; see module doc for details
`mod_log_forensic` | Log details only under specific criteria; see module doc to learn more
`mod_geoip` | Reject clients if the system load is too high; see module doc for info
`mod_qos` | Set TCP Quality Of Service (TCP) bits; see module doc for details
`mod_quotatab` | User/group/class-specific quotas; see module doc for more information
`mod_radius` | Support authentication using RADIUS; see module doc for details
`mod_ratio` | Per-user upload/download ratios; see module doc
`mod_readme` | Display "readme" files to clients; see module doc for more
`mod_rewrite` | Dynamically rewrite commands on-the-flly; see howto doc for details
`mod_sftp` | Implements SFTP; see module doc for details
`mod_sftp_pam` | Implements SSH and PAM authentication; see module doc for details
`mod_sftp_sql` | Retreive SSH public keys from SQL databases; see module doc for info
`mod_shaper` | Throttling of data transfers across the entire server; see module doc for details
`mod_site_misc` | Miscellaneous `SITE` commands; see module doc to learn more
`mod_sql` | Support authentication using SQL databases; see howto doc for instructions
`mod_tls` | Implements FTP over TLS (FTPS); see module doc for more
`mod_tls_fscache` | Enable TLS caching via filesystem; see module doc for more
`mod_tls_memcache` | Enable TLS caching via Memcache; see module doc for more
`mod_tls_redis` | Enable TLS caching via Redis; see module doc for more
`mod_tls_shmcache` | Enable TLS caching via Shared Memory; see module doc for details
`mod_unique_id` | Generate a guaranteed unique ID for each session; see module doc for more
`mod_wrap` | Use popular `tcp_wrappers` for client ACLs; see module doc for details
`mod_wrap2` | Enhanced support for client ACLs; see module doc for details

Third-Party Modules As mentioned above, ProFTPD's APIs and build system support modules, even those that are not included as part of the project source distribution. You will find ProFTPD modules, in source form, in various other sites and projects around the Internet. This is precisely why ProFTPD allows for such plugins; the ProFTPD Project wants to support and encourage the community at large to develop for their needs, and to enable development and creativity!