Differenze tra le versioni di "Apt-cacher"

Da GolemWiki.
Jump to navigation Jump to search
 
(16 versioni intermedie di 4 utenti non mostrate)
Riga 107: Riga 107:
 
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (eth1); es.:
 
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (eth1); es.:
  
  subnet 192.168.5.1 netmask 255.255.255.0 {
+
  subnet 192.168.5.0 netmask 255.255.255.0 {
 
  range 192.168.5.100  192.168.5.200;
 
  range 192.168.5.100  192.168.5.200;
 +
option domain-name-servers 8.8.8.8;
 
  }
 
  }
 
  
 
=== Squid ===
 
=== Squid ===
Riga 123: Riga 123:
  
  
Su Debian/Ubuntu editate il file ''/etc/squid.conf'', mentre su Arch Linux ''/etc/squid/squid.conf''. Modificate la riga http_port 3128 aggiungendo ''transparent'' alla fine:
+
Editate il file ''/etc/squid/squid.conf''. Modificate la riga http_port 3128 aggiungendo ''transparent'' alla fine:
  
 
  http_port 3128 transparent
 
  http_port 3128 transparent
 
In oltre devono essere aggiunte le seguenti linee tra quelle che incominciano per ''acl'' e quelle che incominciano con ''http_access''
 
 
cache_peer localhost parent 3142 7 proxy-only no-query no-netdb-exchange connect-timeout=15
 
acl aptget browser -i apt-get apt-http apt-cacher apt-proxy
 
acl deburl urlpath_regex /(Packages|Sources|Release|Translations-.*)\(.(gpg|gz|bz2))?$ /pool/.*/.deb$ /(Sources|Packages).diff/ /dists/[^/]*/[^/]*/(binary-.*|source)/.
 
cache_peer_access localhost allow aptget
 
cache_peer_access localhost allow deburl
 
cache_peer_access localhost deny all
 
 
<!--
 
=== Jesred ===
 
Redirigiamo le richieste dei pacchetti deb da squid verso apt-cacher-ng.
 
 
Editare il file /etc/jesred.conf
 
 
allow = /etc/jesred.acl
 
rules = /etc/jesred.rules
 
redirect_log = /var/log/squid/jesred-redirect.log
 
rewrite_log = /var/log/squid/jesred-rewrite.log
 
 
Il file /etc/jesred.rules
 
 
regex ^http://((.*)/debian/(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 
regex ^http://((.*)/ubuntu/(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 
regex ^http://((.*)/debian//(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 
regex ^http://((.*)/ubuntu//(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 
 
##upgrade-manager necessita anche queste due regole:
 
abort .gpg
 
abort ReleaseAnnouncement
 
 
Decommentare dal file /etc/jesred.acl la linea
 
 
# 0.0.0.0/0
 
-->
 
  
 
=== Firewall ===
 
=== Firewall ===
Riga 171: Riga 135:
 
  net.ipv4.ip_forward = 1
 
  net.ipv4.ip_forward = 1
  
A seguire le regole per realizzare uno script per iptables, si consiglia di salvarle in un file (es. /etc/[http://golem.linux.it/files/fw_proxy.sh fw_proxy.sh]).
+
A seguire le regole per realizzare uno script per iptables, si consiglia di salvarle in un file (es. /etc/[http://golem.linux.it/files/spookyh/fw_proxy.sh fw_proxy.sh]).
  
 
Di dargli i permessi di esecuzione:
 
Di dargli i permessi di esecuzione:
Riga 194: Riga 158:
 
  SQUID_SERVER="192.168.5.1"
 
  SQUID_SERVER="192.168.5.1"
 
  # Interface connected to Internet
 
  # Interface connected to Internet
  INTERNET="eth0"
+
  INTERNET="wlan5"
 
  # Interface connected to LAN
 
  # Interface connected to LAN
  LAN_IN="eth1"
+
  LAN_IN="eth0"
 
  # Squid port
 
  # Squid port
 
  SQUID_PORT="3128"
 
  SQUID_PORT="3128"
# DO NOT MODIFY BELOW
 
 
  # Clean old firewall
 
  # Clean old firewall
 
  iptables -F
 
  iptables -F
Riga 208: Riga 171:
 
  iptables -t mangle -X
 
  iptables -t mangle -X
 
  # Load IPTABLES modules for NAT and IP conntrack support
 
  # Load IPTABLES modules for NAT and IP conntrack support
 +
modprobe ip_tables
 
  modprobe ip_conntrack
 
  modprobe ip_conntrack
  modprobe ip_conntrack_ftp
+
  modprobe iptable_nat
  # For win xp ftp client
+
  modprobe ipt_MASQUERADE
#modprobe ip_nat_ftp
 
 
  echo 1 > /proc/sys/net/ipv4/ip_forward
 
  echo 1 > /proc/sys/net/ipv4/ip_forward
# Setting default filter policy
 
iptables -P INPUT DROP
 
iptables -P OUTPUT ACCEPT
 
# Unlimited access to loop back
 
iptables -A INPUT -i lo -j ACCEPT
 
iptables -A OUTPUT -o lo -j ACCEPT
 
# Allow UDP, DNS and Passive FTP
 
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
 
 
  # set this system as a router for Rest of LAN
 
  # set this system as a router for Rest of LAN
  iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
+
  iptables -t nat -A POSTROUTING -o $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $LAN_IN -j ACCEPT
 
# unlimited access to LAN
 
iptables -A INPUT -i $LAN_IN -j ACCEPT
 
iptables -A OUTPUT -o $LAN_IN -j ACCEPT
 
 
  # DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy
 
  # DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy
 
  iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
 
  iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
# if it is same system
 
 
  iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT
 
  iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT
  # DROP everything and Log it
+
 
  iptables -A INPUT -j LOG
+
= Varianti =
  iptables -A INPUT -j DROP
+
== Jesred ==
 +
 
 +
Jesred è un programma che può occuparsi di ridirigere le richieste dei pacchetti deb da Squid verso apt-cacher-ng.
 +
 
 +
$ sudo apt-get install jesred
 +
 
 +
Editare la configurazione base di squid (''/etc/squid.conf'') in questo modo:
 +
 
 +
http_port 3128 transparent
 +
redirect_program /usr/lib/squid/jesred
 +
redirect_children 15
 +
 
 +
Editare il file /etc/jesred.conf
 +
 
 +
allow = /etc/jesred.acl
 +
rules = /etc/jesred.rules
 +
redirect_log = /var/log/squid/jesred-redirect.log
 +
rewrite_log = /var/log/squid/jesred-rewrite.log
 +
 
 +
Il file /etc/jesred.rules
 +
 
 +
<nowiki>
 +
regex ^http://((.*)/debian/(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 +
regex ^http://((.*)/ubuntu/(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 +
regex ^http://((.*)/debian//(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 +
regex ^http://((.*)/ubuntu//(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 +
</nowiki>
 +
 
 +
  ##upgrade-manager necessita anche queste due regole:
 +
abort .gpg
 +
abort ReleaseAnnouncement
 +
 
 +
Decommentare dal file /etc/jesred.acl la linea
 +
 
 +
0.0.0.0/0
 +
 
 +
 
 +
Editare il file /etc/squid/squid.conf aggiungendo le seguenti linee tra quelle che incominciano per acl e quelle che incominciano con http_access
 +
 
 +
  <nowiki>
 +
cache_peer localhost parent 3142 7 proxy-only no-query no-netdb-exchange connect-timeout=15
 +
  acl aptget browser -i apt-get apt-http apt-cacher apt-proxy
 +
acl deburl urlpath_regex /(Packages|Sources|Release|Translations-.*)\(.(gpg|gz|bz2))?$ /pool/.*/.deb$
 +
/(Sources|Packages).diff/ /dists/[^/]*/[^/]*/(binary-.*|source)/.
 +
cache_peer_access localhost allow aptget
 +
cache_peer_access localhost allow deburl
 +
cache_peer_access localhost deny all
 +
</nowiki>
 +
 
 +
''(La terza e la quarta riga in realtà sono una riga sola)''
 +
 
 +
== Squid-Only ==
 +
 
 +
È possibile configurare Squid affinche si occupi direttamente della cache dei pacchetti deb.
 +
 
 +
Editare la configurazione base di squid (''/etc/squid.conf'') aggiungendo:
 +
 
 +
refresh_pattern deb$ 1577846 100% 1577846
 +
refresh_pattern Packages.gz$ 1440 100% 1440
 +
cache_dir ufs /var/spool/squid 15000 2 8
 +
maximum_object_size 409600 KB
 +
 
 +
Squid risulterà quindi impostato per conservare per 3 anni qualsiasi file termini per "deb" e per 1 giorno quelli che terminano per "Packages.gz", la directory dove conservare i file sarà ''/var/spool/squid'' e non potrà crescere oltre i 15 GB, il limite di grandezza per singolo file sarà invece di 400 MB.
 +
 
 +
[[Category: Howto]]

Versione attuale delle 20:59, 22 dic 2016

Cos'è APT-Cacher?

Quanto ci si trova a gestire (aggiornare/installare) numerosi computer che utilizzano con la stessa distribuzione può essere conveniente configurare una macchina che funga da cache dei repository all'interno della nostra rete locale. In questo modo il pacchetto che si desidera installare viene scaricato dalla rete esterna solo la prima volta, le richieste successive saranno soddisfatte dal server di cache della nostra LAN.

Il programma che riesce ad eseguire tale compito è: apt-cacher-ng.

È presente nei repositori ufficiali di Debian, Ubuntu ed in AUR per gli utenti Arch Linux.

NB: apt-cacher-ng può essere installato su qualsiasi computer della LAN. Nel caso in cui però sia installato sul gateway della rete si può scegliere di affiancargli un transparent proxy così da permettere alla cache di funzionare senza bisogno effettuare modifiche sul lato client.

Installazione

  • Debian e Ubuntu
$ sudo apt-get install apt-cacher-ng
  • Arch Linux
# yaout -S apt-cacher-ng


Configurazione lato server

Su Debian ed Ubuntu non appena terminata l'installazione dell'apt-cacher-ng il demone risulta già configurato ed attivo.

  • Su Arch Linux la prima volta che vogliamo abilitare il servizio dovremo eseguire i seguenti comandi:
# systemctl enable apt-cacher-ng.service
# systemctl start apt-cacher-ng.service


Configurazione lato client

  • Debian/Ubuntu

Editare il file /etc/apt/apt.conf.d/02proxy aggiungendo la seguente linea:

Acquire::http { Proxy "http://your-apt-cacher-ng-server:3142"; };
  • Arch Linux

Editare il file /etc/pacman.d/mirrorlist aggiungendo l'indirizzo del proxy a quello del mirror che solitamente è usato per scaricare i pacchetti, es.:

Server = http://mi.mirror.garr.it/mirrors/archlinux/$repo/os/$arch

Diventerà

Server = http://127.0.0.1:3142/mi.mirror.garr.it/mirrors/archlinux/$repo/os/$arch


Transparent Proxy

Affinché un proxy possa essere utilizzato in maniera trasparente (senza dover configurare niente) dai client della LAN è necessario che il traffico che si vuole cachare passi fisicamente dalla macchina in cui è in ascolto il proxy (es. il gateway).


Configurazione

Per realizzare il transparent proxy si consiglia di procurarsi un computer munito di 2 schede ethernet, una per il collegamento alla rete esterna (Internet) mediante un router e l'altra per condividere la connessione con la rete interna (LAN). Sarà necessario installare i seguenti programmi: dhcp server (es.: isc-dhcp-server, udhcpd...), squid


Schede di rete

eth0 sarà l'interfaccia con la quale ci collegheremo ad Internet, è configurata per ricevere l'IP dal dhcp del router.

eth1 è l'interfaccia con IP statico (nell'esempio è stato scelto l'indirizzo 192.168.5.1) con la quale condivideremo la connessione sulla LAN.

  • Su Debian/Ubuntu editare il file /etc/network/interfaces
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet static
address 192.168.5.1
netmask 255.255.255.0


  • Su Arch Linux
# cp /etc/network.d/examples/ethernet-dhcp /etc/network.d/eth0-dhcp

Creare il file /etc/network.d/eth1-static ed editarlo come segue:

CONNECTION='ethernet'
DESCRIPTION='static ethernet connection'
INTERFACE='eth1'
IP='static'
ADDR='192.168.5.1'
SKIPNOCARRIER='yes'

Aggiungere le due nuove configurazioni di rete nel file /etc/conf.d/netcfg

NETWORKS=(eth1-static @eth0-dhcp)

Controllare che in /etc/rc.conf sia presente alla voce DAEMONS

net-profiles


dhcpd

Per facilitare la connessione dei client si consiglia di installare un server dhcp che stia in ascolto sull'interfaccia eth1.

  • Debian/Ubuntu
$ sudo apt-get install isc-dhcp-server
  • Arch Linux
# pacman -S dhcp
# systemctl enable dhcpd4.service

Editare /etc/dhcpd.conf aggiungendo la configurazione per la rete interna (eth1); es.:

subnet 192.168.5.0 netmask 255.255.255.0 {
range 192.168.5.100  192.168.5.200;
option domain-name-servers 8.8.8.8;
}

Squid

Squid è il server proxy, dovrà occuparsi di ridirigere verso apt-cacher-ng tutte le richieste di pacchetti .deb

  • Debian/Ubuntu
$ sudo apt-get install squid
  • Arch Linux
# yaourt -S squid
# systemctl enable squid.service


Editate il file /etc/squid/squid.conf. Modificate la riga http_port 3128 aggiungendo transparent alla fine:

http_port 3128 transparent

Firewall

NB: il firewall di Linux è iptables, normalmente è installato di default in tutte le distribuzioni, se non lo fosse sarà necessario installarlo.

Abilitare il forward dei pacchetti assicurandoci che nel file /etc/sysctl.conf sia presente questa riga:

net.ipv4.ip_forward = 1

A seguire le regole per realizzare uno script per iptables, si consiglia di salvarle in un file (es. /etc/fw_proxy.sh).

Di dargli i permessi di esecuzione:

$ sudo chmod a+x /etc/fw_proxy.sh


E di farle caricare in automatico all'avvio aggiungendo al file /etc/rc.local la riga

/bin/sh /etc/fw_proxy.sh

in alternativa si può salvarle la configurazione di iptables con gli appositi strumenti della vostra distribuzione, es.:

  • Arch Linux
# sh /etc/fw_proxy.sh
# iptables-save > /etc/iptables/iptables.rules
# systemctl enable iptables.service

Script per il Firewall

#!/bin/sh
#  squid server IP
SQUID_SERVER="192.168.5.1"
# Interface connected to Internet
INTERNET="wlan5"
# Interface connected to LAN
LAN_IN="eth0"
# Squid port
SQUID_PORT="3128"
# Clean old firewall
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Load IPTABLES modules for NAT and IP conntrack support
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_nat
modprobe ipt_MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
# set this system as a router for Rest of LAN
iptables -t nat -A POSTROUTING -o $INTERNET -j MASQUERADE
# DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy
iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT

Varianti

Jesred

Jesred è un programma che può occuparsi di ridirigere le richieste dei pacchetti deb da Squid verso apt-cacher-ng.

$ sudo apt-get install jesred

Editare la configurazione base di squid (/etc/squid.conf) in questo modo:

http_port 3128 transparent
redirect_program /usr/lib/squid/jesred
redirect_children 15

Editare il file /etc/jesred.conf

allow = /etc/jesred.acl
rules = /etc/jesred.rules
redirect_log = /var/log/squid/jesred-redirect.log
rewrite_log = /var/log/squid/jesred-rewrite.log

Il file /etc/jesred.rules

 regex ^http://((.*)/debian/(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 regex ^http://((.*)/ubuntu/(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 regex ^http://((.*)/debian//(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 regex ^http://((.*)/ubuntu//(dists|pool)/.*)$ http://127.0.0.1:3142/\1
 
##upgrade-manager necessita anche queste due regole:
abort .gpg
abort ReleaseAnnouncement

Decommentare dal file /etc/jesred.acl la linea

0.0.0.0/0


Editare il file /etc/squid/squid.conf aggiungendo le seguenti linee tra quelle che incominciano per acl e quelle che incominciano con http_access

 cache_peer localhost parent 3142 7 proxy-only no-query no-netdb-exchange connect-timeout=15
 acl aptget browser -i apt-get apt-http apt-cacher apt-proxy
 acl deburl urlpath_regex /(Packages|Sources|Release|Translations-.*)\(.(gpg|gz|bz2))?$ /pool/.*/.deb$ 
 /(Sources|Packages).diff/ /dists/[^/]*/[^/]*/(binary-.*|source)/.
 cache_peer_access localhost allow aptget
 cache_peer_access localhost allow deburl
 cache_peer_access localhost deny all
 

(La terza e la quarta riga in realtà sono una riga sola)

Squid-Only

È possibile configurare Squid affinche si occupi direttamente della cache dei pacchetti deb.

Editare la configurazione base di squid (/etc/squid.conf) aggiungendo:

refresh_pattern deb$ 1577846 100% 1577846
refresh_pattern Packages.gz$ 1440 100% 1440
cache_dir ufs /var/spool/squid 15000 2 8
maximum_object_size 409600 KB

Squid risulterà quindi impostato per conservare per 3 anni qualsiasi file termini per "deb" e per 1 giorno quelli che terminano per "Packages.gz", la directory dove conservare i file sarà /var/spool/squid e non potrà crescere oltre i 15 GB, il limite di grandezza per singolo file sarà invece di 400 MB.