Diferencia entre revisiones de «Control Aula»

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda
Sin resumen de edición
 
(No se muestran 35 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
= Visió General =
El servidor soluciona les següents qüestions:
* Aïllar l’aula per evitar problemes de configuració durant les pràctiques i evitar atacs.
* Fer de proxy i limitar el tràfic de xarxa.
* Limitar el nombre de IPs que ha de donar el zentyal central.
* Poder tallar l’accés a Internet per IP o a tota l’aula.
* Donar IPs estàtiques a les màquines de l’aula.
* Monitoritzar millor els ordinadors clients i l’aula en general.
El Server proporciona IPs internes en el rang 192.168.<n rack>.0/24
[[Archivo:Xarxaaules.png]]
El '''gw''' dona servei de DHCP, DNS, port d'enllaç i administració de la xarxa. Aquest reeenvia a '''gwlent''' les peticions dels alumnes que no siguen per al moodle i altres. El professor, per un altra banda, va per el '''gwrapid'''.
== Pas per pas ==
== Pas per pas ==


Línea 5: Línea 21:
  # apt update && apt upgrade
  # apt update && apt upgrade
</pre>
</pre>
* El servidor té 2 targetes de xarxa. Cal configurar la de dins de l'aula com a 192.168.aula.250
* El servidor té 3 targetes de xarxa. Cal configurar la de dins de l'aula com a 192.168.aula.250
* La targeta externa serà assignada per Zentyal encara que no és precís que siga una fixa.
* La targeta externa serà assignada per Zentyal encara que no és precís que siga una fixa.
* Crear el container [[LXD]] que fa de gw.
* Crear el container [[LXD]] que fa de gw.
Línea 25: Línea 41:
     nictype: macvlan
     nictype: macvlan
     parent: enp0s8
     parent: enp0s8
    type: nic
  eth2:
    name: eth2
    nictype: macvlan
    parent: enp0s3
     type: nic
     type: nic
# lxc launch ubuntu:16.04 gw --profile=xarxa
# lxc launch ubuntu:16.04 gw --profile=xarxa
Línea 41: Línea 62:
root@gw:~# apt install iptables-persistent
root@gw:~# apt install iptables-persistent
</pre>
</pre>
* Buidar la cau apt
Estat actual de les rules.v4:
<pre class="code">
* Buidar la cau apt# Generated by iptables-save v1.6.0 on Fri Dec  2 17:21:05 2016
*nat
:PREROUTING ACCEPT [2436:404058]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [15:4135]
:POSTROUTING ACCEPT [11:3608]
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o eth2 -j MASQUERADE
COMMIT
# Completed on Fri Dec  2 17:21:05 2016
# Generated by iptables-save v1.6.0 on Fri Dec  2 17:21:05 2016
*mangle
:PREROUTING ACCEPT [1050664964:285226141160]
:INPUT ACCEPT [810295182:141593723917]
:FORWARD ACCEPT [129387725:125975609719]
:OUTPUT ACCEPT [116958:24050108]
:POSTROUTING ACCEPT [129500127:125999353122]
COMMIT
# Completed on Fri Dec  2 17:21:05 2016
# Generated by iptables-save v1.6.0 on Fri Dec  2 17:21:05 2016
*raw
:PREROUTING ACCEPT [1050664964:285226141160]
:OUTPUT ACCEPT [116958:24050108]
COMMIT
# Completed on Fri Dec  2 17:21:05 2016
# Generated by iptables-save v1.6.0 on Fri Dec  2 17:21:05 2016
*security
:INPUT ACCEPT [94621:17898130]
:FORWARD ACCEPT [129383169:125975303014]
:OUTPUT ACCEPT [116958:24050108]
COMMIT
# Completed on Fri Dec  2 17:21:05 2016
# Generated by iptables-save v1.6.0 on Fri Dec  2 17:21:05 2016
*filter
:INPUT DROP [810142958:141568219021]
:FORWARD ACCEPT [28386:19835253]
:OUTPUT ACCEPT [11963:1874703]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8000 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth2 -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o eth2 -j ACCEPT
COMMIT
# Completed on Fri Dec  2 17:21:05 2016
</pre>
 
<pre class="code">
<pre class="code">
root@gw:~# apt clean && apt autoclean
root@gw:~# apt clean && apt autoclean
Línea 87: Línea 160:
El resultat és la configuració de IPs fixes als clients i de la porta d'enllaç ràpida per al professor si li donem la IP acabada en 100.
El resultat és la configuració de IPs fixes als clients i de la porta d'enllaç ràpida per al professor si li donem la IP acabada en 100.


== Control de la velocitat ==
Fer que arranquen a l'inici del sistema:
<pre class="code">
lliurex@srv:~$ lxc config set gw boot.autostart 1
lliurex@srv:~$ lxc config set gwlent boot.autostart 1
lliurex@srv:~$ lxc config set gwpreferent boot.autostart 1
</pre>
 
Fer que els gwlent i rapid confien en el gw servidor (fer prèviament la key en ssh-keygen):
<pre class="code">
lxc exec gw -- cat /root/.ssh/id_rsa.pub > authorized_keys
lxc file push authorized_keys /root/.ssh/
lxc exec gwlent -- chown root:root /root/.ssh/authorized_keys
</pre>
 
=== Control de la velocitat ===


Per evitar que carreguen la xarxa sols amb youtube podem utilitzar wondershaper. Aquest són els pasos:
Per evitar que carreguen la xarxa sols amb youtube podem utilitzar wondershaper. Aquest són els pasos:
Línea 93: Línea 180:
* En el DHCP s'indica que el professor té com a router el ''gw preferent''. Això és la configuració prèvia feta en l'script anterior.
* En el DHCP s'indica que el professor té com a router el ''gw preferent''. Això és la configuració prèvia feta en l'script anterior.
* En el DHCP s'indica que el router de la resta és el .254
* En el DHCP s'indica que el router de la resta és el .254
* Aquest ha de tindre como a porta per defecte la ip interna del ''gw lent''.
* Aquest ha de tindre como a porta per defecte la eth2. Mentres que la eth0 queda sols per al moodle.
El comandament per defecte pot ser:
El comandament per defecte pot ser:
<pre class="code">
<pre class="code">
ip route change default via 192.168.9.252
ip route change default via 10.20.0.1 dev eth2
</pre>
</pre>
per a que es quede encara que reiniciem, en /etc/network/interfaces:
per a que es quede encara que reiniciem, en /etc/network/interfaces:
<pre class="code">
<pre class="code">
up route change default gw 192.168.9.252 dev eth1
auto eth0
iface eth0 inet dhcp
post-up ip route change default via 10.20.0.1 dev eth2
</pre>
No obstant, no serà necessari deixar aquesta ruta per defecte, ja que tot serà automàtic via web.
* Per a la xarxa local, moodle i altres, tindrà com a porta d'enllaç la eth0.
* eth2 es configura en wondershaper per tindre una velocitat determinada. Aquesta ha d'estar definida en funció de necessitats.
<pre class="code">
root@gw:~# ssh root@192.168.9.254 wondershaper eth2 600 200
root@gw:~# ssh root@192.168.9.254 wondershaper clear eth2
</pre>
</pre>
* Per a la xarxa local, moodle i altres, tindrà com a porta d'enllaç el preferent o el del centre.
* També podem fer que els clients usen la eth2 i ralentitzar aquesta
* La gw lenta es configura en wondershaper per tindre una velocitat determinada. Aquesta ha d'estar definida en funció de necessitats.


Al tindre velocitats baixes però suficients, les webs sense videos funcionaran raonablement. El moodle funciona a la màxima velocitat. Si dos o més alumnes tenen videos ralentiran a la resta de la classe, però no a l'institut.
Al tindre velocitats baixes però suficients, les webs sense videos funcionaran raonablement. El moodle funciona a la màxima velocitat. Si dos o més alumnes tenen videos ralentiran a la resta de la classe, però no a l'institut.
Exemple:
<pre class="code">
root@gw:~# wondershaper eth0 1000 500
root@gw:~# iperf -c 10.20.9.250 -p 9000
------------------------------------------------------------
Client connecting to 10.20.9.250, TCP port 9000
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 10.20.8.254 port 39944 connected with 10.20.9.250 port 9000
[ ID] Interval      Transfer    Bandwidth
[  3]  0.0-14.1 sec  896 KBytes  520 Kbits/sec
root@gw:~# wondershaper clear eth0 
Wondershaper queues have been cleared.
root@gw:~#
root@gw:~# iperf -c 10.20.9.250 -p 9000
------------------------------------------------------------
Client connecting to 10.20.9.250, TCP port 9000
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 10.20.8.254 port 39946 connected with 10.20.9.250 port 9000
[ ID] Interval      Transfer    Bandwidth
[  3]  0.0-10.0 sec  1.09 GBytes  940 Mbits/sec
</pre>
==== Monitorització ====
La web admin proporciona una visió aproximada del consum de xarxa total. Per a que funcione necessitem instal·lar sysstat per al sar i activar el servici sysstat, gnuplot per a les gràfiques i una serie de regles IPtables per a [http://www.catonmat.net/blog/traffic-accounting-with-iptables/ comptabilitzar] cada IP dels alumnes:
<pre class="code">
#!/bin/bash
iptables -N TRAFFIC_ACCT_IN
iptables -N TRAFFIC_ACCT_OUT
iptables -I FORWARD -i eth0 -j TRAFFIC_ACCT_IN
iptables -I FORWARD -o eth0 -j TRAFFIC_ACCT_OUT
iptables -I FORWARD -i eth2 -j TRAFFIC_ACCT_IN
iptables -I FORWARD -o eth2 -j TRAFFIC_ACCT_OUT
for i in {1..200}; do iptables -A TRAFFIC_ACCT_IN --dst 192.168.9.$i; iptables -A TRAFFIC_ACCT_OUT --src 192.168.9.$i; done
iptables -L -n -v -x
</pre>
Se pot reinicialitxzar el comptador:
<pre class="code">
iptables -Z TRAFFIC_ACCT_IN
</pre>
Tutorial complet a: [[Monitoritzar els clients amb iptables]]
=== Tallar internet ===
Per tallar Internet als alumnes, cal primer donar-los de alta en el DHCP per conèixer la seua IP. Després es poden executar aquestes [[IPtables]]:
<pre class="code">
sudo iptables -I FORWARD 1 -s 192.168.aula.alumne -j DROP    # Tallar a una IP. Es queda com a primera regla de la taula input
sudo iptables -D FORWARD -s 192.168.aula.alumne -j DROP      # Permetre
</pre>
El control via web ja ho té automatitzat.
=== Monitorització del servidor ===
En el servidor interessa instal·lar '''sysstat''', modificar el /etc/defaul/sysstat per a que arreplegue estadístiques i canviar en /etc/cron-d/sysstat el temps de refresc a 1 minut. Quant fem això, podem observar dades estadístiques de la xarxa, per exemple.
=== Centralitzar la configuració dels clients ===
Per a fer això, podem utilitzar [[Ansible]].
<pre class="code">
root@gw:~# apt install ansible
root@gw:~# ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:QUwfjcjUkaFnd8CihW0ANtZwb+7DkUsmXP0hJVtfhlI root@gw
The key's randomart image is:
+---[RSA 2048]----+
|      *O**+Bo.E.o|
|    o +*+Oo+*.o.|
|        o+B.=.o .|
|      ..B o + . |
|        S *  .  |
|        * o    |
|          =      |
|          .    |
|                |
+----[SHA256]-----+
root@gw:~# ssh-copy-id lliurex@192.168.9.101
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.9.101 (192.168.9.101)' can't be established.
ECDSA key fingerprint is SHA256:yJB1AmXpfIN/Zpaem8pa+5QaO44iYwzPejp+a9h3AQI.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
lliurex@192.168.9.101's password:
Number of key(s) added: 1
Now try logging into the machine, with:  "ssh 'lliurex@192.168.9.101'"
and check to make sure that only the key(s) you wanted were added.
root@gw:~# ssh-agent bash
root@gw:~# ssh-add ~/.ssh/id_rsa
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
</pre>
* Editar el fitxer de /etc/ansible/hosts per tindre tota la llista de hosts administrats.
<pre class="code">
[alumnes]
192.168.9.101
192.168.9.102
...
</pre>
Aquesta és la prova de que funciona:
<pre class="code">
root@gw:~# ansible all -u lliurex -m ping
192.168.9.101 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
...
</pre>
==== Comandaments ad-hoc ====
Podem, per exemple, canviar la contrasenya a Lliurex:
<pre class="code">
root@gw:~# apt install whois
root@gw:~# mkpasswd --method=sha-512
Password:
$6$APDy29HR$5lgjvaeU6yaEXhC8tni0f0PzVnQfb2Z1lSJ0IG85YE43cFz42UB65vGZGuhLi1uz1v0PZ6ntI0xNrLJjVWWdT1
root@gw:~# ansible all -u lliurex -m user -a 'name=lliurex password=$6$APDy29HR$5lgjvaeU6yaEXhC8tni0f0PzVnQfb2Z1lSJ0IG85YE43cFz42UB65vGZGuhLi1uz1v0PZ6ntI0xNrLJjVWWdT1' --sudo --ask-become-pass
SUDO password:
192.168.9.101 | SUCCESS => {
    "append": false,
    "changed": true,
    "comment": "lliurex,,,",
    "group": 1000,
    "home": "/home/lliurex",
    "move_home": false,
    "name": "lliurex",
    "password": "NOT_LOGGING_PASSWORD",
    "shell": "/bin/bash",
    "state": "present",
    "uid": 1000
}
...
</pre>
Asegurar-nos de que tenen un programa instal·lat:
<pre class="code">
root@gw:~# ansible all -u lliurex --sudo --ask-become-pass -m apt -a "name=dia state=present"
</pre>
Actualitzar el sistema:
<pre class="code">
ansible all -u lliurex --sudo --ask-become-pass -m apt -a "upgrade=dist"
</pre>
==La web Admin==
Articul principal: [[Web de control d'aules]]
La majoria d'aquestes coses funcionen la web admin que hem fet. [https://github.com/xxjcaxx/control_aules codi font]
Per a que funcione necessitem:
*Obrir els ports 80 i 443
*Install·lar un certificat ssl
*Configurar Apache per a que funcione el ssl i no deixe entrar en admin per el 80
*Instal·lar sysstat i activar el servici per a que el SAR funcione.
Step 1.  Install sysstat
sudo apt-get install sysstat
Step 2. Enable stat collection
sudo vi /etc/default/sysstat
change ENABLED=”false” to ENABLED=”true”
save the file
*Crear la targeta de xarxa eth2
*Instal·lar wondershaper
*Instal·lar gnuplot
*Instal·lar nmap
= Enllaços =
https://wiki.archlinux.org/index.php/simple_stateful_firewall
https://albertomolina.wordpress.com/2009/01/09/nat-con-iptables/
http://networktools.nl/asinfo/youtube.com

Revisión actual - 19:33 1 oct 2019

Visió General

El servidor soluciona les següents qüestions:

  • Aïllar l’aula per evitar problemes de configuració durant les pràctiques i evitar atacs.
  • Fer de proxy i limitar el tràfic de xarxa.
  • Limitar el nombre de IPs que ha de donar el zentyal central.
  • Poder tallar l’accés a Internet per IP o a tota l’aula.
  • Donar IPs estàtiques a les màquines de l’aula.
  • Monitoritzar millor els ordinadors clients i l’aula en general.

El Server proporciona IPs internes en el rang 192.168.<n rack>.0/24

Xarxaaules.png

El gw dona servei de DHCP, DNS, port d'enllaç i administració de la xarxa. Aquest reeenvia a gwlent les peticions dels alumnes que no siguen per al moodle i altres. El professor, per un altra banda, va per el gwrapid.

Pas per pas

  • Instal·lar Ubuntu server
 # apt update && apt upgrade
  • El servidor té 3 targetes de xarxa. Cal configurar la de dins de l'aula com a 192.168.aula.250
  • La targeta externa serà assignada per Zentyal encara que no és precís que siga una fixa.
  • Crear el container LXD que fa de gw.
# lxd init
# lxc profile create xarxa
# lxc profile edit xarxa
name: xarxa
config: {}
description: ""
devices:
  eth0:
    name: eth0
    nictype: macvlan
    parent: enp0s3
    type: nic
  eth1:
    name: eth1
    nictype: macvlan
    parent: enp0s8
    type: nic
  eth2:
    name: eth2
    nictype: macvlan
    parent: enp0s3
    type: nic
# lxc launch ubuntu:16.04 gw --profile=xarxa
  • Entrar dins i fer-lo porta d'enllaç. Aquest container servirà com a plantilla per als altres dos. Per tant, cal fer-lo porta d'enllaç abans de fer-lo servidor dhcp i la resta de coses.
    • La seua IP de eth1: 192.168.aula.254. La de fora serà per Zentyal, pot ser fixa o no.
    • Actualitzar.
    • Descomentar en /etc/sysctrl.conf el ipv4 forward.
    • Aplicar les IPtables:
root@gw:~# iptables -A INPUT --match conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
root@gw:~# iptables -A FORWARD --in-interface eth0 --out-interface eth1 -j ACCEPT
root@gw:~# iptables -A FORWARD --in-interface eth1 --out-interface eth0 -j ACCEPT
root@gw:~# iptables -t nat  -A POSTROUTING --out-interface eth0 -j MASQUERADE
root@gw:~# iptables-save > /etc/iptables/rules.v4
root@gw:~# apt install iptables-persistent

Estat actual de les rules.v4:

* Buidar la cau apt# Generated by iptables-save v1.6.0 on Fri Dec  2 17:21:05 2016
*nat
:PREROUTING ACCEPT [2436:404058]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [15:4135]
:POSTROUTING ACCEPT [11:3608]
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o eth2 -j MASQUERADE
COMMIT
# Completed on Fri Dec  2 17:21:05 2016
# Generated by iptables-save v1.6.0 on Fri Dec  2 17:21:05 2016
*mangle
:PREROUTING ACCEPT [1050664964:285226141160]
:INPUT ACCEPT [810295182:141593723917]
:FORWARD ACCEPT [129387725:125975609719]
:OUTPUT ACCEPT [116958:24050108]
:POSTROUTING ACCEPT [129500127:125999353122]
COMMIT
# Completed on Fri Dec  2 17:21:05 2016
# Generated by iptables-save v1.6.0 on Fri Dec  2 17:21:05 2016
*raw
:PREROUTING ACCEPT [1050664964:285226141160]
:OUTPUT ACCEPT [116958:24050108]
COMMIT
# Completed on Fri Dec  2 17:21:05 2016
# Generated by iptables-save v1.6.0 on Fri Dec  2 17:21:05 2016
*security
:INPUT ACCEPT [94621:17898130]
:FORWARD ACCEPT [129383169:125975303014]
:OUTPUT ACCEPT [116958:24050108]
COMMIT
# Completed on Fri Dec  2 17:21:05 2016
# Generated by iptables-save v1.6.0 on Fri Dec  2 17:21:05 2016
*filter
:INPUT DROP [810142958:141568219021]
:FORWARD ACCEPT [28386:19835253]
:OUTPUT ACCEPT [11963:1874703]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8000 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth2 -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o eth2 -j ACCEPT
COMMIT
# Completed on Fri Dec  2 17:21:05 2016
root@gw:~# apt clean && apt autoclean
  • Clonar el container per crear el ràpid i el lent, els deixem ahí per tornar després:
lliurex@srv:~$ lxc copy gw gwpreferent
lliurex@srv:~$ lxc copy gw gwlent
  • Tornar a entrar al gw principal per instal·lar la resta de serveis:
root@gw:~# apt install isc-dhcp-server
 
ddns-update-style none;
option domain-name "aula.net";
option domain-name-servers 10.20.0.1;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;

subnet 192.168.9.0 netmask 255.255.255.0 {
  range 192.168.9.150 192.168.9.199;
  option subnet-mask 255.255.255.0;
  option routers 192.168.9.254;
}

root@gw:~# nano /etc/default/isc-dhcp-server     # recordar indicar eth1 en interfaces

root@gw:~# wget -O- https://raw.github.com/ajenti/ajenti/1.x/scripts/install-ubuntu.sh | sudo sh
Now start Ajenti with 'service ajenti restart'
Ajenti will listen on HTTPS port 8000 by default

Default username : root
Default password : admin
# Cal canviar el passwd.

  • Registre de clients
root@gw:~# apt install nmap

Cal executar aquest script

El resultat és la configuració de IPs fixes als clients i de la porta d'enllaç ràpida per al professor si li donem la IP acabada en 100.

Fer que arranquen a l'inici del sistema:

lliurex@srv:~$ lxc config set gw boot.autostart 1
lliurex@srv:~$ lxc config set gwlent boot.autostart 1
lliurex@srv:~$ lxc config set gwpreferent boot.autostart 1

Fer que els gwlent i rapid confien en el gw servidor (fer prèviament la key en ssh-keygen):

lxc exec gw -- cat /root/.ssh/id_rsa.pub > authorized_keys
lxc file push authorized_keys /root/.ssh/
lxc exec gwlent -- chown root:root /root/.ssh/authorized_keys

Control de la velocitat

Per evitar que carreguen la xarxa sols amb youtube podem utilitzar wondershaper. Aquest són els pasos:

  • En el DHCP s'indica que el professor té com a router el gw preferent. Això és la configuració prèvia feta en l'script anterior.
  • En el DHCP s'indica que el router de la resta és el .254
  • Aquest ha de tindre como a porta per defecte la eth2. Mentres que la eth0 queda sols per al moodle.

El comandament per defecte pot ser:

ip route change default via 10.20.0.1 dev eth2

per a que es quede encara que reiniciem, en /etc/network/interfaces:

auto eth0
iface eth0 inet dhcp
post-up ip route change default via 10.20.0.1 dev eth2

No obstant, no serà necessari deixar aquesta ruta per defecte, ja que tot serà automàtic via web.

  • Per a la xarxa local, moodle i altres, tindrà com a porta d'enllaç la eth0.
  • eth2 es configura en wondershaper per tindre una velocitat determinada. Aquesta ha d'estar definida en funció de necessitats.
root@gw:~# ssh root@192.168.9.254 wondershaper eth2 600 200
root@gw:~# ssh root@192.168.9.254 wondershaper clear eth2
  • També podem fer que els clients usen la eth2 i ralentitzar aquesta

Al tindre velocitats baixes però suficients, les webs sense videos funcionaran raonablement. El moodle funciona a la màxima velocitat. Si dos o més alumnes tenen videos ralentiran a la resta de la classe, però no a l'institut.

Exemple:

root@gw:~# wondershaper eth0 1000 500 
root@gw:~# iperf -c 10.20.9.250 -p 9000
------------------------------------------------------------
Client connecting to 10.20.9.250, TCP port 9000
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 10.20.8.254 port 39944 connected with 10.20.9.250 port 9000
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-14.1 sec   896 KBytes   520 Kbits/sec
root@gw:~# wondershaper clear eth0  
Wondershaper queues have been cleared.
root@gw:~# 
root@gw:~# iperf -c 10.20.9.250 -p 9000
------------------------------------------------------------
Client connecting to 10.20.9.250, TCP port 9000
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 10.20.8.254 port 39946 connected with 10.20.9.250 port 9000
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.09 GBytes   940 Mbits/sec

Monitorització

La web admin proporciona una visió aproximada del consum de xarxa total. Per a que funcione necessitem instal·lar sysstat per al sar i activar el servici sysstat, gnuplot per a les gràfiques i una serie de regles IPtables per a comptabilitzar cada IP dels alumnes:

#!/bin/bash
iptables -N TRAFFIC_ACCT_IN
iptables -N TRAFFIC_ACCT_OUT
iptables -I FORWARD -i eth0 -j TRAFFIC_ACCT_IN
iptables -I FORWARD -o eth0 -j TRAFFIC_ACCT_OUT
iptables -I FORWARD -i eth2 -j TRAFFIC_ACCT_IN
iptables -I FORWARD -o eth2 -j TRAFFIC_ACCT_OUT
for i in {1..200}; do iptables -A TRAFFIC_ACCT_IN --dst 192.168.9.$i; iptables -A TRAFFIC_ACCT_OUT --src 192.168.9.$i; done
iptables -L -n -v -x

Se pot reinicialitxzar el comptador:

 iptables -Z TRAFFIC_ACCT_IN

Tutorial complet a: Monitoritzar els clients amb iptables

Tallar internet

Per tallar Internet als alumnes, cal primer donar-los de alta en el DHCP per conèixer la seua IP. Després es poden executar aquestes IPtables:

sudo iptables -I FORWARD 1 -s 192.168.aula.alumne -j DROP     # Tallar a una IP. Es queda com a primera regla de la taula input
sudo iptables -D FORWARD -s 192.168.aula.alumne -j DROP       # Permetre

El control via web ja ho té automatitzat.

Monitorització del servidor

En el servidor interessa instal·lar sysstat, modificar el /etc/defaul/sysstat per a que arreplegue estadístiques i canviar en /etc/cron-d/sysstat el temps de refresc a 1 minut. Quant fem això, podem observar dades estadístiques de la xarxa, per exemple.

Centralitzar la configuració dels clients

Per a fer això, podem utilitzar Ansible.

root@gw:~# apt install ansible
root@gw:~# ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:QUwfjcjUkaFnd8CihW0ANtZwb+7DkUsmXP0hJVtfhlI root@gw
The key's randomart image is:
+---[RSA 2048]----+
|      *O**+Bo.E.o|
|     o +*+Oo+*.o.|
|        o+B.=.o .|
|       ..B o + . |
|        S *   .  |
|         * o     |
|          =      |
|           .     |
|                 |
+----[SHA256]-----+

root@gw:~# ssh-copy-id lliurex@192.168.9.101
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.9.101 (192.168.9.101)' can't be established.
ECDSA key fingerprint is SHA256:yJB1AmXpfIN/Zpaem8pa+5QaO44iYwzPejp+a9h3AQI.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
lliurex@192.168.9.101's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'lliurex@192.168.9.101'"
and check to make sure that only the key(s) you wanted were added.
root@gw:~# ssh-agent bash
root@gw:~# ssh-add ~/.ssh/id_rsa
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
  • Editar el fitxer de /etc/ansible/hosts per tindre tota la llista de hosts administrats.
[alumnes]
192.168.9.101
192.168.9.102
...

Aquesta és la prova de que funciona:

root@gw:~# ansible all -u lliurex -m ping
192.168.9.101 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
...

Comandaments ad-hoc

Podem, per exemple, canviar la contrasenya a Lliurex:

root@gw:~# apt install whois
root@gw:~# mkpasswd --method=sha-512
Password: 
$6$APDy29HR$5lgjvaeU6yaEXhC8tni0f0PzVnQfb2Z1lSJ0IG85YE43cFz42UB65vGZGuhLi1uz1v0PZ6ntI0xNrLJjVWWdT1

root@gw:~# ansible all -u lliurex -m user -a 'name=lliurex password=$6$APDy29HR$5lgjvaeU6yaEXhC8tni0f0PzVnQfb2Z1lSJ0IG85YE43cFz42UB65vGZGuhLi1uz1v0PZ6ntI0xNrLJjVWWdT1' --sudo --ask-become-pass
SUDO password: 
192.168.9.101 | SUCCESS => {
    "append": false, 
    "changed": true, 
    "comment": "lliurex,,,", 
    "group": 1000, 
    "home": "/home/lliurex", 
    "move_home": false, 
    "name": "lliurex", 
    "password": "NOT_LOGGING_PASSWORD", 
    "shell": "/bin/bash", 
    "state": "present", 
    "uid": 1000
}
...

Asegurar-nos de que tenen un programa instal·lat:

root@gw:~# ansible all -u lliurex --sudo --ask-become-pass -m apt -a "name=dia state=present" 

Actualitzar el sistema:

ansible all -u lliurex --sudo --ask-become-pass -m apt -a "upgrade=dist" 

La web Admin

Articul principal: Web de control d'aules

La majoria d'aquestes coses funcionen la web admin que hem fet. codi font

Per a que funcione necessitem:

  • Obrir els ports 80 i 443
  • Install·lar un certificat ssl
  • Configurar Apache per a que funcione el ssl i no deixe entrar en admin per el 80
  • Instal·lar sysstat i activar el servici per a que el SAR funcione.
Step 1.  Install sysstat
sudo apt-get install sysstat
Step 2. Enable stat collection
sudo vi /etc/default/sysstat
change ENABLED=”false” to ENABLED=”true”
save the file
  • Crear la targeta de xarxa eth2
  • Instal·lar wondershaper
  • Instal·lar gnuplot
  • Instal·lar nmap

Enllaços

https://wiki.archlinux.org/index.php/simple_stateful_firewall

https://albertomolina.wordpress.com/2009/01/09/nat-con-iptables/ http://networktools.nl/asinfo/youtube.com