Difference between revisions of "Mailgw.fjfi.cvut.cz"
(→policy delegation) |
(→amavis) |
||
(28 intermediate revisions by the same user not shown) | |||
Line 4: | Line 4: | ||
;Správce : [http://nms.fjfi.cvut.cz/user/who.php?uid=vokacpet Petr Vokáč] | ;Správce : [http://nms.fjfi.cvut.cz/user/who.php?uid=vokacpet Petr Vokáč] | ||
− | ;HW : | + | ;HW : IBM System x iDataPlex dx340 Server -[638922X], 2x Intel(R) Xeon(R) CPU E5440 @ 2.83GHz, 16GB DDR2 533MHz, 300GB SAS |
;OS : [http://www.centos.org CentOS7] | ;OS : [http://www.centos.org CentOS7] | ||
;Využití : mailová brána (antivir+antispam) + SMTP AUTH server smtp.fjfi.cvut.cz, RADIUS server pro [http://eduroam.fjfi.cvut.cz/ Eduroam] | ;Využití : mailová brána (antivir+antispam) + SMTP AUTH server smtp.fjfi.cvut.cz, RADIUS server pro [http://eduroam.fjfi.cvut.cz/ Eduroam] | ||
Line 70: | Line 70: | ||
** zkompilovaná ze src.rpm balíčku + postfix-2.11.0-local_message_limit.patch | ** 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) | ** aktuálně používána verze 3.0 (podpora SMTPUTF8 z RFC 6531..6533) | ||
− | ** instalace <pre>yum install libicu pam_krb5</pre><pre>rpm -Uvh postfix-3.0.0-3.el7.centos.x86_64.rpm</pre> | + | ** instalace <pre>yum install libicu pam_krb5 perl-Date-Calc</pre><pre>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</pre> |
* konfigurace v <tt>/etc/postfix</tt> | * konfigurace v <tt>/etc/postfix</tt> | ||
** postfix klade důraz na zachování kompatibility konfiguračních souborů | ** 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 | ** 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 některé konfigurační soubory dle informací z AD | ||
− | ** povolení dalších portů v SELinuxu <pre>semanage port -a -t amavisd_recv_port_t -p tcp | + | ** z cronu jsou automaticky updatovány <tt>dh_512.pem</tt> a <tt>dh_1024.pem</tt><pre>openssl dhparam -out dh_512.pem 512 && openssl dhparam -out dh_1024.pem 2048</pre> |
+ | ** povolení dalších portů v SELinuxu <pre>semanage port -a -t amavisd_recv_port_t -p tcp 10022</pre><pre>semanage port -a -t amavisd_send_port_t -p tcp 10023</pre><pre>semanage port -a -t amavisd_recv_port_t -p tcp 9998</pre><pre>semanage port -a -t smtp_port_t -p tcp 10028</pre><pre>semanage boolean --modify --on antivirus_can_scan_system</pre> | ||
** přidat aliasy "root" a "spam" do <tt>/etc/aliases</tt> a spustit <tt>newaliases</tt> | ** přidat aliasy "root" a "spam" do <tt>/etc/aliases</tt> a spustit <tt>newaliases</tt> | ||
* konfigurace SASL autentizace | * konfigurace SASL autentizace | ||
Line 105: | Line 106: | ||
** 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 <tt>ppolicy.sql</tt>) | ** 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 <tt>ppolicy.sql</tt>) | ||
** nutné vytvořit databázi změn <pre>CREATE TABLE `changes` (`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00')</pre> | ** nutné vytvořit databázi změn <pre>CREATE TABLE `changes` (`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00')</pre> | ||
+ | |||
+ | ====trénování spamu==== | ||
+ | * učící adresy <tt>spam</tt> a <tt>nospam</tt> | ||
+ | * 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=== | ===amavis=== | ||
Line 134: | Line 146: | ||
** potřebné informace v nainstalovaném README.sql-mysql | ** potřebné informace v nainstalovaném README.sql-mysql | ||
** pro zjednodušení práce s databází jsou tabulky v <tt>ppolicy</tt> databázi | ** pro zjednodušení práce s databází jsou tabulky v <tt>ppolicy</tt> 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 ==== | ==== spamassassin ==== | ||
Line 169: | Line 187: | ||
** licence <pre>/opt/eset/esets/sbin/esets_lic --import=ess_business_edition.lic</pre> | ** licence <pre>/opt/eset/esets/sbin/esets_lic --import=ess_business_edition.lic</pre> | ||
** konfigurace <tt>/etc/opt/eset/esets/esets.cfg</tt> uživatelského jména/hesla (<tt>av_update_username</tt>/<tt>av_update_password</tt>) pro updaty | ** konfigurace <tt>/etc/opt/eset/esets/esets.cfg</tt> uživatelského jména/hesla (<tt>av_update_username</tt>/<tt>av_update_password</tt>) pro updaty | ||
− | ** licence | + | ** lze spouštět i přímo přes [http://support.eset.com/kb3723/ systemd přidáním service souboru] do <tt>/etc/systemd/system/eset.service</tt> |
+ | ** 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. <tt>esets_cli</tt> je nutné použít tu druhou licenci (ale je take dobré nainstalovat i první licenci, aby fungoval i <tt>esets_scan</tt>) | ||
* clamav | * clamav | ||
** instalace <pre>yum install clamav-server-systemd clamav-update</pre> | ** instalace <pre>yum install clamav-server-systemd clamav-update</pre> | ||
** aktivace updatu vykomentováním posledního řádku v <tt>/etc/sysconfig/freshclam</tt> a "Example" na začátku <tt>/etc/freshclam.conf</tt> | ** aktivace updatu vykomentováním posledního řádku v <tt>/etc/sysconfig/freshclam</tt> a "Example" na začátku <tt>/etc/freshclam.conf</tt> | ||
+ | |||
+ | ===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í=== | ===ostatní=== | ||
Line 182: | Line 216: | ||
systemctl start mariadb.service | systemctl start mariadb.service | ||
** konfigurace v <tt>/etc/my.cnf.d</tt> (per database innodb file, SSL connection support) | ** konfigurace v <tt>/etc/my.cnf.d</tt> (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 | * unbound | ||
** mailserver provádí hodně DNS dotazů a tak je rozumné provozovat cachovací DNS lokálně | ** mailserver provádí hodně DNS dotazů a tak je rozumné provozovat cachovací DNS lokálně | ||
Line 196: | Line 238: | ||
*** <strike>do <tt>unbound.service</tt> přidat skript po startu služby<pre>ExecStartPost=/usr/bin/sed -i 's/^#\(nameserver *127.0.0.1\)/\1/' /etc/resolv.conf</pre></strike> | *** <strike>do <tt>unbound.service</tt> přidat skript po startu služby<pre>ExecStartPost=/usr/bin/sed -i 's/^#\(nameserver *127.0.0.1\)/\1/' /etc/resolv.conf</pre></strike> | ||
*** přidat jako první řádek <tt>/etc/resolv.conf</tt><pre>nameserver 127.0.0.1</pre> | *** přidat jako první řádek <tt>/etc/resolv.conf</tt><pre>nameserver 127.0.0.1</pre> | ||
+ | * dinfo | ||
+ | ** lokální daemon poskytující remote rozhraní pro různé služby | ||
+ | ** aktivní modul "mail" v <tt>/etc/sysconfig/dinfo</tt> | ||
+ | ** služba <pre>systemctl enable dinfo</pre> | ||
+ | ** (do budoucna v plánu nahradit nejakým standardním nástrojem, např. mcollective, RESTful API, ...) | ||
* snmp | * snmp | ||
** pro export základních informací o postfix frontě (počet mailů, velikost, ...) | ** pro export základních informací o postfix frontě (počet mailů, velikost, ...) | ||
Line 202: | Line 249: | ||
** konfigurace v <tt>/etc/snmp</tt> | ** konfigurace v <tt>/etc/snmp</tt> | ||
** služba <pre>systemctl enable snmpd</pre> | ** služba <pre>systemctl enable snmpd</pre> | ||
− | * | + | * 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== | ==radius== | ||
Line 213: | Line 266: | ||
* instalace<pre>yum install freeradius freeradius-utils freeradius-ldap freeradius-mysql</pre> | * instalace<pre>yum install freeradius freeradius-utils freeradius-ldap freeradius-mysql</pre> | ||
* konfigurace <tt>/etc/raddb</tt> dle [http://www.eduroam.cz/ Eduroam návodu] resp. aktuálních FJFI konfigurací | * konfigurace <tt>/etc/raddb</tt> dle [http://www.eduroam.cz/ 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 <tt>/etc/raddb/mods-config/sql/main/mysql</tt> | * nutné výtvořit MariaDB databázi podle <tt>/etc/raddb/mods-config/sql/main/mysql</tt> | ||
mysql -e 'CREATE DATABASE radius' | mysql -e 'CREATE DATABASE radius' | ||
mysql radius < schema.sql | mysql radius < schema.sql | ||
mysql radius < setup.sql | mysql radius < setup.sql | ||
+ | mysql -B mysql -e 'GRANT SELECT,LOCK TABLES ON radius.* TO "radius_reader"@"%" IDENTIFIED BY "secret"' | ||
* služba <pre>systemctl enable radiusd</pre> | * služba <pre>systemctl enable radiusd</pre> | ||
* skripty pro registraci zařízení přihlášených přes Eduroam potřebují další python moduly<pre>yum install python-ldap MySQL-python</pre> | * skripty pro registraci zařízení přihlášených přes Eduroam potřebují další python moduly<pre>yum install python-ldap MySQL-python</pre> | ||
+ | <strike> | ||
===radsecproxy=== | ===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 <tt>radsecproxy-1.6.6-0.el7.centos.x86_64.rpm</tt> | * vytvořen RPM balíček <tt>radsecproxy-1.6.6-0.el7.centos.x86_64.rpm</tt> | ||
* konfigurace <tt>/etc/radsecproxy.conf</tt> | * konfigurace <tt>/etc/radsecproxy.conf</tt> | ||
* služba <pre>systemctl enable radsecproxy</pre> | * služba <pre>systemctl enable radsecproxy</pre> | ||
+ | </strike> | ||
==firewall== | ==firewall== | ||
Line 258: | Line 317: | ||
firewall-cmd --permanent --zone=public --add-port=465/tcp | firewall-cmd --permanent --zone=public --add-port=465/tcp | ||
firewall-cmd --permanent --zone=public --add-port=587/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. | + | 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.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="147.32.22.224/27" service name="radius" accept' | ||
− | firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="195.113. | + | 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 | # apply changes in firewall configuration | ||
firewall-cmd --reload | firewall-cmd --reload |
Latest revision as of 07:42, 18 September 2019
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