minimal working setup
commit
d486615eb9
@ -0,0 +1,33 @@
|
||||
FROM debian:stable-slim
|
||||
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||
dovecot-core dovecot-imapd dovecot-sieve dovecot-managesieved \
|
||||
fetchmail mailutils && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Пользователь
|
||||
RUN useradd -m mailuser -p "${PROXYPASSHASH}"
|
||||
|
||||
# Копируем конфиги
|
||||
COPY fetchmailrc /home/mailuser/.fetchmailrc
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod 600 /home/mailuser/.fetchmailrc && \
|
||||
mkdir -p /home/mailuser/sieve && \
|
||||
mkdir -p /var/mail/mailuser && \
|
||||
chown -R mailuser:mailuser /home/mailuser && \
|
||||
chown -R mailuser:mailuser /var/mail/mailuser && \
|
||||
chmod +x /entrypoint.sh
|
||||
|
||||
# Dovecot конфиги
|
||||
RUN echo 'protocol lda {\n mail_plugins = $mail_plugins sieve\n}' > /etc/dovecot/conf.d/15-lda.conf && \
|
||||
echo 'plugin {\n sieve = /home/mailuser/sieve/default.sieve\n sieve_extensions = +fileinto +copy +flags +imapflags +vacation +relational +regex +body +enotify +environment +variables\n}' > /etc/dovecot/conf.d/90-sieve.conf && \
|
||||
sed -e 's/mbox:~\/mail/maildir:\/var\/mail\/%u/g' -i /etc/dovecot/conf.d/10-mail.conf
|
||||
RUN usermod -aG dovecot mailuser
|
||||
|
||||
|
||||
COPY EltexRootCA.crt /usr/local/share/ca-certificates/
|
||||
RUN update-ca-certificates
|
||||
|
||||
EXPOSE 143
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
@ -0,0 +1,35 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIGFTCCA/2gAwIBAgIJANEBowj4YBI5MA0GCSqGSIb3DQEBCwUAMIGgMQswCQYD
|
||||
VQQGEwJSVTEbMBkGA1UECAwSUnVzc2lhbiBGZWRlcmF0aW9uMRQwEgYDVQQHDAtO
|
||||
b3Zvc2liaXJzazESMBAGA1UECgwJRWx0ZXggQ28uMREwDwYDVQQLDAhFbHRleCBP
|
||||
VDEWMBQGA1UEAwwNRWx0ZXggUm9vdCBDQTEfMB0GCSqGSIb3DQEJARYQYWRtaW5z
|
||||
QGVsdGV4LmxvYzAeFw0xOTExMDgwODEzMzVaFw0zOTExMDMwODEzMzVaMIGgMQsw
|
||||
CQYDVQQGEwJSVTEbMBkGA1UECAwSUnVzc2lhbiBGZWRlcmF0aW9uMRQwEgYDVQQH
|
||||
DAtOb3Zvc2liaXJzazESMBAGA1UECgwJRWx0ZXggQ28uMREwDwYDVQQLDAhFbHRl
|
||||
eCBPVDEWMBQGA1UEAwwNRWx0ZXggUm9vdCBDQTEfMB0GCSqGSIb3DQEJARYQYWRt
|
||||
aW5zQGVsdGV4LmxvYzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJWa
|
||||
DXldyb7cutccc8BnMFU29K1DF0rx108s6UGNmE65UTIM7nph+X1BVfo2rOUJzGuY
|
||||
fJwJQhLK0TL8f1vVGMgGX2hEv2Uz7E7x9t0gKJHq+12QXF4YM9TpVLqlwtoIOLPR
|
||||
MnpRM0D7ryuQllzg7IB26TNPK6r7FiwDtK5mBjTZfqlBlPhPDyI4El+ou/rtKhGt
|
||||
rLhsZ287je5S+EzXq0dh9PYHP3vcQGyJ344LsTwKz8AB6wmo4MSRvV9/5Sswj5Oe
|
||||
jXgFWWEofXx2m8KlWbBYnCGKdNqCPJClxRrO2YHoIMvwWq107b8jFIHC7MzgtK3Z
|
||||
jOjkh0d9dauCsbbBguouQbg3uz32lATSGWZnYk/DB9vVKmDvheQvxf2czib/DyXB
|
||||
hkdN3rZSh8PiyNOtlbh7zTGIYt4EoQk91kBfo8rNBNAfJZ0ngwYdSZSKIhTGqr66
|
||||
HyLz2aEXNmP26ryuKgipFOcJZvl9ziat/UaoPoAvSt9Lu3VSfZaJJRlSYljILPAM
|
||||
BDfj/Y+alOnOwKAoEbknGAXb/DdMos6JSC7Cf7JkMZafpLG6tbBRYlMLoSP1osaJ
|
||||
wDJvBEJB1BtRL38w88kvfA5HjnFqWRkovyhVjiJvYaDs68eGMs86T4CTRCWwrzom
|
||||
F0vPynih7aKGNR94PuA8QgxLRtBC9nuUGMuStgYTAgMBAAGjUDBOMB0GA1UdDgQW
|
||||
BBQtblkm26sPaZpB2Xj1TWmZvYYbkzAfBgNVHSMEGDAWgBQtblkm26sPaZpB2Xj1
|
||||
TWmZvYYbkzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQAOEx2ythPO
|
||||
ClEKFkoGx3EYQo74GDWF8xNHGQjwuVS3Kojsg/cICEFlU0SEuMoYbrFY2P0Rh4Ru
|
||||
NmpwO1EJ5//UfFIWy24PApoqR8jDA7RPYQaqLiPQPuGOhKdfXopQwHXFRiPfJs4M
|
||||
ZWi/srafiHqUsiVSlO92ugAanvmTMFYiKMAoyBfaloOQ8xLjWiKo652iU7G3TBqc
|
||||
BOw5h71aZoXqdtBaKKHTDe2rcwat02KzeXvtL+/C6xdn6BTmXc3ByniScjA6ahmz
|
||||
s70QKUq4l4boeQReKz7f5xpHHn7kMcfOvXe82dMK2LxDxWchUNt+lBwWH6ozK6fv
|
||||
xf47EwoKAbfKG7GJXTJIOm+lrhqTvpC2XUh/FGr5QUU8gVx04qNaySqVfh7/YgcC
|
||||
H3gMgMvSCnP+XwLezqc2M13oW1KPm6gTrQ1A9YyDE5sqUPH6iJWE9p9jVH7Ds/i/
|
||||
Sc0iw64I0nrJE2cr5ck2MFAiVjpOCn9zLrKr1KQ7t2H0KzLLYI0LDOtZdfUQGUSK
|
||||
nSFFbtc3BMfHRAB3+RDBZ5KIER7dGVKE/0nDEQZo0lmfLTQMOvo8DIw/YfAQnW+I
|
||||
hq5TMN7e7oxFDSO3PGAdfVu2J+lIu82F6djFD0FVmnWCHcDJ1VmqwFKjng/FzweO
|
||||
xMVGtdxq/YKfRA/oZN6laDd4Zev2XiRDhw==
|
||||
-----END CERTIFICATE-----
|
||||
@ -0,0 +1,12 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
mailproxy:
|
||||
build: .
|
||||
container_name: mail-proxy
|
||||
ports:
|
||||
- "10.47.0.86:9993:993" # IMAP наружу
|
||||
volumes:
|
||||
- ./maildata:/var/mail/mailuser
|
||||
- ./sieve:/home/mailuser/sieve
|
||||
#restart: unless-stopped
|
||||
@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Компиляция sieve
|
||||
#runuser -u mailuser -- sievec /home/mailuser/sieve/default.sieve
|
||||
|
||||
chown -R mailuser:mailuser /home/mailuser
|
||||
chown -R mailuser:mailuser /var/mail/mailuser
|
||||
|
||||
# Убедимся, что Maildir существует
|
||||
echo "mailuser
|
||||
mailuser/.INBOX
|
||||
mailuser/.010_my
|
||||
mailuser/.020_piecedukes
|
||||
mailuser/.030_ras4et
|
||||
mailuser/.040_wiki
|
||||
mailuser/.050_mailings
|
||||
mailuser/.060_new
|
||||
mailuser/.070_closed
|
||||
mailuser/.080_ESR-XXXX
|
||||
mailuser/.100_gitlab
|
||||
mailuser/.100_gitlab.010_kern
|
||||
mailuser/.100_gitlab.020_base
|
||||
mailuser/.100_gitlab.030_apps
|
||||
mailuser/.100_gitlab.040_smth
|
||||
mailuser/.100_gitlab.050_auto
|
||||
mailuser/.110_HR
|
||||
mailuser/.120_OT
|
||||
mailuser/.120_OT.supply
|
||||
mailuser/.120_OT.servers
|
||||
mailuser/.120_OT.web
|
||||
mailuser/.130_PVS
|
||||
mailuser/.140_versions
|
||||
mailuser/.140_others
|
||||
mailuser/.140_others.Time
|
||||
mailuser/.140_others.Jenkins
|
||||
mailuser/.140_others.Zabbix
|
||||
mailuser/.140_others.WLC
|
||||
mailuser/.140_others.SoftWLC
|
||||
mailuser/.140_others.WEB
|
||||
mailuser/.140_others.ECCM" | while read x; do for y in cur new tmp; do \
|
||||
su - mailuser -c "mkdir -p /var/mail/${x}/${y}"; \
|
||||
done; done
|
||||
|
||||
# Запуск dovecot
|
||||
service dovecot restart
|
||||
|
||||
# Запуск fetchmail
|
||||
runuser -u mailuser -- fetchmail -f /home/mailuser/.fetchmailrc -d 60 -v --nodetach
|
||||
#sleep 5000
|
||||
@ -0,0 +1,4 @@
|
||||
poll pop3.eltex.loc protocol pop3
|
||||
user "${USERNAME}@eltex.loc" password "${USERPASS}"
|
||||
ssl
|
||||
mda "/usr/lib/dovecot/dovecot-lda -d mailuser"
|
||||
@ -0,0 +1,111 @@
|
||||
require ["body","fileinto","imap4flags"];
|
||||
# rule:[ras4et]
|
||||
if header :contains "subject" "Расчётный листок"
|
||||
{
|
||||
fileinto "040_ras4et";
|
||||
addflag "\\Flagged";
|
||||
stop;
|
||||
}
|
||||
# rule:[jenkins]
|
||||
if anyof (header :contains "from" "ESR Jenkins", body :text :contains "ESR Jenkins обновил", body :text :contains "была обновлена (ESR Jenkins)")
|
||||
{
|
||||
fileinto "140_others/Jenkins";
|
||||
stop;
|
||||
}
|
||||
# rule:[time]
|
||||
if header :contains "subject" "Уведомление по отработанному времени"
|
||||
{
|
||||
fileinto "140_others/Time";
|
||||
addflag "\\Flagged";
|
||||
stop;
|
||||
}
|
||||
# rule:[wiki]
|
||||
if header :contains "subject" "Wiki-страница"
|
||||
{
|
||||
fileinto "040_wiki";
|
||||
stop;
|
||||
}
|
||||
# rule:[gitlab jenkins]
|
||||
if allof (header :contains "from" "gitlab", header :contains "from" "Jenkins")
|
||||
{
|
||||
fileinto "100_gitlab/050_auto";
|
||||
}
|
||||
# rule:[gitlab base]
|
||||
if header :contains "subject" "ESR Base"
|
||||
{
|
||||
fileinto "100_gitlab/020_base";
|
||||
stop;
|
||||
}
|
||||
# rule:[gitlab kernel]
|
||||
if header :contains "subject" "ESR Kernel"
|
||||
{
|
||||
fileinto "100_gitlab/010_kernel";
|
||||
stop;
|
||||
}
|
||||
# rule:[sWLC]
|
||||
if header :contains "subject" "SoftWLC"
|
||||
{
|
||||
fileinto "140_others/SoftWLC";
|
||||
stop;
|
||||
}
|
||||
# rule:[esrwlc]
|
||||
if header :contains "subject" "ESR:WLC"
|
||||
{
|
||||
fileinto "140_others/WLC";
|
||||
stop;
|
||||
}
|
||||
# rule:[ECCM]
|
||||
if header :contains "subject" "ECCM"
|
||||
{
|
||||
fileinto "140_others/ECCM";
|
||||
stop;
|
||||
}
|
||||
# rule:[gitlab all other]
|
||||
if header :contains "from" "gitlab"
|
||||
{
|
||||
fileinto "100_gitlab";
|
||||
stop;
|
||||
}
|
||||
# rule:[hr]
|
||||
if header :contains "subject" "Программисты, инженеры HW"
|
||||
{
|
||||
fileinto "110_HR";
|
||||
stop;
|
||||
}
|
||||
# rule:[моё]
|
||||
if body :text :contains "Сергей Маринкевич"
|
||||
{
|
||||
fileinto "010_my";
|
||||
stop;
|
||||
}
|
||||
# rule:[пиздюки]
|
||||
if anyof (body :text :contains "Тимур Сайботалов", body :text :contains "Олег Сердитов", body :text :contains "Андрей Журавлёв")
|
||||
{
|
||||
fileinto "020_piecedukes";
|
||||
stop;
|
||||
}
|
||||
# rule:[new]
|
||||
if header :contains "subject" "(New)"
|
||||
{
|
||||
fileinto "060_new";
|
||||
stop;
|
||||
}
|
||||
# rule:[Closed]
|
||||
if header :contains "subject" "(Closed)"
|
||||
{
|
||||
fileinto "070_closed";
|
||||
stop;
|
||||
}
|
||||
# rule:[версии]
|
||||
if header :contains "subject" "- версия:"
|
||||
{
|
||||
fileinto "140_versions";
|
||||
stop;
|
||||
}
|
||||
# rule:[mailings]
|
||||
if allof (not header :contains "from" "red.eltex.loc", not header :contains "from" "gitlab")
|
||||
{
|
||||
fileinto "050_mailings";
|
||||
setflag "\\Flagged";
|
||||
stop;
|
||||
}
|
||||
Loading…
Reference in New Issue