V tomto tutoriálu se s vámi podělím o své tipy a triky, jak zabezpečit e-mailové servery proti hackerům s vlastním hostovaným serverem VPN. Mnoho spammerů se pokouší proniknout do e-mailových serverů jiných lidí. Pokud by byli úspěšní, použili by napadený e-mailový server k rozesílání velkých objemů spamu nebo ke krádeži cenných dat. Proč používáme server VPN s vlastním hostitelem? Protože vám umožňuje povolit whitelisting, takže k vašemu poštovnímu serveru mají přístup pouze důvěryhodní uživatelé připojení k serveru VPN.
Předpoklady
Předpokládá se, že máte e-mailový server zapnutý a běžící. Pokud ne, postupujte podle jednoho z níže uvedených výukových programů a nastavte si svůj vlastní poštovní server.
- Jak snadno nastavit plnohodnotný poštovní server na Ubuntu 20.04 pomocí iRedMail
- Jak snadno nastavit poštovní server na Debian 10 Buster pomocí iRedMail
Předpokládá se také, že jste nastavili VPN server . Pokud ne, postupujte podle jednoho z níže uvedených návodů. Poštovní server a server VPN mohou běžet na samostatných hostitelích nebo na stejném hostiteli.
- Nastavte si svůj vlastní server WireGuard VPN na Ubuntu
- Nastavte si svůj vlastní WireGuard VPN server v Debianu
Nápověda :Doporučujeme provozovat server VPN a poštovní server na samostatných hostitelích, aby se snížila provozní složitost . Pokud poštovní server a server VPN běží na stejném hostiteli, jsou nutné další kroky, jmenovitě nastavení zóny zásad odezvy na serveru VPN, která přepíše záznam DNS A názvu hostitele vašeho poštovního serveru.
- Nastavte zónu zásad odezvy (RPZ) v BIND Resolver na Debian/Ubuntu
Řekněme záznam DNS A pro mail.yourdomain.com
převede na 12.34.56.78
, pak musíte vytvořit záznam v zóně zásad odezvy, abyste jej převedli na soukromou IP adresu VPN serveru 10.10.10.1
.
V následujících textech používám 12.34.56.78
jako veřejnou IP adresu VPN serveru. Pokud server VPN a poštovní server běží na stejném hostiteli, musíte nahradit 12.34.56.78
se soukromou IP adresou VPN serveru 10.10.10.1
.
Krok 1:Přidejte IP adresu VPN serveru do seznamu povolených firewallů
Jakmile budete mít poštovní server a VPN server v provozu, měli byste přidat IP adresu VPN serveru na bílou listinu brány firewall poštovního serveru. Pokud používáte UFW firewall (Debian/Ubuntu), spusťte na poštovním serveru následující příkaz. Nahraďte 12.34.56.78 IP adresou serveru VPN.
sudo ufw insert 1 allow in from 12.34.56.78
Můžete také přidat IP adresy ostatních serverů na seznam povolených. Někteří lidé mohou mít například jiný webový server, který potřebuje posílat e-maily přes e-mailový server. Poté jej také přidejte na bílou listinu.
sudo ufw insert 1 allow in from IP-address-of-the-other-web-server
Krok 2:Zavřete Port pro odeslání, Port IMAP a Port POP3
- Port pro odeslání :587 a 465
- Port IMAP :143 a 993
- Port POP3 :110 a 995
Porty 587 a 465 používají poštovní klienti jako Mozilla Thunderbird a Microsoft Outlook k odesílání odchozích e-mailů. Hackeři mohou zaútočit hrubou silou na porty 587 a 465.
Níže je uveden příklad nalezený v mém protokolu pošty (/var/log/mail.log
na Debian/Ubuntu, /var/log/maillog
na CentOS/RHEL). Špatný aktér se pokoušel přihlásit, ale pokaždé selhalo ověření SASL.
postfix/smtps/smtpd[18071]: Anonymous TLS connection established from unknown[92.118.38.56]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits) postfix/smtps/smtpd[18071]: warning: unknown[92.118.38.56]: SASL LOGIN authentication failed: UGFzc3dvcmQ6 postfix/smtps/smtpd[18071]: lost connection after AUTH from unknown[92.118.38.56] postfix/smtps/smtpd[18071]: disconnect from unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3 postfix/smtps/smtpd[18071]: connect from unknown[92.118.38.56] postfix/smtps/smtpd[18071]: Anonymous TLS connection established from unknown[92.118.38.56]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits) postfix/smtps/smtpd[18071]: warning: unknown[92.118.38.56]: SASL LOGIN authentication failed: UGFzc3dvcmQ6 postfix/smtps/smtpd[18071]: lost connection after AUTH from unknown[92.118.38.56] postfix/smtps/smtpd[18071]: disconnect from unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3 postfix/smtps/smtpd[18071]: connect from unknown[92.118.38.56] postfix/smtps/smtpd[18071]: Anonymous TLS connection established from unknown[92.118.38.56]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits) postfix/smtps/smtpd[18071]: warning: unknown[92.118.38.56]: SASL LOGIN authentication failed: UGFzc3dvcmQ6 postfix/smtps/smtpd[18071]: lost connection after AUTH from unknown[92.118.38.56] postfix/smtps/smtpd[18071]: disconnect from unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3
Nechci vidět tento druh aktivity v protokolu pošty, takže jednoduše zavřu port 587, 465, 143, 993, 110 a 995 ve bráně firewall. A protože IP adresa mého serveru VPN je na seznamu povolených, k těmto portům mají přístup pouze uživatelé, kteří jsou připojeni k mému serveru VPN.
Chcete-li zavřít tyto porty v UFW firewallu, nejprve vypište pravidla firewallu.
sudo ufw status numbered
Ukázkový výstup
Jak vidíte, existují pravidla IPv4 i IPv6. K uzavření portu 587 musím smazat pravidlo #16
a #6
. (Nejprve byste měli odstranit pravidlo s vyšším indexovým číslem.)
sudo ufw delete 16 sudo ufw delete 6
Poté byste měli spustit sudo ufw status numbered
znovu, abyste získali nový seznam pravidel brány firewall. Všimněte si, že se u některých pravidel změnilo indexové číslo.
Tentokrát chci zavřít port 465, takže musím smazat pravidlo #15
a #6
.
sudo ufw delete 15 sudo ufw delete 6
Pak použijte stejnou metodu k uzavření portů 143, 993, 110 a 995. Samozřejmě musíte ponechat port 25 otevřený, abyste mohli přijímat e-maily z jiných serverů SMTP.
Krok 3:Ochrana panelu administrátora a webové pošty
Můžeme zavřít porty 80 a 443, abychom ochránili administrátorský panel a webovou poštu před hackery. To však zakáže veřejný přístup ke všem virtuálním hostitelům. Někteří lidé mohou mít virtuální hostitele v Apache/Nginx, kteří se potřebují otevřít k internetu. Místo uzavření portů 80 a 443 ve firewallu můžeme použít vestavěnou funkci řízení přístupu v Apache/Nginx.
Nginx
Upravte soubor virtuálního hostitele pro webmail, například
sudo nano /etc/nginx/conf.d/mail.your-domain.com.conf
Přidejte následující řádky do bloku serveru SSL. To povolí pouze IP adresu 12.34.56.78
pro přístup k webové poště a zakázat všechny ostatní IP adresy.
allow 12.34.56.78; deny all;
Pokud máte více serverů VPN, můžete přidat více IP adres, například:
allow 12.34.56.78; allow 12.34.56.79; deny all;
Uložte a zavřete soubor. Poté otestujte konfigurace Nginx.
sudo nginx -t
Pokud je test úspěšný, znovu načtěte Nginx, aby se změny projevily.
sudo systemctl reload nginx
Uživatelům, kteří nejsou na seznamu povolených, se zobrazí zakázaná chyba 403.
Apache
Upravte soubor virtuálního hostitele pro webmail, například
sudo nano /etc/apache2/sites-enabled/mail.your-domain.com-le-ssl.conf
Přidejte následující řádky mezi <VirtualHost>...</VirtualHost>
značky. To povolí pouze IP adresu 12.34.56.78
pro přístup k webové poště a zakázat všechny ostatní IP adresy.
<LocationMatch "^/"> Require ip 12.34.56.78 </LocationMatch>
Pokud máte více serverů VPN, můžete přidat více IP adres, například:
<LocationMatch "^/"> Require ip 12.34.56.78 12.34.56.79 </LocationMatch>
Uložte a zavřete soubor. Poté otestujte konfigurace Apache.
sudo apache2ctl -t
Pokud je syntaxe v pořádku, znovu načtěte Apache, aby se změny projevily.
sudo systemctl reload apache2
Uživatelům, kteří nejsou na seznamu povolených, se zobrazí zakázaná chyba 403.
Obnovení certifikátu Certbot TLS
Pokud povolíte whitelisting ve virtuálním hostiteli Apache/Nginx, zablokujete také serverům Let’s Encrypt přístup k vašemu webovému serveru, což je nutné pro obnovení certifikátu Let’s Encrypt TLS s výzvou HTTP-01. Abychom tento problém vyřešili, můžeme před obnovením certifikátu zakázat whitelisting a po obnovení jej znovu povolit.
Vytvořte shellový skript v /root/
adresář.
sudo nano /root/certbot-renewal.sh
Pokud používáte Nginx, přidejte do tohoto souboru následující řádky.
#! /bin/bash # disable whitelisting sed -i 's/deny all;/#deny all;/g' /etc/nginx/conf.d/mail.your-domain.com.conf systemctl reload nginx # renew TLS certificate certbot renew --quiet # enable whitelisting sed -i 's/#deny all;/deny all;/g' /etc/nginx/conf.d/mail.your-domain.com.conf systemctl reload nginx postfix dovecot
Pokud používáte Apache, přidejte do tohoto souboru následující řádky.
#! /bin/bash # disable whitelisting sed -i 's/Require ip/#Require ip/g' /etc/apache2/sites-enabled/mail.your-domain.com-le-ssl.conf systemctl reload apache2 # renew TLS certificate certbot renew --quiet # enable whitelisting sed -i 's/#Require ip/Require ip/g' /etc/apache2/sites-enabled/mail.your-domain.com-le-ssl.conf systemctl reload apache2 postfix dovecot
Uložte a zavřete soubor. Poté k tomuto souboru přidejte oprávnění ke spuštění.
sudo chmod +x /root/certbot-renewal.sh
Potom upravte soubor crontab uživatele root.
sudo crontab -e
Přidejte následující řádek na konec souboru, aby se skript shellu spouštěl jednou denně.
@daily bash /root/certbot-renewal.sh
Uložte a zavřete soubor.
Zavřít port SSH?
Protože je IP adresa vašeho VPN serveru na seznamu povolených, můžete také zavřít port SSH ve bráně firewall. To však s sebou nese riziko. Pokud váš server VPN přestane fungovat, uzamknete se. Pro ochranu služby SSH před hackováním doporučuji nastavit ověřování veřejným klíčem nebo dvoufaktorové ověřování.
- 2 jednoduché kroky k nastavení přihlášení SSH bez hesla na Ubuntu
- Nastavit SSH dvoufaktorové ověřování (2FA) na serveru Ubuntu