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)

En aquest article hi ha algunes notes del que s'ha fer a l'Institut de l'Ebre per crear un tallafocs pels alumnes del departament d'informàtica.

Convenis

Al referir-nos a la màquina parlarem domU ens referirem a un exemple concret: tallafocsASI. Aquest nom es pot canviar a la configuració de xen.

Xen

El tallafocs està instal·lat sobre un servidor virtual Xen (DomO Debian 5.0).

Consulteu Xen

I

http://www.iesebre.com/manteniment/index.php/Xen#Quan_ja_tenim_una_imatge_b.C3.A0sica_amb_tar.gz
$ sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
...
tallafocsASI                                 7   512     1     -b----     66.1

Per connectar-si:

$sudo xm console tallafocsASI

Per aturar-la:

$ sudo xm destroy -c tallafocsASI

Per executar-la:

$ sudo xm create -c tallafocsASI

Configuració de la xarxa Xen. dom0

La màquina dom0 és Servidor:INSEbreXen1.

Targetes de xarxa:

$ sudo lspci -nn | grep Ethernet

Integrada a la placa mare:

03:00.0 Ethernet controller [0200]: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet [14e4:164c] (rev 12)

PCI Express simple:

06:00.0 Ethernet controller [0200]: Intel Corporation 82574L Gigabit Network Connection [8086:10d3]

Quad port Intel:

0b:00.0 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller (Copper) [8086:10bc] (rev 06)
0b:00.1 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller (Copper) [8086:10bc] (rev 06)
0c:00.0 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller (Copper) [8086:10bc] (rev 06)
0c:00.1 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller (Copper) [8086:10bc] (rev 06)

Dual Intel:

10:00.0 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller [8086:105e] (rev 06)
10:00.1 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller [8086:105e] (rev 06)

Adreces MAC:

$ sudo ifconfig -a | grep HW | grep eth

Targeta dual Intel:

eth0      Link encap:Ethernet  HWaddr 00:1f:29:5e:bc:c2  
eth1      Link encap:Ethernet  HWaddr 00:1f:29:5e:bc:c3  

Targeta integrada:

eth2      Link encap:Ethernet  HWaddr 00:22:64:98:89:d0  


Targeta quad:

eth3      Link encap:Ethernet  HWaddr 00:15:17:dd:c1:b8  
eth4      Link encap:Ethernet  HWaddr 00:15:17:dd:c1:ba  
eth5      Link encap:Ethernet  HWaddr 00:15:17:dd:c1:bb  
eth6      Link encap:Ethernet  HWaddr 00:15:17:dd:c1:b9  

PCI Express Intel.

eth7      Link encap:Ethernet  HWaddr 00:1b:21:53:88:70  


$ cat /usr/share/nmap/nmap-mac-prefixes | grep "001517"
001517 Intel Corporate
eth0 (intranet)    --> 192.168.0.13
eth1 (aula201)     --> 192.168.201.1
eth2 (aula202)     --> 192.168.202.2
eth3 (aula203)     --> 192.168.203.2
eth4 (aula204)     --> 192.168.204.2
eth5 (futura aula) --> ??? o elèctrics?
eth6 (internet)    --> 192.168.99.2
eth7 (guifi)       --> 10.36.253.3

Configuració de la xarxa Xen. domU

La màquina virtual a de tenir n targetes de xarxa on n és igual a:

n = nº aules + 3

Les 3 targetes extres corresponen a la connexió cap a la resta de la xarxa i a la connexió cap a Internet (ADSL) i finalment la connexió cap a guifi.net

nota: Hi ha la possibilitat de crear interfícies virtuals. Per exemple el router ADSL i el supernode guifi.net poden estar connectats al mateix segment de xarxa i 
connectats tots dos a la mateixa targeta de xarxa del encaminador Linux. Aquesta targeta tindria dos IP, una amb IP Aliasing.

Adreces IP:

De les aules, sempre:

  • IP x.1: Gateway (domU)
  • x.2: Accés al domO

Gràfic ASCII (TODO)

      intranet(servidors)                              aula1(aula 20.2)         ... resta aules (20.3, 20.4       internet (per ADSL i guifi.net)
       |                                                     |                                                           |
 +-----+-----------------------------------------------------+-----------------------------------------------------------+---------------+ 
 |     |                                                     |                                                           |               |
 | +---+-------------------------+ +-------------------------+--------+                                                  +               |
 | |   |                         | |                         |        |                                                  |               |
 | | peth0                       | |                       peth1      |                                                 peth4            |
 | |                             | |                                  |                                                                  |
 | | eth0         vif1.0  vif1.1 | |  vif2.0  vif2.1       eth1       |                                                 eth4             |
 | |192.168.0.13    |       |    | |    |       |     192.168.202.2   |                                             192.168.190.3        |
 | +---^------------+-------+----+ +----+-------+------------^--------+                                                                  |
 |     |            |       |           |       |            |          |
 |     |     +------+-------+-----------+-------+------+     |          |
 |     |     |      |       |           |       |      |     |          |
 |     |     | +----+-------+----+ +----+-------+----+ |     |          |
 |     |     | |    |       |    | |    |       |    | |     |          |
 |     |     | |  eth0    eth1   | |  eth0    eth1   | |     |          |
 |     |     | |    |       |    | |    |       |    | |     |          |
 |   +-+-+   | |  +-+-+   +-+-+  | |  +-+-+   +-+-+  | |   +-+-+        |
 |   |   |   | |  |   |   |   |  | |  |   |   |   |  | |   |   |        |
 |  www ssh  | | www ssh ftp pop | | www ssh ftp pop | |  ftp pop       |
 |           | |                 | |                 | |                |
 |  Domain0  | |     Domain1     | |     Domain2     | |  Domain0       |
 +-----------+ +-----------------+ +-----------------+ +----------------+

Dom0

Maquinari i tipus de targetes

Té 5 targetes físiques, 6 virtuals:

eth0 (intranet) --> 192.168.0.13  --> 00:1f:29:5e:bc:c2
eth1 (aula1)    --> 192.168.202.1 --> 00:1f:29:5e:bc:c3
eth2 (aula2)    --> 192.168.203.1 --> 00:22:64:98:89:d0
eth3 (aula3)    --> 192.168.204.1 --> TODO
eth4 (internet) --> TODO
eth4:1 (guifi)  --> TODO

Models de les targetes, maquinari:

$ lspci -nn  | grep Ethernet
03:00.0 Ethernet controller [0200]: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet [14e4:164c] (rev 12)
0f:00.0 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller [8086:105e] (rev 06)
0f:00.1 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller [8086:105e] (rev 06)

Targeta integrada a la placa:

Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet [14e4:164c]

Targeta PCI-e dual Ethernet Intel:

0f:00.0 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller [8086:105e] (rev 06)
0f:00.1 Ethernet controller [0200]: Intel Corporation 82571EB Gigabit Ethernet Controller [8086:105e] (rev 06)

TODO

$ cat /etc/udev/rules.d/70-persistent-net.rules
...
# PCI device 0x8086:0x105e (e1000e)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1f:29:5e:bc:c3", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x8086:0x105e (e1000e)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1f:29:5e:bc:c2", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"  

# PCI device 0x14e4:0x164c (bnx2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:22:64:98:89:d0", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
Configuració
Consulteu: Xen#Configuraci.C3.B3_de_la_xarxa

Per defecte només s'inicia un bridge i es fa amb la targeta de xarxa que està connectada al gateway per defecte. Nosaltres volem tenir un bridge per cada targeta de xarxa i la màquina virtual tindrà una targeta connectada a cada bridge. Hem de modificar la configuració del servidor Xen:

$ cat /etc/xen/xend-config.sxp
(xend-relocation-server no) 
(xend-relocation-hosts-allow ) 
(network-script 'my-network-script')
(vif-script vif-bridge) 
(dom0-min-mem 196) 
(dom0-cpus 1)  

On my-network-script es troba a la carpeta /etc/xen/scripts:

$ cat /etc/xen/scripts/my-network-script
#!/bin/sh
dir=$(dirname "$0")
"$dir/network-bridge" "[email protected]" vifnum=0 netdev=eth0
"$dir/network-bridge" "[email protected]" vifnum=1 netdev=eth1
"$dir/network-bridge" "[email protected]" vifnum=2 netdev=eth2
"$dir/network-bridge" "[email protected]" vifnum=3 netdev=eth3
"$dir/network-bridge" "[email protected]" vifnum=4 netdev=eth4
...

NOTA: Per defecte el bridge agafa el nom de la interfície de xarxa (netdev)

Abans de reiniciar la configuració de xarxa/Xen cal apagar les targetes de xarxa:

$ sudo ip link set eth1 down

Podeu tornar a iniciar la màquina o:

$ sudo /etc/init.d/xend restart

Ara si executeu:

$ sudo brctl show
bridge name	bridge id		STP enabled	interfaces
eth0		8000.001f295ebcc2	no		peth0 
							vif13.0 
							vif14.0
							vif15.0 
							vif40.0
eth1		8000.001f295ebcc3	no		peth1
							vif40.1
...

domU

Les MAC de les domU sempre tenen el prefix:

00:16:3E

I les podem escollir lliurament.

00:16:3E:00:AB:00  --> vifX.0      eth0 --> intranet --> 192.168.0.13
00:16:3E:00:AB:01  --> vifX.1      eth1 --> aula1    --> 192.168.202.1
00:16:3E:00:AB:02  --> vifX.2      eth2 --> aula2    --> 192.168.203.1
00:16:3E:00:AB:03  --> vifX.3      eth3 --> aula3    --> 192.168.204.1
00:16:3E:00:AB:04  --> vifX.4      eth2 --> internet --> 192.168.?

Al fitxer de configuració de la màquina virtual (domU):

 
 $ sudo cat  /etc/xen/tallafocsASI 
 bootloader = '/usr/lib/xen-3.2-1/bin/pygrub'
 memory = 512
 name = 'tallafocsASI'
 #vif=[ 'mac=00:16:3E:00:AB:00,bridge=eth0','mac=00:16:3E:00:AB:01,bridge=eth1', 'mac=00:16:3E:00:AB:02,bridge=eth2', 'mac=00:16:3E:00:AB:03,bridge=eth3',  
 'mac=00:16:3E:00:AB:04,bridge=eth4']
 #vif = [ 'mac=00:16:3E:00:07:01, bridge=eth0' ]          # replace with DomU's IP
 vif=[ 'mac=00:16:3E:00:AB:00, bridge=eth0', 'mac=00:16:3E:00:AB:01,bridge=eth1']
 disk = [ 'phy:/dev/xen_vm/tallafocsASI,xvda1,w','phy:/dev/xen_vm/tallafocsASIswap,xvda2,w' ]

Per canviar el nom de les interfícies de xarxa:

$ cat /etc/udev/rules.d/70-persistent-net.rules
...
# Virtual network (eth0--> intranet)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:3E:00:AB:00", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="intranet"  

# Virtual network (eth1--> aula1)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:3E:00:AB:01", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="aula1"

# Virtual network (eth2--> aula2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:3E:00:AB:02", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="aula2"

# Virtual network (eth3--> aula3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:3E:00:AB:03", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="aula3"

# Virtual network (eth4--> internet)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:3E:00:AB:04", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="internet"

IMPORTANT: sembla que el alguns casos no canvi el nom de les interfícies de xarxa durant l'arrancada. Es pot forçar targeta a targeta amb:

$ sudo joe /etc/network/if-pre-up.d/rename_interfaces 
#!/bin/bash
echo add > /sys/class/net/eth0/uevent 
echo add > /sys/class/net/eth1/uevent
echo add > /sys/class/net/eth2/uevent
...
$ sudo chmod +x /etc/network/if-pre-up.d/rename_interfaces 

Altres ordres que ho permeten són:

# echo add > /sys/class/net/eth0/uevent

es pot veure al fitxer de log que canvia:

# tail -f /var/log/messages 
...
Feb 27 16:21:24 tallafocsASI kernel: [  316.621323] udev: renamed network interface eth0 to intranet

El fitxer interfaces ha de tenir els nous noms:

$ cat /etc/network/interfaces
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information. 

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto intranet
iface intranet inet static
    address 192.168.0.46        # ip DomU
    netmask 255.255.255.0
    gateway 192.168.0.1     #gateway al bridge

# The primary network interface
auto aula1
iface aula1 inet static
    address 192.168.7.1        # ip DomU
    netmask 255.255.255.0
...

Configuració de la xarxa

Configuració inicial Xen:

# cat /etc/network/interfaces
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.

# The loopback network interface
auto lo
iface lo inet loopback 

# The primary network interface
auto eth0
iface eth0 inet static
    address 192.168.0.46        # ip DomU
    netmask 255.255.255.0
    gateway 192.168.0.1     #gateway al bridge

Configuració final:

5 targetes de xarxa:

Aula 20.2: connecta amb l'aula 20.2
Aula 20.3: connecta amb l'aula 20.3
Aula 20.4: connecta amb l'aula 20.4
Internet: connecta amb el router ADSL i d'aquí cap a Internet
Insebre: connecta amb la resta de xarxa de l'Institut

Com que l'objectiu és poder utilitzar la configuració en altres màquines, la configuració genèrica és:

Aula 20.2 --> aula1
Aula 20.3 --> aula2
Aula 20.4 --> aula3
Altres aules... 
Internet  --> internet
Insebre   --> intranet

A les targetes de xarxa se les anomena amb els codis genèrics de la dreta. Per canviar el nom de les interfícies de xarxa consulte Canviar el nom d'una interfície de xarxa.

Configuració de l'encaminament

Per activar ip_forwarding de forma permanent, a la carpeta:

/etc/network/if-up.d

Creeu un fitxer anomenat router:

$ sudo joe router

Amb el text:

#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward

Feu-lo executable:

$ sudo chmod +x router

Consulteu l'article Encaminament.

Afegir la ruta a guifi.net

TODO

Creeu el fitxer /etc/network/if-up.d/guifiNetRoute:

$ sudo joe /etc/network/if-up.d/guifiNetRoute

I poseu:

#!/bin/bash
route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.36.253.1

Es a dir afegim una ruta estàtica de sortifa a guifi.net. Ara només cal fer aquest fitxer executable i s'executarà cada cop que iniciem la xarxa:

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


 417  sudo chmod +x /etc/network/if-up.d/guifiNetRoute

Configuració del tallafocs

El tallafocs és iptables. Totes les configuracions les guardarem a :

/etc/firewall

El codi d'aquest carpeta es manté en un repositori SVN (Subversion). Es pot instal·lar/actualitzar amb:

$ cd /etc
$ sudo svn co https://svn.projectes.lafarga.cat/svn/projectesticdel/firewall_Linux firewall
$ cd firewall
$ sudo svn update

Repositori Subversion

Al repositori SVN:

https://svn.projectes.lafarga.cat/svn/projectesticdel/firewall_Linux

Podeu trobar el codi del tallafocs iptables.

ipp2p

S'ha instal·lat el pegat per a iptables que permet filtrar P2P. S'ha instal·lat amb xtables-addons.

Consulteu ipp2p.

Serveis

LAMP

$ sudo tasksel install lamp-server

Pàgines i aplicacions web

Hotspot

Aplicació de control d'accés a Internet

L'aplicació s'instal·la a les carpetes:

/var/www/aules

i

/var/www/aulesadmin

Primer cal obtenir el codi de l'aplicació

$ cd /etc
$ sudo svn co  https://svn.projectes.lafarga.cat/svn/projectesticdel/firewall_Linux firewall
$ cd firewall

NOTA: Si instal·leu el firewall en un altre carpeta aleshores modifiqueu el fitxer config_inc.php

Això es pot fer utilitzant ln (links):

$ cd /var/www
$ sudo ln -s /etc/firewall/classrooms aules
$ sudo ln -s /etc/firewall/classrooms_managment aulesadmin
Configuració de sudo
$ sudo visudo

Afegiu:

#Allow firewall access
www-data ALL = NOPASSWD: /etc/firewall/bin/enProxy.sh
www-data ALL = NOPASSWD: /etc/firewall/bin/disProxy.sh
www-data ALL = NOPASSWD: /sbin/iptables
www-data ALL = NOPASSWD: /sbin/iptables-save
www-data ALL = NOPASSWD: /etc/firewall/bin/getClassroomInfo.sh

I assegureu-vos que són executables:

$ sudo chmod +x disProxy.sh 
$ sudo chmod +x enProxy.sh
$ sudo chmod +x getClassroomInfo.sh

Ús de l'aplicació

Exemple: http://IP_SERVIDOR/aules/index.php?aula=1
http://aules.informatica.iesebre.com/aules/index.php?aula=1