{"id":1303,"date":"2016-05-11T12:00:33","date_gmt":"2016-05-11T10:00:33","guid":{"rendered":"http:\/\/clark.tipistrani.it\/?p=1303"},"modified":"2016-05-11T12:03:37","modified_gmt":"2016-05-11T10:03:37","slug":"zendto-unalternativa-per-ftp","status":"publish","type":"post","link":"http:\/\/clark.tipistrani.it\/?p=1303","title":{"rendered":"Zendto un&#8217;alternativa per FTP"},"content":{"rendered":"<p>Nell&#8217;ultimo periodo mi sono trovato a dover rendere facile l&#8217;uso di FTP, dopo aver provato diverse soluzioni la scelta \u00e8 caduta su zendto http:\/\/zend.to<br \/>\nNon ha fronzoli ne interfaccia multilingua, non \u00e8 ben documentato ma non \u00e8 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 \u00e8 d&#8217;una facilit\u00e0 d&#8217;uso impressionante.<br \/>\nIn buona sostanza \u00e8 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&#8217;area di upload, inserendo un nostro indirizzo aziendale carica i suoi files, arriva una mail a quell&#8217;indirizzo che lo avvisa che c&#8217;\u00e8 un files per lui, quando il files viene scaricato al mittente arriva una mail che lo avvisa che il files \u00e8 stato preso .<br \/>\nAlla rovescia un utente aziendale pu\u00f2 caricare files per chiunque esterno, la procedura e&#8217; la stessa di prima a parte la mail iniziale non necessaria in quanto loggato sul server stesso.<br \/>\n\u00c8 possibile inviare files sino a 2 GB di dimensione nella versione base, ma \u00e8 possibile ricompilando php togliere questo limite, nel nostro caso ho lasciato il limite, meglio non dare troppe possibilit\u00e0 a certi elementi in ditta \ud83d\ude09<br \/>\nIl software si posiziona nella directory \/opt quindi sapendolo prima conviene dedicare una partizione a questo scopo.<br \/>\nLa macchina \u00e8 una Debian 7.10 a 64 bit, un vecchio server IBM che uso per fare pasticci vari, l&#8217;unica differenza che pu\u00f2 essere segnalata \u00e8 che ho installato il kernel da backport.<br \/>\nLa macchina ha 2 schede di rete e per mia comodit\u00e0 le ho usate entrambe una sulla LAN per poterci lavorare comodo io,\u00a0 e una in DMZ che \u00e8 poi quella che lavora veramente e nota bene l&#8217;hostname deve essere quello che sar\u00e0 su Internet nel mio caso share.myfirm.com.<br \/>\nFinito il setup base della macchina per comodit\u00e0 e sicurezza ho installato un bind9 in <a href=\"http:\/\/clark.tipistrani.it\/?p=934\">chroot<\/a> dando poi nameserver 127.0.0.1 in resolv.conf.<br \/>\nIl primo passo \u00e8 di rendere possibile a questa macchina mandare mail, Il nostro server di posta \u00e8 in housing presso una compagnia di servizi quindi la via pi\u00f9 comoda \u00e8 stata quella di dire al postfix di fare relay su quel server autenticandosi con un utente del dominio in questo modo:<br \/>\nmain.cf<\/p>\n<p>smtpd_banner = $myhostname ESMTP $mail_name (Debian\/GNU)<br \/>\nbiff = no<\/p>\n<p>append_dot_mydomain = no<\/p>\n<p>readme_directory = no<\/p>\n<p># TLS parameters<br \/>\nsmtpd_tls_cert_file=\/etc\/ssl\/certs\/ssl-cert-snakeoil.pem<br \/>\nsmtpd_tls_key_file=\/etc\/ssl\/private\/ssl-cert-snakeoil.key<br \/>\nsmtpd_use_tls=yes<br \/>\nsmtpd_tls_session_cache_database = btree:${data_directory}\/smtpd_scache<br \/>\nsmtp_tls_session_cache_database = btree:${data_directory}\/smtp_scache<br \/>\nsmtpd_tsl_security_level = may<br \/>\nsmtpd_tls_auth_only = no<br \/>\nsmtp_use_tls = yes<\/p>\n<p>smtp_sasl_password_maps = hash:\/etc\/postfix\/sasl_passwd<br \/>\nsmtp_sasl_auth_enable = yes<br \/>\nsmtp_sasl_security_options = noanonymous<\/p>\n<p>myhostname = share.myfirm.com<br \/>\nalias_maps = hash:\/etc\/aliases<br \/>\nalias_database = hash:\/etc\/aliases<br \/>\nmyorigin = \/etc\/mailname<br \/>\nmydestination = share.myfirm.com, localhost.myfirm.com, localhost<br \/>\nrelayhost = [webmail.myfirm.com]:587<br \/>\nmynetworks = 127.0.0.0\/8 [::ffff:127.0.0.0]\/104 [::1]\/128<br \/>\nmailbox_command = procmail -a &#8220;$EXTENSION&#8221;<br \/>\nmailbox_size_limit = 0<br \/>\nrecipient_delimiter = +<br \/>\ninet_interfaces = loopback-only<br \/>\ninet_protocols = all<\/p>\n<p>in master.cf scommento<\/p>\n<pre>-o smtpd_sasl_auth_enable=yes\r\na questo punto creo con vim sasl_passwd\r\nche contiene questa riga<\/pre>\n<p>[webmail.myfirm.com]:587 clark@myfirm.com:MiApAsSwOrD123<br \/>\ncambiamo permessi e proprietari del file<\/p>\n<pre>chown root:root \/etc\/postfix\/sasl_passwd &amp;&amp; chmod 600 \/etc\/postfix\/sasl_passwd\r\ne da ultimo<\/pre>\n<pre>postmap hash:\/etc\/postfix\/sasl_passwd<\/pre>\n<p>e con questo il capitolo postfix \u00e8 chiuso<\/p>\n<p>Prepariamo adesso per poter installare zendto,<br \/>\napt-get -y install <tt>debhelper bison chrpath freetds-dev libcurl4-openssl-dev <\/tt><tt>libedit-dev libgd2-xpm-dev libgmp3-dev <\/tt><tt>libmhash-dev libpam0g-dev libpspell-dev <\/tt><tt>librecode-dev libsasl2-dev libsnmp-dev <\/tt><tt>libsqlite0-dev libt1-dev libtidy-dev <\/tt><tt>re2c unixodbc-dev<br \/>\n<\/tt><tt>apt-get -y install apache2-prefork-dev autoconf automake flex hardening-wrapper libapr1-dev libbz2-dev <\/tt><tt>libdb-dev libenchant-dev libgcrypt11-dev <\/tt><tt>libglib2.0-dev libicu-dev libmysqlclient-dev <\/tt><tt>libpcre3-dev libpq-dev libsqlite3-dev <\/tt><tt>libxmltok1-dev libxml2-dev libxslt1-dev quilt<br \/>\napt-get -y install clamav clamav-daemon<br \/>\na<\/tt><tt>pt-get -y install php5 php5-cli php5-sqlite php5-ldap php5-imap php-apc<br \/>\n<\/tt><tt>apt-get -y install rrdtool<\/tt><\/p>\n<p><tt>che al solito si tirano dietro le necessarie dipendenze quindi si procede con:<br \/>\n<\/tt><tt>wget http:\/\/zend.to\/files\/zendto-repo.deb<\/tt> e relativo dpkg -i zendto-repo.deb &amp;&amp; apt-get update &amp;&amp; apt-get install zendto<\/p>\n<p><tt>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.<br \/>\nAndiamo 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\u00e0 non metto le righe commentate<br \/>\n<\/tt><\/p>\n<p>&nbsp;<\/p>\n<p>&lt;?PHP<br \/>\ndefine(&#8216;NSSDROPBOX_BASE_DIR&#8217;,&#8217;\/opt\/zendto\/&#8217;);<br \/>\ndefine(&#8216;NSSDROPBOX_LIB_DIR&#8217;,&#8217;\/opt\/zendto\/lib\/&#8217;);<br \/>\ndefine(&#8216;NSSDROPBOX_DATA_DIR&#8217;,&#8217;\/var\/zendto\/&#8217;);<br \/>\ndefine(&#8216;ZTVERSION&#8217;,&#8217;4.12&#8242;);<br \/>\ndefine(&#8216;MYZENDTO&#8217;,&#8217;FALSE&#8217;);<br \/>\ndefine(&#8216;RRD_DATA_DIR&#8217;,NSSDROPBOX_DATA_DIR.&#8217;rrd\/&#8217;);<br \/>\ndefine(&#8216;RRD_DATA&#8217;,RRD_DATA_DIR.&#8217;zendto.rrd&#8217;);<br \/>\ndefine(&#8216;RRDTOOL&#8217;,&#8217;\/usr\/bin\/rrdtool&#8217;);<br \/>\ndefine(&#8216;SqlBackend&#8217;, &#8216;SQLite3&#8217;);<br \/>\n$NSSDROPBOX_PREFS = array(<br \/>\n&#8216;SQLiteDatabase&#8217; =&gt; NSSDROPBOX_DATA_DIR.&#8221;zendto.sqlite&#8221;,<br \/>\n&#8216;MySQLhost&#8217; =&gt; &#8216;localhost&#8217;,<br \/>\n&#8216;MySQLuser&#8217; =&gt; &#8216;zendto&#8217;,<br \/>\n&#8216;MySQLpassword&#8217; =&gt; &#8216;zendto&#8217;,<br \/>\n&#8216;MySQLdb&#8217; =&gt; &#8216;zendto&#8217;,<br \/>\n&#8216;dropboxDirectory&#8217; =&gt; NSSDROPBOX_DATA_DIR.&#8221;dropoffs&#8221;,<br \/>\n&#8216;logFilePath&#8217; =&gt; NSSDROPBOX_DATA_DIR.&#8221;zendto.log&#8221;,<br \/>\n&#8216;numberOfDaysToRetain&#8217; =&gt; 14,<br \/>\n&#8216;showRecipsOnPickup&#8217; =&gt; TRUE,<br \/>\n&#8216;maxBytesForDropoff&#8217; =&gt; 2147483647, \/\/ 2 GBytes &#8211; 1 = 2^32-1<br \/>\n&#8216;maxBytesForFile&#8217; =&gt; 2147483647, \/\/ 2 GBytes &#8211; 1 = 2^32-1<br \/>\n&#8216;useRealProgressBar&#8217; =&gt; TRUE,<br \/>\n&#8216;requestTTL&#8217; =&gt; 86400, \/\/ 1 day<br \/>\n&#8216;requestTo&#8217; =&gt; &#8221;, \/\/ Set to &#8221; to disable this override<br \/>\n&#8216;maxSubjectLength&#8217; =&gt; 100,<br \/>\n&#8216;maxNoteLength&#8217; =&gt; 1000,<br \/>\n\/\/ &#8216;localIPSubnets&#8217; =&gt; array(&#8216;139.166.&#8217;,&#8217;152.78&#8242;),<br \/>\n&#8216;localIPSubnets&#8217; =&gt; array(&#8216;210.134.185.&#8217;,&#8217;82.225.236.&#8217;,&#8217;192.168.2.&#8217;),<br \/>\n&#8216;humanDownloads&#8217; =&gt; true,<br \/>\n&#8216;bccSender&#8217; =&gt; FALSE,<br \/>\n&#8216;usingLibrary&#8217; =&gt; FALSE,<br \/>\n&#8216;libraryDirectory&#8217; =&gt; NSSDROPBOX_DATA_DIR.&#8221;library&#8221;,<br \/>\n&#8216;defaultMyZendToQuota&#8217; =&gt; 100000000, \/\/ 100 Mbytes<br \/>\n&#8216;captcha&#8217; =&gt; &#8216;google&#8217;,<br \/>\n&#8216;recaptchaPublicKey&#8217; =&gt; &#8216;6Le19HhwTAAAAFI0PhtgLKjFgWgHFdE3e4wTiT2u&#8217;,<br \/>\n&#8216;recaptchaPrivateKey&#8217; =&gt; &#8216;6Le19HhwTAAAAC7IyELUJK5sJvlvMlDGveBRO3w0&#8217;,<br \/>\n&#8216;recaptchaProxyHost&#8217; =&gt; &#8221;,<br \/>\n&#8216;recaptchaProxyPort&#8217; =&gt; &#8221;,<br \/>\n&#8216;authAdmins&#8217; =&gt; array(&#8216;admin1&#8242;,&#8217;admin2&#8242;,&#8217;admin3&#8217;,clark),<br \/>\n&#8216;authStats&#8217; =&gt; array(&#8216;view1&#8242;,&#8217;view2&#8242;,&#8217;view3&#8217;),<br \/>\n&#8216;authenticator&#8217; =&gt; &#8216;Local&#8217;,<br \/>\n&#8216;authIMAPServer&#8217; =&gt; &#8216;webmail.myfirm.com&#8217;,<br \/>\n&#8216;authIMAPDomain&#8217; =&gt; &#8216;myfyrm.com&#8217;,<br \/>\n&#8216;authIMAPOrganization&#8217; =&gt; &#8216;Myfirm S.p.A.&#8217;,<br \/>\n&#8216;authIMAPAdmins&#8217; =&gt; array(),<br \/>\n&#8216;defaultEmailDomain&#8217; =&gt; &#8216;myfyrm.com&#8217;,<br \/>\n&#8216;emailDomainRegexp&#8217; =&gt; &#8216;\/opt\/zendto\/config\/internaldomains.txt&#8217;,<br \/>\n&#8216;usernameRegexp&#8217; =&gt; &#8216;\/^([a-zA-Z0-9][a-zA-Z0-9\\_\\.\\-\\@\\\\\\]*)$\/i&#8217;<br \/>\n&#8216;validEmailRegexp&#8217; =&gt; &#8216;\/^([a-zA-Z0-9][a-zA-Z0-9\\.\\_\\-\\+\\&amp;\\&#8217;]*)\\@([a-zA-Z0-9][a-zA-Z0-9\\_\\-\\.]+)$\/i&#8217;,<br \/>\n&#8216;loginFailMax&#8217; =&gt; 6,<br \/>\n&#8216;loginFailTime&#8217; =&gt; 86400,<br \/>\n&#8216;cookieName&#8217; =&gt; &#8216;zendto-session&#8217;,<br \/>\n&#8216;cookieSecret&#8217; =&gt; &#8216;11111111111111111111111111111111&#8217;,<br \/>\n&#8216;cookieTTL&#8217; =&gt; &#8216;7200&#8217;,<br \/>\n&#8216;clamdscan&#8217; =&gt; &#8216;\/usr\/bin\/clamdscan &#8211;quiet&#8217;,<\/p>\n<p>);<\/p>\n<p>\/\/ &#8212;- &#8212;- \/\/<br \/>\n\/\/ &#8212;- DO NOT CHANGE ANYTHING BELOW THIS LINE &#8212;- \/\/<br \/>\n\/\/ &#8212;- &#8212;- \/\/<\/p>\n<p>\/\/ Set definitions for AreYouAHuman.com CAPTCHA.<br \/>\ndefine(&#8216;AYAH_PUBLISHER_KEY&#8217;, $NSSDROPBOX_PREFS[&#8216;ayah_publisher_key&#8217;]);<br \/>\ndefine(&#8216;AYAH_SCORING_KEY&#8217;, $NSSDROPBOX_PREFS[&#8216;ayah_scoring_key&#8217;]);<br \/>\ndefine(&#8216;AYAH_WEB_SERVICE_HOST&#8217;, &#8216;ws.areyouahuman.com&#8217;);<br \/>\ndefine(&#8216;AYAH_TIMEOUT&#8217;, 0);<br \/>\ndefine(&#8216;AYAH_DEBUG_MODE&#8217;, FALSE);<br \/>\ndefine(&#8216;AYAH_USE_CURL&#8217;, TRUE);<\/p>\n<p>\/\/ Do *not* change the next line.<br \/>\nrequire_once(NSSDROPBOX_LIB_DIR.SqlBackend.&#8217;.php&#8217;);<br \/>\n?&gt;<br \/>\na questo punto con vim creiamo il file internaldomains.txt che contiene<\/p>\n<p>myfirm.com<br \/>\nmyfirm1.com<br \/>\nmyfirm2.com<br \/>\nche sono i tre domini aziendali.<\/p>\n<p>nel file zendto.conf si devono sostituire le stringhe &#8220;soton&#8221;, &#8220;Southampton&#8221; and &#8220;ECS&#8221; con il nome della ditta e la stringa<\/p>\n<p>EmailSenderAddress = &#8216;ZendTo &lt;clark@myfirm.com&gt;&#8217;<\/p>\n<p>per il resto va lasciato cosi com&#8217;\u00e8.<br \/>\nA questo punto modifichiamo \/etc\/php5\/apache2\/php.ini in modo che contenga questi parametri<br \/>\nerror_reporting = E_ALL &amp; ~E_DEPRECATED &amp; ~E_NOTICE<br \/>\nmax_execution_time = 7200<br \/>\nmax_input_time = 7200<br \/>\nmemory_limit = 300M<br \/>\ndisplay_errors = On<br \/>\npost_max_size = 50000M<br \/>\nupload_tmp_dir = \/var\/zendto\/incoming<br \/>\nupload_max_filesize = 50G<br \/>\nmax_file_uploads = 200<br \/>\napc.rfc1867 = on<br \/>\napc.rfc1867_ttl = 7200<br \/>\napc.max_file_size = 50G<br \/>\napc.slam_defense = off<br \/>\n&#8220;date.timezone&#8221; &#8220;Europe\/Rome&#8221;<\/p>\n<p>Aggiungiamo a <tt>\/etc\/php5\/cli\/php.ini<br \/>\n<\/tt>error_reporting = E_ALL &amp; ~E_DEPRECATED &amp; ~E_NOTICE<\/p>\n<p>e verifichiamo che in <tt>\/etc\/php5\/conf.d\/apc.ini<\/tt> appaiano questi parametri<br \/>\napc.rfc1867 = on<br \/>\napc.rfc1867_ttl = 7200<br \/>\napc.max_file_size = 50G<br \/>\napc.slam_defense = off<\/p>\n<p>a questo punto spostandoci in \/opt\/zendto\/bin con lo script adduser.php aggiungiamo gli utenti in questo modo<\/p>\n<p>.\/adduser.php &#8216;manutenzione&#8217; &#8216;password&#8217; &#8216;manutenzione@myfirm.com&#8217; &#8216;Reparto Manutenzione&#8217; &#8216;myfirm S.p.A.&#8217; &#8216;0&#8217;<br \/>\nripetuto per ogni utente che deve avere accesso.<\/p>\n<p>Un reboot e puntando col browser a share.myfirm.com apparir\u00e0 la pagina dove se si \u00e8 user aziendali si pu\u00f2 fare login e inviare\/ricevere se si \u00e8 utenti esterni\u00a0 e si conosce l&#8217;indirizzo aziendale a cui si vuole mandare il file chiedere la mail con cui si avr\u00e0 accesso.<\/p>\n<p>&nbsp;<\/p>\n<p><tt>\u00a0<\/tt><\/p>\n<p><tt>\u00a0<\/tt><\/p>\n<p><tt>\u00a0<\/tt><\/p>\n<p><tt>\u00a0<\/tt><\/p>\n<p><tt>\u00a0<\/tt><\/p>\n<pre><\/pre>\n<div id=\"link64_adl_tabid\" style=\"display: none;\" data-url=\"http:\/\/clark.tipistrani.it\/wp-admin\/post.php?post=1303&amp;action=edit\">148<\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nell&#8217;ultimo periodo mi sono trovato a dover rendere facile l&#8217;uso di FTP, dopo aver provato diverse soluzioni la scelta \u00e8 caduta su zendto http:\/\/zend.to Non ha fronzoli ne interfaccia multilingua, non \u00e8 ben documentato ma non \u00e8 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 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,14,6],"tags":[102,101],"class_list":["post-1303","post","type-post","status-publish","format-standard","hentry","category-linux","category-networking","category-work","tag-file-sharing","tag-zendto"],"_links":{"self":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/1303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1303"}],"version-history":[{"count":8,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/1303\/revisions"}],"predecessor-version":[{"id":1313,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/1303\/revisions\/1313"}],"wp:attachment":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1303"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}