Share
## https://sploitus.com/exploit?id=744E2ED1-A4AC-54A1-A6BF-29BB94C81F35
# Proxmox Network Lab + Hardening

Despliegue de servicios corporativos esenciales sobre Proxmox VE con hardening y monitorizaci贸n b谩sica. Entorno de laboratorio SOC sobre LXC Debian.

---

## 脥ndice

1. [Proxmox: Instalaci贸n y configuraci贸n inicial](#1-proxmox-instalaci贸n-y-configuraci贸n-inicial)
2. [LXC Debian: Creaci贸n y configuraci贸n base](#2-lxc-debian-creaci贸n-y-configuraci贸n-base)
3. [SSH: Hardening y autenticaci贸n por clave](#3-ssh-hardening-y-autenticaci贸n-por-clave)
4. [Fail2ban: Protecci贸n contra fuerza bruta SSH](#4-fail2ban-protecci贸n-contra-fuerza-bruta-ssh)
5. [SMB Server: Samba con hardening](#5-smb-server-samba-con-hardening)

---

## 1. Proxmox: Instalaci贸n y configuraci贸n inicial

### Adaptador de red bridge (en host Debian con nmcli)

Si Proxmox se instala sobre Debian, hay que crear un bridge de red para que las VMs tengan acceso directo a la red f铆sica.

```bash
# Identificar la interfaz principal (ej: eno1)
ip a

# Crear bridge con DHCP autom谩tico
sudo nmcli con add type bridge ifname br0 con-name br0 ipv4.method auto

# A帽adir la interfaz f铆sica como puerto del bridge
sudo nmcli con add type bridge-slave ifname eno1 master br0

# Bajar la interfaz original (se pierde conexi贸n moment谩neamente)
sudo nmcli con down "Wired connection 1"

# Levantar el bridge
sudo nmcli con up br0

# Eliminar la conexi贸n antigua para evitar conflicto en el arranque
sudo nmcli con del "Wired connection 1"
```

Al crear VMs en virt-manager, seleccionar la conexi贸n `br0`.

### Repositorios: deshabilitar enterprise, habilitar no-subscription

En `Datacenter > Updates > Repositories`:

- Deshabilitar `pve-enterprise` y `ceph enterprise` (requieren suscripci贸n)
- A帽adir `pve-no-subscription` y `ceph no-subscription`

Luego desde la shell del nodo: `Datacenter > Shell > Upgrade`.

### Ampliar disco: eliminar LVM-thin y recuperar espacio

Por defecto Proxmox reserva espacio en un volumen `pve/data` (LVM-thin) que no es necesario en un lab. Se puede recuperar ese espacio para el sistema ra铆z.

En `Datacenter > Storage`: a帽adir contenido `Backup` y `Container` al almacenamiento `local`, y eliminar `local-lvm`.

Luego ejecutar en la shell, uno a uno:

```bash
lvremove /dev/pve/data
lvresize -l +100%FREE /dev/pve/root
resize2fs /dev/mapper/pve-root
```

---

## 2. LXC Debian: Creaci贸n y configuraci贸n base

### Crear contenedor

1. Ir a `local (pve) > CT Templates > Templates`
2. Descargar la plantilla deseada (en este lab: Debian 13.1)
3. Pulsar `Create CT` (arriba a la derecha)
4. Asignar hostname, contrase帽a e ID
5. Seleccionar template, disco, CPU cores y memoria
6. En `Network`, dejar IPv4 en `DHCP`
7. DNS por defecto y confirmar

Si tras arrancar no hay ping ni `apt`, volver a Network y reconfirmar DHCP.

```bash
# Actualizar el sistema dentro del contenedor
apt update && apt upgrade -y
```

---

## 3. SSH: Hardening y autenticaci贸n por clave

### Instalaci贸n

```bash
sudo apt update && sudo apt install openssh-server -y

# Verificar que el servicio est谩 activo
sudo systemctl status ssh

# Verificar puerto de escucha
sudo ss -tlnp | grep :22
```

### Crear usuario y autenticaci贸n por clave

```bash
# En el servidor: crear usuario con sudo
adduser usuario
usermod -aG sudo usuario

# En el cliente: generar par de claves ed25519
ssh-keygen -t ed25519 -C "proxmox-debiantest"

# Copiar la clave p煤blica al servidor
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@192.168.100.50
```

Tras esto el login SSH no pedir谩 contrase帽a.

### Hardening de sshd_config

Editar `/etc/ssh/sshd_config`:

```
PermitRootLogin no
LogLevel VERBOSE
ClientAliveInterval 600
ClientAliveCountMax 3
MaxAuthTries 3
```

| Directiva | Motivo |
|---|---|
| `PermitRootLogin no` | Obliga a usar un usuario con sudo, eliminando el vector de ataque directo sobre root |
| `LogLevel VERBOSE` | Registra fingerprint de clave en cada autenticaci贸n, 煤til para auditor铆a y detecci贸n de accesos no autorizados |
| `ClientAliveInterval 600` | Cierra sesiones inactivas tras ~30 min (600s 脳 3), libera recursos y reduce ventana de acceso no atendido |
| `MaxAuthTries 3` | Limita intentos por conexi贸n antes de cortar, complementa a Fail2ban |

```bash
sudo systemctl restart ssh
```

### Logging con rsyslog

Por defecto en Debian el logging SSH va a `journald`. Se instala `rsyslog` para tener un archivo `auth.log` persistente y compatible con Fail2ban.

```bash
apt install rsyslog -y
systemctl enable --now rsyslog
systemctl restart ssh

# Verificar que auth.log se genera con tr谩fico
tail -f /var/log/auth.log
```

Comprobar que logrotate est谩 configurado para evitar que `auth.log` llene el disco:

```bash
cat /etc/logrotate.d/rsyslog
# Debe incluir: rotate 4, weekly, compress, delaycompress
```

---

## 4. Fail2ban: Protecci贸n contra fuerza bruta SSH

```bash
apt install fail2ban -y
```

Crear `/etc/fail2ban/jail.local`:

```ini
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 3
banaction = iptables-multiport
backend = polling

[sshd]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
mode     = aggressive
maxretry = 3
bantime  = 1h
findtime = 10m
```

```bash
systemctl restart fail2ban

# Verificar que la jaula SSH est谩 activa
fail2ban-client status sshd
```

**Verificaci贸n de ban:** forzar autenticaci贸n por contrase帽a con usuario inexistente y comprobar que banea en el 3er intento:

```bash
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no usuariofake@192.168.100.50
```

`fail2ban-client status sshd` debe mostrar la IP baneada en `Banned IP list`.

---

## 5. SMB Server: Samba con hardening

### Instalaci贸n y preparaci贸n

```bash
sudo apt install samba -y

# Crear directorio del share
sudo mkdir -p /srv/samba/secure-share
sudo chown -R poce:poce /srv/samba/secure-share
sudo chmod 755 /srv/samba/secure-share

# Archivo de prueba
echo "SOC Lab - Samba Share - $(date)" | sudo tee /srv/samba/secure-share/README.txt
```

### Configuraci贸n: /etc/samba/smb.conf

```ini
[global]
   workgroup = WORKGROUP
   server string = Lab File Server
   netbios name = DEBIANTEST

   # Hardening de protocolo
   server min protocol = SMB2_10
   server max protocol = SMB3
   server signing = mandatory
   smb encrypt = required
   map to guest = never
   security = user

   # Logging por cliente
   logging = file
   log level = 2
   log file = /var/log/samba/log.%m
   max log size = 10000

   # Reducci贸n de superficie
   load printers = no
   disable spoolss = yes
   usershare allow guests = no
   idmap config * : backend = tdb

[secure-share]
   path = /srv/samba/secure-share
   comment = Shared folder for SOC Lab
   read only = yes
   valid users = poce
   hosts allow = 192.168.100.
   create mask = 0644
   directory mask = 0755
```

### Por qu茅 cada opci贸n de hardening

| Directiva | Motivo |
|---|---|
| `server min protocol = SMB2_10` | Deshabilita SMB1, vulnerable a EternalBlue y otros exploits cr铆ticos |
| `server signing = mandatory` | Obliga firma criptogr谩fica en todos los paquetes SMB, previene ataques MITM |
| `smb encrypt = required` | Fuerza cifrado SMB3 extremo a extremo, protege datos en tr谩nsito aunque la red est茅 comprometida |
| `map to guest = never` | Bloquea cualquier acceso an贸nimo o invitado sin excepci贸n |
| `logging = file` | Fuerza el backend de archivo; sin esto Samba 4.x puede priorizar journald e ignorar `log level` |
| `log file = /var/log/samba/log.%m` | Un archivo de log por cliente (`%m` = nombre NetBIOS). Facilita an谩lisis forense y detecci贸n de fuerza bruta por origen |
| `load printers = no` / `disable spoolss = yes` | Elimina el subsistema de impresi贸n, vector hist贸rico de exploits (PrintNightmare) |
| `hosts allow = 192.168.100.` | Restringe acceso a la subred del lab. `hosts deny` es redundante cuando existe `hosts allow` |

### Activar usuario Samba

```bash
sudo smbpasswd -a poce
sudo smbpasswd -e poce

# Verificar
pdbedit -L | grep poce
```

### Verificaci贸n y arranque

```bash
# Validar sintaxis
testparm -s

# Reiniciar servicios
sudo systemctl restart smbd nmbd

# Comprobar nivel de log activo
testparm -v | grep "log level"

# Revisar logs al conectar un cliente
ls -lh /var/log/samba/
tail -f /var/log/samba/log.
```

### Conexi贸n desde cliente

```bash
# Montar el share
sudo mkdir -p /mnt/smb-test
sudo mount -t cifs //192.168.100.50/secure-share /mnt/smb-test \
  -o username=poce,password=TU_CONTRASE脩A,vers=3.0,ro

ls -la /mnt/smb-test

# Verificar negociaci贸n SMB3
smbclient //192.168.100.50/secure-share -U poce -m SMB3
```