Control Aula
Sumario
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
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