Prácticas con sistemas Linux para curso de introducción a redes y servidores.

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).

sudo netstat -tunpl

-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

Flag Counter Visitas previas a la existencia de este contador: 3433

Artículos aleatorios

    Páginas: