Narzędzia użytkownika

Narzędzia witryny


poczta

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronachPoprzednia wersja
Nowa wersja
Poprzednia wersja
poczta [2021/01/23 15:25] kamilpoczta [2023/12/18 12:53] (aktualna) – [Przydatne narzędzia] kamil
Linia 8: Linia 8:
  
 Instalujemy czystego Debiana 10 (Serwer SSH i Podstawowe narzędzia systemowe). Instalujemy czystego Debiana 10 (Serwer SSH i Podstawowe narzędzia systemowe).
 +
 +Jeśli system postawiliśmy na maszynie wirtualnej to proszę dodać taki oto wpis do pliku /etc/sysctl.conf:
 +<file>
 +net.ipv4.tcp_window_scaling = 0
 +</file>
 +
 +Oraz przeładować ustawienia kernela:
 +<file>
 +sysctl -p
 +</file>
  
 Uaktualnienie systemu: Uaktualnienie systemu:
Linia 50: Linia 60:
 Podczas instalacji zostaniemy zapytani w sprawie konfiguracji Posfixa - wybieramy: brak konfiguracji. Podczas instalacji zostaniemy zapytani w sprawie konfiguracji Posfixa - wybieramy: brak konfiguracji.
 <file> <file>
-apt install postfix postfix-mysql postgrey dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql dovecot-sieve dovecot-managesieved mariadb-server mariadb-client+apt install postfix postfix-mysql postfix-pcre postgrey dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql dovecot-sieve dovecot-managesieved mariadb-server mariadb-client
 </file> </file>
  
Linia 163: Linia 173:
   quota int(11) NOT NULL DEFAULT '1024' COMMENT 'Quota in megabytes',   quota int(11) NOT NULL DEFAULT '1024' COMMENT 'Quota in megabytes',
   active tinyint(1) NOT NULL DEFAULT '1',   active tinyint(1) NOT NULL DEFAULT '1',
 +  PRIMARY KEY (id)
 +);
 +
 +CREATE TABLE virtual_black_white_list (
 +  id int(11) NOT NULL AUTO_INCREMENT,
 +  source varchar(32) NOT NULL UNIQUE COMMENT 'Domain or IP address',
 +  access enum('OK','REJECT') NOT NULL COMMENT 'OK or REJECT',
 +  reason varchar(128) NOT NULL DEFAULT '',
 +  `type` enum('IP','EMAIL') NOT NULL,
   PRIMARY KEY (id)   PRIMARY KEY (id)
 ); );
Linia 206: Linia 225:
 mysql -e "UPDATE virtual_users SET password = ENCRYPT('nowehaslo' WHERE email = 'user@domain.ltd';" postfix mysql -e "UPDATE virtual_users SET password = ENCRYPT('nowehaslo' WHERE email = 'user@domain.ltd';" postfix
 </file> </file>
 +
 +Dodanie do białej listy domeny:
 +<file>
 +INSERT INTO virtual_black_white_list (source, access, type) VALUES ('wp.pl', 'OK', 'EMAIL');
 +</file>
 +
 +Dodanie do czarnej listy domeny:
 +<file>
 +INSERT INTO virtual_black_white_list (source, access, reason, type) VALUES ('spamers.ltd', 'REJECT', 'Your domain is in black list.', 'EMAIL');
 +</file>
 +
 +Dodanie adresu IP do białej listy:
 +<file>
 +INSERT INTO virtual_black_white_list (source, access, type) VALUES ('1.2.3.4', 'OK', 'IP');
 +</file>
 +
 +Dodanie adresu IP do czarnej listy:
 +<file>
 +INSERT INTO virtual_black_white_list (source, access, reason, type) VALUES ('2.3.4.5', 'REJECT', 'Your IP addressis in black list.', 'IP');
 +</file>
 +
 +Domeny do białej/czarnej listy możemy definiować w następujący sposób:
 +  * user@domain - adres email
 +  * domain.ltd - cała domena
 +  * .domain.tld - wszystkie subdomeny w danej domenie
 +  * user@ - użytkownik we wszystkich domenach
 +
 +Adresy IP definiujemy wg schematy CIDR. Dokumentacja: [[http://www.postfix.org/access.5.html]]
  
 Możemy zarządzać bazą danych aplikacją napisaną pod w/w strukturę tabel: [[https://gitlab.com/kmroczkowski/mailcp]] Możemy zarządzać bazą danych aplikacją napisaną pod w/w strukturę tabel: [[https://gitlab.com/kmroczkowski/mailcp]]
Linia 289: Linia 336:
 inet_interfaces = all inet_interfaces = all
 inet_protocols = all inet_protocols = all
 +
 +smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual-sender-login-maps.cf
  
 smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:12340, smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:12340,
Linia 294: Linia 343:
                                 permit_mynetworks,                                 permit_mynetworks,
                                 reject_unauth_destination,                                 reject_unauth_destination,
 +                                check_client_access mysql:/etc/postfix/mysql-virtual-access-ip.cf,
 +                                check_sender_access mysql:/etc/postfix/mysql-virtual-access-email.cf,
                                 reject_non_fqdn_hostname,                                 reject_non_fqdn_hostname,
                                 reject_non_fqdn_sender,                                 reject_non_fqdn_sender,
Linia 323: Linia 374:
         permit_sasl_authenticated,         permit_sasl_authenticated,
         defer_unauth_destination         defer_unauth_destination
 +
 +mime_header_checks = pcre:/etc/postfix/mime_header_checks.pcre
  
 # Even more Restrictions and MTA params # Even more Restrictions and MTA params
Linia 364: Linia 417:
 virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf, virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,
         mysql:/etc/postfix/mysql-virtual-email2email.cf         mysql:/etc/postfix/mysql-virtual-email2email.cf
 +
 +maximal_queue_lifetime = 1d
 +bounce_queue_lifetime = 1d
 +</file>
 +
 +Tworzymy plik /etc/postfix/mime_header_checks.pcre i uzupełniamy:
 +<file>
 +/^Content-(Disposition|Type).*name\s*\*?=\s*"?([^;]*(\.|=2E)(
 +        app|bat|chm|cmd|com|cpl|diagcab|dll|exe|fxp|gadget|grp|
 +        hlp|hpj|hta|htc|inf|ins|img|iso|isp|its|jar|jnlp|js|jse|
 +        ksh|lnk|mad|maf|mag|mam|maq|mar|mas|mat|mau|mav|maw|mcf|
 +        mda|mdw|mdz|msc|msh|msh1|msh2|mshxml|msh1xml|msh2xml|msi|
 +        msp|mst|msu|ops|osd|pcd|pif|plg|prf|prg|printerexport|
 +        ps1|ps1xml|ps2|ps2xml|psc1|psc2|psd1|psdm1|py|pyc|pyo|
 +        pyw|pyz|pyzw|reg|scf|scr|sct|shb|shs|theme|tmp|url|vb|
 +        vbe|vbp|vbs|vhd|vhdx|vsmacros|vsw|webpnp|website|ws|wsc|
 +        wsf|wsh|xbap|xll|xnk))(\?=)?"?\s*(;|$)/x
 +        REJECT Attachment of type $2 not accepted
 </file> </file>
  
Linia 400: Linia 471:
 dbname = postfix dbname = postfix
 query = SELECT email FROM virtual_users WHERE email='%s' query = SELECT email FROM virtual_users WHERE email='%s'
 +</file>
 +
 +Tworzymy plik /etc/postfix/mysql-virtual-access-ip.cf i uzupełniamy:
 +<file>
 +user = postfix
 +password = tajnehaslo
 +hosts = 127.0.0.1
 +dbname = postfix
 +query = SELECT CONCAT(access, IF(reason != '', CONCAT(' ', reason), '')) AS address FROM virtual_black_white_list WHERE source='%s' AND type = 'IP'
 +</file>
 +
 +Tworzymy plik /etc/postfix/mysql-virtual-access-email.cf i uzupełniamy:
 +<file>
 +user = postfix
 +password = tajnehaslo
 +hosts = 127.0.0.1
 +dbname = postfix
 +query = SELECT CONCAT(access, IF(reason != '', CONCAT(' ', reason), '')) AS address FROM virtual_black_white_list WHERE source='%s' AND type = 'EMAIL'
 +</file>
 +
 +Tworzymy plik /etc/postfix/mysql-virtual-sender-login-maps.cf i uzupełniamy:
 +<file>
 +user = postfix
 +password = tajnehaslo
 +hosts = 127.0.0.1
 +dbname = postfix
 +query = SELECT email FROM virtual_users WHERE email = '%s' UNION SELECT destination FROM virtual_aliases WHERE source = '%s'
 </file> </file>
  
Linia 778: Linia 876:
 <file> <file>
 plugin { plugin {
 +  sieve_extensions = +vacation-seconds
 +  sieve_vacation_min_period = 5m
 +  sieve_vacation_default_period = 10m
 +  sieve_vacation_max_period = 15m
 +
   sieve = /var/mail/vhosts/%d/%n/dovecot.sieve   sieve = /var/mail/vhosts/%d/%n/dovecot.sieve
   sieve_default = /var/lib/dovecot/sieve/default.sieve   sieve_default = /var/lib/dovecot/sieve/default.sieve
Linia 873: Linia 976:
 $config['smtp_server'] = 'domain.ltd'; $config['smtp_server'] = 'domain.ltd';
 $config['smtp_port'] = 25; $config['smtp_port'] = 25;
-$config['smtp_user'] = ''; +$config['smtp_user'] = '%u'; 
-$config['smtp_pass'] = '';+$config['smtp_pass'] = '%p'; 
 +$config['smtp_auth_type'] = 'LOGIN';
 ... ...
 $config['plugins'] = array('managesieve'); $config['plugins'] = array('managesieve');
Linia 1073: Linia 1177:
  
 ==== Przydatne narzędzia ==== ==== Przydatne narzędzia ====
 +
 +  * postqueue
 +<file>
 +# postqueue -p
 +-Queue ID-  --Size-- ----Arrival Time---- -Sender/Recipient-------
 +56008207DE   195074 Mon Mar 22 09:28:19  user@domain.ltd
 +                   (connect to falsedomain.ltd[1.2.3.4]:25: Connection refused)
 +                                         user44@falsedomain.ltd
 +
 +-- 190 Kbytes in 1 Request.
 +</file>
 +
 +  * postsuper
 +<file>
 +# postsuper -d 56008207DE
 +postsuper: 56008207DE: removed
 +postsuper: Deleted: 1 message
 +</file>
 +
 +  * postmap
 +<file>
 +# postmap -q 'name="fil.cmd"' regexp:/etc/postfix/mime_header_checks
 +REJECT
 +# postmap -q 'Content-Type: name="test.img"; charset=us-ascii' pcre:/root/mime.pcre
 +REJECT Attachment of type test.img not accepted
 +</file>
 +
 +  * rblcheck
 +<file>
 +rblcheck -s dnsbl.sorbs.net adresiplubdomena
 +</file>
  
   * przenoszenie skrzynek pocztowych via IMAP: [[https://github.com/imapsync/imapsync]]   * przenoszenie skrzynek pocztowych via IMAP: [[https://github.com/imapsync/imapsync]]
-  * sprawdzanie czy nasz domena jest na czarnych listach: [[https://mxtoolbox.com]]+  * sprawdzanie czy nasza domena oraz adres IP jest na czarnych listach: [[https://mxtoolbox.com]] [[https://www.spamhaus.org/lookup/]] [[https://www.dnswatch.info]] 
 +  * tester naszego serwera: [[https://www.mail-tester.com]] 
 +  * sprawdzanie DNSów naszej domeny: [[https://intodns.com]] 
 +  * Dodanie naszej domeny do zaufanych w Google: [[https://postmaster.google.com/]] 
 +  * Dodanie naszej domeny do zaufanych w Microsoft: [[https://sendersupport.olc.protection.outlook.com/pm/]] 
 +  * Sprawdzenie domeny oraz maili: [[https://bezpiecznapoczta.cert.pl]]
  
poczta.1611411917.txt.gz · ostatnio zmienione: 2021/01/23 15:25 przez kamil