https://github.com/philr/srsd
Sender Rewriting Scheme Daemon
https://github.com/philr/srsd
email golang sender-rewriting-scheme srs
Last synced: about 1 year ago
JSON representation
Sender Rewriting Scheme Daemon
- Host: GitHub
- URL: https://github.com/philr/srsd
- Owner: philr
- License: mit
- Created: 2019-10-08T19:22:44.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-10-09T19:55:39.000Z (over 6 years ago)
- Last Synced: 2025-01-29T18:47:12.530Z (over 1 year ago)
- Topics: email, golang, sender-rewriting-scheme, srs
- Language: Go
- Size: 7.81 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# srsd - Sender Rewriting Scheme Daemon
A daemon written in Go that accepts and rewrites email addresses according to
the [Sender Rewriting System](https://en.wikipedia.org/wiki/Sender_Rewriting_Scheme).
The daemon listens on a Unix socket for requests to rewrite email addresses
either for forwarding or in reverse for bounce handling.
The [mileusna/srs](https://github.com/mileusna/srs) package is used perform the
rewriting.
## Compiling
From the source directory, run `go build` to produce a srsd executable.
## Configuration
srsd uses a JSON configuration file. A sample is provided as srsd.json. A
default secret can be provided in addition to secrets for specific target
SRS domains.
Secrets in the configuration file must be encoded using base64. 64 random bytes
are recommended (used for an SHA-1 HMAC). Suitable secrets can be generated by
running:
```
head -c64 /dev/urandom | base64 -w0
```
## Executing
Start the daemon by running `srsd`.
By default, srsd will look for a configuration file named srsd.json in the
current directory and open a socket named srsd.sock in the current directory.
The socket will be created with access permissions set to 0770. To specify
different configuration file and socket locations, use the `-config-file` and
`-socket-path` options respectively. To specify different access permissions use
the `-socket-access` option. For example:
```
srsd -config-file /etc/srsd.conf -socket-path /run/srsd/srsd.sock -socket-access 0777
```
The process will remain running in the foreground when started. To terminate
send the process an INT or TERM signal.
## Protocol
srsd accepts connections made to the Unix socket. Each connection can be used to
perform multiple operations (provided a syntax error is not encountered).
Rewrite commands are issued one per line (terminated with a line feed `\n`).
Requesting a forwarding rewrite for the sender address from@example.org using
the SRS domain srs.example.com:
```
> Fsrs.example.com:from@example.org
< SRS0=PmRI=YB=example.org=from@srs.example.com
```
Requesting a reverse rewrite for the SRS address
SRS0=PmRI=YB=example.org=from@srs.example.com:
```
> RSRS0=PmRI=YB=example.org=from@srs.example.com
< from@example.org
```
Errors will be reported prefixed with "ERROR: ":
```
> RSRS0=aaaa=YB=example.org=from@srs.example.com
< ERROR: Hash invalid in SRS address
> RSRS0=PmRI=aa=example.org=from@srs.example.com
< ERROR: Time stamp out of date
> Ffrom@example.org
< ERROR: Missing SRS domain or email address
```
The final error in the above example will result in the connection being closed
due to the syntax error.
## systemd
A systemd service file is provided as srsd.service.