Questo howto mostra i passaggi per installare ASSP su un'installazione minima di CentOS 7. Non copre l'installazione di CentOS né la configurazione del server di posta. L'immagine CentOS-7.0-1406-x86_64-Minimal.iso è adatta per questa configurazione. Se hai l'immagine del DVD, scegli Installazione minima e procedi con l'installazione.
Dopo il riavvio
Disabilita NetworkManager e FirewallD e abilita il servizio di rete
systemctl disable NetworkManager
systemctl stop NetworkManager
systemctl disable firewalld
systemctl stop firewalld
systemctl enable network
systemctl start network
Modifica la configurazione della scheda di rete (supponiamo che una scheda di rete sia installata sul sistema)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
Sostituisci IPADDR0=a.b.c.d
Con IPADDR=a.b.c.d
Sostituisci PREFIX0=xx
Con PREFIX=xx
Sostituisci GATEWAY0=aa.bb.cc.dd
Con GATEWAY=aa.bb.cc.dd
Aggiorna sistema operativo
yum -y update
reboot
yum install wget perl
Ottieni software aggiuntivo per Centos dai repository epel, repoforge, remi:
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Installa i repository
yum localinstall rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm epel-release-7-5.noarch.rpm remi-release-7.rpm
Installa firewall Shorewall (gestore iptables):
yum install shorewall
Modifichiamo il nostro firewall. Queste opzioni e file di esempio sono il minimo per farlo funzionare. È necessaria un'ulteriore configurazione. Per ulteriori informazioni su Shorewall e su come configurarlo, visitare http://shorewall.net
Innanzitutto, il file dell'interfaccia:
vi /etc/shorewall/interfaces
net eth0
Il file della politica:
vi /etc/shorewall/policy
$FW net ACCEPT
net all DROP
all all REJECT
Il file delle regole:
vi /etc/shorewall/rules
Nella ?SEZIONE NUOVA aggiungi le regole seguenti:
# Enable access from the internet to ssh, smtp and assp web interface services
# For security reasonsYou might want to limit ssh access to a single or a class of
# trusted IP's
ACCEPT net $FW tcp 22,25,55555
# Enable ping (1 request per second with a burst of one)
ACCEPT net $FW icmp 8 - - 1/sec:1
Il file shorewall.conf:
# vi /etc/shorewall/shorewall.conf
Sostituisci STARTUP_ENABLED=No con STARTUP_ENABLED=Sì
E infine il file zone:
vi /etc/shorewall/zones
fw firewall
net ipv4
Abilita firewall
systemctl enable shorewall
systemctl start shorewall
Controlla se il firewall è in esecuzione con il comando Shorewall status:
shorewall status | grep running
Shorewall is running
Installa il software necessario per ASSP2 e moduli:
yum install gcc openssl-devel perl-Net-SMTPS perl-IO-Compress-Zlib perl-Text-Glob perl-Number-Compare perl-Convert-TNEF perl-Digest-SHA1 perl-Email-MIME perl-Email-Send perl-Email-Valid perl-File-ReadBackwards perl-MIME-Types perl-Mail-DKIM perl-Mail-SPF perl-Net-CIDR-Lite perl-Net-DNS perl-Net-IP-Match-Regexp perl-Net-SMTP-SSL perl-Time-HiRes perl-Crypt-CBC perl-IO-Socket-SSL perl-Sys-MemInfo perl-Time-HiRes perl-Tie-DBI perl-LWP-Authen-Negotiate clamd perl-Net-IP perl-Text-Unidecode perl-Schedule-Cron-Events perl-BerkeleyDB perl-LDAP perl-CPAN perl-local-lib perl-CPAN-Meta-Requirements unzip deltarpm net-tools policycoreutils-python
Aggiornamento facoltativo CPAN
perl -MCPAN -e shell
Accetta le opzioni predefinite e procedi con l'aggiornamento:
cpan> install CPAN
cpan> reload cpan
Abilita ClamAV all'avvio
systemctl abilita clamd
clamd.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig clamd on
The unit files have no [Install] section. They are not meant to be enabled
using systemctl.
Possible reasons for having this kind of units are:
1) A unit may be statically enabled by being symlinked from another unit's
.wants/ or .requires/ directory.
2) A unit's purpose may be to act as a helper for some other unit which has
a requirement dependency on it.
3) A unit may be started when needed via activation (socket, path, timer,
D-Bus, udev, scripted systemctl call, ...).
Modifica /etc/clamd.conf:
vi /etc/clamd.conf
Sostituisci i tuoi valori con quelli seguenti:
LogFileMaxSize 2m
LogRotate yes
LocalSocketGroup clamav
LocalSocket /var/clamav/clamd.sock
# TCPSocket 3310
# TCPAddr 127.0.0.1
PidFile /var/clamav/clamd.pid
TemporaryDirectory /var/tmp
IdleTimeout 60
Modifica /etc/freshclam.conf:
vi /etc/freshclam.conf
Aggiungi o decommenta LogRotate sì
Avvia ClamAV:
systemctl start clamd
Installa i moduli CPAN per ASSP:
cpan -i Unicode::GCString Sys::CpuAffinity Thread::State Thread::Queue Schedule::Cron File::Scan::ClamAV Sys::Syslog IO::Socket::INET6 Lingua::Stem::Snowball Lingua::Identify Archive::Extract Archive::Zip Archive::Tar Mail::SRS Net::SenderBase Tie::DBI Crypt::OpenSSL::AES Regexp::Optimizer Schedule::Cron::Events Mail::SPF::Query File::Scan::ClamAV
Rispondi a qualsiasi domanda premendo il tasto Invio (sarà l'opzione predefinita tra parentesi [ ])
Possibilmente Mail::SPF::Query e File::Scan::ClamAV non verranno installati senza forzare. In tal caso:
perl -MCPAN -e shell
cpan> force install Mail::SPF::Query
cpan> force install File::Scan::ClamAV
Consiglierei di installare i moduli perl uno per uno per rilevare potenziali errori e/o dipendenze mancanti:
perl -MCPAN -e shell
cpan> install
Scarica ASSP v.2 da http://sourceforge.net/projects/assp/ sul tuo server e decomprimilo:
unzip ASSP__Install.zip
mv -f assp/ /var/db/assp/
cd /var/db/assp
Avvia assp per la prima volta:
perl assp.pl
Eventuali errori sui moduli perl verranno segnalati a /var/db/assp/moduleLoadErrors.txt. Eventuali altri errori verranno stampati sulla console (assp rimarrà in primo piano).
Inizia a configurare ASSP accedendo all'interfaccia web:
http://
utente:root
password:nospam4me
Per impostazione predefinita, assp si lega alla porta 25/tcp su ogni indirizzo ipv4 (0.0.0.0:25). Ciò genererà un conflitto con il server di posta elettronica locale (postfix, exim, sendmail, opensmtpd). Queste informazioni verranno stampate sul file di registro assp (/var/db/assp/logs/maillog.txt) e sulla console, se assp viene eseguito in primo piano:
[init] Error: couldn't create server socket on port '25' -- maybe another service is running or I'm not root (uid=0)? -- or a wrong IP address is defined? -- Address already in use
In questo caso imposteremo postfix e dovremo cambiare la sua porta predefinita (25/tcp) in 125/tcp diciamo e associare solo a localhost:
vi /etc/postfix/master.cf
Sostituisci
smtp inet n - n - - smtpd
Con
localhost:125 inet n - n - - smtpd
Ricominciamo postfix:
systemctl restart postfix
Job for postfix.service failed. See 'systemctl status postfix.service' and 'journalctl -xn' for details.
systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled)
Active: failed (Result: exit-code) since Sun 2014-12-21 15:34:11 ICT; 6s ago
Process: 30186 ExecStop=/usr/sbin/postfix stop (code=exited, status=0/SUCCESS)
Process: 30200 ExecStart=/usr/sbin/postfix start (code=exited, status=1/FAILURE)
Process: 30198 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 30195 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
Main PID: 29346 (code=killed, signal=TERM)
systemd[1]: Starting Postfix Mail Transport Agent...
postfix/master[30272]: fatal: bind 127.0.0.1 port 125: Permission denied
postfix/master[30271]: fatal: daemon initialization failure
systemd[1]: postfix.service: control process exited, code=exited status=1
systemd[1]: Failed to start Postfix Mail Transport Agent.
systemd[1]: Unit postfix.service entered failed state.
L'errore sopra è dovuto al fatto che selinux non consentirà a postfix di collegarsi a una porta diversa da 25, 465 e 587
Per fare in modo che postfix si colleghi alla porta 125, disabilita selinux (non consigliato) o aggiungi un'altra porta alla politica di selinux per postfix da vincolare:
semanage port -a 125 -t smtp_port_t -p tcp
E controlla se la porta 125 è nell'elenco delle porte consentite:
semanage port -l | grep smtp_port_t
smtp_port_t tcp 125, 25, 465, 587
Ora possiamo riavviare Postfix senza errori:
systemctl restart postfix
Un altro modo per fare le cose è abilitare smtp su localhost e in assp web config abilitare la porta 25 rispettivamente sull'indirizzo IP pubblico/privato del server. In questo modo non è coinvolta alcuna configurazione di selinux.
In /etc/postfix/master.cf:
vi /etc/postfix/master.cf
Sostituisci
smtp inet n - n - - smtpd
Con
localhost:smtp inet n - n - - smtpd
In assp web config Configurazione di rete->Porta di ascolto SMTP cambia da 25 a
Applica le modifiche utilizzando il pulsante Applica nell'interfaccia web.
Per fare in modo che asp si avvii all'avvio, in assp web config vai su Configurazione del server e in Esegui ASSP come demone scegli Sì - controllato esternamente
Creiamo quindi lo script systemd assp:
vi /etc/systemd/system/assp.service
[Unit]
Description=AntiSpam SMTP Proxy
After=network.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/perl /var/db/assp/assp.pl /var/db/assp/
ExecStop=/usr/bin/killall /usr/bin/perl
[Install]
WantedBy=multi-user.target
Ricarica sistemad:
systemctl daemon-reload
Abilita lo script ASSP all'avvio:
systemctl enable assp.service
Riavvia il server e controlla se i servizi sono attivi e in esecuzione. Quindi puoi procedere alla messa a punto di ASSP e postfix (o del demone di posta elettronica scelto).
Link
- ASSP
- CentOS