Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
efbd7cc669
|
|||
|
c1a54b5cc0
|
|||
|
a156b54c1f
|
|||
|
0a65e0e7db
|
|||
|
cd9adb1423
|
|||
|
2cce315ca3
|
|||
|
1c06333c79
|
|||
|
7afcbc2bf1
|
|||
|
f1b14d5974
|
|||
| edd8a42e2d | |||
| fe0bd0470c | |||
| 1d92622f21 | |||
|
16e35505d6
|
|||
|
5819107340
|
|||
| f08937111e | |||
| dbb79dd567 | |||
|
e1d0f95a72
|
|||
| a2b000a05b |
@@ -12,49 +12,7 @@ steps:
|
|||||||
from_secret: container_registry_password
|
from_secret: container_registry_password
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
when:
|
when:
|
||||||
- event: [push, tag]
|
- event: tag
|
||||||
|
|
||||||
scan_image:
|
|
||||||
image: aquasec/trivy
|
|
||||||
commands:
|
|
||||||
- trivy image $FORGE_NAME/$CI_REPO:$CI_COMMIT_SHA --quiet --exit-code 1
|
|
||||||
when:
|
|
||||||
- event: [push, tag]
|
|
||||||
|
|
||||||
generate_sbom:
|
|
||||||
image: quay.io/wollud1969/woodpecker-helper:0.5.1
|
|
||||||
environment:
|
|
||||||
TRIVY_TOKEN:
|
|
||||||
from_secret: trivy_token
|
|
||||||
TRIVY_URL:
|
|
||||||
from_secret: trivy_url
|
|
||||||
DTRACK_API_KEY:
|
|
||||||
from_secret: dtrack_api_key
|
|
||||||
DTRACK_API_URL:
|
|
||||||
from_secret: dtrack_api_url
|
|
||||||
commands:
|
|
||||||
- HOME=/home/`id -nu`
|
|
||||||
- TAG="${CI_COMMIT_TAG:-$CI_COMMIT_SHA}"
|
|
||||||
- |
|
|
||||||
trivy image \
|
|
||||||
--server $TRIVY_URL \
|
|
||||||
--token $TRIVY_TOKEN \
|
|
||||||
--format cyclonedx \
|
|
||||||
--scanners license \
|
|
||||||
--output /tmp/sbom.xml \
|
|
||||||
$FORGE_NAME/$CI_REPO:$CI_COMMIT_SHA
|
|
||||||
- cat /tmp/sbom.xml
|
|
||||||
- |
|
|
||||||
curl -X "POST" \
|
|
||||||
-H "Content-Type: multipart/form-data" \
|
|
||||||
-H "X-Api-Key: $DTRACK_API_KEY" \
|
|
||||||
-F "autoCreate=true" \
|
|
||||||
-F "projectName=$CI_REPO" \
|
|
||||||
-F "projectVersion=$TAG" \
|
|
||||||
-F "bom=@/tmp/sbom.xml"\
|
|
||||||
"$DTRACK_API_URL/api/v1/bom"
|
|
||||||
when:
|
|
||||||
- event: [push, tag]
|
|
||||||
|
|
||||||
build:
|
build:
|
||||||
image: plugins/kaniko
|
image: plugins/kaniko
|
||||||
@@ -70,4 +28,4 @@ steps:
|
|||||||
from_secret: quay_password
|
from_secret: quay_password
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
when:
|
when:
|
||||||
- event: [tag]
|
- event: tag
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM alpine:3.21.3
|
FROM alpine:3.23.2
|
||||||
|
|
||||||
LABEL Maintainer="Wolfgang Hottgenroth <woho@hottis.de>"
|
LABEL Maintainer="Wolfgang Hottgenroth <woho@hottis.de>"
|
||||||
LABEL ImageName="quay.io/wollud1969/exim-docker"
|
LABEL ImageName="quay.io/wollud1969/exim-docker"
|
||||||
@@ -11,6 +11,9 @@ ENV SMARTHOST_USER=""
|
|||||||
ENV SMARTHOST_PASS=""
|
ENV SMARTHOST_PASS=""
|
||||||
# ip addresses or networks to allow for relaying, separate multiple ones by semicolon
|
# ip addresses or networks to allow for relaying, separate multiple ones by semicolon
|
||||||
ENV RELAYNETS="127.0.0.1/32"
|
ENV RELAYNETS="127.0.0.1/32"
|
||||||
|
# whitelist of recipient domains, colon-separated, if empty all no restrictions
|
||||||
|
ENV WHITELISTED_RECIPIENTS=""
|
||||||
|
|
||||||
|
|
||||||
RUN apk add --no-cache exim m4
|
RUN apk add --no-cache exim m4
|
||||||
|
|
||||||
@@ -22,7 +25,6 @@ WORKDIR /etc/exim
|
|||||||
EXPOSE 25
|
EXPOSE 25
|
||||||
|
|
||||||
CMD [ "./start.sh" ]
|
CMD [ "./start.sh" ]
|
||||||
#CMD [ "/usr/bin/m4 exim.conf.m4 > exim.conf && /usr/sbin/exim -bd -q15m -v" ]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ apiVersion: apps/v1
|
|||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: smtp
|
name: smtp
|
||||||
|
namespace: system
|
||||||
labels:
|
labels:
|
||||||
app: smtp
|
app: smtp
|
||||||
annotations:
|
annotations:
|
||||||
@@ -18,7 +19,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: smtp
|
- name: smtp
|
||||||
image: quay.io/wollud1969/exim-docker:0.2.1
|
image: quay.io/wollud1969/exim-docker:0.3.4
|
||||||
envFrom:
|
envFrom:
|
||||||
- secretRef:
|
- secretRef:
|
||||||
name: smtp-secrets
|
name: smtp-secrets
|
||||||
@@ -30,6 +31,7 @@ apiVersion: v1
|
|||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
name: smtp
|
name: smtp
|
||||||
|
namespace: system
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
selector:
|
selector:
|
||||||
|
|||||||
21
exim.conf.m4
21
exim.conf.m4
@@ -8,11 +8,6 @@ define(`RELAYNETS', esyscmd(`echo -n $RELAYNETS'))dnl
|
|||||||
define(`WHITELISTED_RECIPIENTS', esyscmd(`echo -n $WHITELISTED_RECIPIENTS'))dnl
|
define(`WHITELISTED_RECIPIENTS', esyscmd(`echo -n $WHITELISTED_RECIPIENTS'))dnl
|
||||||
|
|
||||||
|
|
||||||
ifelse(SMARTHOST, `', `
|
|
||||||
errprint(`Error: SMARTHOST not set')
|
|
||||||
m4exit(1)
|
|
||||||
')
|
|
||||||
|
|
||||||
ifelse(HOSTNAME, `', `
|
ifelse(HOSTNAME, `', `
|
||||||
errprint(`Error: HOSTNAME not set')
|
errprint(`Error: HOSTNAME not set')
|
||||||
m4exit(1)
|
m4exit(1)
|
||||||
@@ -28,6 +23,20 @@ acl_smtp_rcpt = acl_check_rcpt
|
|||||||
|
|
||||||
tls_advertise_hosts =
|
tls_advertise_hosts =
|
||||||
|
|
||||||
|
ifelse(SMARTHOST, `', `dnl
|
||||||
|
# without smarthost
|
||||||
|
begin routers
|
||||||
|
dnslookup:
|
||||||
|
driver = dnslookup
|
||||||
|
domains = *
|
||||||
|
transport = remote_smtp
|
||||||
|
|
||||||
|
begin transports
|
||||||
|
remote_smtp:
|
||||||
|
driver = smtp
|
||||||
|
|
||||||
|
', `dnl
|
||||||
|
# with smarthost
|
||||||
begin routers
|
begin routers
|
||||||
smarthost_route:
|
smarthost_route:
|
||||||
driver = manualroute
|
driver = manualroute
|
||||||
@@ -56,13 +65,13 @@ login:
|
|||||||
public_name = LOGIN
|
public_name = LOGIN
|
||||||
client_send = : SMARTHOST_USER : SMARTHOST_PASS
|
client_send = : SMARTHOST_USER : SMARTHOST_PASS
|
||||||
')
|
')
|
||||||
|
')
|
||||||
|
|
||||||
begin acl
|
begin acl
|
||||||
acl_check_rcpt:
|
acl_check_rcpt:
|
||||||
accept
|
accept
|
||||||
hosts = RELAYNETS
|
hosts = RELAYNETS
|
||||||
ifelse(WHITELISTED_RECIPIENTS, `', `', `
|
ifelse(WHITELISTED_RECIPIENTS, `', `', `
|
||||||
accept
|
|
||||||
domains = WHITELISTED_RECIPIENTS
|
domains = WHITELISTED_RECIPIENTS
|
||||||
')
|
')
|
||||||
deny
|
deny
|
||||||
|
|||||||
@@ -12,8 +12,11 @@ Four environment variables are used to configure the container:
|
|||||||
* `SMARTHOST_PASS`: Password for smarthost.
|
* `SMARTHOST_PASS`: Password for smarthost.
|
||||||
* `LOCALMAILNAME`: The domain name which shall be used as the domain part of the sender address in every outgoing mail. If not required, skip it.
|
* `LOCALMAILNAME`: The domain name which shall be used as the domain part of the sender address in every outgoing mail. If not required, skip it.
|
||||||
* `RELAYNETS`: Networks exim in this container accepts for relaying. Separate multiple networks by semicolon.
|
* `RELAYNETS`: Networks exim in this container accepts for relaying. Separate multiple networks by semicolon.
|
||||||
|
* `WHITELISTED_RECIPIENT`: Colon-separated list of whitelisted recipient domains, if empty no recipient restrictions will be applied
|
||||||
|
|
||||||
|
|
||||||
|
If `SMARTHOST` is not given, mail delivery will be done directly via MX lookup instead of using a smarthost.
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
Typically, don't expose the smtp port of this container to the default network of your Docker installation, otherwise it conflicts with a local MTA on the machine and it would be visible outside of the machine. Create a dedicated docker network, use that one as the default network for this container and connect other containers to that network. Afterwards, you can use the name of this container as smarthost address in the other containers.
|
Typically, don't expose the smtp port of this container to the default network of your Docker installation, otherwise it conflicts with a local MTA on the machine and it would be visible outside of the machine. Create a dedicated docker network, use that one as the default network for this container and connect other containers to that network. Afterwards, you can use the name of this container as smarthost address in the other containers.
|
||||||
@@ -24,7 +27,7 @@ Typically, don't expose the smtp port of this container to the default network o
|
|||||||
```
|
```
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
IMAGE=quay.io/wollud1969/exim-docker:0.2.2
|
IMAGE=quay.io/wollud1969/exim-docker:0.3.2
|
||||||
MAILER_NETWORK=mailer-network
|
MAILER_NETWORK=mailer-network
|
||||||
|
|
||||||
docker network create $MAILER_NETWORK || echo "mailer-network already exists"
|
docker network create $MAILER_NETWORK || echo "mailer-network already exists"
|
||||||
@@ -38,6 +41,7 @@ docker run \
|
|||||||
-e SMARTHOST=smarthost.example.com \
|
-e SMARTHOST=smarthost.example.com \
|
||||||
-e LOCALMAILNAME=krohne.com \
|
-e LOCALMAILNAME=krohne.com \
|
||||||
-e RELAYNETS=$RELAYNETS \
|
-e RELAYNETS=$RELAYNETS \
|
||||||
|
-e WHITELISTED_RECIPIENT="example-recipients.com" \
|
||||||
--network $MAILER_NETWORK \
|
--network $MAILER_NETWORK \
|
||||||
--name mailer \
|
--name mailer \
|
||||||
--restart always \
|
--restart always \
|
||||||
|
|||||||
68
tools/smtp-dialog.exp
Executable file
68
tools/smtp-dialog.exp
Executable file
@@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/expect
|
||||||
|
|
||||||
|
package require base64
|
||||||
|
|
||||||
|
|
||||||
|
# SMTP-Server und Port definieren
|
||||||
|
set smtp_server "172.16.3.33"
|
||||||
|
set smtp_port "25"
|
||||||
|
set timeout 25
|
||||||
|
|
||||||
|
# Absender, Empfänger und Nachricht
|
||||||
|
set sender $env(SMTP_SENDER)
|
||||||
|
set recipient $env(SMTP_RECIPIENT)
|
||||||
|
set message "Subject: Test Email\r\n\r\nThis is a test email sent via an expect script."
|
||||||
|
|
||||||
|
set smtp_user $env(SMTP_USER)
|
||||||
|
set smtp_pass $env(SMTP_PASS)
|
||||||
|
|
||||||
|
set smtp_user_64 [base64::encode $smtp_user]
|
||||||
|
set smtp_pass_64 [base64::encode $smtp_pass]
|
||||||
|
|
||||||
|
|
||||||
|
# Verbindung herstellen
|
||||||
|
spawn nc -C $smtp_server $smtp_port
|
||||||
|
|
||||||
|
# Begrüßung vom Server erwarten
|
||||||
|
expect "220 *"
|
||||||
|
|
||||||
|
# HELO/EHLO senden
|
||||||
|
send "EHLO baikonur\n"
|
||||||
|
expect "250 *"
|
||||||
|
|
||||||
|
if {[info exists smtp_user] && $smtp_user ne ""} {
|
||||||
|
send "AUTH LOGIN\n"
|
||||||
|
expect "334 VXNlcm5hbWU6"
|
||||||
|
|
||||||
|
send "$smtp_user_64\n"
|
||||||
|
expect "334 UGFzc3dvcmQ6"
|
||||||
|
|
||||||
|
send "$smtp_pass_64\n"
|
||||||
|
expect "235 2.7.0 Authentication successful"
|
||||||
|
} else {
|
||||||
|
puts "skip authentication"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Absender definieren
|
||||||
|
send "MAIL FROM:<$sender>\n"
|
||||||
|
expect "250 *"
|
||||||
|
|
||||||
|
# Empfänger definieren
|
||||||
|
send "RCPT TO:<$recipient>\n"
|
||||||
|
expect "250 *"
|
||||||
|
|
||||||
|
# Datenübertragung starten
|
||||||
|
send "DATA\n"
|
||||||
|
expect "354 *"
|
||||||
|
|
||||||
|
# Nachricht senden und Übertragung abschließen
|
||||||
|
send "$message\n.\n"
|
||||||
|
expect "250 *"
|
||||||
|
|
||||||
|
# Verbindung schließen
|
||||||
|
send "QUIT\n"
|
||||||
|
expect "221 *"
|
||||||
|
|
||||||
|
# Beenden
|
||||||
|
interact
|
||||||
|
|
||||||
Reference in New Issue
Block a user