{"id":395,"date":"2019-10-08T10:51:00","date_gmt":"2019-10-08T09:51:00","guid":{"rendered":"http:\/\/eppesuigoccas.homedns.org\/wordpress\/?p=395"},"modified":"2019-10-10T10:23:36","modified_gmt":"2019-10-10T09:23:36","slug":"combattere-lo-spam-con-exim","status":"publish","type":"post","link":"https:\/\/blog.sguazz.it\/index.php\/archives\/395","title":{"rendered":"Combattere lo SPAM con exim"},"content":{"rendered":"\n<p>Affrontare lo SPAM \u00e8 una guerra continua, con regole e situazioni che cambiano di frequente. Riporto qui di seguito alcune considerazioni legate alla configurazione di exim4, in particolare su Debian.<\/p>\n\n\n\n<p>Non elencher\u00f2 qui le soluzioni pi\u00f9 diffuse, come utilizzare spamassassin per la verifica della posta in ingresso, oppure utilizzare le varie blacklist per negare l&#8217;accesso a server poco accreditati. Invece, scriver\u00f2 solo metodi aggiuntivi, per rafforzare ulteriormente il server.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nome account diverso dal nome della casella di posta elettronica<\/h2>\n\n\n\n<p>Molto spesso, chi raccoglie indirizzi di posta elettronica tramite ricerceh su web o tramite la lettura delle rubriche private, tenta poi l&#8217;accesso al server di posta utilizzando come nome utente l&#8217;indirizzo di posta, con o senza il dominio.<\/p>\n\n\n\n<p>Per esempio, se sulla macchina \u00abmacchina.tld\u00bb esiste un utente Francesco Rossi con una utenza \u00abfrancesco\u00bb, molto probabilmente esistena la casella di posta \u00abfrancesco@macchina.tld\u00bb. Se si fa un server di posta, dedicato alla parte SMTP e\/o IMAP, vanno definite le utenze e le caselle di posta. Il suggerimento \u00e8 di usare utenze diverse dalle caselle di posta. Ad esempio, si pu\u00f2 dare a Francesco l&#8217;utenza \u00abkl2482gg@macchina.tld\u00bb che corrisponda alla casella di posta \u00abfrancesco@macchina.tld\u00bb. <\/p>\n\n\n\n<p>In questo modo, chi conoscer\u00e0 la casella di posta \u00abfrancesco@macchina.tld\u00bb tenter\u00e0 di accedere usando l&#8217;utenza \u00abfrancesco\u00bb oppure \u00abfrancesco@macchina.tld\u00bb, che non esistono.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Geolocalizzazione<\/h2>\n\n\n\n<p>Altra cosa importante \u00e8 che le credenziali vengono comunque rubate, in un modo o nell&#8217;altro, magari tramite virus. Una volta che queste sono in mano agli spammer, verranno effettuate migliaia di connessioni correttamente autenticate verso il server SMTP, che accetter\u00e0 i messaggi SPAM e cercher\u00e0 di inviarli.<\/p>\n\n\n\n<p>Una via per limitare questo attacco, \u00e8 quella di bloccare email inviate da IP stranieri. Per farlo conviene mettere un log per tracciare le nazioni dalle quali si riceve la posta autenticata e capire quali siano le nazioni valide. Su Debian c&#8217;\u00e8 un pacchetto chiamato \u00abgeoip-database\u00bb che contiene l&#8217;elenco degli IP con l&#8217;indicazione della nazione di appartenenza. Per exim esiste una libreria dinamica (disponibile <a href=\"https:\/\/github.com\/snabb\/exim-geoipv6-dlfunc\">qui<\/a>) che permette di interrogare quel database. Una volta compilata e installata seguendo le istruzioni sul sito della libreria, si devono aggiungere alcuni file di configurazione a exim. Il primo crea una variabile con la nazione dell&#8217;IP, chiamiamolo \u00ab\/etc\/exim4\/conf.d\/acl\/exim4-config_check_geoip_parte1\u00bb:<\/p>\n\n\n\n<p><code>#imposta la variabile acl_c_geoip_country_code<br \/> warn set acl_c_geoip_country_code = \\<br \/>         ${dlfunc{\/usr\/local\/lib\/exim4\/exim-geoipv6-dlfunc.so}\\<br \/>         {geoip_country_code}{$sender_host_address}}<\/code><\/p>\n\n\n\n<p>Il secondo usa la variabile per bloccare l&#8217;accesso, chiamiamolo \u00ab\/etc\/exim4\/conf.d\/acl\/exim4-config_check_geoip_parte2\u00bb:<\/p>\n\n\n\n<p><code>#<br \/>\n# Controllo dell'IP origine della connessione.<br \/>\n# Utilizza una libreria e il database degli IP<br \/>\n# la libreria \u00e8 https:\/\/github.com\/snabb\/exim-geoipv6-dlfunc<br \/>\n# il database e' nel pacchetto geoip-database<br \/>\n#<br \/>\n<br \/>\n# nella fase di test, aggiungo una intestazione per controllare la<br \/>\n# variabile<br \/>\n#warn<br \/>\n#\tcondition = ${if def:acl_c_geoip_country_code}<br \/>\n#\tauthenticated = *<br \/>\n#\tlog_message = Accesso autenticato dalla nazione $acl_c_geoip_country_code<br \/>\n<br \/>\n# nella fase di test, aggiungo una intestazione per controllare<br \/>\n# l'indirizzo se non \u00e8 nel database<br \/>\nwarn<br \/>\n\t!condition = ${if def:acl_c_geoip_country_code}<br \/>\n\tauthenticated = *<br \/>\n\t!hosts = 10.0.0.0\/24<br \/>\n\tlog_message = Accesso autenticato da un IP sconosciuto e non della LAN<br \/>\n<br \/>\n# accetta email che arrivano da IP della LAN a condizione che<br \/>\n# sia stata fatta l'autenticazione<br \/>\naccept<br \/>\n\tauthenticated = *<br \/>\n\thosts = 10.0.0.0\/24<br \/>\n\tlog_message = Accesso autenticato da computer in LAN<br \/>\n<br \/>\n# accetta email che arrivano da IP di nazioni conosciute, ma mancanti dal database,<br \/>\n# a condizione che sia stata fatta l'autenticazione<br \/>\naccept<br \/>\n\tauthenticated = *<br \/>\n\t# 88.209.103.0 - 88.209.103.255, Monaco-Telecom, MC<br \/>\n\thosts = 88.209.103.0\/24<br \/>\n\tlog_message = Accesso autenticato da computer in LAN<br \/>\n\n# accetta email che arrivano da IP in Francia e Monaco a condizione<br \/>\n# che sia stata fatta l'autenticazione<br \/>\naccept<br \/>\n\tauthenticated = *<br \/>\n\tcondition = ${if def:acl_c_geoip_country_code}<br \/>\n\tcondition = ${if inlist{$acl_c_geoip_country_code}{FR:IT:MC}}<br \/>\n\tlog_message = Accesso autenticato da IP della nazione $acl_c_geoip_country_code<br \/>\n<br \/>\n# blocca i messaggi per i quali \u00e8 stata fatta l'autenticazione SMTP,<br \/>\n# cio\u00e8 si conosce la password, ma vengono da una naziona conosciuta<br \/>\n# e straniera<br \/>\n# nota: in alcuni casi, acl_c_geoip_country_code non viene inizializzata<br \/>\n# perch\u00e9 l'IP non \u00e8 nel database. In quel caso, non si entra in questa<br \/>\n# regola<br \/>\ndeny<br \/>\n\tauthenticated = *<br \/>\n\tcondition = ${if def:acl_c_geoip_country_code}<br \/>\n\t!condition = ${if inlist{$acl_c_geoip_country_code}{FR:IT:MC}}<br \/>\n\tmessage = Authenticated access from foreign country denied.<br \/>\n\tlog_message = Accesso autenticato da nazione non autorizzata. Rifiutato.<br \/>\n<\/code><\/p>\n\n\n\n<p>Infine, per fare usare questi due file ad exim, \u00e8 necessario modificare il file con le opzioni locali, come ad esempio, \u00ab\/etc\/exim4\/conf.d\/main\/000_local_options\u00bb aggiungendovi quest righe:<\/p>\n\n\n\n<p><code># controllo accessi tramite verifica geografica<br \/> CHECK_RCPT_LOCAL_ACL_FILE = \/etc\/exim4\/conf.d\/acl\/exim4-config_check_geoip_parte1<br \/> CHECK_DATA_LOCAL_ACL_FILE = \/etc\/exim4\/conf.d\/acl\/exim4-config_check_geoip_parte2<\/code><\/p>\n\n\n\n<p>Con la geolocalizzazione si bloccano le richieste dall&#8217;estero, ma questo potrebbe essere un problema se uno si spostasse all&#8217;estero, magari in vacanza. Va quindi usata con attenzione.<\/p>\n\n\n\n<p>Una seconda possibilit\u00e0, pi\u00f9 onerosa dal punto di vista computazionale, \u00e8 quella di fare il controllo antispam, con spamassassin o altro, anche ai messaggi che arrivano da connessioni autenticate.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Affrontare lo SPAM \u00e8 una guerra continua, con regole e situazioni che cambiano di frequente. Riporto qui di seguito alcune considerazioni legate alla configurazione di exim4, in particolare su Debian. Non elencher\u00f2 qui le soluzioni pi\u00f9 diffuse, come utilizzare spamassassin per la verifica della posta in ingresso, oppure utilizzare le varie blacklist per negare l&#8217;accesso [&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-395","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\/395","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=395"}],"version-history":[{"count":6,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/395\/revisions"}],"predecessor-version":[{"id":401,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/posts\/395\/revisions\/401"}],"wp:attachment":[{"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/media?parent=395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/categories?post=395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.sguazz.it\/index.php\/wp-json\/wp\/v2\/tags?post=395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}