Prácticas con sistemas Linux para curso de introducción a redes y servidores.
Asignatura: Redes II, Bachillerato Tecnológico, UTU, año 2019 en adelante.
Trabajo de autoría del profesor Hugo Napoli.
Instalación de paquetes (ejemplos con firewalld).
Sistemas basados en Debian:
sudo apt install firewalld
Sistemas basados en Arch:
sudo pacman -S firewalld
OpenSUSE:
sudo zypper install firewalld
NOTA: para instalar firewalld bajo OpenRC, por ejemplo, la sintaxis no es "firewalld", sino "firewalld-openrc". Lo mismo puede suceder con otros init y otros paquetes.
Manejo de demonios y servicios (ejemplos con firewalld).
Visualizar estado del cortafuegos:
systemd : systemctl status firewalld
openrc : rc-service firewalld status
sysvinit: service firewalld status
Windows : netsh advfirewall show currentprofile
Listar.
Activos/inactivos:
systemd : systemctl list-units
sysvinit: service --status-all # +: activos; -:inactivos (¿ se podrá hacer "grep +" ?)
openrc : rc-update -v show
Fallidos:
systemd : systemctl --failed
sysvinit:
openrc : rc-status --crashed
Encender.
systemd : sudo systemctl start firewalld
openrc : sudo rc-service firewalld start
sysvinit: sudo service firewalld start
Detener.
systemd : sudo systemctl stop firewalld
openrc : sudo rc-service firewalld stop
sysvinit: sudo service firewalld stop
Reiniciar.
systemd : sudo systemctl restart firewalld
openrc : sudo rc-service firewalld restart
sysvinit: sudo service firewalld restart
Habilitar.
systemd : sudo systemctl enable firewalld
openrc : sudo rc-update add firewalld
sysvinit: sudo update-rc.d firewalld defaults
Windows : netsh advfirewall set currentprofile state on
Inhabilitar.
systemctl: sudo systemctl disable firewalld
openrc : sudo rc-update del firewalld
sysvinit : update-rc.d -f firewalld remove
Windows : netsh advfirewall set currentprofile state off
Habilitar e inhabilitar icmp en Linux/Windows
WINDOWS
netsh advfirewall firewall add rule name="NOMBRE_DE REGLA" protocol=icmp4:8,any dir=in action=allow/block
netsh advfirewall firewall add rule name="NOMBRE_DE REGLA" protocol=icmp6:8,any dir=in action=allow/block
netsh advfirewall firewall show rule name=all
LINUX
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -p icmpv6 --icmp-type echo-request -j DROP
Encender, detener, habilitar, inhabilitar y consultar estado de ssh.
misma sintaxis que para el cortafuegos, sustituyendo por 'sshd'.
Práctica con la cual solamente habilitando ssh en Linux se pueda acceder a un usuario determinado del sistema (ssh <USUARIO>@<IP>)
Probar qué sucede con Windows. ¿Cómo activar ssh en Windows?
Abrir puertos en el firewall (sin permanencia).
Observar la zona que se está utilizando en el firewall.
sudo firewall-cmd --list-all
sudo firewall-cmd --zone <ZONA> --add-port=8000/tcp
sudo firewall-cmd --zone <ZONA> --add-port=8000/udp
sudo firewall-cmd --reload
Donde <ZONA> representa el nombre de una zona válida (la zona se escribe sin los signos de menor y mayor).
Para que la regla quede guardada (permanencia), agregar el parámetro:
--permanent
Consultar zonas existentes:
firewall-cmd --get-zones
Cambiar de zona:
firewall-cmd --set-default-zone public
Ver cómo abrir puertos en Windows.
Gestionar usuarios conectados por ssh
1. Visualizar qué equipos están conectados por ssh:
who
(también probar "who -u")
(tomar nota del renglón con el "pts" correspondiente)
2. Enviar un mensaje a la terminal del equipo conectado, antes de expulsarlo:
echo "ATENCIÓN: en 60 seguntos, finalizará su conexión con el servidor." | write prueba_redes pts/<ID> && sleep 60
3. Listar el IDentificador del proceso que está permitiendo que dicho equipo esté conectado:
ps -t pts/<ID>
4. Finalizar la conexión, según el ID correspondiente:
sudo kill <ID>
Iniciar aplicaciones gráficas por ssh en máquina destino.
Lo primero a tener en cuenta, es que es necesario iniciar con el parámetro "-X" para poder controlar el servidor gráfico:
ssh -X usuario@ip
Luego:
export DISPLAY=:0
kolourpaint
Ejecutar iperf en modo cliente y servidor:
Máquina SERVIDOR:
iperf3 -s -p yyyy
siendo "yyyy" el número de puerto. Ejemplo:
iperf3 -s -p 5201
Máquina CLIENTE:
iperf3 -c xxx.xxx.xxx.xxx -p yyyy
siendo "xxx.xxx.xxx.xxx" la IP de la máquina servidor, e "yyyy", nuevamente, el número de puerto de la máquina servidor. Ejemplo:
iperf3 -c 192.168.44.155 -p 5201
ping
Averiguar ip de sitio:
ping www.google.com
Hacer ping a nivel individual:
ping <IP>
Hacer ping a nivel de broadcast:
ping -b X.X.X.255
Hacer ping con el máximo tamaño de paquete posible:
ping 192.168.1.1 -s 65507
ip
Agregar una dirección IP secundaria a un dispositivo:
sudo ip address add 192.168.1.254/24 dev wlan0
mtr
Consultar la ruta utilizada hasta llegar a un sitio específico (no funciona sin privilegios root):
sudo mtr www.google.com
sudo mtr www.wikipedia.org
Misma consulta, pero mostrando las IPs de todos los hosts involucrados:
sudo mtr -b www.wikipedia.org
tcpdump
Listar las interfases disponibles para el comando:
sudo tcpdump -D
Capturar tráfico de una determinada interfaz:
sudo tcpdump -i wlan0
Capturar tráfico de un determinado host:
sudo tcpdump -i wlan0 host 10.30.175.36
Capturar tráfico de una determinada red:
sudo tcpdump -i wlan0 net 10.30.172.0 mask 255.255.255.0
Capturar tráfico de un determinado puerto:
sudo tcpdump -i wlan0 port 80
Capturar tráfico de un determinado puerto de un determinado host:
sudo tcpdump -v -i wlan0 host 10.30.175.36 and port 48478
("v" = "verbose")
ss
Para que "ss" funcione, hay que revisar que esté instalado el paquete iproute2, o en su defecto, iproute.
Visualizar todas las conexiones de un host en particular:
ss src 10.30.175.36
Visualizar todos los PIDs (útil con ssh):
ss -p
nmap y arp-scan
Obtener IPs de la LAN:
nmap -sP X.X.X.0/24
Un método más agresivo:
sudo arp-scan --localnet
sudo arp-scan --interface wlan0 --localnet
Menos ético:
sudo arp-scan --interface wlan0 --localnet | grep Apple/Xiaomi/Samsung/HUAWEI, etc.
Obtener fingerprint e información del sistema a través de su IP:
sudo nmap -O <IP>
Si el equipo no responde, probar:
sudo nmap -O <IP> -Pn
Obtener información de puertos y dirección MAC de un host:
nmap -sV <IP>
sudo nmap -sV <IP>
Si el equipo no responde, probar:
sudo nmap -sV <IP> -Pn
El comando nmap, ¿escanea todos los puertos? (¿Qué sucede con los 1000 puertos "raíz")
Comprobar si un determinado puerto está abierto, aunque no esté activo:
nmap -p 8000 127.0.0.1
nmap -p 8000 localhost
Probar con la propia IP de la máquina y también con la IP de localhost. ¿Qué puede deducirse?
sudo nmap -p 0-65535 127.0.0.1
sudo nmap -p 0-65535 <IP>
Los servicios que solo están vinculados a "localhost" solo se muestran con el comando nmap en 127.0.0.1 (muchas veces sucede con motores de bases de datos, tales como mariaDB, etc.), y los asociados a la IP del mismo host, haciendo nmap a ésta.
lsof
sudo lsof -i:<PUERTO>
sudo lsof -i -P -n | grep LISTEN
Cerrar puertos.
sudo ss --kill state listening src :8000
Listar proceso corriendo en un determinado puerto:
fuser 8080/tcp
Matar proceso corriendo en un determinado puerto:
fuser -k 8080/tcp
nslookup
Obtener IP WAN:
nslookup myip.opendns.com resolver1.opendns.com
cual-es-mi-ip.net
Obtener ip de sitio:
nslookup www.wikipedia.org
Ejemplos nslookup:
https://www.thegeekstuff.com/2012/07/nslookup-examples/
Encender y apagar tarjeta de red.
ip link set <NOMBRE_TARJETA> up
ip link set <NOMBRE_TARJETA> down
Obtener MAC ADDRESS
arp-scan a <IP>
Revisar (I), abrir (II) y cerrar (III) puertos.
I)
Con lsof.
Para 1 puerto específico (el 3891).
sudo lsof -nP -i:3891
sudo lsof -nP -iTCP:3891
sudo lsof -nP -iUDP:3891
Para todos los puertos.
sudo lsof -nP -iTCP -sTCP:LISTEN
-n: sin "host names"
-P: sin "port names"
-i: IP v4 o v6
-s: "size"
Con ss.
sudo ss -tunpl
-t: TCP
-u: UDP
-n: "numeric"
-p: "process"
-l: "listening"
Con nmap.
nmap localhost -p 38911
sudo nmap -n -PN -sT -sU -p- localhost
-n: evita resolución de DNS.
-PN: se saltea la fase de "descubrimiento".
-sT and -sU - "scan" modo TCP y UDP.
-p: todos los puertos.
Con netcat.
nc -z -u -v localhost 1-65535
-z: modo "zero-I/O".
-u: UDP | -t: TCP.
-v: "verbose", verborragia.
Con netstat (en desuso).
-t: TCP
-u: UDP.
-n: evita búsqueda de DNS y muestra solo direcciones IP, haciendo más rápida la ejecución.
-p: despliega el ID del proceso y el nombre del programa que está utilizando el puerto.
-l: puertos en estado "listening".
II)
sudo iptables -A INPUT -p tcp --dport 3891 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 3891 -j ACCEPT
-A: "append", agregar.
INPUT: regla de entrada.
-p: "protocol", protocolo (tcp/udp).
--dport: "destination port", puerto de destino.
-j: "jump target", saltar hacia el objetivo, hacer inmediatamente.
ACCEPT: aceptar el tráfico.
En lugar de INPUT, se pueden utilizar para otras acciones: OUTPUT y FORWARD.
En lugar de ACCEPT, se pueden utilizar para otras acciones: DROP y RETURN.
III)
Para 1 puerto específico.
sudo ss --kill state listening src :3891
fuser -k -n tcp 3891
fuser -k -n udp 3891
iptables -I INPUT -p tcp --dport 3891 -j DROP
sudo netstat -ap | grep :3891
kill <PID_SALIDA_NETSTAT>
Si la línea anterior no funciona, utilizar "kill -9" en lugar de "kill".
Para todos los puertos (2 maneras).
iptables -F INPUT;iptables -P INPUT REJECT
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
-F equivale a "--flush", y sirven ambos atributos para eliminar todas las reglas preexistentes.
-P: "policy", política predeterminada.
ACCEPT: permite el paso de paquetes sin realizar acciones adicionales.
DROP: descarta paquetes sin enviar notificaciones.
REJECT: descarta paquetes, enviando mensajes de rechazo al remitente.
Se recomienda leer:
https://phoenixnap.com/kb/linux-check-open-ports
https://www.digitalocean.com/community/tutorials/opening-a-port-on-linux
0 Comentarios:
Publicar un comentario