{"id":245,"date":"2016-03-02T11:26:41","date_gmt":"2016-03-02T10:26:41","guid":{"rendered":"http:\/\/eppesuigoccas.homedns.org\/wordpress\/?p=245"},"modified":"2016-03-02T11:26:41","modified_gmt":"2016-03-02T10:26:41","slug":"metti-che-sbagli-a-configurare-il-tuo-apache-e-crei-un-open-proxy","status":"publish","type":"post","link":"https:\/\/blog.sguazz.it\/index.php\/archives\/245","title":{"rendered":"Metti che sbagli a configurare il tuo apache e crei un \u00abopen proxy\u00bb"},"content":{"rendered":"<p>Lo so, la documentazione va letta bene e pi\u00f9 volte, ma capita di avere\u00a0fretta oppure che la documentazione sia\u00a0vaga. Cos\u00ec mi \u00e8 successo\u00a0di configurare male un server apache che, dopo due anni, \u00e8 stato usato come \u00abopen proxy\u00bb, cio\u00e8 come proxy senza nessun controllo. Questo vuol dire che chiunque, impostando come proxy l&#8217;ip del mio server, poteva accedere ad internet senza rivelare il proprio indirizzo ip.<\/p>\n<p>L&#8217;errore che avevo commesso era il seguente: avevo abilitato il modulo proxy perch\u00e9 apache inoltrasse alcune richieste ad altri siti, nascondendoli ai client. In questo modo su un solo IP davo accesso a varie applicazioni gestite su diverse macchine virtuali. Apache riceveva la richiesta http:\/\/www.miodominio.tld\/sitoA e la inoltrava all&#8217;apache sulla macchina virtuale A, se riceveva la richiesta http:\/\/www.miodominio.tld\/sitoB la inoltrava all&#8217;apache sulla macchina virtuale B, eccetera.<\/p>\n<p>La mia configurazione, una volta attivato il modulo proxy, era la seguente:<\/p>\n<pre>&lt;IfModule mod_proxy.c&gt;\r\n   ProxyRequests On\r\n   &lt;Location \"\/sitoA\"&gt;\r\n      ProxyPass http:\/\/192.168.74.40\/\r\n   &lt;\/Location&gt;\r\n   &lt;Location \"\/sitoB\"&gt;\r\n      ProxyPass http:\/\/192.168.74.41:8080\/\r\n   &lt;\/Location&gt;\r\n&lt;\/IfModule&gt;\r\n<\/pre>\n<p>L&#8217;errore sta nel fatto che <strong>ProxyRequests<\/strong> non serve ad attivare questo tipo di richieste (apache configurato come <em>reverse proxy<\/em>), ma quelle del normale proxy (configurato come <em>forward proxy<\/em>).<\/p>\n<p>Evidentemente ci sono persone che scoprono quando un server web \u00e8 configurato male e ne approfittano, sicch\u00e9 ieri pomeriggio mi \u00e8 arrivato l&#8217;allarme automatico che indicava sia l&#8217;eccessivo utilizzo della banda, sia il carico anomalo in apache. Dopo aver capito cosa era successo, ed essermi documentato meglio, ho impostato il parametro <strong>ProxyRequests<\/strong> a <strong>Off<\/strong> e la cosa sarebbe stata risolta, ma&#8230;<\/p>\n<p>&#8230; ma controllando i log di apache continuavo a vedere decine di richieste riferite a siti non miei, alle quali apache rispondeva 200 (HTTP OK). Come ad esempio queste due:<\/p>\n<pre>222.186.15.212 - - [02\/Mar\/2016:06:38:12 +0100] \"GET http:\/\/909888.com\/ HTTP\/1.1\" 200 272 \"http:\/\/909888.com\/\" \"Mozilla\/5.0+(compatible;+Baiduspider\/2.0;++http:\/\/www.baidu.com\/search\/spider.html)\"\r\n104.223.72.222 - - [02\/Mar\/2016:06:38:09 +0100] \"GET http:\/\/www.heshijiuxian.net\/ HTTP\/1.1\" 200 272 \"http:\/\/www.baidu.com\" \"Mozilla\/5.0 (compatible; Googlebot\/2.1; http:\/\/www.google.com\/bot.html)\"<\/pre>\n<p>Proseguendo nella mia indagine sul server apache ho capito il problema. Il mio server gestisce sullo stesso IP siti diversi, quindi \u00e8 accessibile sia come http:\/\/www.miodominio.tld\/ che come http:\/\/www.altromiodominio.tld\/. Per far questo ho dovuto abilitare il NameVirtualHost di apache che in pratica dice ad apache: ascolta su un IP, e quando ti arriva una richiesta, estrai l&#8217;intestazione chiamata \u00abhost\u00bb e in base a quella usa la configurazione del sito corrispondente (cercandola tra i vari VirtualHost configurati).<\/p>\n<p>Non \u00e8 che sia scritto proprio in caratteri cubitali, ma la documentazione dice anche, tra le righe, che se l&#8217;host non viene trovato n\u00e9 tra i ServerName dei vari VirtualHost e nessure tra i ServerAlias, allora viene usato il VirtualHost collegato all&#8217;hostname della macchina. Quindi tutte le richieste che si riferiscono a host non gestiti (come quelle che trovavo nei log) restituivano in realt\u00e0 la pagina del sito principale di questa macchina.<\/p>\n<p>Per risolvere il problema, ho creato un nuovo VirtualHost con un ServerAlias tale da farlo utilizzare per tutti questi siti. In quel VirtualHost viene restituito errore di autorizzazione, come ad esempio:<\/p>\n<pre>5.79.83.31 - - [02\/Mar\/2016:11:10:48 +0100] \"GET http:\/\/pornobiz.org:81\/test_url1\/image.php HTTP\/1.0\" 403 486 \"-\" \"Opera\/9.50 (Windows NT 5.1; U; en)\"\r\n5.79.83.31 - - [02\/Mar\/2016:11:10:48 +0100] \"CONNECT 74.125.133.138:443 HTTP\/1.1\" 400 0 \"-\" \"-\"<\/pre>\n<p>Il VirtualHost \u00e8 fatto cos\u00ec:<\/p>\n<pre>&lt;VirtualHost indirizzo-ipv4:80 [indirizzo-ipv6]:80&gt;\r\n  ServerName www.example.com\r\n  ServerAlias *\r\n  DocumentRoot \/var\/www\/\r\n  &lt;Directory \/&gt;\r\n    Options FollowSymLinks\r\n    AllowOverride None\r\n  &lt;\/Directory&gt;\r\n  &lt;Directory \/var\/www\/&gt;\r\n    Options Indexes FollowSymLinks MultiViews\r\n    AllowOverride None\r\n    Order allow,deny\r\n    deny from all\r\n  &lt;\/Directory&gt;\r\n  ErrorLog \/var\/log\/apache2\/error-www.example.com.log\r\n  LogLevel notice\r\n  CustomLog \/var\/log\/apache2\/access-www.example.com.log combined\r\n  ServerSignature On\r\n&lt;\/VirtualHost&gt;\r\n<\/pre>\n<p>Notare che ServerAlias non contiene un hostname, ma un <em>pattern che corrisponde a tutti gli hostname possibili<\/em>, cos\u00ec da utilizzare questo VirtualHost per qualsiasi URL.<br \/>\nOvviamente, per non fare ricadere in questo caso anche gli hostname che vengono invece gestiti dagli altri VirtualHost configurati in precedenza, \u00e8 stato necessario chiamare il file di questo con un nome che fosse alfabeticamente ultimo, cio\u00e8 zzz.conf. In questo modo, quando apache cerca il VirtualHost da usare, esamina\u00a0tutti i file in \/etc\/apache2\/sites-enabled nell&#8217;ordine alfabetico, e prende quest&#8217;ultimo solo se l&#8217;host della richiesta non corrisponde ad uno di quelli gestiti dagli altri VirtualHost.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lo so, la documentazione va letta bene e pi\u00f9 volte, ma capita di avere\u00a0fretta oppure che la documentazione sia\u00a0vaga. Cos\u00ec mi \u00e8 successo\u00a0di configurare male un server apache che, dopo due anni, \u00e8 stato usato come \u00abopen proxy\u00bb, cio\u00e8 come proxy senza nessun controllo. Questo vuol dire che chiunque, impostando come proxy l&#8217;ip del mio [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3,11,10],"tags":[],"class_list":["post-245","post","type-post","status-publish","format-standard","hentry","category-sysadmin","category-computer","category-debian","category-open-source"],"_links":{"self":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/comments?post=245"}],"version-history":[{"count":1,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/245\/revisions"}],"predecessor-version":[{"id":246,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/245\/revisions\/246"}],"wp:attachment":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/media?parent=245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/categories?post=245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/tags?post=245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}