Linux terminal server en debian parte 2
Si no visitaste el post anterior pasate por aca primero:
Temas que trataremos en el transcurso del tutorial:
* Instalar programas para los clientes
* Cuotas de usuario
* Creación de cuentas de usuario
* Asignación de permisos
* Phpsysinfo
* Escaneo de puertos
* Iptables - firewall
Ya tenemos instalado el servidor y los clientes, recordemos que la configuración resultante es muy básica, pasemos a mejorar eso y algunas cosas mas.
Instalar programas para los clientes
En el servidor instalamos lo siguiente:
su
apt-get install xdg-user-dirs-gtk gtk2-engines gnome-themes gnome-backgrounds gnome-utils file-roller unrar-free gedit gedit-plugins gnome-terminal gclactool gnome-screensaver xscreensaver-data eog eog-plugins gucharmap tomboy evince gconf-editor iceweasel-l10n-es-es mozilla-plugin-gnash audacious pidgin freedesktop-sound-theme inkscape ntpdate ntp gpaint winff vlc shotwell sound-juicer cups system-config-printer glabels ttf-liberation ttf-lyx gtk2-engines-murrine oxygen-icon-theme gnome-themes-extras gnome-extra-icons icedove-l10n-es-es gnome-system-tools
Si te resulta pesado escribir todo lo anterior podes bajar este script que instala de forma automática todo lo anterior:
wget http://files.myopera.com/alband/files/programas.sh
more programas.sh
(para ver de que se trata el script)
su
source programas.sh
(ejecuta el script sin tener permisos de ejecución)
Ahora instalar una suite ofimática.
openoffice.org
En su wiki dice:
La mínima versión requerida JDK / JRE para utilizar las funciones de OpenOffice.org que requieren java JDK / JRE es la versión 1.3.1.
asi que debemos instalar:
apt-get install openoffice.org-gnome tango-icon-theme openjdk-6-jre
Algunos otros programas que se pueden instalar:
Descarga por torrent
transmission
Editores iso
isomaster acetoneiso
Cliente de terminal server
tsclient xtightvncviewer xnest
Escaneo y camara
simple-scan xsane cheese
Ahora nos conectamos desde un cliente liviano y vemos el resultado:
Implementación de cuotas
Las cuotas permiten especificar limites en dos aspectos del almacenamiento en disco:
El numero de inodos que puede poseer un usuario o un grupo; y el número de bloques de disco que puede ocupar un usuario o un grupo.
La idea que se esconde detrás de las cuotas es que se obliga a los usuarios a mantenerse debajo de su limite de consumo de disco, quitándoles su habilidad de consumir espacio ilimitado de disco en un sistema.
su
apt-get install quota quotatool
Pasamos a asignar cuotas de disco al usuario alband, solo hará falta utilizar edquota citando el nombre del usuario al cual se le quiere aplicar:
su
edquota alband
Lo anterior deberá devolver algo como lo siguiente a través de vi u otro editor de texto simple:
Disk quotas for user alband (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sda9 6860 0 0 254 0 0
Vamos a modificar el archivo para que quede asi:
Disk quotas for user alband (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sda9 6860 500000 510000 254 0 0
Asi le asigno al usuario una cuota de 500M al /home de este usuario que nos servirá de "modelo" para aplicar al resto de los usuarios. De esta forma evitamos que llenen el disco ya que algunos usuarios intentarán poner a prueba nuestra paciencia.
Para revisar las cuota
repquota -aug
Creación de Usuarios y asignación de permisos
crear en el sistema los usuarios que se van a conectar al servidor de esta forma:
su
addgroup estudiantes
vemos que se creo el grupo y su gid es 1001
ahora copiar el fichero adduser.conf
cp /etc/adduser.conf ./estudiantes.conf
nano estudiantes.conf
Buscar la línea que dice:
USERGROUPS=yes
cambiamos por no
y abajo donde dice
USERS_GID=100
cambiar por el valor que resulto al crear el grupo estudiantes (1001)
USERS_GID=1001
QUOTAUSER=""
camiar por
QUOTAUSER="alband"
#ADD_EXTRA_GROPUS="dialout cdrom floppy audio video plugdev"
tiene que quedar asi:
ADD_EXTRA_GROPUS="dialout cdrom floppy audio video plugdev fuse"
#ADD_EXTRA_GROPUS=1
cambiar
ADD_EXTRA_GROPUS=1
Ahora creamos los clientes de esta forma
adduser --conf estudiantes.conf cliente02
addgroup profesores
vemos que se creo el grupo y su gid es 1002
cp /etc/adduser.conf ./profesores.conf
nano profesores.conf
USERGROUPS=yes
cambiamos por no
y abajo donde dice
USERS_GID=100
cambiar por el valor que resulto al crear el grupo profesores (1002)
USERS_GID=1002
DIR_MODE=0755
cambiar por
DIR_MODE=0750
QUOTAUSER=""
cambiar por
QUOTAUSER="alband"
#ADD_EXTRA_GROPUS=
tiene que quedar asi:
ADD_EXTRA_GROPUS="dialout cdrom floppy audio video plugdev fuse estudiantes"
#ADD_EXTRA_GROPUS=1
cambiar
ADD_EXTRA_GROPUS=1
como se puede apreciar le damos privacidad al profesor (750) y lo agregamos a su grupo y al grupo clientes
crear profesores:
adduser --conf profesores.conf profesor01
Probamos las quotas, entramos como el usuario cliente02 y en la terminal:
dd if=/dev/zero of=./archivo512MB bs=128 count=4
También vemos que al usuario profesor01 no se puede entrar en su home.
Y que el usuario puede hacer uso de medios extraibles (grupo fuse)
Phpsysinfo
Vamos a instalar phpsysinfo para conocer el estado del servidor, asi evitamos usar monitor y/o teclado en el servidor.
su
apt-get install apache2 php5-cgi libapache2-mod-php5 phpsysinfo hddtemp
Marcar que inicie como demonio y dejar trabajar hddtemp en el puertto 7634
Creamos un enlace simbólico
ln -s /usr/share/phpsysinfo /var/www/phpsysinfo
modificamos algunos parámetros
nano -B /etc/phpsysinfo/config.php
define('lang', 'es');
define('sensorProgram', 'lmsensors');
define("hddTemp", 'suid');
Para ver el resultado ir a un cliente y entrar en:
http://ipdelservidor/phpsysinfo
Si por alguna razón no sale la información de la temperatura deñ hd en la consola poner:
dpkg-reconfigure hddtemp
Escaneo de puertos
Verificamos las reglas de seguridad actuales con el comando:
iptables -L -n
Vemos en resultado, estamos sin protección ya que se permite todo, un escaneo de puertos nos va a dar un resultado nada alentador.
Desde otro pc de la red escaneamos al servidor.
nmap -sV -P0 -O -vv -o archivo.txt 192.168.0.103
La salida casi instantánea de nmap se puede analizar con:
nano archivo.txt
Esto nos sugiere instalar un firewall
Firewall
Básicamente lo que vamos a hacer es permitir salir todo, y solamente aceptar conecciones establecidas y relacionadas pero solamente de algunos puertos, el resto se descarta todo.
Copiamos este script y lo ponemos en /etc/network/if-up/firewall-tlsp
y le damos permisos de ejecución chmod +x /etc/network/if-up/firewall-tlsp
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para firewall entre red-local e internet
## Pello Xabier Altadill Izura
## www.pello.info - [email protected]
## poner en /etc/network/if-up/firewall-tlsp
## le damos permisos de ejecución
## chmod +x /etc/network/if-up/firewall-tlsp
##
## Rango de red local
RLOCAL="192.168.10.0/24"
RED_EXT="eth0"## Interface conectada a internet
RED_INT="eth1"## Interface de red local
TCP_PORT="80,443,110,995,465,587,20,21,22,25,143,993,1043"
UDP_PORT="53,123"
IP_EXTER="192.168.0.103"## IP de interface eth0
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
# El localhost se deja (por ejemplo conexiones locales a mysql)
iptables -A INPUT -i lo -j ACCEPT
# Al firewall podemos entrar desde la red local
iptables -A INPUT -s 192.168.10.0/24 -i eth1 -j ACCEPT
# Ahora hacemos enmascaramiento de la red local
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward
# Aceptamos entrada y salida de puertos 80,443,110,995,465,587,20,21,25,143,993,1043
iptables -A INPUT -i eth0 -p tcp -m multiport --sports $TCP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d 192.168.10.0/24 -s 0/0 -p tcp -m multiport --sports $TCP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Aceptamos que consulten los DNS
iptables -A INPUT -i eth0 -p udp -m multiport --sports $UDP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d 192.168.10.0/24 -s 0/0 -p udp -m multiport --sports $UDP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Barrera de backup por si cambiamos INPUT a modo ACCEPT temporalmente
# Con esto protegemos los puertos reservados y otros conocidos
iptables -A INPUT -p tcp -m tcp --dport 1:1024 -j DROP
iptables -A INPUT -p udp -m udp --dport 1:1024 -j DROP
iptables -A INPUT -p tcp -m tcp --dport 1723 -j DROP
iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp -m tcp --dport 5432 -j DROP
# Anti-spoofing (falseo de ip origen)
iptables -A INPUT -i $RED_EXT -s $IP_EXTER -j DROP
iptables -A INPUT -i $RED_EXT -s 10.0.0.0/24 -j DROP
iptables -A INPUT -i $RED_EXT -s 172.16.0.0/24 -j DROP
iptables -A INPUT -i $RED_EXT -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i $RED_EXT -s 224.0.0.0/8 -j DROP
iptables -A INPUT -i $RED_EXT -d 127.0.0.0/8 -j DROP
iptables -A INPUT -i $RED_EXT -d 255.255.255.255 -j DROP
# Deshabilitar broadcast
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Deshabilitar el ping… quizá discutible.
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
# Deshabilitar la redirección del ping
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
# Registrar los accesos extraños, paquetes falseados, etc..
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
# Anti-flooding o inundación de tramas SYN."
iptables -N syn-flood
iptables -A INPUT -i $RED_EXT -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
# Guardar los accesos con paquetes fragmentados, recurso utilizado para tirar
# servidores y otras maldades (bug en Apache por ejemplo)
iptables -A INPUT -i $RED_EXT -f -j LOG --log-prefix "Fragmento! "
iptables -A INPUT -i $RED_EXT -f -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script
Para evitar errores recomiendo descargar el script
https://files.myopera.com/alband/files/firewall-tlsp
luego copiarlo
su
cp firewall-tlsp /etc/network/if-up/firewall-tlsp
una vez modificados los datos con los correspondientes a su red ejecutamos el script
chmod +x /etc/network/if-up/firewall-tlsp
bash /etc/network/if-up/firewall-tlsp
Pero esto no es solo copiar y pegar, todo el código contiene comentarios explicando a grandes rasgos que hace cada línea.
Las posibilidades que ofrece iptables son enormes, por eso bueno revisar los enlaces que cito como fuentes de conocimiento para informarse a fondo sobre el funcionamiento de iptables.
Comprobar que las reglas de firewall están buenas, y luego escaneamos sus puertos otra vez:
iptables -L -n
nmap -sV -P0 -O -vv -o archivodespues.txt 192.168.0.103
La salida de nmap se puede analizar con:
nano archivodespues.txt
Ya estamos protegidos.
Fuentes de conocimento
Instalación de debian
http://www.ac.usc.es/docencia/ASR/Tema_2html/node7.html
iptables firewall
http://www.pello.info/filez/firewall/iptables.html#31
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables
http://markusosses.blogspot.com/2008/01/firewall-con-iptables-con-drop-como.html
http://www.tecnicobat.com/2011/08/30/iptables-i-ejemplo-firewall-personal/
http://albertomolina.wordpress.com/2011/12/08/cortafuegos-con-iptables/
http://dns.bdat.net/documentos/cortafuegos/t1.html
http://dns.bdat.net/documentos/cortafuegos/x267.html
https://help.ubuntu.com/community/UbuntuLTSP/LTSPFirewall
http://ubuntuforums.org/showthread.php?t=1158091
http://www.mail-archive.com/[email protected]/msg38999.html
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables
http://www.brennan.id.au/06-Firewall_Concepts.html
http://www.ecualug.org/2009/03/26/forums/problemas_iptables_politicas_drop_web
http://servidores.ribafs.org/servidores/8-firewall/32-script-de-firewall.html
http://www.elbauldelprogramador.com/noticias/linux/20-ejemplos-de-iptables-para-sysadmins/
http://www.faqs.org/docs/iptables/include.rcdhcpfirewall.html
http://norfipc.com/recuperar/puertos-abiertos.html
http://linuxreflejo.wordpress.com/2008/10/14/comandos-para-saber-que-puertas-estan-abiertos/
http://www.angelfire.com/mac2/sistemasoperativos/MASCARA.htm
Escaneo de puertos
http://paraisolinux.com/que-es-y-como-usar-nmap/
LTSP
http://wiki.debian.org/LTSP/Howto
http://wiki.ltsp.org/wiki/Configuration_and_Maintenance
https://help.ubuntu.com/community/UbuntuLTSP/FatClients
http://files.sourcode.net/doc/LTSPManual.html
http://www.guatewireless.org/os/linux/distros/debian/ubuntu/como-instalar-y-configurar-un-servidor-dhcp-en-linux-ubuntu-debian.html
http://oer.aptivate.org/wiki/Classroom_LTSP_Configuration
cuotas
http://web.mit.edu/rhel-doc/3/rhel-sag-es-3/ch-disk-quotas.html
http://www.osmosislatina.com/linux/cuota_discos.htm
http://dns.bdat.net/blog/index.php?option=com_content&view=article&id=405:cuotas-de-disco&catid=26:almacenamiento
http://www.linuxtotal.com.mx/index.php?cont=info_admon_018
shell
http://www.ibm.com/developerworks/ssa/linux/library/l-lpic1-v3-103-3/
http://tuxjm.net/2009/11/02/usando-el-comando-dd-para-crear-archivos-de-cierto-tamano/
Administración de usuarios
http://wiki.linux.org.pe/tips/agregar-usuario-a-grupo
http://www.linuxparatodos.net//web/comunidad/base-de-conocimiento/-/wiki/Base%20de%20Conocimiento/Manual+de+Administraci%C3%B3n+de+Usuarios
http://elfragmx.wordpress.com/2011/01/14/saber-usuarios-y-grupos-existentes-en-un-sistema-linux-unix/
http://debianusr.wordpress.com/2008/06/13/manejo-de-usuarios-mas-avanzadito-en-linux-y-en-windows/
http://manpages.ubuntu.com/manpages/dapper/es/man5/adduser.conf.5.html
http://doc.ubuntu-es.org/Gesti%C3%B3n_de_usuarios_y_grupos
Apache - phpsysinfo
http://mewbies.com/how_to_install_phpsysinfo_nix_tutorial.html
Con esto se termina el tutorial, escucho comentarios y sugerencias.

