Montar un servidor gnupg: Install sks Sks build (crear la base de datos) Configurar los permisos de la base de datos: Chown -Rc debian-sks:debian-sks /var/lib/sks/DB Configurar el arranque automatico Edit /etc/default/sks con set initstart=yes Restart server /init.d/sks start Instalar gnupg en puppy: Wget http://dotpups.de/JR/gnupg.pup y luego pup2pet Desde O alternativamente: Wget www.pincho.org/gnupg.pet Petget Se puede ignorar el error, y es necesario agregar el path de /usr/local/gnupg/bin para que funcione Y crear un enlace simbolico Ln -s /usr/local/gnupg/libexec /usr/local/libexec Export PATH=$PATH:/usr/local/gnupg/bin (deberia meterse en el /etc/profile, al final, o modificarlo en consecuencia) Principio: Ipv4, ipv6 http://ipv6.mx/index.php/component/content/article/189-ipv4-vs-ipv6-icual-es-la-diferencia Diferencia fundamental: 4,294,967,296 direcciones Desde Contra (670 mil billones) de direcciones por cada milímetro cuadrado de la superficie de la Tierra Desde Otra de las diferencias es el SLAAC para la autoconfiguracin de los routers Presentar los distintos puertos de red, y poner algunos ejemplos de uso manual con el comando telnet 21, 22, 23, 25, 53, 80, 110, 135, 143, 443. Ejercicio: Lluvia de ideas para decir puertos conocidos Usar telnet y netcat (opciones -l ademas) Telnet smtp.usc.es 25 Helo usc.es Mail from:marcos.fraga@usc.es Rcpt to:marcos.fraga@usc.es Data Aquí el texto del mensaje . (deberia responder con un ok message accepted) Quit Telnet www.usc.es 80 Get /index.htm HTTP/1.1 Host:usc.es (lf) Telnet ftp.udc.es 21 User anonymous Pass correo Cwd carpeta /etc/services ftp 21/tcp ssh 22/tcp # SSH Remote Login Protocol ssh 22/udp telnet 23/tcp (….) Tcp wrappers, sistema de seguridad. /usr/sbin/tcpd Xinetd -> con tcpd en la configuracion, usa hosts.allow -> sin tcpd, usa solo los sistemas embebidos en xinetd Inetd.conf (para el caso, cualquiera de los /etc/inet.d o /etc/xinet.d/) Nombredelservicio tipodesocket protocolo wait/nowait user server (argumentos) Nombredelservicio: httpd, in.ftpd, named (desde /etc/services) Basicamente, el puerto Tipodesocket: stream, dgram, raw (ver documentacion de cada caso. Consola, video tiempo real) Protocolo: tcp,udp,etc Wait: en el caso de stream, suele ser nowait (se independiza cada proceso) ver documentacion de cada servicio User: el usuario que deberia ejecutar el proceso (www-data para el caso de apache, por ejemplo) Server: programa a ejecutar. Puede ser tambien /usr/sbin/tcpd y el programa concreto como argumento. Para el caso de xinetd, la sintaxis es distinta: Service nombredelpuerto { Atributo operador valor (…) } Ejemplo real: Service login { Socket_type = stream Protocol = tcp Wait = no User = root Server = /usr/sbin/in.rlogind Instances =UNLIMITED } Bind "interface" Only_from lista de hosts desde donde se puede acceder al servicio No_access lista de hosts desde donde NO se puede acceder al puerto Access_times h:m-h:m (intervalo en el que el puerto esta disponible) Hosts.allow sintaxis (igual que hosts.deny) (se leen cada vez que se necesitan) Lista de demonios : lista de clientes : (opcional) Lista de demonios: nombres de procesos, no de puertos (sshd en lugar de ssh, httpd en lugar de apache) O tambien ALL LOCAL (como el iexplore) Lista de clientes: lista de host, ips o patrones especiales Opcional: una lista de comandos que ejecutar cuando se valida la regla Ejemplo: ALL: .usc.es ALL: .udc.es EXCEPT adm.udc.es ALL: LOCAL Sshd: 172.24.63.54 #(solo acceso sshd desde esta ip) Como saber si un demonio se puede usar con tcpd ? Pro ejemplo viendo si esta linkado contra libwrap.so ldd /usr/sbin/sshd |grep libwrap Mencionar el ufw y las bases de iptables, con los ejemplos de enrutamiento y nateo Ver tablas del firewall antes y despues de ufw Activar enrutamiento: /proc/sys/net/ipv4/ip_forward 1 Activar NAT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE Mas en profundidad al final de la clase si el tiempo llega Como verificar si hay un servicio escuchando en un puerto? Netstat -an -a todas las conexiones (las que estan a la escucha y las que estan conectadas) -n no resolver los nombres de los hosts (mostrar su ip) y cambiar los numeros de puerto por los nombres de services -p muestra el nombre del programa que utiliza cada scket (bueno, la mayoria Lsof -i :5555 Inciso: nmap para escanear vulnerabilidades de seguridad: Nmap host Nmap ip.* (una clase c) Nmap -O host intenta averiguar el sistema operativo del host Nmap -O 172.24.63.87 ejemplo de acierto … Nmap -O 172.24.63.54 ejemplo de … ejem… aquí podemos ver la importancia de las comprobacinoes manuales de las cosas … ;) Curiosidad acerca de tcpdump -i eth0 arp y una camara web … Curiosidad del sistema de mensajes … Wall write Mesg (se puede ver el terminal con ps sin argumentos) Sistema de inicio basado en rc?.d, con scripts con argumentos de start y stop http://www.formandome.es/linux/configuracion-fichero-sudoers-en-ubuntu/ /etc/sudoers sintaxis: (comando visudo jijiji] Defaults timestamp_timeout= 0 - siempre Numero positiv, cada n minutos Numero negativo, solo la primera vez Usuario host = (usuario substituible:grupo substituible ) comando al que se aplica la regla Podemos usar grupos en lugar de usuario, con %grupo Si queremos que ns interprete las reglas automaticamente, podemos usar sudo -l Ejemplo: marcos puede ejecutar el cmando … en … por la linea … Marcos ALL=(usuario:ALL) /bin/bash Y un de vosotros puede ejecutar … %lpic102 ALL=(root:root) ALL Ultima linea del archivo. /etc/security/limits.conf Dominio tipo item valor Dominio: usuario, @grupo, * Tipo: hard, soft Item: Core -> tamaño coredump Data -> datos del area de programa (seccion .data) Fsize -> tamaño maximo de un fichero Nofile-> numero maximo de ficheros abiertos Cpu -> tiempo de cpu en minutos (de cpu, ver comando time) Priority -> prioridad de los procesos del usuario (-20,19) (-20 maxima prioridad) Ver time, nice Comando propio del bash, para evitar accidentes: Ulimit -a > ver como estan los limites actualemnte -f -> tamaño del fichero -n -> numero de ficheros Curiosidad: Usar el comando rm para borrar el archivo /etc/noborrar-root (solo funciona el 6755 de usr/games/) Sintaxis comandos de red Ifconfig Ip addr Route Ip route Hosts Resolv.conf A mayores software dnsmasq SSH Referencias: daniel J Barret - secure shell Michael Lucas - ssh mastering Configuracion del servidor: /etc/ssh/sshd_config Opciones basicas: Protocol (1,2) Permitrootlogin X11forwarding AllowTcpForwarding Fingerprint ECDSA para ubuntulpic102: 7a:da:5d:a2:f5:05:19:55:40:82:cb:d1:60:f6:72:99 Fingerprint ssh-rsa para ubuntulpic102: Aa:74:f8:4a:f5:62:60:ab:69:99:b2:e3:e6:18:8b:0e Ficheros implicados en las comunicaciones de ssh: .ssh/id_rsa .ssh/id_rsa.pub .ssh/authorized_keys ~/.ssh/know_hosts .ssh/config /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key.pub /etc/ssh/ssh_known_hosts /etc/ssh/sshrc Opciones de los comandos ssh: Scp formatodelineadecopia (usuario@direccion:/path/fichero ) Rsh comando … igual que ssh (ver con which y file) Ssh -L -R Ssh -L ipsdeacceso:puerto:ipseneldestino:puerto usuario@maquinadestino Ssh -R -> ver ambos en un dibujo Opciones interesantes para los tuneles: -N sin sesion (shell) -f -> correr en segundo plano Primero, demostracion de autenticacion remota sin usar contraseña. Luego, con contraseña. Y demostracion de COMO se debe usar realmente el sistema para que siga siendo seguro, y al mismo tiempo comodo. Para crear las claves rsa: Ssh-keygen -t rsa Para crear las del host: ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa Para ver la lista de identificadores de host conocidos: Ssh-keygen -l -f ~/.ssh/known_hosts Para conectarme luego remotamente contra otra maquina, tengo que guardar mi clave publica en ella: (fichero authrized_keys, una clave por linea) Tipo de clave - clave-muylarga- comentario que me permite distinguirlas Generando las claves con una contraseña, con ssh-keygen, luego se usan: Ssh-agent bash Ssh-add (y nos pide la contraseña) Durante esa sesion, ya no nos la pide mas. Ejercicio: Copiarlas con netcat, cuando sepamos hacer un tunel Presentar el comando ssh-copy-id Obtener el fingerprint de un host local: Ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub Gpg (GNU pg) Gpg --gen-key RSA 2048 0 - nunca caduca Aceptar, poner los datos (el comentario no importa?) Poner contraseña para la clave privada Usar rng -tools si la cosa se eterniza Rngd -r /dev/urandom (acelera BASTANTE las cosas) Exportar la clave publica: Gpg --list-keys Gpg --export correo > clavepublicagpg.pub O la version en texto plano: Gpg --armor --export correo > clavepublicagpgascii.pub Usar servidor centralizado: Gpg --keyserver direcciondeinternet --send-keys UID Para publicar nuestra clave Gpg --keyserver direcciondeinternet --recv-keys uid Para descargar una clave publica Como usar las claves gpg: CIFRAR: Gpg --armor --out salidacifrada.txt --recipient ID --encrypt archivodetexto.txt Sin el armor, sale en binario, y tambien se pueden codificar datos DESCIFRAR: Gpg -out archivoenclaro.txt --decrypt archivocifrado.txt FIRMAR: Gpg --sign archivo.txt Gpg --clearsign archvo.txt -> en claro y firmado Confirmar la firma: Gpg --verify archivofirmado.txt DESCIFRAR Gpg --decrypt archivofirmado > salidaenclaro Revocar una clave gpg: Gpg --gen-revoke claveuid > revocation.gpg Gpg --import revocation.gpg Y en un servidor, Gpg --keyserver direcciondeinternet --send-keys uidrevocation Ejercicio: Generar una clave publica gpg para cada uno Crear un archivo de texto con vuestro dni Obtener la clave publica gpg de marcos Cifrar el archivo de texto con ella Firmar el archivo cifrado con vuestra clave privada Subir el archivo cifrado firmado y la firma a una carpeta con vuestro nombre de usuario en /home/secreto Subir tambien un archivo de texto con vuestra clave publica Examen completo lpic 102 http://www.pincho.org/lpic-102.pdf