Naar inhoud springen

Linux Systeembeheer/Elektronische post

Uit Wikibooks

Inleiding

[bewerken]

Elektronische post is niet meer weg te denken in een moderne wereld. Al deze mails moeten natuurlijk opgeslagen worden. Dit gebeurt door mailservers. In dit hoofdstuk leren we hoe je zelf een mailserver kan opstellen, en hoe je deze kan beveiligen. Verder worden er verschillende begrippen toegelicht.

Leerdoelen

[bewerken]
  • Het de begrippen MSA, MTA, MUA, MDA kennen en de verschillen ertussen
    • MSA: Mail Submission Agent, cfr RFC4409
    • MTA: Mail Transfer Agent
    • MUA: Mail User Agent (= mail client)
    • MDA: Mail Delivery Agent
  • Een volwaardige e-mailserver kunnen installeren op een RedHat-gebaseerd Linux-systeem
    • Een Postfix SMTP-server kunnen opzetten
      • De basisinstellingen in main.cf kunnen aanpassen
      • Mailboxes kunnen aanmaken voor gebruikers en aliassen definiëren
      • Mail lokaal versturen
      • Mail kunnen doorsturen naar een andere mailserver
      • Een mailserver kunnen beveiligen
        • HELO, restricties op binnenkomende mails, attachments blokkeren
        • Een spamfilter (SpamAssassin) en virusscanner (ClamAV) kunnen installeren en koppelen aan PostFix
    • Een Dovecot POP/IMAP server kunnen installeren en doorverbinden met Postfix
    • Een Webmail server (Horde, Squirrelmail) kunnen installeren en doorverbinden met Postfix

Postfix

[bewerken]

Installeren postfix:

 $ yum install postfix system-switch-mail

Runlevel systeemservice aanpassen:

 $ chkconfig --level 2345 postfix on

Het bestand main.cf aanpassen:

 $ vi /etc/postfix/main.cf
 inet_interfaces = all
 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
 mynetworks = 192.168.0.0/24, 127.0.0.0/8
 relay_domains =
 home_mailbox = Maildir/
 relayhost = [mail-out.hogent.be] #mail-out.hogent.be is de smtp server op school, afhankelijk van de ISP kan dit veranderen (bv. voor Telenet is dit "uit.telenet.be" en voor Belgacom "relay.belgacom.net")

Iptables aanpassen:

 $ iptables –I INPUT –p tcp --dport 25 –j ACCEPT
 $ service iptables save
 $ service iptables restart

Instellen als default email agent:

 $ system-switch-mail


Beveiliging

Het bestand main.cf aanpassen:

 $ vi /etc/postfix/main.cf
 #HELO restrictions:
 smtpd_delay_reject = yes
 smtpd_helo_required = yes
 smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, permit
 
 #Sender restrictions:
 smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, reject_unknown_sender_domain, permit
 
 #Recipient restrictions:
 smtpd_recipient_restrictions = reject_unauth_pipelining,reject_non_fqdn_recipient,reject_unknown_recipient_domain, permit_mynetworks, reject_unauth_destination, check_sender_access hash:/etc/postfix/sender_access, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, check_policy_service unix:postgrey/socket, permit
 
 #Controle attachments:
 mime_header_checks = regexp:/etc/postfix/mime_header_checks

Ook het mime_header_checks bestand moet aangepast worden:

 $ vi /etc/postfix/mime_header_checks
 /^content-(type|disposition):.*name[[:space:]]*=.*\.(bat|com|dll|scr|exe|vbs|pif)/ REJECT Bad attachment file name extension: $2

Service starten:

 $ service postfix start

Dovecot

[bewerken]

Installatie Dovecot:

 $ yum install dovecot

Runlevel systeemservice aanpassen:

 $ chkconfig --level 2345 dovecot on

Iptables aanpassen:

 $ iptables –I INPUT 1 –p tcp --dport 110 –j ACCEPT
 $ iptables –I INPUT 1 –p tcp --dport 143 –j ACCEPT
 $ service iptables save
 $ service iptables restart

Config-bestand aanpassen:

 $ vi /etc/dovecot.conf
 protocols = imap imaps pop3 pop3s
 mail_location = maildir:~/Maildir
 pop3_uidl_format = %08Xu%08Xv

Config-bestand aanpassen voor fedora 15 en hoger:

 $ vi /etc/dovecot/dovecot.conf
 Regel 20: protocols = imap pop3 # imaps en pop3s worden niet meer ondersteund in fedora 16
 $ vi /etc/dovecot/conf.d/10-auth.conf
 Regel 99: auth_mechanisms = plain login
 $ vi /etc/dovecot/conf.d/10-mail.conf
 Regel 30: mail_location = maildir:~/Maildir

Mailbox toevoegen:

 $ Mkdir /home/admin/Maildir
 $ chmod –R 700 /home/admin/Maildir

Alias toevoegen:

 $ vi /etc/aliases
 root:	  admin

Service starten:

 $ service dovecot start

Webmail

[bewerken]

Webmail installeren:

 $ yum install httpd php mod_ssl

Runlevel van systeemservice aanpassen:

 $ chkconfig --level 2345 httpd on

Iptables aanpassen:

 $ iptables –I INPUT 1 –p tcp --dport 80 –j ACCEPT
 $ service iptables save
 $ service iptables restart

Installeren Squirrelmail:

 $ yum install squirrelmail

Configuratie squirrelmail:

 $ /usr/share/squirrelmail/config/conf.pl
 Laad de pre-defined settings voor dovecot (D)
 Stel het domein in en verander sendmail naar SMTP (2)
 Save (S)
 Quit (Q)

httpd.conf aanpassen:

 $ vi /etc/httpd/conf/httpd.conf
 <VirtualHost *:80>
DocumentRoot /usr/share/squirrelmail
</VirtualHost>

SELinux instellen om toegang te krijgen tot IMAP via apache:

 $ setsebool -P httpd_can_network_connect=1

Service starten:

 $ service httpd start

Virusscanner

[bewerken]

Voor CentOS 5.5 dienen we eerst een nieuwe repository toe te voegen om clamav te kunnen installeren.
Eerst downloaden we de laatste versie van de repo ( te vinden op https://packages.sw.be/rpmforge-release/ ).

 $ wget https://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm

Installeren van DAG's GPG-key en package:

 $ rpm --import https://apt.sw.be/RPM-GPG-KEY.dag.txt
 $ rpm -i rpmforge-release-0.5.2-2.el5.rf.*.rpm

Installeren ClamAV (antivirus) en SpamAssassin (spamfilter):

 $ yum install amavisd-new clamav clamav-devel clamd spamassassin

Het config bestand clamd aanpassen:

 $ vi /etc/clamd.conf
 TCPSocket 3310

Het config bestand freshclam aanpassen:

 $ vi /etc/freshclam.conf
 # Example #In commentaar zetten

Antivirus databank bijwerken:

 $ freshclam

Het config-bestand van clamsmtpd aanpassen:

 vi /etc/clamsmtpd.conf
 OutAddress: 127.0.0.1:10026
 Listen: 127.0.0.1:10025
 Header: X-Virus-Scanned: ClamAV using ClamSMTP
 Action: drop

amavisd.conf aanpassen:

 $ vi /etc/amavisd.conf
 $mydomain = '3tina.org';
 $MYHOME = '/var/amavis';
 $helpers_home = "$MYHOME/var";
 $lock_file = "$MYHOME/var/amavisd.lock";
 $pid_file  = "$MYHOME/var/amavisd.pid";
 $virus_admin = "postmaster\@$mydomain"; 
 $mailfrom_notify_admin  = "postmaster\@$mydomain"; 
 $mailfrom_notify_recip  = "postmaster\@$mydomain";  
 $mailfrom_notify_spamadmin = "postmaster\@$mydomain"; 
 $myhostname = ‘fedora’;
 
 ### https://www.clamav.net/
 ['ClamAV-clamd',
 \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
 qr/\bOK$/, qr/\bFOUND$/,
 qr/^.*?: (?!Infected archive)(.*) FOUND$/ ],

master.cf van postfix aanpassen:

 $ vi /etc/postfix/master.cf
 amavisfeed unix    -       -       n        -      2     smtp 
   -o lmtp_data_done_timeout=1200
   -o lmtp_send_xforward_command=yes
   -o disable_dns_lookups=yes
   -o max_use=20
 
 127.0.0.1:10025 inet n    -       n       -       -     smtpd
   -o content_filter=
   -o smtpd_delay_reject=no
   -o smtpd_client_restrictions=permit_mynetworks,reject
   -o smtpd_helo_restrictions=
   -o smtpd_sender_restrictions=
   -o smtpd_recipient_restrictions=permit_mynetworks,reject
   -o smtpd_data_restrictions=reject_unauth_pipelining
   -o smtpd_end_of_data_restrictions=
   -o smtpd_restriction_classes=
   -o mynetworks=127.0.0.0/8
   -o smtpd_error_sleep_time=0
   -o smtpd_soft_error_limit=1001
   -o smtpd_hard_error_limit=1000
   -o smtpd_client_connection_count_limit=0
   -o smtpd_client_connection_rate_limit=0
   -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters,no_address_mappings
   -o local_header_rewrite_clients=
   -o smtpd_milters=
   -o local_recipient_maps=
   -o relay_recipient_maps=

Main van postfix aanpassen:

 $ vi in /etc/postfix/main.cf
 content_filter=amavisfeed:[127.0.0.1]:10024

Services herstarten:

 $ service postfix restart
 $ service amavisd start
 $ service clamd start


Aanpassingen in SELINUX

 $ vi amavisdlocal.te
 module amavisdlocal 1.0;
 
 require {
       type traceroute_port_t;
       type pgpkeyserver_port_t;
       type amavis_var_lib_t;
       type amavis_t;
       type clockspeed_port_t;
       class udp_socket name_bind;
       class lnk_file { read create unlink getattr };
 }
 
 #============= amavis_t ==============
 allow amavis_t clockspeed_port_t:udp_socket name_bind;
 allow amavis_t pgpkeyserver_port_t:udp_socket name_bind;
 allow amavis_t traceroute_port_t:udp_socket name_bind;
 allow amavis_t amavis_var_lib_t:lnk_file { read create unlink getattr };

Nieuwe file clamlocal.de aanmaken:

 $ vi clamlocal.de
 module clamlocal 1.0;
 
 require {
       type proc_t;
       type var_t;
       type sysctl_kernel_t;
       type clamd_t;
       class file { read getattr };
       class dir { read search };
 }
 
 #============= clamd_t ==============
 allow clamd_t proc_t:file { read getattr };
 allow clamd_t sysctl_kernel_t:dir search;
 allow clamd_t sysctl_kernel_t:file read;
 allow clamd_t var_t:dir read;
 allow clamd_t var_t:file { read getattr };

Policies toevoegen:

 $ checkmodule -M -m -o amavisdlocal.mod amavisdlocal.te
 $ semodule_package -o amavisdlocal.pp -m amavisdlocal.mod
 $ semodule -i amavisdlocal.pp
 $ checkmodule -M -m -o clamlocal.mod clamlocal.te
 $ semodule_package -o clamlocal.pp -m clamlocal.mod
 $ semodule -i clamlocal.pp

Labo-opdracht

[bewerken]
  1. Zet een Postfix mailserver op en configureer hem zodat je hem kan gebruiken om vanop een andere pc op het netwerk een mail te sturen naar je eigen e-mailadres (bijv. @telenet.be, @hotmail.com, @gmail.com, ...).
    1. Test of je op de machine zelf een mail kan versturen naar een lokale gebruiker
    2. Test of je vanop een andere machine een mail kan sturen naar een lokale gebruiker
    3. Test of je vanop een andere machine een mail kan sturen naar een extern e-mailadres
  2. Installeer en configureer Dovecot naast Postfix zodat je vanop een andere pc mails kan lezen via een mailclient. Maak enkele mailboxen aan.
  3. Zorg voor Webmail-toegang (met Squirrelmail of Horde)
  4. Installeer ClamAV en SpamAssassin

Bibliografie

[bewerken]
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.