GreenArrow Email Software Documentation

GreenArrow Configuration

Overview

This page describes how to configure GreenArrow to use one or more GreenArrow Proxy servers.

See GreenArrow Proxy for information on how to install and configure GreenArrow Proxy.

Configure GreenArrow

The greenarrow_proxy directive (and its related directives) allows a GreenArrow instance to deliver through GreenArrow Proxy.

In the most simple case, where you want all remote delivery to go through a single GreenArrow Proxy server, configuration looks like this:

greenarrow_proxy proxy-primary {
    greenarrow_proxy_server ga1.example.com:807
    greenarrow_proxy_shared_secret "00000000000000000000000000000000"
    greenarrow_proxy_throttle_reconciliation_mode average
}

ip_address * {
    greenarrow_proxy proxy-primary
}

In another case if you want to host some IPs on one GreenArrow Proxy, and other IPs on a different GreenArrow Proxy, you would specify this on an IP-by-IP basis:

ip_address ipaddr-1, ipaddr-2 {
    greenarrow_proxy proxy-primary
}

ip_address ipaddr-3, ipaddr-4 {
    greenarrow_proxy proxy-secondary
}

For more information about configuring GreenArrow, see the following configuration directives:

GreenArrow Logging

Most problems connecting through the GreenArrow Proxy are visible in the rspawn-limiter log.

For example, to see the last 5 minutes of this log, run the following command:

logdir_select_time --last '5 minutes' --dir /var/hvmail/log/rspawn-limiter | tai64nlocal

Every 5 seconds, this log will include lines like the following:

2024-10-17 14:08:40.001972500 remote_limiter: active=1475 backlog(ram=1658 bounce=42 disk=2155) remote=1475 hook=1
2024-10-17 14:08:40.002028500 remote_limiter: internal: callbacks=0/u newClients=0/u inbufferReader=8/64 asyncWriter=0/64 queueOutBytes{ram=0 bounce=0 disk=0} perlrunner=418 msgmover=0 remote=0 bytes_all_clients=0
2024-10-17 14:08:40.001973500 remote_throttle: above(forward=0/u back=0/u) __default__(forward=0/u back=0/u) gaproxy1(above(forward=0/u back=0/u) backlog=0 timeconnected=1h10m12s ping=1.082ms tcpforward(0/u) tcpback(0/u) rtcforward(0/u) rtcback(0/u)) gaproxy2(above(forward=0/u back=0/u) backlog=1834 timeconnected=1h10m12s ping=4.253ms tcpforward(0/u) tcpback(0/u) rtcforward(0/u) rtcback(0/u)) gaproxy3(above(forward=0/u back=0/u) backlog=1917 timeconnected=1h9m58s ping=0.317ms tcpforward(0/u) tcpback(0/u) rtcforward(0/u) rtcback(0/u))
2024-10-17 14:08:41.679214500 direct_remote_smtp: connections=21(active=21 cached=0)
2024-10-17 14:08:41.679214500 greenarrow_proxy(gaproxy2): connections=1629(active=759 cached=870)
2024-10-17 14:08:41.679214500 greenarrow_proxy(gaproxy3): connections=1276(active=711 cached=565)

Here’s a description of what’s included above (wrapped below for easier reading):

remote_limiter

2024-10-17 14:08:40.001972500 remote_limiter: active=1475
  backlog(ram=1658 bounce=42 disk=2155) remote=1475 hook=1

This instance has 1475 active delivery attempts, 1658/42/2155 messages waiting in the ram/bounce/disk queues for throttle approval, 1475 remote delivery attempts, and 1 delivery attempt waiting for evaluation by thge Pre Delivery Attempt Hook.

remote_limiter: internal

2024-10-17 14:08:40.002028500 remote_limiter: internal: callbacks=0/u newClients=0/u
  inbufferReader=8/64 asyncWriter=0/64 queueOutBytes{ram=0 bounce=0 disk=0}
  perlrunner=418 msgmover=0 remote=0 bytes_all_clients=0

These are low level implementation details which can be useful for GreenArrow to diagnose issues.

remote_throttle

2024-10-17 14:08:40.001973500 remote_throttle: above(forward=0/u back=0/u)
  __default__(forward=0/u back=0/u)
  gaproxy1(above(forward=0/u back=0/u) backlog=0 timeconnected=1h10m12s
    ping=1.082ms tcpforward(0/u) tcpback(0/u) rtcforward(0/u) rtcback(0/u))
  gaproxy2(above(forward=0/u back=0/u) backlog=1834 timeconnected=1h10m12s
    ping=4.253ms tcpforward(0/u) tcpback(0/u) rtcforward(0/u) rtcback(0/u))
  gaproxy3(above(forward=0/u back=0/u) backlog=1917 timeconnected=1h9m58s
    ping=0.317ms tcpforward(0/u) tcpback(0/u) rtcforward(0/u) rtcback(0/u))

Mostly low level implementation details, but with some key data points within it:

gaproxy2(above(forward=0/u back=0/u) backlog=1834 timeconnected=1h10m12s ping=4.253ms
  tcpforward(0/u) tcpback(0/u) rtcforward(0/u) rtcback(0/u)

This tells us that this instance has been connected to the greenarrow_proxy gaproxy2 for 1 hour and 10 minutes, and currently has a 4ms ping to that GreenArrow Proxy. (This ping is not a ICMP ping, but rather a the round trip time of a request message and response message sent through the TCP connection between the MTA and greenarrow_proxy that handles the cooperative throttling.)

Additionally, we have 1834 delivery attempts requested through this proxy that are waiting for approval from their relevant throttle.

direct_remote_smtp

2024-10-17 14:08:41.679214500 direct_remote_smtp: connections=21(active=21 cached=0)

There are 21 remote SMTP connections established directly from this instance (i.e. not going through GreenArrow Proxy).

There are no connections saved for reuse due to reuse_connections.

greenarrow_proxy

2024-10-17 14:08:41.679214500 greenarrow_proxy(gaproxy2):
  connections=1629(active=759 cached=870)

This instance currently has 1629 connections open to the greenarrow_proxy gaproxy2. 759 of them are actively being used, with 870 saved for reuse.

These connections use the Proprietary GreenArrow Proxy Protocol referenced in GreenArrow Cluster.


Copyright © 2012–2024 GreenArrow Email