Mailgw.fjfi.cvut.cz
Servery / Služby |
Přístupné komukoliv |
Omezený/individuální účet |
Služby |
backup · DHCP · DNS · doména FJFI · eduroam · fileserver · IdM · forum · gitlab · lists · moodle · indico · mailgw · K4 · mailserver · NMS · openvpn · skolniftp · ssh · videokonference · VoIP · video · VPN · wififjfi · wiki · www |
Učebny |
e-sklipek · KFE unixlab · KFE pclab · PD1 · KM 105 · KM 115 |
Ostatní |
Network · Blokované porty |
[edit] · [view] |
Contents
Základní informace
- Správce
- Petr Vokáč
- HW
- IBM System x iDataPlex dx340 Server -[638922X], 2x Intel(R) Xeon(R) CPU E5440 @ 2.83GHz, 16GB DDR2 533MHz, 300GB SAS
- OS
- CentOS7
- Využití
- mailová brána (antivir+antispam) + SMTP AUTH server smtp.fjfi.cvut.cz, RADIUS server pro Eduroam
- Konto
- pro autentizované odesílání mailů přes smtp.fjfi.cvut.cz použijte hlavní uživatelské jméno/heslo, pro Eduroam je potřeba nadefinovat samostatné heslo
Informace pro správce
Změna MX záznamů
Pokud chcete změnit MX záznamy v DNS tak, aby maily procházely přes mailgw, nestačí (ve většině případů) jen upravit přísušné záznamy v DNS, ale je potřeba změnit i konfiguraci postfixu na mailgw. Ten se musí dozvědět, na jaký stroj má maily fyzicky doručovat - je potřeba přídat správné rádky do /etc/postfix/transport a provést postmap /etc/postfix/transport.
Další dokumentace
- Přesun oficiálních adres @km1, @troja z Mercuryho
- Konfigurace (duben 2006)
- Doplnění k aktuální konfiguraci (říjen 2005)
- Prezentace ke stavu realizace (březen 2005)
- Základní definice projektu mailové brány
- Zápis ze schůzky (prosinec 2004)
- Motivace pro mailovou bránu (prosinec 2004)
Použitý software
- CentOS
- Postfix
-
OpenLDAP - amavis-new
- Kaspersky Anti-Virus
- Spamassassin
- FuzzyOcr
- DKIM Milter
- DomainKeys Milter
- SID Milter
-
DSPAM
Základní instalace
- standardní (minimální) instalace operačního systému
- standardní puppet konfigurace pro server (certifikáty, logging, monitoring, ...)
rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm yum install puppet # use mailgw puppet client certificates from backup # of the /var/lib/puppet/ssl cat >> /etc/puppet/puppet.conf <<EOF [main] # puppet server name must be in config file, because new puppet # client doesn't support passing this information from environmet # of the startup script server = puppet.fjfi.cvut.cz # distribute custom facts and types from # the server to managed clients automatically pluginsync = true EOF # apply puppet configuration puppet agent --test --debug --waitforcert=120 # enable and start puppet daemon systemctl enable puppet systemctl start puppet
mailgw
- instalace EPEL repository
postfix
- používá se opatchovaná verze postfixu umožňující specifikovat jiný limit na velikost mailů pro lokální stroje
- zkompilovaná ze src.rpm balíčku + postfix-2.11.0-local_message_limit.patch
- aktuálně používána verze 3.0 (podpora SMTPUTF8 z RFC 6531..6533)
- instalace
yum install libicu pam_krb5 perl-Date-Calc
rpm -Uvh postfix-3.0.1-2.el7.centos.x86_64.rpm postfix-pcre-3.0.1-2.el7.centos.x86_64.rpm postfix-perl-scripts-3.0.1-2.el7.centos.x86_64.rpm
- konfigurace v /etc/postfix
- postfix klade důraz na zachování kompatibility konfiguračních souborů
- pokud není potřeba měnit chování mailserveru stačí zkopírovat konfigurační soubory
- z cronu jsou automaticky updatovány některé konfigurační soubory dle informací z AD
- z cronu jsou automaticky updatovány dh_512.pem a dh_1024.pem
openssl dhparam -out dh_512.pem 512 && openssl dhparam -out dh_1024.pem 2048
- povolení dalších portů v SELinuxu
semanage port -a -t amavisd_recv_port_t -p tcp 10022
semanage port -a -t amavisd_send_port_t -p tcp 10023
semanage port -a -t amavisd_recv_port_t -p tcp 9998
semanage port -a -t smtp_port_t -p tcp 10028
semanage boolean --modify --on antivirus_can_scan_system
- přidat aliasy "root" a "spam" do /etc/aliases a spustit newaliases
- konfigurace SASL autentizace
- instalace potřebných knihoven
yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-gssapi
systemctl enable saslauthd
systemctl start saslauthd
- nutná správná konfigurace kerbera v /etc/krb5.conf
- postfix autentizace proti kerberu v /etc/pam.d/smtp.postfix
- instalace potřebných knihoven
milter pluginy
- opendkim
- instalace
yum install opendkim
- konfigurace /etc/opendkim a /etc/opendkim.{sign,verify}.conf
- SELinux
semanage port -a -t milter_port_t -p tcp 10039
semanage port -a -t milter_port_t -p tcp 10040
- podpora více instancí OpenDKIM v systemd /root/etc/systemd/system/opendkim@.service
systemctl enable opendkim@sign.service
systemctl enable opendkim@verify.service
- instalace
- srs-milter
- instalace
rpm -Uvh srs-milter-0.0.2-1.x86_64.rpm libspf2-1.2.10-0.el7.centos.x86_64.rpm libsrs2-1.0.18-1.x86_64.rpm
- SELinux
semanage port -a -t milter_port_t -p tcp 10043
semanage port -a -t milter_port_t -p tcp 10044
- start služby
systemctl enable srs-milter@forward
systemctl enable srs-milter@reverse
- instalace
- sid-milter
- instalace
rpm -Uvh sid-milter-1.0.0-0.el7.centos.x86_64.rpm
- start služby
systemctl enable sid-milter
- instalace
policy delegation
- postfix poskytuje policy delegation protokol pro zpracovaní mailů na základě jejich envelope (CONNECT, HELO, MAIL FROM, RCPT TO, DATA)
- použitá implementace ppolicy (Python Postfix Policy Server)
- umožňuje psát pravidla pro zpracování mailu v pythonu
- využívá python-twisted framework a dle konfigurace závisí i na dalších python balíčcích
yum install python-twisted-core MySQL-python python-dns python-GeoIP
- instalace z připraveného RPM
rpm -Uvh ppolicy-2.7.0-0beta19.noarch.rpm
systemctl enable ppolicy
- konfigurace resp. python script řídící chování ppolicy /etc/postfix/ppolicy.conf
- před prvním startem je nutné vytvořit MySQL databázi a zpřístupnit ji uživateli z konfiguračního souboru (detaily v ppolicy.sql)
- nutné vytvořit databázi změn
CREATE TABLE `changes` (`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00')
trénování spamu
- učící adresy spam a nospam
- při zpracování příchozího mailu zavolány přes pipe skripty pro učení
- je potřeba nastavit správný SELinux kontext
# FIXME: tohle nestačí, protože ten skript potřebuje číst/zapisovat do /var/spool/amavisd # dočasně "vyřešeno" tak, že logování ve skriptu se provádí do /tmp semanage fcontext -a -t postfix_pipe_exec_t /etc/postfix/spam-learn.py restorecon -v /etc/postfix/spam-learn.py # FIXME: jako dočasné řesení lze převést postfix_type_t do permissive módu semanage permissive -a postfix_pipe_t
amavis
- používá se opatchovaná verze nejnovější verze
- přidává specifické hlavičky X-CTU-FNSPE s informacemi o běhu amavisu/spamassassinu
- vylepšená podpora CRM114
- několik bugfixů týkajících se LDAP
- přidáno RPM pro p0f (systemd service file, script wrapper)
- detaily ve zdrojovém balíčku amavisd-new-2.xx.xx.src.rpm
- závislost na řadě balíčků z EPEL + dalších potřebných (perl) modulů zkompilovaných z Fedora src.rpm balíčků
yum install spamassassin yum install altermime arj bzip2 cabextract clamav-server clamav-server-systemd \ freeze lrzip lzop lz4 nomarch p7zip p7zip-plugins tmpwatch unzoo yum install perl-Archive-Tar perl-Archive-Zip perl-Authen-SASL perl-BerkeleyDB \ perl-Convert-TNEF perl-Convert-UUlib perl-DBD-SQLite perl-DBI perl-Digest-SHA \ perl-Digest-SHA1 perl-Mail-DKIM perl-Mail-SPF perl-Net-DNS perl-Net-Server \ perl-NetAddr-IP perl-Socket6 perl-Time-HiRes perl-Unix-Syslog perl-Razor-Agent \ perl-LDAP perl-Image-Info # missing CentOS7+EPEL packages rpm -Uvh perl-File-LibMagic-1.00-4.el7.centos.x86_64.rpm unrar-4.0.7-1.el7.centos.x86_64.rpm # install and enable amavisd rpm -Uvh amavisd-new-2.10.1-1.el7.centos.noarch.rpm amavisd-new-p0f-2.10.1-1.el7.centos.noarch.rpm systemctl enable amavisd.service systemctl enable amavisd-p0f.service
- konfigurace /etc/amavisd/
- konfigurace správného síťového rozhraní pro p0f v /etc/sysconfig/amavisd-p0f (+ disablování samostatné služby p0f)
- informace o mailech zpracovaných amavisem se ukládají do MariaDB
- nutné vytvořit příslušnou databázi
- potřebné informace v nainstalovaném README.sql-mysql
- pro zjednodušení práce s databází jsou tabulky v ppolicy databázi
karanténa
- ukládány všechny zablokované maily
- detekovaný vir
- detekovaný spam při nastavené hladině pro zahazování spamu (uživatel musí explicitně povolit)
- všechny ostatní maily
- veškeré zpracované maily jsou na mailgw dva týdny zálohovány, aby je bylo možné znovu doručit v případě problémů s mailboxy
spamassassin
- lokální pravidla v /etc/mail/spamassassin/99_zzzz_my.cf
- FuzzyOCR
yum install giflib-utils netpbm-progs transfig libjpeg-turbo-utils pango libwebp rpm -Uvh spamassassin-FuzzyOcr-3.6.0-6.el7.centos.noarch.rpm \ perl-String-Approx-3.27-6.el7.centos.x86_64.rpm \ ocrad-0.24-1.el7.centos.x86_64.rpm \ gifsicle-1.87-1.el7.centos.x86_64.rpm \ gocr-0.50-3.el7.centos.x86_64.rpm \ tesseract-3.03-0.2.rc1.el7.centos.x86_64.rpm \ tesseract-osd-3.03-0.2.rc1.el7.centos.x86_64.rpm \ leptonica-1.71-2.el7.centos.x86_64.rpm
- Mail::SpamAssassin::Plugin::RelayCountry
rpm -Uvh perl-IP-Country-utils-2.26-4.el7.centos.noarch.rpm \ perl-IP-Country-2.26-4.el7.centos.noarch.rpm \ perl-Geography-Countries-2009041301-13.el7.centos.noarch.rpm
- Mail::SpamAssassin::Plugin::DCC
rpm -Uvh DCC-1.3.158-0.el7.centos.x86_64.rpm chown amavis -R /etc/dcc
CRM114
yum install tre rpm -Uvh crm114-0-8.14.20100106.el7.centos.x86_64.rpm
antivir
- KAV
rpm -Uvh klms-8.0.1-705.i386.rpm; yum install glibc.i686
- (první) konfigurace pomocí /opt/kaspersky/klms/bin/klms-setup.pl
- pro přístup amavisu k soketům klms je potřeba přidat amavis uživatele do skupiny klusers
usermod -G klusers amavis
usermod -G amavis kluser
- je nutné zabránit promazávání tmp adresářů klms pomocí konfigurace tmpfiles v /usr/lib/tmpfiles.d/klms.conf
X /tmp/klmstmp
X /tmp/klms_filter
- každoročně je nutné importovat nový licenční soubor
/opt/kaspersky/klms/bin/klms-control --licenser --install-additional-key "license".key
- ESET Mail Security
- instalace
rpm -Uvh esets-4.0.10.x86_64.rpm
- licence
/opt/eset/esets/sbin/esets_lic --import=ess_business_edition.lic
- konfigurace /etc/opt/eset/esets/esets.cfg uživatelského jména/hesla (av_update_username/av_update_password) pro updaty
- lze spouštět i přímo přes systemd přidáním service souboru do /etc/systemd/system/eset.service
- licence
- licence na webu ČVUT jsou pouze pro stanice, tj. ESET File Security, které pro každé scanování přes amavis spouští nový proces a je to tim pádem nepoužitelně pomalé
- na požádání lze získat i licenční soubory ESET Mail Security
- pro fungování amavisu resp. esets_cli je nutné použít tu druhou licenci (ale je take dobré nainstalovat i první licenci, aby fungoval i esets_scan)
- instalace
- clamav
- instalace
yum install clamav-server-systemd clamav-update
- aktivace updatu vykomentováním posledního řádku v /etc/sysconfig/freshclam a "Example" na začátku /etc/freshclam.conf
- instalace
rspamd
Bude integrováno jako řešení sloužící k odmítání spamu ještě během SMTP konverzace.
certifikáty
- postfix je aktuálně zkonfigurován s podporou DANE/TLSA
- TLSA záznám je vázán na veřejný klíč (zbylý obsah certifikátu se muže měnit, např. platnost)
- při změně veřejného (privátního) klíče je nutné postarat se o změnu TLSA záznamu v DNS
- před vyměnou certifikátu je potřeba přidat nový TLSA otisk
- vlastní výměnu certifikátu je možné udělat až po uplynutí TTL TLSA DNS záznamu
- po výměně certifikátu je možné odmazat starý TLSA otisk z DNS
ostatní
- mariadb
- databáze využívána amavisem, ppolicy a radius serverem
- instalace
yum install mariadb-server systemctl enable mariadb.service systemctl start mariadb.service
- konfigurace v /etc/my.cnf.d (per database innodb file, SSL connection support)
mysql -B mysql -e 'UPDATE `user` SET `host` = "%" WHERE `user` = "root" AND `host` = "mailgw1.fjfi.cvut.cz"' mysql -B mysql -e 'UPDATE `user` SET `password` = PASSWORD("secret") WHERE `user` = "root"' # some additional cleanup mysql -B mysql -e 'DELETE FROM `user` WHERE `host` = "localhost" AND `user` = "ppolicy"' mysql -B mysql -e 'DELETE FROM `user` WHERE `host` = "localhost" AND `user` = ""' mysql -B mysql -e 'DELETE FROM `user` WHERE `host` = "mailgw1.fjfi.cvut.cz"' mysql -B mysql -e 'DELETE FROM `user` WHERE `host` != "%" AND `user` = "root"' mysql -B mysql -e 'FLUSH PRIVILEGES'
- unbound
- mailserver provádí hodně DNS dotazů a tak je rozumné provozovat cachovací DNS lokálně
- cachovací DNS server s forwardery na oficiální FJFI/ČVUT DNS servery
- instalace
yum install unbound
- konfigurace /etc/unbound/unbound.conf
- poslouchat na veřejných interface
- zkonfigurovat access-control pouze pro ČVUT adresy
- nastavit forward-zone "." na naše (cachovací) DNS
- pro spolehlivé startování služeb vyžadujících DNS je nutné disablovat 127.0.0.1 jako cachovací nameserver dokud unbound neběží
- nutné disablovat update DNS konfigurace v /etc/NetworkManager/NetworkManager.conf
dns=none
- vytvořit novou systemd "oneshot" service /etc/systemd/system/dns-cache-disable.service startovanou před network targetem, která disabluje použivání (nenastartované) lokální DNS cache
ExecStart=/usr/bin/sed -i 's/^\(nameserver *127.0.0.1\)/#\1/' /etc/resolv.conf
- vytvořit novou systemd "oneshot" service /etc/systemd/system/dns-cache-enable.service startovanou po startu cachovacího DNS (vyžadující běžící službu DNS), která enabluje použivání lokální DNS cache
ExecStart=/usr/bin/sed -i 's/^#\(nameserver *127.0.0.1\)/\1/' /etc/resolv.conf
-
do unbound.service přidat skript po startu službyExecStartPost=/usr/bin/sed -i 's/^#\(nameserver *127.0.0.1\)/\1/' /etc/resolv.conf
- přidat jako první řádek /etc/resolv.conf
nameserver 127.0.0.1
- nutné disablovat update DNS konfigurace v /etc/NetworkManager/NetworkManager.conf
- dinfo
- lokální daemon poskytující remote rozhraní pro různé služby
- aktivní modul "mail" v /etc/sysconfig/dinfo
- služba
systemctl enable dinfo
- (do budoucna v plánu nahradit nejakým standardním nástrojem, např. mcollective, RESTful API, ...)
- snmp
- pro export základních informací o postfix frontě (počet mailů, velikost, ...)
- používáno Nagiosem pro monitoring
- instalace
yum install net-snmp
- konfigurace v /etc/snmp
- služba
systemctl enable snmpd
- bacula-client
yum install bacula-client # konfigurace /etc/bacula systemctl enable bacula-fd
relay
Aktuálně je používáno jako outbound relay pro odchozí maily, aby bylo možné jednoduše měnit adresu např. pro případ, kdy současná adresa z nějakého důvodu dostane "poor reputation". Celá služba běží na stejném hardware jako mailgw, ale je v samostatném kontejneru s přidělenou IPv4+IPv6 adresou. Aktuálně je instalace řešena jako nspawn kontejner, ale do budoucna se počítá s nějakým vhodnějším řešením buď s využitím podman (aktualně nemá rozumnou podporu IPv6) nebo např. kuberentes.
instalace
konfigurace
radius
freeradius
- instalace
yum install freeradius freeradius-utils freeradius-ldap freeradius-mysql
- konfigurace /etc/raddb dle Eduroam návodu resp. aktuálních FJFI konfigurací
- SELinux konfigurace
semanage fcontext -a -t radiusd_exec_t /etc/raddb/RadiusPostAuth.py restorecon -v /etc/raddb/RadiusPostAuth.py
- nutné výtvořit MariaDB databázi podle /etc/raddb/mods-config/sql/main/mysql
mysql -e 'CREATE DATABASE radius' mysql radius < schema.sql mysql radius < setup.sql mysql -B mysql -e 'GRANT SELECT,LOCK TABLES ON radius.* TO "radius_reader"@"%" IDENTIFIED BY "secret"'
- služba
systemctl enable radiusd
- skripty pro registraci zařízení přihlášených přes Eduroam potřebují další python moduly
yum install python-ldap MySQL-python
radsecproxy
- při použití FreeRadius 3.x již není potřeba, protože podpora radsec je do FreeRadiusu integrována
- vytvořen RPM balíček radsecproxy-1.6.6-0.el7.centos.x86_64.rpm
- konfigurace /etc/radsecproxy.conf
- služba
systemctl enable radsecproxy
firewall
- služba
systemctl enable firewalld
- konfigurace
# trusted hosts firewall-cmd --permanent --zone=trusted firewall-cmd --permanent --zone=trusted --add-source=147.32.9.2 firewall-cmd --permanent --zone=trusted --add-source=2001:718:2:1900::2 firewall-cmd --permanent --zone=trusted --add-source=147.32.9.3 firewall-cmd --permanent --zone=trusted --add-source=2001:718:2:1900::3 firewall-cmd --permanent --zone=trusted --add-source=147.32.9.67 firewall-cmd --permanent --zone=trusted --add-source=2001:718:2:1800::3 # internal (FNSPE) network #firewall-cmd --permanent --zone=internal --add-source=147.32.4.0/22 #firewall-cmd --permanent --zone=internal --add-source=147.32.8.0/22 #firewall-cmd --permanent --zone=internal --add-source=147.32.22.0/24 #firewall-cmd --permanent --zone=internal --add-source=147.32.25.0/24 #firewall-cmd --permanent --zone=internal --add-source=2001:718:2:1800::/56 #firewall-cmd --permanent --zone=internal --add-source=2001:718:2:1900::/56 #firewall-cmd --permanent --zone=internal --remove-servce=ipp-client #firewall-cmd --permanent --zone=internal --remove-servce=mdns #firewall-cmd --permanent --zone=internal --remove-servce=dhcpv6-client #firewall-cmd --permanent --zone=internal --remove-servce=samba-client # work (CTU) network firewall-cmd --permanent --zone=work --add-source=147.32.0.0/16 firewall-cmd --permanent --zone=work --add-source=2001:718:2::/48 firewall-cmd --permanent --zone=work --add-service=dns firewall-cmd --permanent --zone=work --remove-service=ipp-client firewall-cmd --permanent --zone=work --remove-service=dhcpv6-client # public services firewall-cmd --permanent --zone=public --add-service=smtp firewall-cmd --permanent --zone=public --add-port=465/tcp firewall-cmd --permanent --zone=public --add-port=587/tcp firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="147.32.4.0/26" service name="radius" accept' firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="147.32.7.0/26" service name="radius" accept' firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="147.32.22.224/27" service name="radius" accept' firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="195.113.233.246" service name="radius" accept' firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="195.113.187.22" port port="2083" protocol="tcp" accept' # apply changes in firewall configuration firewall-cmd --reload