diff --git a/Changes.md b/Changes.md index 452fbea9b..00327e15f 100644 --- a/Changes.md +++ b/Changes.md @@ -202,7 +202,7 @@ - dep(haraka-plugin-redis)!: 1.0 -> 2.0 #3038 - dep(redis)!: 3.1 -> 4.1 #3058 - dep(generic-pool): remove pooling from outbound #3115 -- smtp_client: remove smtp_* pooling support in #3113 +- smtp_client: remove smtp_\* pooling support in #3113 - dep: bump plugin versions #3063 - dep: bump haraka-plugin-asn from 1.0.9 to 2.0.0 #3062 - dep(redis): 3.1 -> 4.1 #3058 diff --git a/Plugins.md b/Plugins.md index 1387d74dc..94ae7f712 100644 --- a/Plugins.md +++ b/Plugins.md @@ -4,12 +4,12 @@ To create your own plugin, see [Write a Plugin][write-plugin]. ## Installing NPM packaged plugins -Plugins can be installed in the directory where Haraka was installed (where depends on your OS platform and whether you specified `-g`) or the Haraka install directory (haraka -i this_path). This example installs _my-great-plugin_ in the Haraka install directory: +Plugins can be installed in the directory where Haraka was installed (where depends on your OS platform and whether you specified `-g`) or the Haraka install directory (haraka -i this\_path). This example installs _my-great-plugin_ in the Haraka install directory: -```` +``` cd /etc/haraka npm install haraka-plugin-my-great-plugin -```` +``` NPM then installs the plugin and its dependencies in a `node_modules` directory within the Haraka install directory. @@ -19,108 +19,105 @@ A comprehensive list of known plugins. Create a PR to add yours to these lists. ### Auth Plugins -| Name | Description | -| ------------------------- | ------------- | -| [auth-enc-file][url-authencflat] | Auth against user/pass in an encrypted file | -| [flat_file][url-authflat] | Auth against user/pass in a file | -| [auth_bridge][url-authbridge] | Auth against remote MTA | -| [auth-imap][url-auth-imap] | Auth against IMAP server | -| [auth_ldap][url-auth-ldap] | Auth against LDAP | -| [auth_proxy][url-authproxy] | Auth against remote MTA | -| [auth_vpopmaild][url-authvpop] | Auth against vpopmaild | -| [dkim][url-dkim] | DKIM sign & verify | -| [dovecot][url-dovecot] | SMTP AUTH & recipient validation against dovecot | -| [LDAP][url-ldap] | Aliases, Auth, and Recipient validation from LDAP | -| [mailauth][url-mailauth] | Email Auth (SPF, DKIM, DMARC, ARC, & BIMI) | -| [opendkim][url-opendkim] | DKIM sign and verify email messages | -| [spf][url-spf] | Perform SPF checks | +| Name | Description | +| -------------------------------- | ------------------------------------------------- | +| [auth-enc-file][url-authencflat] | Auth against user/pass in an encrypted file | +| [flat_file][url-authflat] | Auth against user/pass in a file | +| [auth_bridge][url-authbridge] | Auth against remote MTA | +| [auth-imap][url-auth-imap] | Auth against IMAP server | +| [auth_ldap][url-auth-ldap] | Auth against LDAP | +| [auth_proxy][url-authproxy] | Auth against remote MTA | +| [auth_vpopmaild][url-authvpop] | Auth against vpopmaild | +| [dkim][url-dkim] | DKIM sign & verify | +| [dovecot][url-dovecot] | SMTP AUTH & recipient validation against dovecot | +| [LDAP][url-ldap] | Aliases, Auth, and Recipient validation from LDAP | +| [mailauth][url-mailauth] | Email Auth (SPF, DKIM, DMARC, ARC, & BIMI) | +| [opendkim][url-opendkim] | DKIM sign and verify email messages | +| [spf][url-spf] | Perform SPF checks | ### Queue Plugins -| Name | Description | -| -------------------------- | ------------- | -| [discard][url-qdisc] | queues messages to /dev/null | -| [kafka][url-kafka] | Queue inbound mail to a Kafka topic | -| [lmtp][url-qlmtp] | deliver queued messages via LMTP | -| [mongodb][mongo-url] | Queue emails to MongoDB | -| [qmail-queue][url-qmail] | queue to qmail | -| [quarantine][url-qquart] | queue to a quarantine directory | -| [rabbitmq][url-qrabbit] | queue to RabbitMQ | -| [rabbitmq_amqplib][url-qrabbita] | queue to RabbitMQ using amqplib | -| [rails][url-qrails] | queue messages to a Rails app using [Action Mailbox][url-action-mailbox] | -| [smtp_bridge][url-qbridge] | Bridge SMTP sessions to another MTA | -| [smtp_forward][url-qforward] | Forward emails to another MTA | -| [smtp_proxy][url-qproxy] | Proxy SMTP connections to another MTA | -| [wildduck][url-wildduck] | queue messages to Wild Duck | +| Name | Description | +| -------------------------------- | ------------------------------------------------------------------------ | +| [discard][url-qdisc] | queues messages to /dev/null | +| [kafka][url-kafka] | Queue inbound mail to a Kafka topic | +| [lmtp][url-qlmtp] | deliver queued messages via LMTP | +| [mongodb][mongo-url] | Queue emails to MongoDB | +| [qmail-queue][url-qmail] | queue to qmail | +| [quarantine][url-qquart] | queue to a quarantine directory | +| [rabbitmq][url-qrabbit] | queue to RabbitMQ | +| [rabbitmq_amqplib][url-qrabbita] | queue to RabbitMQ using amqplib | +| [rails][url-qrails] | queue messages to a Rails app using [Action Mailbox][url-action-mailbox] | +| [smtp_bridge][url-qbridge] | Bridge SMTP sessions to another MTA | +| [smtp_forward][url-qforward] | Forward emails to another MTA | +| [smtp_proxy][url-qproxy] | Proxy SMTP connections to another MTA | +| [wildduck][url-wildduck] | queue messages to Wild Duck | ### Filtering Plugins -| Name | Description | -| ------------------------- | ------------- | -| [attachment][url-attach] | Restrict attachment types | -| [avg][url-avg] | AVG antivirus scanner | -| [clamd][url-clamd] | Anti-Virus scanning with ClamAV | -| [data.signatures][url-sigs] | Block emails whose bodies match signatures | -| [dcc][url-dcc] | Distributed Checksum Clearinghouse | -| [esets][url-esets] | Virus scanning with ESET Mail Security | -| [messagesniffer][url-msgsniff] | Anti-spam via [MessageSniffer][url-ms] | -| [milter][url-milter] | milter support | -| [rspamd][url-rspamd] | Scan emails with rspamd | -| [spamassassin][url-spamass] | Scan emails with SpamAssassin | -| [uribl][url-uribl] | Block based on URI blacklists | - +| Name | Description | +| ------------------------------ | ------------------------------------------ | +| [attachment][url-attach] | Restrict attachment types | +| [avg][url-avg] | AVG antivirus scanner | +| [clamd][url-clamd] | Anti-Virus scanning with ClamAV | +| [data.signatures][url-sigs] | Block emails whose bodies match signatures | +| [dcc][url-dcc] | Distributed Checksum Clearinghouse | +| [esets][url-esets] | Virus scanning with ESET Mail Security | +| [messagesniffer][url-msgsniff] | Anti-spam via [MessageSniffer][url-ms] | +| [milter][url-milter] | milter support | +| [rspamd][url-rspamd] | Scan emails with rspamd | +| [spamassassin][url-spamass] | Scan emails with SpamAssassin | +| [uribl][url-uribl] | Block based on URI blacklists | ### Every other Plugin -| Name | Description | -| ------------------------- | ------------- | -| [access][url-access] | ACLs based on IPs, domains, email addrs, etc. | -| [accounting_files][url-acc-files] | Retrieve, Store and Archive custom information of outbound traffic | -| [aliases][url-aliases] | Email aliases | -| [ASN][url-asn] | Get ASN info for remote senders | -| [block_me][url-blockme] | Populate block list via forwarded emails | -| [bounce][url-bounce] | Many options for bounce processing | -| [delay_deny][url-delay] | Delays all pre-DATA 'deny' results | -| [dns-list][url-dns-list] | Check remote MTAs against DNS black, white, and karma lists | -| [dovecot][url-dovecot] | Recipient validation & SMTP AUTH against dovecot | -| [early_talker][url-early] | Reject remotes that talk early | -| [fcrdns][url-fcrdns] | Forward Confirmed reverse DNS | -| [geoip][url-geoip] | get geographic information about mail senders | -| [greylist][url-greylist] | Greylisting | -| [headers][url-headers] | Inspect and verify various email headers | -| [helo.checks][url-helo] | Validity checks of the HELO string | -| [karma][url-karma] | Dynamic scoring of incoming connections | -| [known-senders][url-known-senders] | Reward emails from those you send mail to | -| [LDAP][url-ldap] | Aliases, Auth, and Recipient validation from LDAP | -| [Limit][url-limit] | Apply many types of limits to SMTP connections | -| [log.elasticsearch][url-elastic] | Store message metadata in Elasticsearch | -| [log reader][url-logreader] | extract log entries from the haraka log file | -| [syslog][url-syslog] | Log to syslog | -| [mail_from.is_resolvable][url-mfres] | Verifies the MAIL FROM domain resolves to a MX | -| [outbound-logger][url-outbound-logger] | JSON logging of outbound email traffic. Logs useful metadata about delivered/bounced emails | -| [p0f][url-p0f] | TCP Fingerprinting | -| [prevent_credential_leaks][url-creds] | Prevent users from emailing their credentials | -| [process_title][url-proctitle] | Populate `ps` output with activity counters | -| [recipient-routes][url-rroutes] | Route emails based on their recipient(s) | -| [redis][url-redis] | multi-purpose Redis db connection(s) | -| [rcpt_to.in_host_list][url-rhost] | Define local email domains in a file | -| [rcpt_to.ldap][url-rcpt-ldap] | Validate recipients against LDAP | -| [rcpt-postgresql][url-postgres] | validate recipients against PostgreSQL -| [qmail-deliverable][url-rqmd] | Validate recipients against Qmail-Deliverable | -| [record_envelope_addresses][url-recordenv] | Adds message headers with ENV recips | -| [relay][url-relay] | Manage relay permissions | -| [reseed_rng][url-rng] | Reseed the RNG | -| [batv-srs][url-batv] | BATV & SRS | -| [srs][url-srs] | Sender Rewriting Scheme | -| [tarpit][url-tarpit] | Slow down connections | -| [tls][url-tls] | Implements TLS | -| [toobusy][url-toobusy] | Defers connections when too busy | -| [vmta][url-vmta] | Virtual MTA management | -| [watch][url-watch] | Watch live SMTP traffic in a web interface | -| [wildduck][url-wildduck] | provides recipient checks against Wild Duck | -| [xclient][url-xclient] | Implements XCLIENT | - - +| Name | Description | +| ------------------------------------------ | ------------------------------------------------------------------------------------------- | +| [access][url-access] | ACLs based on IPs, domains, email addrs, etc. | +| [accounting_files][url-acc-files] | Retrieve, Store and Archive custom information of outbound traffic | +| [aliases][url-aliases] | Email aliases | +| [ASN][url-asn] | Get ASN info for remote senders | +| [block_me][url-blockme] | Populate block list via forwarded emails | +| [bounce][url-bounce] | Many options for bounce processing | +| [delay_deny][url-delay] | Delays all pre-DATA 'deny' results | +| [dns-list][url-dns-list] | Check remote MTAs against DNS black, white, and karma lists | +| [dovecot][url-dovecot] | Recipient validation & SMTP AUTH against dovecot | +| [early_talker][url-early] | Reject remotes that talk early | +| [fcrdns][url-fcrdns] | Forward Confirmed reverse DNS | +| [geoip][url-geoip] | get geographic information about mail senders | +| [greylist][url-greylist] | Greylisting | +| [headers][url-headers] | Inspect and verify various email headers | +| [helo.checks][url-helo] | Validity checks of the HELO string | +| [karma][url-karma] | Dynamic scoring of incoming connections | +| [known-senders][url-known-senders] | Reward emails from those you send mail to | +| [LDAP][url-ldap] | Aliases, Auth, and Recipient validation from LDAP | +| [Limit][url-limit] | Apply many types of limits to SMTP connections | +| [log.elasticsearch][url-elastic] | Store message metadata in Elasticsearch | +| [log reader][url-logreader] | extract log entries from the haraka log file | +| [syslog][url-syslog] | Log to syslog | +| [mail_from.is_resolvable][url-mfres] | Verifies the MAIL FROM domain resolves to a MX | +| [outbound-logger][url-outbound-logger] | JSON logging of outbound email traffic. Logs useful metadata about delivered/bounced emails | +| [p0f][url-p0f] | TCP Fingerprinting | +| [prevent_credential_leaks][url-creds] | Prevent users from emailing their credentials | +| [process_title][url-proctitle] | Populate `ps` output with activity counters | +| [recipient-routes][url-rroutes] | Route emails based on their recipient(s) | +| [redis][url-redis] | multi-purpose Redis db connection(s) | +| [rcpt_to.in_host_list][url-rhost] | Define local email domains in a file | +| [rcpt_to.ldap][url-rcpt-ldap] | Validate recipients against LDAP | +| [rcpt-postgresql][url-postgres] | validate recipients against PostgreSQL | +| [qmail-deliverable][url-rqmd] | Validate recipients against Qmail-Deliverable | +| [record_envelope_addresses][url-recordenv] | Adds message headers with ENV recips | +| [relay][url-relay] | Manage relay permissions | +| [reseed_rng][url-rng] | Reseed the RNG | +| [batv-srs][url-batv] | BATV & SRS | +| [srs][url-srs] | Sender Rewriting Scheme | +| [tarpit][url-tarpit] | Slow down connections | +| [tls][url-tls] | Implements TLS | +| [toobusy][url-toobusy] | Defers connections when too busy | +| [vmta][url-vmta] | Virtual MTA management | +| [watch][url-watch] | Watch live SMTP traffic in a web interface | +| [wildduck][url-wildduck] | provides recipient checks against Wild Duck | +| [xclient][url-xclient] | Implements XCLIENT | diff --git a/README.md b/README.md index d70978c8f..5136e3857 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,8 @@ - -Haraka - a Node.js Mail Server ------------------------------- +## Haraka - a Node.js Mail Server ![Tests](https://github.com/haraka/Haraka/actions/workflows/ci.yml/badge.svg) [![Coverage Status][cov-img]][cov-url] - - Haraka is a highly scalable [node.js][1] email server with a modular plugin architecture. Haraka can serve thousands of concurrent connections and deliver thousands of messages per second. Haraka and plugins are written @@ -26,9 +22,8 @@ queued for outbound delivery. ### Getting Help -* [Join the mailing list][8] (implemented as a Haraka plugin) -* [GitHub Issues][15] - +- [Join the mailing list][8] (implemented as a Haraka plugin) +- [GitHub Issues][15] ### Screencast @@ -49,7 +44,6 @@ code in Haraka. Plugins are provided for running mail through [SpamAssassin][9], validating [HELO][10] names, checking [DNS Blocklists][11], and [many others][12]. - ### Installing Haraka Haraka requires [node.js][1] to run. Install Haraka with [npm][2]: @@ -93,7 +87,6 @@ overall behaviour of Haraka. By default, only messages to domains listed in `config/host_list` will be accepted and then delivered via the `smtp-forward` plugin. Configure the destination in `config/smtp_forward.ini`. - ### Read the Fine Manual ```sh @@ -103,7 +96,6 @@ haraka -h plugins/$name The docs detail how each plugin is configured. After editing `config/plugins`, restart Haraka and enjoy! - ### Running from git If you are unable to use npm to install Haraka, you can run from git by @@ -140,7 +132,7 @@ SpamAssassin and a hacker on [Qpsmtpd][13]. [6]: https://github.com/haraka/Haraka/blob/master/docs/plugins/dkim_sign.md [7]: https://en.wikipedia.org/wiki/Mail_delivery_agent [8]: mailto:haraka-sub@harakamail.com -[9]: https://haraka.github.io/plugins/spamassassin +[9]: https://haraka.github.io/plugins/spamassassin [10]: https://haraka.github.io/plugins/helo.checks [11]: https://haraka.github.io/plugins/dnsbl [12]: https://github.com/haraka/Haraka/blob/master/Plugins.md @@ -148,6 +140,5 @@ SpamAssassin and a hacker on [Qpsmtpd][13]. [15]: https://github.com/haraka/Haraka/issues [16]: https://github.com/haraka/Haraka/blob/master/LICENSE [17]: https://github.com/baudehlo - [cov-img]: https://codecov.io/github/haraka/Haraka/coverage.svg [cov-url]: https://codecov.io/github/haraka/Haraka?branch=master diff --git a/package.json b/package.json index 0b2dc11ea..fe66fc012 100644 --- a/package.json +++ b/package.json @@ -97,9 +97,12 @@ "haraka_grep": "./bin/haraka_grep" }, "scripts": { - "test": "npx mocha --exit --timeout=4000 test test/outbound test/plugins/auth test/plugins/queue test/plugins", + "format": "npm run prettier:fix && npm run lint:fix", "lint": "npx eslint@^8 *.js outbound plugins plugins/*/*.js test test/*/*.js test/*/*/*.js bin/haraka", "lint:fix": "npx eslint@^8 --fix *.js outbound plugins plugins/*/*.js test test/*/*.js test/*/*/*.js bin/haraka", + "prettier": "npx prettier . --check", + "prettier:fix": "npx prettier . --write --log-level=warn", + "test": "npx mocha --exit --timeout=4000 test test/outbound test/plugins/auth test/plugins/queue test/plugins", "versions": "npx dependency-version-checker check", "versions:fix": "npx dependency-version-checker update && npm run prettier:fix" }