Clark's Home page

Tecnicismi vari di un Sysadmin Linux ma anche qualcosa della sua vita

Zendto un’alternativa per FTP —

Nell’ultimo periodo mi sono trovato a dover rendere facile l’uso di FTP, dopo aver provato diverse soluzioni la scelta è caduta su zendto http://zend.to
Non ha fronzoli ne interfaccia multilingua, non è ben documentato ma non è impossibile da configurare leggendo attentamente i files di configurazione e cercando nella ML del software http://mailman.ecs.soton.ac.uk/pipermail/zendto/ in compenso è d’una facilità d’uso impressionante.
In buona sostanza è un wetransfer privato, se un utente esterno tipicamente un cliente o un fornitore ha bisogno di mandare files di grossa dimensione che non son gestibili via mail, loggandosi al nostro server e inserendo nome azienda e mail dopo pochi secondi via mail riceve un link che gli da accesso all’area di upload, inserendo un nostro indirizzo aziendale carica i suoi files, arriva una mail a quell’indirizzo che lo avvisa che c’è un files per lui, quando il files viene scaricato al mittente arriva una mail che lo avvisa che il files è stato preso .
Alla rovescia un utente aziendale può caricare files per chiunque esterno, la procedura e’ la stessa di prima a parte la mail iniziale non necessaria in quanto loggato sul server stesso.
È possibile inviare files sino a 2 GB di dimensione nella versione base, ma è possibile ricompilando php togliere questo limite, nel nostro caso ho lasciato il limite, meglio non dare troppe possibilità a certi elementi in ditta 😉
Il software si posiziona nella directory /opt quindi sapendolo prima conviene dedicare una partizione a questo scopo.
La macchina è una Debian 7.10 a 64 bit, un vecchio server IBM che uso per fare pasticci vari, l’unica differenza che può essere segnalata è che ho installato il kernel da backport.
La macchina ha 2 schede di rete e per mia comodità le ho usate entrambe una sulla LAN per poterci lavorare comodo io,  e una in DMZ che è poi quella che lavora veramente e nota bene l’hostname deve essere quello che sarà su Internet nel mio caso share.myfirm.com.
Finito il setup base della macchina per comodità e sicurezza ho installato un bind9 in chroot dando poi nameserver 127.0.0.1 in resolv.conf.
Il primo passo è di rendere possibile a questa macchina mandare mail, Il nostro server di posta è in housing presso una compagnia di servizi quindi la via più comoda è stata quella di dire al postfix di fare relay su quel server autenticandosi con un utente del dominio in questo modo:
main.cf

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

append_dot_mydomain = no

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tsl_security_level = may
smtpd_tls_auth_only = no
smtp_use_tls = yes

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous

myhostname = share.myfirm.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = share.myfirm.com, localhost.myfirm.com, localhost
relayhost = [webmail.myfirm.com]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a “$EXTENSION”
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all

in master.cf scommento

-o smtpd_sasl_auth_enable=yes
a questo punto creo con vim sasl_passwd
che contiene questa riga

[webmail.myfirm.com]:587 clark@myfirm.com:MiApAsSwOrD123
cambiamo permessi e proprietari del file

chown root:root /etc/postfix/sasl_passwd && chmod 600 /etc/postfix/sasl_passwd
e da ultimo
postmap hash:/etc/postfix/sasl_passwd

e con questo il capitolo postfix è chiuso

Prepariamo adesso per poter installare zendto,
apt-get -y install debhelper bison chrpath freetds-dev libcurl4-openssl-dev libedit-dev libgd2-xpm-dev libgmp3-dev libmhash-dev libpam0g-dev libpspell-dev librecode-dev libsasl2-dev libsnmp-dev libsqlite0-dev libt1-dev libtidy-dev re2c unixodbc-dev
apt-get -y install apache2-prefork-dev autoconf automake flex hardening-wrapper libapr1-dev libbz2-dev libdb-dev libenchant-dev libgcrypt11-dev libglib2.0-dev libicu-dev libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev libxmltok1-dev libxml2-dev libxslt1-dev quilt
apt-get -y install clamav clamav-daemon
a
pt-get -y install php5 php5-cli php5-sqlite php5-ldap php5-imap php-apc
apt-get -y install rrdtool

che al solito si tirano dietro le necessarie dipendenze quindi si procede con:
wget http://zend.to/files/zendto-repo.deb e relativo dpkg -i zendto-repo.deb && apt-get update && apt-get install zendto

se tutto e' a posto aprendo un browser e puntandolo a http://share.myfirm.com/about.php si apre una bella paginetta che spiega un po di cosette.
Andiamo a configurare per poter usare zendto nella nostra azienda, i 2 files principali di configurazione sono situati in /opt/zendto/config e sono preferences.php e zendto.php, cominciamo con preferences.php e per comodità non metto le righe commentate

 

<?PHP
define(‘NSSDROPBOX_BASE_DIR’,’/opt/zendto/’);
define(‘NSSDROPBOX_LIB_DIR’,’/opt/zendto/lib/’);
define(‘NSSDROPBOX_DATA_DIR’,’/var/zendto/’);
define(‘ZTVERSION’,’4.12′);
define(‘MYZENDTO’,’FALSE’);
define(‘RRD_DATA_DIR’,NSSDROPBOX_DATA_DIR.’rrd/’);
define(‘RRD_DATA’,RRD_DATA_DIR.’zendto.rrd’);
define(‘RRDTOOL’,’/usr/bin/rrdtool’);
define(‘SqlBackend’, ‘SQLite3’);
$NSSDROPBOX_PREFS = array(
‘SQLiteDatabase’ => NSSDROPBOX_DATA_DIR.”zendto.sqlite”,
‘MySQLhost’ => ‘localhost’,
‘MySQLuser’ => ‘zendto’,
‘MySQLpassword’ => ‘zendto’,
‘MySQLdb’ => ‘zendto’,
‘dropboxDirectory’ => NSSDROPBOX_DATA_DIR.”dropoffs”,
‘logFilePath’ => NSSDROPBOX_DATA_DIR.”zendto.log”,
‘numberOfDaysToRetain’ => 14,
‘showRecipsOnPickup’ => TRUE,
‘maxBytesForDropoff’ => 2147483647, // 2 GBytes – 1 = 2^32-1
‘maxBytesForFile’ => 2147483647, // 2 GBytes – 1 = 2^32-1
‘useRealProgressBar’ => TRUE,
‘requestTTL’ => 86400, // 1 day
‘requestTo’ => ”, // Set to ” to disable this override
‘maxSubjectLength’ => 100,
‘maxNoteLength’ => 1000,
// ‘localIPSubnets’ => array(‘139.166.’,’152.78′),
‘localIPSubnets’ => array(‘210.134.185.’,’82.225.236.’,’192.168.2.’),
‘humanDownloads’ => true,
‘bccSender’ => FALSE,
‘usingLibrary’ => FALSE,
‘libraryDirectory’ => NSSDROPBOX_DATA_DIR.”library”,
‘defaultMyZendToQuota’ => 100000000, // 100 Mbytes
‘captcha’ => ‘google’,
‘recaptchaPublicKey’ => ‘6Le19HhwTAAAAFI0PhtgLKjFgWgHFdE3e4wTiT2u’,
‘recaptchaPrivateKey’ => ‘6Le19HhwTAAAAC7IyELUJK5sJvlvMlDGveBRO3w0’,
‘recaptchaProxyHost’ => ”,
‘recaptchaProxyPort’ => ”,
‘authAdmins’ => array(‘admin1′,’admin2′,’admin3’,clark),
‘authStats’ => array(‘view1′,’view2′,’view3’),
‘authenticator’ => ‘Local’,
‘authIMAPServer’ => ‘webmail.myfirm.com’,
‘authIMAPDomain’ => ‘myfyrm.com’,
‘authIMAPOrganization’ => ‘Myfirm S.p.A.’,
‘authIMAPAdmins’ => array(),
‘defaultEmailDomain’ => ‘myfyrm.com’,
‘emailDomainRegexp’ => ‘/opt/zendto/config/internaldomains.txt’,
‘usernameRegexp’ => ‘/^([a-zA-Z0-9][a-zA-Z0-9\_\.\-\@\\\]*)$/i’
‘validEmailRegexp’ => ‘/^([a-zA-Z0-9][a-zA-Z0-9\.\_\-\+\&\’]*)\@([a-zA-Z0-9][a-zA-Z0-9\_\-\.]+)$/i’,
‘loginFailMax’ => 6,
‘loginFailTime’ => 86400,
‘cookieName’ => ‘zendto-session’,
‘cookieSecret’ => ‘11111111111111111111111111111111’,
‘cookieTTL’ => ‘7200’,
‘clamdscan’ => ‘/usr/bin/clamdscan –quiet’,

);

// —- —- //
// —- DO NOT CHANGE ANYTHING BELOW THIS LINE —- //
// —- —- //

// Set definitions for AreYouAHuman.com CAPTCHA.
define(‘AYAH_PUBLISHER_KEY’, $NSSDROPBOX_PREFS[‘ayah_publisher_key’]);
define(‘AYAH_SCORING_KEY’, $NSSDROPBOX_PREFS[‘ayah_scoring_key’]);
define(‘AYAH_WEB_SERVICE_HOST’, ‘ws.areyouahuman.com’);
define(‘AYAH_TIMEOUT’, 0);
define(‘AYAH_DEBUG_MODE’, FALSE);
define(‘AYAH_USE_CURL’, TRUE);

// Do *not* change the next line.
require_once(NSSDROPBOX_LIB_DIR.SqlBackend.’.php’);
?>
a questo punto con vim creiamo il file internaldomains.txt che contiene

myfirm.com
myfirm1.com
myfirm2.com
che sono i tre domini aziendali.

nel file zendto.conf si devono sostituire le stringhe “soton”, “Southampton” and “ECS” con il nome della ditta e la stringa

EmailSenderAddress = ‘ZendTo <clark@myfirm.com>’

per il resto va lasciato cosi com’è.
A questo punto modifichiamo /etc/php5/apache2/php.ini in modo che contenga questi parametri
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
max_execution_time = 7200
max_input_time = 7200
memory_limit = 300M
display_errors = On
post_max_size = 50000M
upload_tmp_dir = /var/zendto/incoming
upload_max_filesize = 50G
max_file_uploads = 200
apc.rfc1867 = on
apc.rfc1867_ttl = 7200
apc.max_file_size = 50G
apc.slam_defense = off
“date.timezone” “Europe/Rome”

Aggiungiamo a /etc/php5/cli/php.ini
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE

e verifichiamo che in /etc/php5/conf.d/apc.ini appaiano questi parametri
apc.rfc1867 = on
apc.rfc1867_ttl = 7200
apc.max_file_size = 50G
apc.slam_defense = off

a questo punto spostandoci in /opt/zendto/bin con lo script adduser.php aggiungiamo gli utenti in questo modo

./adduser.php ‘manutenzione’ ‘password’ ‘manutenzione@myfirm.com’ ‘Reparto Manutenzione’ ‘myfirm S.p.A.’ ‘0’
ripetuto per ogni utente che deve avere accesso.

Un reboot e puntando col browser a share.myfirm.com apparirà la pagina dove se si è user aziendali si può fare login e inviare/ricevere se si è utenti esterni  e si conosce l’indirizzo aziendale a cui si vuole mandare il file chiedere la mail con cui si avrà accesso.

 

 

 

 

 

 



 


Categorised as: Linux | Networking | Work

Comments are disabled on this post


Comments are closed.