IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Muntatge pas a pas

De la web d'Ubuntu download (Debian es millor):

http://www.ubuntu.com/server/get-ubuntu/download

Es descarrega la versió d'Ubuntu 10.4 per a servidors. Un cop ha acabat la descàrrega es comprova amb:

$ cd
$ cd Baixades
$ md5sum ubuntu-10.04-server-amd64.iso 
8ee25c78f4c66610b6872a05ee9ad81b  ubuntu-10.04-server-amd64.iso

Segons:

https://help.ubuntu.com/community/UbuntuHashes

El Hash és correcte i no hi ha hagut cap problema amb la descarrega. Amb K3B cremem la ISO a un CD verge.

Iniciem el servidor amb el CD posat. Prèviament comprovem a la BIOS que tenim activada la càrrega del sistema des de CD abans que des de disc dur. Seleccionem l'idioma: catal. Al menú d'instal·lació per a més seguretat posem:

Comprovar que el CD és correcte.

Un cop acabada la comprovació i és correcte també comprovem la RAM:

Comprovació de la memòria

Un cop acabada la comprovació iniciem la Instal·lació:

Instal·la l'Ubuntu per a un servidor

Els primers apartats són la localització del sistema operatiu:

En el nostre exemple farem una instal·lació amb LVM:

LVM

Un cop aparegui el menú de tasksel seleccionem:

# Localització: Espanya, no autodetecció de teclat, Catalan Variant, Zona horària: Madrid 

A la detecció de la targeta de xarxa, com hi ha 4 targetes de xarxa s'ha hagut d'anar provant quina és la que agafa DHCP.

El particionat es automàtic amb LVM. A la partició de sistema li donem 100Gb.

Creem un usuari principal i no posem cap configuració al proxy.

Escollim sense actualitzacions automàtiques.

  1. Comprovar la RAM
  2. Localització: Spain, Catalan Variant, Zona Madrid

Per configurar la targeta de xarxa com hi han 4 s'ha anat provant quina agafava DHCP.

La partició s'ha utilitzat LVM disc sencer i s'ha especificat una mida de 100GB.

S'instal·la un usuari principal (sergi) i no es configura cap Proxy.

A la llista de paquets de tasksel hem escollit:

LAMP Server
Mail Server
OpenSSH Server
Bind (DNS) Server

Posem el password de l'usuari root de MySQL. L'últim pas és dir que si a instal·lar el GRUB al MBR. Reiniciem i trèiem el CD.

Arranquem i entrem amb l'usuari principal. El primer que fem és un upgrade:

$ sudo apt-get upgrade

Instal·lem programari bàsic que utilitzarem:

$ sudo apt-get install joe geany nmap ethtool

Canviem el nom de les interfícies de xarxa:

$ sudo joe /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
 
# PCI device 0x11ab:0x4364 (sky2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="90:e6:ba:0a:e9:ba", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="internet2"

# PCI device 0x11ab:0x4364 (sky2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="90:e6:ba:0a:f6:2f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="internet1"

# PCI device 0x11ab:0x4364 (sky2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="90:e6:ba:0a:f9:cd", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="intranet"  

# PCI device 0x11ab:0x4364 (sky2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="90:e6:ba:0a:f8:c7", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="internet3"


Mapping:

eth0 --> intranet  --> MAC: 90:e6:ba:0a:f9:cd
eth1 --> internet3 --> MAC: 90:e6:ba:0a:f8:c7
eth2 --> internet2 --> MAC: 90:e6:ba:0a:e9:ba
eth3 --> internet1 --> MAC: 90:e6:ba:0a:f6:2f

NOTA: Amb ethtool podem anar detectant quin port correspont a cada targeta de xarxa. Compte les interfícies no agafen link fins que no se'ls hi fa un $ sudo ifconfig ethx up (on x=1,2,3)

Posem una etiqueta a la caixa de la màquina explicant quin port dels 4 de la targeta de xarxa és cada cosa. Per no perdre la configuració de xarxa al tornar a iniciar:

$ sudo joe /etc/network/interfaces
...
auto intranet
iface intranet inet dhcp

Un cop ho tenim reiniciem el servidor per comprovar que canvia el nom a les targetes de xarxa:

$ sudo reboot

Possiblement haureu de tornar a obtenir Ip amb

$ sudo dhclient -r intranet
$ sudo dhclient intranet

Ho comprovem:

$ sudo ifconfig -a
[sudo] password for sergi: 
internet1 Link encap:Ethernet  HWaddr 90:e6:ba:0a:f6:2f  
          inet6 addr: fe80::92e6:baff:fe0a:f62f/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:460 (460.0 B)  TX bytes:468 (468.0 B)
          Interrupt:16 

internet2 Link encap:Ethernet  HWaddr 90:e6:ba:0a:e9:ba  
          inet6 addr: fe80::92e6:baff:fe0a:e9ba/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:642 (642.0 B)  TX bytes:468 (468.0 B)
          Interrupt:17 

internet3 Link encap:Ethernet  HWaddr 90:e6:ba:0a:f8:c7  
         inet6 addr: fe80::92e6:baff:fe0a:f8c7/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:168 (168.0 B)
          Interrupt:19 

intranet  Link encap:Ethernet  HWaddr 90:e6:ba:0a:f9:cd  
         inet addr:192.168.111.23  Bcast:192.168.111.255  Mask:255.255.255.0
          inet6 addr: fe80::92e6:baff:fe0a:f9cd/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:102 errors:0 dropped:0 overruns:0 frame:0
          TX packets:72 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:12478 (12.4 KB)  TX bytes:9503 (9.5 KB)
          Interrupt:18 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1421 (1.4 KB)  TX bytes:1421 (1.4 KB)


Ara configurem la targeta intranet de forma estàtica (la resta de targetes les configurarem segons les ADSL que hi haguin)

$ sudo joe /etc/network/interfaces
... 
iface intranet inet static
    address 192.168.0.1
    network 192.168.0.0  
    netmask 255.255.255.0  
    broadcast 192.168.0.255

NOTA: La veritat es que deixem estas línies comentades per que de moment estem fent la instal·lació a una xarxa que no té el rang de la xarxa on anirà realment la màquina

Creem una carpeta per guardar les configuracions a mida de la xarxa:

$ sudo mkdir -p /etc/network/custom
$ cd /etc/network/custom

Creem un fitxer per a guardar les llistes d'adreces IP que sortiran per cada ADLS de la xarxa:

$ sudo touch ips_internet1
$ sudo touch ips_internet2
$ sudo touch ips_internet3

NOTA: Els fitxers han de tenir el nom ips_nom_taula_rutes_corresponent

Editem els fitxers i posem a cada fitxers les IPs que pertoquin.

$ sudo joe routing.sh 

 #!/bin/bash
#Script de configuració

## Assegurem que està disponible l'ordre IP: instal·lació paquet iproute
apt-get install -y iproute 2> /dev/null

#Restaurar la xarxa i l'enrutament avançat a un punt conegut
#/etc/init.d/networking restart
/etc/network/custom/reset.sh

#ESQUEMA

#    /---------\        ISP1         +----------+
#   /-         -\     +--------------+          |
#  / Internet    |----|              | Firewall |----- Red Interna
#  \           -/     +--------------+          |
#   \          /      | ISP2         |          |
#    \        /-------|              |          |
#     \------/        +--------------+----------+
#                      ISP3
#
#
# ISP1 (internet1) Router ADSL Vodafone
# --------------------------------------
#  IP pública del router:         77.230.8.90
#  IP privada del router:         192.168.11.1
#  IP de la interficie internet1: 192.168.11.2
#   DNS:                          89.6.239.4
#   gateway:                      77.230.8.1 

# ISP2 (internet2) Router ZyXEL 660HW Telefonica
# ----------------------------------------------
#  IP pública del router:         80.32.57.101
#  IP privada del router:         monolloc estàtic
#  IP de la interficie internet1: 80.32.57.101                                                        
#   DNS1:                         80.58.61.250
#   DNS2: 			  80.58.61.254
#   gateway:                      80.32.57.65
#   Mask:                         255.255.255.192 
#   Network:                      80.32.57.101/26

# ISP3 (internet3) Router ZyXEL 660HW Telefonica
# ---------------------------------------------- 
#  IP pública del router:         217.126.36.116
#  IP privada del router:         monolloc estàtic                                                    
#  IP de la interficie internet1: 217.126.36.116                                                       
#   DNS1:                         80.58.61.250                                   
#   DNS2:                         80.58.61.254   
#   gateway:                      217.126.36.65                    
#   Mask:                         255.255.255.192 
#   Network:                      217.126.36.64/26

BASE_PATH=/etc/network/custom/
                                                        
#Indicar la llista dels noms de taules separades per espais
#WAN
tables="internet1 internet2 internet3"
wan_interfaces="internet1 internet2 internet3"
wan_ips="192.168.11.2 80.32.57.101 217.126.36.116"
wan_masks="255.255.255.0 255.255.255.192 255.255.255.192"
wan_networks="192.168.11.0/24 80.32.57.64/26 217.126.36.64/26"
wan_gateways="192.168.11.1 80.32.57.65 217.126.36.65"
#El default gateway s'expressa d'un manera o un altre segons sigui pppoe (ip dinàmica) o IP estàtica
wan_ppps="no no no"

#LAN
intranets_names="intranet"
intranets_networks="192.168.1.0/24"
intranets_interfaces="intranet"
intranets_ips="192.168.1.5"

#Afegir les taules de rutes pròpies

#Cal escollir un router ADSL com el router per defecte
default_gateway="192.168.11.1"
default_device="internet1"
default_is_ppp="false"

#default_gateway="80.32.57.101"
#default_device="internet2"
#default_is_ppp="true"

#ASIGNANT LES ADRECES IP
echo ""
echo "### Configurant les adreçes de xarxa... ###"
echo ""
y=1
for wan_interface in $wan_interfaces
 do
  echo " Configurant la interfície $wan_interface" 
  wan_ip=`echo $wan_ips | cut -d " " -f$y`     
  wan_mask=`echo $wan_masks | cut -d " " -f$y`
  echo "  Apagant la targeta de xarxa $wan_interface..."
  echo "   ifconfig $wan_interface down"
  ifconfig $wan_interface down
  echo "  Configurant la IP $wan_ip a la targeta de xarxa $wan_interface"    
  echo "   ifconfig $wan_interface $wan_ip netmask $wan_mask up"
  echo ""
  ifconfig $wan_interface $ip netmask $wan_mask up
  let y=y+1
 done

echo "" 
echo "### Configurant les ruta per defecte ###"
echo ""

#RUTA PER DEFECTE
if [ "$default_is_ppp" = "true" ]; then
 echo ""
 echo " Afegint la ruta per defecte amb PPP al dispositiu $default_device:"
 echo "  ip route add default dev $default_device scope link"
 ip route add default dev $default_device scope link 2> /dev/null
else
 echo " Afegint la ruta per defecte (gateway: $default_gateway) al dispositiu $default_device:"
 echo "  ip route add default via $default_gateway dev $default_device"
 ip route add default via $default_gateway dev $default_device 2> /dev/null
fi

echo ""

i=0
for table in $tables
 do
  echo "Configuring table $table..."
  line="20$i $table"
  #Només afegir la línia si no existeix
  if ! grep -q "$line" /etc/iproute2/rt_tables ; then
   echo "Adding table to rt_tables: echo $line >> /etc/iproute2/rt_tables ..."
   echo $line >> /etc/iproute2/rt_tables
  else
   echo "La Table $table ja existeix!" 
  fi
  let i=i+1
 done
 
# ESTABLIR LES DNS 

echo "## DNS"
echo " Establint les DNS. Copiant el fitxer ${BASE_PATH}resolv.conf a /etc/resolv.conf" 
echo ""

cp ${BASE_PATH}resolv.conf /etc/resolv.conf

#Afegir les normes (rules) que provoquen el source routing

#Exemple
#Adreces IP que sortiran per la primera taula
# cat ips_internet1 | while read $ip; do
#  ip rule add from $ip table table1 
# done

echo ""
echo "## Multigateway: Source routing. ##"
echo ""

i=1
for table in $tables
 do
  echo ""
  #Exemple: ip rule add from 80.32.57.101 table internet2
  wan_ip="$(echo $wan_ips | cut -d " " -f$i)"   
  echo " Afegint la norma: ip rule add from $wan_ip table $table..."
  ip rule add from $wan_ip table $table
  let i=i+1
 done  
 
echo ""
echo "### SOURCE ROUTING ###"
echo ""

#Iterar totes les taules i totes les IP o adreces de xarxa
#(una per línia als fitxers ips_NOMTAULA) de cada taula per tal de fer:
###### SOURCE ROUTING ######
for table in $tables
 do
  echo ""
  echo " Afegint les normes de la taula $table..."
  echo "  Llegint el fitxer ips_$table ..."
  cat ${BASE_PATH}ips_$table | while read ip;
   do
    echo "   Eliminant la norma si existeix: ip rule del from $ip table $table..."
    ip rule del from $ip table $table 2> /dev/null
    echo "   Afegint la norma: ip rule add from $ip table $table..."
    ip rule add from $ip table $table
   done
 done  
 
#Configurar les taules amb les rutes que pertoquen
#Estàtic o dinàmic
 
echo ""
echo "### Configurant les rutes de les taules ###"
echo "###########################################"
echo ""
 
l=1
for table in $tables
 do
  echo ""
  echo "################## TAULA: $table ############"
  echo " Configurant les rutes de la taula $table..."
  echo "#############################################"
  
  # $ ip route
  # Rutes externes:  
  # 80.32.57.64/26 dev internet2  proto kernel  scope link  src 80.32.57.101 
  # 192.168.11.0/24 dev internet1  proto kernel  scope link  src 192.168.11.2 
  #
  # Ruta interna:
  # 192.168.1.0/24 dev intranet  proto kernel  scope link  src 192.168.1.5
  #
  # DEFAULT GATEWAY:
  # default via 192.168.11.1 dev internet1
  
  echo "  Afegint rutes internes (intranets) ..."      
  
  for intranet in $intranets_names
   do
    intranet_network=`echo $intranets_networks | cut -d " " -f$l`
    intranet_interface=`echo $intranets_interfaces | cut -d " " -f$l`
    intranet_ip=`echo $intranets_ips | cut -d " " -f$l`
                              
    echo "  Afegint la ruta interna a la xarxa $intranet: "
    echo "   ip route add $intranet_network dev $intranet_interface proto kernel  scope link src $intranet_ip table $table"
    #Exemple: 172.16.0.0/22 dev alumnat  proto kernel  scope link  src 172.16.0.1 
    ip route add $intranet_network dev $intranet_interface proto kernel  scope link src $intranet_ip table $table 2> /dev/null
   done
   
   echo ""
   echo "  Afegint rutes externes (internets) ..."
   
   j=1
   for wan_interface in $wan_interfaces
    do
     wan_network=`echo $wan_networks | cut -d " " -f$j`
     wan_interface=`echo $wan_interfaces | cut -d " " -f$j`
     wan_ip=`echo $wan_ips | cut -d " " -f$j`
                                                
     echo "  Afegint la ruta externa a la xarxa $wan_interface: "
     echo "   ip route add $wan_network dev $wan_interface proto kernel  scope link src $wan_ip table $table"
     #Exemple: 80.32.57.64/26 dev internet2  proto kernel  scope link  src 80.32.57.101 
     ip route add $wan_network dev $wan_interface proto kernel  scope link src $wan_ip table $table 2> /dev/null
     let j=j+1       
    done
    
   # $ ip route
   # Rutes externes:  
   # 80.32.57.64/26 dev internet2  proto kernel  scope link  src 80.32.57.101 
   # 192.168.11.0/24 dev internet1  proto kernel  scope link  src 192.168.11.2 
   #
   # Ruta interna:
   # 192.168.1.0/24 dev intranet  proto kernel  scope link  src 192.168.1.5
   #
   # EFAULT GATEWAY:
   # default via 192.168.11.1 dev internet1
   
   
                                                        
   #Especificar el default gateway de la taula
   wan_gateway=`echo $wan_gateways | cut -d " " -f$l`
   wan_interface=`echo $wan_interfaces | cut -d " " -f$l`
   wan_ppp=`echo $wan_ppps | cut -d " " -f$l`
   
   echo ""                                                              
   echo "  Afegint la ruta per defecte (gateway) de la taula $table:"
   
   echo " wan_ppp: $wan_ppp"
                                                                     
   if [ "${wan_ppp}" == "yes" ];
    then
     echo "   PPP!"
     echo "   ip route add default dev $wan_interface  scope link table $table ..."
     #Exemple amb ppp: default dev ppp0  scope link 
     ip route add default dev $wan_interface  scope link table $table
    else
     echo "ip route add default via $wan_gateway dev $wan_interface table $table"
     #Exemple sense ppp: default via 192.168.0.1 dev intranet 
     ip route add default via $wan_gateway dev $wan_interface table $table
   fi
  let l=l+1
 done

# Flush de la cache

echo ""
echo " Fent un flush de la cache: ip route flush cache"
ip route flush cache
echo ""

#Aplicar els canvis a Squid 
/etc/init.d/squid3 reload


Feu l'script executable:

$ sudo chmod +x routing.sh

Per que s'executi al arrancar l'ordinador:

$ cat /etc/network/if-up.d/routing
#!/bin/bash
/etc/network/custom/routing.sh

Ara seguim els passos de:

Router_Linux_Seminari_Tortosa#Configuraci.C3.B3_de_l.27enrutament

Per tal de configurar l'encaminament.

Configuració del firewall: seguiu les passes de:

Router_Linux_Seminari_Tortosa#Configuraci.C3.B3_del_firewall
$ sudo apt-get install conntrack

Ara configureu les DNS:

#Router_Linux_Seminari_Tortosa#DNS

I tot seguit Squid

Router_Linux_Seminari_Tortosa#Configuraci.C3.B3_del_proxy

Maquinari

Sistema Operatiu

  • Ubuntu Server 10.04

Passos durant la instal·lació:

  • Comprovar que el CD no té defectes
  • Comprovar la RAM
  • Localització: Spain, Catalan Variant, Zona Madrid

Particionat:

Serveis a instal·lar

$ sudo tasksel install lamp-server
$ sudo tasksel install openssh-server

Xarxa

ADSLS

  • internet1:
  • Router ADSL Vodafone
  • IP pública del router: 77.230.8.90
  • IP Privada del router: 192.168.11.1
  • IP de la interficie internet1: 192.168.11.2
  • DNS:89.6.239.4
  • gateway: 77.230.8.1
  • internet2:
  • Router ZyXEL 660HW
  • Ip pública: 80.32.57.101
  • Ip privada: Configurat en monolloc estàtic
  • Gateway: 80.32.57.65
  • 217.126.36.116 --> 192.168.1.1


Configuració monolloc IP estàtica

Consulteu:


Connexió als routers ADSL des de fora de la xarxa

Podeu utilitzar un túnel SSH

$ ssh -L 6666:localhost:3128 ALGUNA_DE_LES_IP_EXTERNES_SEMINARI

Després configureu el Firefox per a navega a través de Proxy amb les dades:

  • IP: localhost
  • Port: 6666

Un cop configurat el proxy heu de posar la URL:

http://IP_INTERNA_ROUTER_ADSL

Per exemple

http://192.168.11.1

Ja teniu accés al router.

NOTA: Per que funcioni correctament s'ha afegit la ip 127.0.0.1 a la llista d'adreces no filtrades del proxy (recordeu que el proxy impedeix les connexions a webs per IP)

Dades de la xarxa

Configuració de l'enrutament

$ sudo joe /etc/network/if-pre-up.d/router
#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
$ sudo chmod +x /etc/network/if-pre-up.d/router

I executeu l'script un primer cop:

$ sudo /etc/network/if-pre-up.d/router

Podem utilitzar ethtool per a detectar les targetes de xarxa i podem canviar els noms de les targetes segons la seva MAC al fitxer:

/etc/udev/rules.d/70-persistent-net.rules

També seguint els passos de l'article Encaminament, s'ha desactivat rp_filter, activat ICMP redirect send i altres (si s'escau).

Com definir l'enrutament per IP d'origen

Cal editar els fitxers:

/etc/network/custom/ips_internet1
/etc/network/custom/ips_internet2
/etc/network/custom/ips_internet3

Cal aplicar els canvis a l'Squid:

$ sudo /etc/init.d/squid3 reload

Tot això funciona gràcies a que s'ha configurar el Policy Routing i es reparteix el trànsit web amb Load_Balancing#Squid_i_tcp_outgoing_address. Al fitxer:

/etc/network/custom/routing.sh

HI ha l'script que ho configura tot a l'inici. Consulteu Muntatge pas a pas.

Configuració del firewall

El firewall utilitzat és iptables.

Creem el fitxer amb la configuració del firewall, abans de posar normes guardem una configuració amb el firewall sense normes.

$ sudo mkdir -p /etc/firewall
$ sudo iptables -A INPUT -p icmp -j ACCEPT
$ sudo bash -c "iptables-save > /etc/firewall/firewall.conf.buit"
$ cat /etc/firewall/firewall.conf.buit
# Generated by iptables-save v1.4.4 on Sat Mar 26 18:27:13 2011
*filter
:INPUT ACCEPT [223:17939]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [115:12860]
-A INPUT -p icmp -j ACCEPT 
COMMIT
# Completed on Sat Mar 26 18:27:13 2011

Elimineu la línia:

-A INPUT -p icmp -j ACCEPT

I ja teniu una configuració buida. També feu:

$ sudo iptables -D INPUT -p icmp -j ACCEPT
$ sudo bash -c "iptables-save > /etc/firewall/firewall.conf.buit"

Ara ja podem crear la configuració bona:

$ sudo joe /etc/firewall/firewall.conf

Li posem el següent contingut:

 # Generated by iptables-save v1.4.4 on Wed Jun 30 18:43:43 2010
*nat
:PREROUTING ACCEPT [9:664]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

#Redireccionar les connexions HTTP a una pàgina on s'explica com configurar el Proxy excepte per a la màquina 192.168.1.2
#-A PREROUTING -p tcp -i intranet -d! 192.168.0.0/255.255.0.0 -s! 192.168.1.2 --dport 80 -j DNAT --to 192.168.1.1:80

#DNAT: Exemple per accedir a un servidor web intern obrint ports. Ip pública: 79.148.245.229 accesible des de internet3
#-A PREROUTING -p tcp -i internet3 -d 79.148.245.229 --dport 88 -j DNAT --to 192.168.0.108:80
#-A PREROUTING -p tcp -i internet3 -d 79.148.245.229 --dport 445 -j DNAT --to 192.168.0.108:443

#Com es faria un proxy transparent a les xarxes alumnat
#-A PREROUTING -i intranet -s 192.168.1.0/24 ! -d 192.168.0.0/16 -p tcp --dport 80 -j REDIRECT --to-port 3128


#Si tenim source routing i enviem alguna paquets segons la IP d'origen a un router ADSL que no estigui en monolloc
#hem de fer SNAT.
#Encara no se per que però
#Segons: http://andthatsjazz.org/lartc/MultihomedLinuxNetworking.html
#Millor no utilitzar MASQUERADE amb multipath
#-A POSTROUTING -s 192.168.30.0/24 -d 213.176.160.0/255.255.224.0 -o intranet -j MASQUERADE
#-A POSTROUTING -s 192.168.30.0/24 -o intranet ! -d 192.168.0.0/16 -j MASQUERADE

#192.168.0.4 és la IP de la targeta de xarxa que està connectada al router de sortida
#192.168.30.0/24 són las IPs a les que sels aplica source routing
#-A POSTROUTING -s 192.168.30.0/24 -o intranet ! -d 192.168.0.0/16 -j SNAT --to-source 192.168.0.4

#monolloc IP estàtica: Només cal activar el NAT
#-A POSTROUTING -s 192.168.1.0/24 -o internet3 -j MASQUERADE

#monolloc IP dinàmica: aleshores hi haurà una o varies interfície pppx
#-A POSTROUTING -s 192.168.1.0/24 -o pppx -j MASQUERADE

COMMIT
# Completed on Wed Jun 30 18:43:43 2010
# Generated by iptables-save v1.4.4 on Wed Jun 30 18:43:43 2010
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [359:51707]

#Permetre peticions ja permeses o paquets input que són respostes
#a peticions fetes des d'aquesta màquina
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#Accés al servidor DNS només des de Intranet
-A INPUT -i intranet -p udp -m udp --dport 53 -j ACCEPT

#Accés al proxy
-A INPUT -i intranet -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 3128 -j ACCEPT
#Obrir accés a tot des de localhost
-A INPUT -i lo -j ACCEPT
 
#Obrir port 137 per rebre peticions de nom de xarxa Windows
-A INPUT -i intranet -p udp -m udp --dport 137 -j ACCEPT

#ACCES A LA WEB des de totes les interficies
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#Acceptar pings explicitament però també ICMP:
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT
-A INPUT -p icmp -j ACCEPT


##Accés a SSH: desde intranet els ports 222 i 222 i des de l'exterior només 222
-A INPUT -i intranet -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i intranet -p tcp -m tcp --dport 222 -j ACCEPT

-A INPUT -i internet1 -p tcp -m tcp --dport 222 -j ACCEPT
-A INPUT -i internet2 -p tcp -m tcp --dport 222 -j ACCEPT
-A INPUT -i internet3 -p tcp -m tcp --dport 222 -j ACCEPT
-A INPUT -j LOG --log-prefix="[firewall] DROPED INPUT: "
-A INPUT -j DROP


################
# FORWARD      #
################

#Permetre peticions ja permeses o paquets input que són respostes
#a peticions fetes des d'aquesta màquina
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

#NOTA: No acceptem trànsit web: tothom a de navegar mitjçant el proxy

#Accés a servidors de DNS externs
#TODO: Posar les IPs dels utilitzats-> Permet fer-se una idea de l'ús de servidors externs de DNS
-A FORWARD -p udp -m udp --dport 53 -j ACCEPT

#Servidors SSH concrets. Exemple comentat:
#-A FORWARD -p tcp -m tcp --dport 22 -d 87.98.230.185 -j ACCEPT

#Acceptar pings explicitament però també ICMP:
-A FORWARD -p icmp --icmp-type echo-request -j ACCEPT
-A FORWARD -p icmp -j ACCEPT

#Aplicacions i ports especifics: TODO

# FTP
#-A FORWARD -p tcp --dport 21 -j ACCEPT
#-A FORWARD -p tcp --sport 21 -j ACCEPT

#SMTP GMAIL
-A FORWARD -p tcp --dport 465 -j ACCEPT
-A FORWARD -p tcp --sport 465 -j ACCEPT

# IMAP GMAIL
-A FORWARD -p tcp --dport 993 -j ACCEPT
-A FORWARD -p tcp --sport 993 -j ACCEPT

# POP3 GMAIL
-A FORWARD -p tcp --dport 995 -j ACCEPT
-A FORWARD -p tcp --sport 995 -j ACCEPT 
#POP, SMTP i IMAP entrada/sortida
-A FORWARD -p tcp --dport 25 -j ACCEPT
-A FORWARD -p tcp --dport 110 -j ACCEPT
-A FORWARD -p tcp --dport 143 -j ACCEPT

#Impedir tota la resta fent log dels paquets blocats
-A FORWARD -j LOG --log-prefix="[firewall] DROPPED FORWARD: "
-A FORWARD -j DROP

COMMIT
# Completed on Wed Jun 30 18:43:43 2010

Per tal que les normes s'executin a l'arrancada:

$ sudo joe /etc/network/if-pre-up.d/iptables

Afegiu:

#!/bin/sh
iptables-restore < /etc/firewall/firewall.conf

I feu-lo executable:

$ sudo chmod +x /etc/network/if-pre-up.d/iptables

Propostes

DROP INVALID Packages:

$ sudo iptables -A INPUT   -m state --state INVALID -j DROP
$ sudo iptables -A OUTPUT  -m state --state INVALID -j DROP
$ sudo iptables -A FORWARD -m state --state INVALID -j DROP
Ok. Fet! --> --acacha 12:11, 3 jul 2010 (UTC)

conntrack

$ sudo apt-get install conntrack

DNS

El servidor de DNS només es de tipus cache. Només cal configurar els forwarders:

$ sudo joe /etc/bind/named.conf.options 
...
        // forwarders {
       //      0.0.0.0;
       // };

Cal descomentar i posar les IP del ADSL del ISP que tingueu contractat. Per exemple:

   forwarders {
               80.58.61.250;80.58.61.254;
        };

Configuració del proxy

El proxy a configurar és Squid.

Instal·lació:

$ sudo apt-get install squid3 squid3-client squidguard

Configuració

$ cd /etc/squid3/
$ sudo bash -c  "cat squid.conf | grep -v '^#\|^$\|^;' > squid.conf.ok"
$ sudo mv squid.conf squid.conf.original
$ sudo mv squid.conf.ok squid.conf

Editem el fitxer:

$ sudo joe squid.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT

# MSN Messenger
acl msn urlpath_regex -i gateway.dll
acl msnd dstdomain messenger.msn.com gateway.messenger.hotmail.com
acl msn1 req_mime_type application/x-msn-messenger

#Xarxa de proves casa Sergi Tur. ES pot eliminar
acl casasergi src 192.168.111.0/24

#Xarxa 192.168.1.0/24
acl seminari src 192.168.1.0/24

#Llista de màquines que accedeixen a Internet per l'Internet1
#Calcular automàticament
#acl internet1 ...
#acl internet1
#acl internet3
#acl internet4

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost

http_access deny msnd
http_access deny msn
http_access deny msn1


http_access allow seminari
http_access allow casasergi

redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
redirect_children 50

http_access deny all
icp_access deny all
htcp_access deny all
http_port 3128

hierarchy_stoplist cgi-bin ?

access_log /var/log/squid3/access.log squid

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern (cgi-bin|\?)    0       0%      0
refresh_pattern .               0       20%     4320
icp_port 3130
coredump_dir /var/spool/squid3

visible_hostname copseminari

#Errors en català
error_directory /usr/share/squid-langpack/ca

Cada cop que modifiqueu el fitxer podeu comprovar la sintaxi amb:

$ sudo squid3 -k parse

Per tal de suportar user-agent i snmp recompilem squid:

Obtenim el codi font:

$ cd /usr/src
$ sudo apt-get build-dep squid3
$ sudo apt-get install libssl-dev
$ sudo apt-get -b source squid3

Ara cal modificar les opcions per defecte de compilació canviant el paràmetre DEB_CONFIGURE_EXTRA_FLAGS:

IMPORTANT: Segons la versió de codi font que hagiu baixat el nom de la carpeta pot ser diferent

$ sudo joe squid3-3.0.STABLE19/debian/rules
...
 DEB_CONFIGURE_EXTRA_FLAGS := --datadir=/usr/share/squid3 \
               --sysconfdir=/etc/squid3 \
               --mandir=/usr/share/man \
               --with-cppunit-basedir=/usr \
               --enable-inline \
               --enable-async-io=8 \
               --enable-storeio="ufs,aufs,diskd,null" \
               --enable-removal-policies="lru,heap" \
               --enable-delay-pools \
               --enable-cache-digests \
               --enable-underscores \
               --enable-icap-client \
               --enable-follow-x-forwarded-for \
               --enable-auth="basic,digest,ntlm,negotiate" \
               --enable-basic-auth-helpers="LDAP,MSNT,NCSA,PAM,SASL,SMB,YP,getpwnam,multi-domain-NTLM" \
               --enable-ntlm-auth-helpers="SMB" \
               --enable-digest-auth-helpers="ldap,password" \
               --enable-negotiate-auth-helpers="squid_kerb_auth" \  
               --enable-external-acl-helpers="ip_user,ldap_group,session,unix_group,wbinfo_group" \
               --enable-arp-acl \
               --enable-snmp \
               --enable-useragent-log \
               --with-filedescriptors=65536 \
               --with-large-files \
               --with-default-user=proxy


Compilem i instal.lem:

$ sudo apt-get -b source squid3
$ sudo apt-get install squid-langpack
$ sudo dpkg -i squid*.deb

NOTA: Si heu canviat el fitxer de configuració i us diu que hi ha una nova versió, segurament el que voldreu fer és conservar la vostra versió amb les modificacions (opció per defecte)

TODO:

Com fer que no s'actualitzi la versió d'Squid? O encara millor com fer que al actualitzar es torni a compilar, a l'estil del que fa VirtualBox amb dkms. Fer un script almenys per tal d'automatitzar-ho una mica més
També es podria posar la petició a Ubuntu packages per tal que incorporessin el user-agent a la compilació.

Ara podeu comprovar que té activat useragent

$ squid3 -v | grep agent
...
acl-helpers=ip_user,ldap_group,session,unix_group,wbinfo_group' '--enable-arp-acl' '--enable-snmp' '--enable-useragent-log' '--with-filedescriptors=65536' 
...

Ara cal bloquejar les actualitzacions. Marqueu el paquet com a hold per que no s'actualitzin els paquets, cal fer-ho amb els gestors de paquets possibles (en el nostre cas aptitude i apt-get):

$ sudo aptitude hold squid3 squid-cgi squid3-cgi squid3-common squid3-dbg squidclient
$ sudo aptitude update
$ sudo aptitude safe-upgrade

IMPORTANT: Si bloquejem el paquet per a aptitude no tindrà efecte a apt-get i viceversa.

$ sudo bash -c "echo squid3 hold | dpkg --set-selections"
$ sudo bash -c "echo squid3-cgi hold | dpkg --set-selections"
$ sudo bash -c "echo squid3-common hold | dpkg --set-selections"
$ sudo bash -c "echo squid3-dbg hold | dpkg --set-selections"
$ sudo bash -c "echo squidclient hold | dpkg --set-selections"
$ sudo apt-get update
$ sudo apt-get upgrade

Configuració d'squidguard:

$ sudo apt-get install squidguard
$ sudo -s
# mkdir -p /var/ipcop/urlfilter
# cd /var/ipcop/urlfilter
# wget http://acacha.org/~sergi/Squid/squidguard/blacklists.tar.gz
# tar xvzf blacklists.tar.gz
# chown -R proxy:proxy /var/ipcop/urlfilter/blacklists/
# chown proxy:proxy /etc/squid/squidGuard.conf
# chown -R proxy:proxy /var/log/squid/
# cd /etc/squid/
# mv /etc/squid/squidGuard.conf /etc/squid/squidGuard.conf.original
# wget -N http://acacha.org/~sergi/Squid/squidguard/squidGuard.conf

Després hem afegit les excepcions de les màquines que no han de tindre filtres:

$ sudo joe /etc/squid/squidGuard.conf
...
  src servidors {
     ip 192.168.1.5 192.168.1.6 192.168.1.7 192.168.1.8 192.168.1.9 192.168.1.10
  }
...

    servidors {
       pass all
       rewrite rew-rule-2
   }

Creeu la carpeta per als fitxers de log:

$ sudo mkdir /var/log/squidGuard
$ sudo chown proxy:proxy /etc/squid/squidGuard.conf

I apliqueu els canvis a Squid

$ sudo /etc/init.d/squid3 reload

IMPORTANT: Cal canviar la URL de la redirecció a la que s'envien les pàgines no permeses i també el gif transparent al que s'envien les pàgines d'anuncis!:

dest ads {
    domainlist     ads/domains
    urllist        ads/urls
    redirect       1x1.gif
    logfile        urlfilter.log
}   
...
default {
       pass custom-allowed !in-addr !ads !adv !aggressive !audio-video !automobile_bikes !automobile_boats !automobile_cars !automobile_planes !chat !dating !drugs ...
       rewrite rew-rule-1
       redirect 302:http://192.168.1.5/normes/normesUsAules.html
}


squid_rrd

calamaris

$ sudo apt-get install calamaris

Al instal·lar calamaris automàticament se us ha instal·lat un tasca de cron:

/etc/cron.daily/calamaris

Que executa cada dia un script que es configura al fitxer:

$ cat /etc/calamaris/cron.conf

El fitxer el canviem i el deixem de la següent forma:

$ sudo joe /etc/calamaris/cron.conf
...
# cat:mailto:webto:todo:title
daily:[email protected]:/var/www/calamaris/daily/index.html:both:'Squid diari'
weekly:[email protected]:/var/www/calamaris/weekly/index.html:both:'Squid setmanalment'
monthly:[email protected]:/var/www/calamaris/monthly/index.html:both:'Squid mensual'
# what log files should be parsed: [auto|squid|oops]
#       auto: tries to find the log files in this order: squid, oops
#       squid: parses a squid log file if available
#       oops: parses a oops log file if available
cache=squid3

També canviem la variable CALAMARISOPTIONS al fitxer /etc/cron.daily/calamaris :

$  sudo joe /etc/cron.daily/calamaris
...
CALAMARISOPTIONS="--size-distribution-report 10 --domain-report 500 --performance-report 60 --requester-report 500 --requester-report-use-user-info 
--requester-report-with-targets 15 --status-report --type-report 20 --response-time-report \
--errorcode-distribution-report -f auto --config-file ${CALAMARIS_CONF_FILE}"

I si no existeix la carpeta:

/var/www/calamaris/

La creeu amb:

$ sudo mkdir -p /var/www/calamaris/

També cal canviar el fitxer /etc/cron.daily/calamaris:

$ sudo joe /etc/cron.daily/calamaris

Busqueu les referències a squid i les canvieu a squid3:

...
# look for cache log files  
if [ "$CACHE" = "auto" ]; then
    if [ -r /var/log/squid3/access.log ]; then
       CACHE=squid3
       CACHELOGDIR=/var/log/squid3

Com veureu es creen automàticament unes pàgines web a:

/var/www/calamaris

A les qual podeu accedir (si teniu la configuració d'Apache per defecte) amb:

http://IP_SERVIDOR_PROXY/calamaris

Exemples

Com saber quines pàgines s'estan visitant en temps real

$ sudo tail -f /var/log/squid3/access.log

Com saber quines s'estan bloquejant en temps real

$ sudo tail -f /var/log/squidGuard/urlfilter.log

Per exemple si voleu només veure el trànsit de la IP local 192.168.1.10

$ sudo tail -f /var/log/squid3/access.log | grep 192.168.1.10

Com permetre una pàgina bloquejada

Si és un domini (p. ex. el-mundo.net ) cal editar el fitxer:

$ sudo joe /var/ipcop/urlfilter/blacklists/custom/allowed/domains

Si és una URL (www.yahoo.es/sexo) cal editar el fitxer:

$ sudo joe /var/ipcop/urlfilter/blacklists/custom/allowed/urls

IMPORTANT: No posar el http a les URL

I al final afegir la URL o el domini (un per línia).

Abans de reiniciar, comproveu que tot és correcte

$ sudo squid3 -k parse
$ sudo su proxy
$ squidGuard -C all
$ /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
...

Ara podeu aplicar els canvis:

$ sudo /etc/init.d/squid3 reload

IMPORTANT: Feu un reload i no pas un restart

Hora

$ date

Es pot comparar el desfase amb

http://www.time.is

Es pot sincronitzar l'hora amb:

$ sudo ntpdate ntp.ubuntu.com

Ara instal·lem el servidor d'hora:

$ sudo apt-get install ntp

Editem la configuració

$ sudo joe /etc/ntp.conf 

Afegim la línia:

server pool.ntp.org

Apliquem els canvis:

$ sudo /etc/init.d/ntp restart

Comprovem que funciona amb:

$ sudo ntpq -pn

Cal tenir en comptes les normes del firewall.

Nosaltres per què funcioni tenim:

#Obrir accés a tot des de localhost
-A INPUT -i lo -j ACCEPT    

Monitorització

Estadístiques del Sistema. Sysstat i acct

$ sudo apt-get install sysstat acct
$ sudo dpkg-reconfigure sysstat

Contesteu si per activar cron.

Monitorizació del maquinari. lm-sensors

$ sudo apt-get install lm-sensors
$ sudo apt-get install smartmontools


Monitorització del trànsit

$ sudo apt-get install iptraf

Munin

$ sudo apt-get install munin

Cacti

$ sudo apt-get install cacti

Està instal·lar i configurat. Només cal afegir dispositius i afegir un usuari per que ho gestioni la gent del seminari.

Ntop

$ sudo apt-get install ntop
$ sudo dpkg-reconfigure ntop

Posades com a targetes de xarxa:

intranet,internet1,internet2,internet3

El primer cop per posar la paraula de pas de l'admin de ntop:

$ sudo ntop

Un cop posada la paraula de pas feu Ctrl+C i:

$ sudo /etc/init.d/ntop restart

NOTA: Les targetes de xarxa ha d'estar configurades

Nagios3

$ sudo apt-get install nagios3
$ sudo htpasswd /etc/nagios3/htpasswd.users nagiosadmin

Ja està instal·lat amb usuari d'accés nagiosadmin.

Vegeu també:

Altres serveis

SSH

$ sudo joe /etc/ssh/sshd_config

Afegiu la línia:

Port 222

Apliqueu els canvis:

$ sudo /etc/init.d/ssh restart

Això ho fem per not utilitzar el port 222 des d'Internet (rep continues visites de robots sense bones intencions ;-))

Mediawiki

Conté la documentació de la posada en marxa i configuració del servidor. Allotjada al servidor extern:

http://acacha.org/mediawiki

TODO

Treball en equip