Páginas

sábado, 26 de diciembre de 2015

scums bruteforce OpenBSD pf


SCUMS soekris pf openbsd

IPs para las listas de bloqueo del firewall. Estas provienen de :

Redes de spam identificados por Spamhaus ( www.spamhaus.org )
Top atacantes listados por DShield ( www.dshield.org )
Abuse.ch
Más información disponible en www.emergingthreats.net

Descargar una lista.

# wget http://rules.emergingthreats.net/fwrules/emerging-Block-IPs.txt
# mv emerging-Block-IPs.txt scums
# mv scums /var/db/

Añadir entradas a /etc/pf.conf
# vim /etc/pf.conf




Recargar pf
# pfctl -f /etc/pf.conf

Comprobando si se han añadido las direcciones IP:
# pfctl -t scums -T show | wc -l
    1315

BRUTEFORCE

Este tutorial ilustra la protección de puerto 22 (SSH) a partir de los intentos no autorizados para escribir logins utilizando fuerza bruta.

Crear un archivo en el que almacenar las direcciones IP abusadoras.

# touch /var/db/bruteforce

Vamos a añadir entradas a /etc/pf.conf. max- src-conn 3 significa hasta 3 conexiones desde una sola dirección IP, -conn-tasa max-src 3/50 significa hasta 3 conexiones por dirección IP dentro de 50 segundos. El cuarto intento dentro de los 50 segundos acabará añadiendo y bloqueando la IP a la db bruteforce.

# vim /etc/pf.conf


Recargar pf

# pfctl -f /etc/pf.conf

Agregar una entrada en el crontab para añadir la IP en la tabla. Se añaden al archivo /var/db/bruteforce . ¿Cómo va a agregar la nuevoa IP Abuse?, todos los días a las 1:30 cron lo sumará a /var/db/bruteforce . ¿Por qué debería añadir IP?, para evitar perder la IP al recargar pf o reiniciar el sistema.

# crontab -e

30  7  *  *  *  /sbin/pfctl -t bruteforce -T show | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" > /var/db/bruteforce

Comprobar que todo marcha como debiera.

# pfctl -t bruteforce -T show
   60.173.26.206
   113.73.61.113
   222.186.15.200
   222.186.31.237
   222.186.52.158

Redireccionar conexiones SSH: archivo /etc/pf.conf

Cada vez que una conexión entrante desde Internet hacia el puerto TCP 22 en la interfaz de salida, redireccionar a la IP 192.168.3.130 del cliente LAN.

pass in on egress inet proto tcp to (egress) port ssh rdr-to 192.168.3.130

ARCHIVO /etc/pf.conf

Bibliografía:
http://www.tw.openbsd.org/faq/es/faq6.html
http://www.bsdweb.org/bruteforce.html

OpenBSD es genial!.

jueves, 10 de diciembre de 2015

OpenBSD Soekris router

Originally written by TJ for bsdnow.tv 

Los routers domésticos para uso masivo son particularmente deficiente, son de propiedad, ofrecen muy poca flexibilidad y tienen problemas de seguridad.

Vamos a construir nuestra propia puerta de entrada basado en OpenBSD (5.7 i386), PF y Soekris net5501 para recuperar el control de la red.


Porqué Soekris?: Es compacto, bajo consumo de energía, comunicación avanzada, no utiliza partes móviles, larga vida y compatible con todos los sistemas basados en BSD (OpenBSD, FreeBSD, NetBSD, Pfsense).


Hardware:
- Soekris net5501-60 (net5501-60: 433 Mhz CPU, 256 Mbyte DDR-SDRAM, 4 Ethernet puertos)
- Cargador alimentación
- Disco duro SSD Intel 40GB serie 320 Sata II
- Tarjeta red PCI adicional (4 Ethernet puertos)
- Cables de red Cat6
- USB a serial convertidor
- null modem cable


Medios de instalación:

1. Una de los medios de instalación de OpenBSD en una Soekris utiliza un cable serie (hembra hembra) más un adaptador USB serial converter (el puerto serie ha desaparecido de los portátiles), un servidor FreeBSD con dhcp, tftp y arrancar a través de la tarjeta Ethernet (PXE).

2. La flexibilidad de OpenBSD es tal que puede instalar el sistema baśico (i386) en un portátil (aunque el portátil es x64 bits), reiniciar, autenticarse como root, cambiar el nombre de la tarjeta de red (en mi caso, msk0 por /etc/hostname.vr0), conectar el disco ssd a la soekris (apagada). Luego conectar el cable serie teclear en un terminal (en este caso el sistema operativo del cliente es FreeBSD 10.1 y teclear lo siguiente :

# cu -l /dev/ttyU0 -s 19200
conected

conectar la soekris y en ls terminal verá iniciar el sistema de la soekris. Antes de terminar la cuenta atrás de 5 segundos teclear Ctrl + p luego teclear:

> boot
> stty com0 19200
> set tty com0
> intro

Verá el proceso de arranque, veremos la IP asignada a la tarjeta de red vr0 (externa), por el router ADSL (192.168.1.139). Abrir otra terminal y entrar vía ssh desde una estación de trabajo. Nos ponemos en la misma red, conectando un cable directamente al router. Esto porque?,  la interfaz LAN (192.168.3.1) aún no ha sido creada.

Las tarjetas de red se muestran como vr0, vr1, vr2, vr3, sis0, sis1, sis2, sis3, La primera (vr0) será la interfaz externa y las tres siguientes como interfaces internas de la LAN. El resto de interfaces (sis0, sis1, sis2, sis3) se agrega al conectar más equipos. La interfaz ath0 es la inalámbrica.

Proveedor y producto integrado en la imagen de la BIOS

# sysctl hw.vendor && sysctl hw.product
hw.vendor=Soekris Engineering
hw.product=net5501

RED:

La reducción de las tarjetas de red internas con la interfaz Ethernet virtual permite a las máquinas cliente conectar directamente a la puerta de entrada, sin la necesidad de un interruptor (switch).

# echo dhcp > /etc/hostname.vr0                                               
# echo up > /etc/hostname.vr1                                                 
# echo up > /etc/hostname.vr2                                                 
# echo up > /etc/hostname.vr3                                                 
# echo 'inet 192.168.3.1 255.255.255.0 NONE' > /etc/hostname.vether0 
# echo 'up'>>/etc/hostname.vether0

Usando la opción blocknonip se puede evitar que cuele tráfico no IP. Los puentes de red funcionan para todo tipo de tráfico no solo IP. Requiere que los NIC esten en modo PROMISCUO (a la escucha para todo el tráfico de red, no solo para la interfaz redireccionada).

# cat /etc/hostname.bridge0

add vether0
add vr1
add vr2
add vr3
blocknonip vether0
blocknonip vr1
blocknonip vr2
blocknonip vr3
up

Reiniciar interfaces de red:
# sh /etc/netstart vether0 vr1 vr2 vr3 bridge0

# cat /etc/sysctl.conf
net.inet.ip.forwarding=1
net.inet.ip.redirect=0
kern.bufcachepercent=50
net.inet.ip.ifq.maxlen=1024
net.inet.tcp.mssdflt=1440


DHCP

Los clientes de LAN necesitan una ip, vamos a configurar un servidor dhcp e iniciarlo al arranque:

# echo 'dhcpd_flags="vether0"' >> /etc/rc.conf.local

# cat /etc/dhcpd.conf
subnet 192.168.3.0 netmask 255.255.255.0 {
        option domain-name "unix.bcn";
        option domain-name-servers 1.1.1.1, 1.0.0.1;
        option routers 192.168.3.1;
        range 192.168.3.2 192.168.3.100;
        default-lease-time 604800;
}


DNS

Un servidor de almacenamiento en caché de DNS local es bastante fácil utilizando unbound, que es parte del sistema base, junto con DNSCrypt para mantener nuestras búsquedas en privado.

# echo 'unbound_flags=""' >> /etc/rc.conf.local
# ee /var/unbound/etc/unbound.conf

# wget ftp://FTP.INTERNIC.NET/domain/named.cache -O \

/var/unbound/etc/root.hints


## Simple recursive caching DNS
## /var/unbound/etc/unbound.conf
#
server:
    # log verbosity
    verbosity: 1

    interface: 192.168.3.1
    interface: 127.0.0.1
    do-ip6: no
        access-control: 127.0.0.0/8 allow
        access-control: 192.168.3.0/24 allow


# file.  get one from ftp://FTP.INTERNIC.NET/domain/named.cache
    root-hints: "/var/unbound/etc/root.hints"

# nombre de usuario por defecto
    username: "_unbound"

# enable to not answer id.server and hostname.bind queries.
    hide-identity: yes

# enable to not answer version.server and version.bind queries.
    hide-version: yes

    do-not-query-localhost: no

    do-ip4: yes
    directory: "/var/unbound/etc"

forward-zone:
      name: "."
      forward-addr: 127.0.0.1@40


Habilitar e iniciar el servicio utilizando rcctl como root

 
# rcctl enable unbound
# rcctl start unbound
unbound(ok)
unbound(ok)




dnscryp-proxy

Vamos a configurar dnscryt-proxy, se instala desde ports o paquetes:

# export PKG_PATH="http://ftp.eu.openbsd.org/pub/OpenBSD/5.7/packages/`machine -a`/"

# echo 'pkg_scripts="dnscrypt_proxy"' >> /etc/rc.conf.local
# echo 'dnscrypt_proxy_flags="-l /dev/null -R dnscrypt.eu-nl -a \
127.0.0.1:40"' >> /etc/rc.conf.local
# echo 'nameserver 127.0.0.1' > /etc/resolv.conf


Crear el archivo log y hacer al usuario _dnscrypt-proxy propietario del archivo

# touch /var/log/dnscrypt-proxy.log
# chown _dnscrypt-proxy:_dnscrypt-proxy /var/log/dnscrypt-proxy.log

Lo siguiente es iniciar dnscrypt-proxy como usuario _dnscrypt-proxy. La opción -l /var/log/dnscrypt-proxy.log permite monitorear errores. La opción por defecto es -l /dev/null.

# /usr/local/sbin/dnscrypt-proxy -d --user=_dnscrypt-proxy -l \
/var/log/dnscrypt-proxy.log -R dnscrypt.eu-nl -a 127.0.0.1:40

Visualizar el registro



# tail -n 20 /var/log/dnscrypt-proxy.log  
[NOTICE] Starting dnscrypt-proxy 1.4.3
[INFO] Initializing libsodium for optimal performance
[INFO] Generating a new key pair
[INFO] Done
[INFO] Server certificate #808464433 received
[INFO] This certificate looks valid
[INFO] Chosen certificate #808464433 is valid from [2015-09-11] to [2016-09-10]
[INFO] Server key fingerprint is E7AC:5C21:A4E6:6A90:B254:DD73:5229:3BA1:5BE9:8EB3:4E8F:E538:52DE:A2FB:DDB6:1357
[NOTICE] Proxying from 127.0.0.1:40 to 176.56.237.171:443                                                              
[INFO] Generating a new key pair
[INFO] Done
[NOTICE] Starting dnscrypt-proxy 1.4.3
[INFO] Initializing libsodium for optimal performance
[INFO] Generating a new key pair
[INFO] Done

Puede editar /etc/dhclient.conf por lo que no sobrescribe el servidor de nombres local.
# echo 'ignore domain-name-servers;' >> /etc/dhclient.conf

o evitar cambios en el fichero /etc/resolv.conf
# chflags schg /etc/resolv.conf

# /etc/rc.d/dhcpd start

Archivo /etc/resolv.conf cliente freebsd

$ cat /etc/resolv.conf
# /etc/resolv.conf
search unix.bcn
nameserver 192.168.3.1

Impedir cambios en el archivo /etc/resolv.conf
# chflags schg /etc/resolv.conf

NTPD

ntpd OpenBSD archivo de configuración:
# cp /etc/examples/ntpd.conf /etc



# echo 'ntpd_flags="-s"'>>/etc/rc.conf.local

# ntpctl -sa

Redirigir a la fuerza las peticiones de todos los clientes LAN al servidor ntpd que se está ejecutando en la máquina soekris con una línea como esta en /etc/pf.conf:

pass in quick on $int_if proto udp from any to ! 192.168.3.1 \ port 123 rdr-to 192.168.3.1

Sincronizar la hora de un cliente de la red:

# ntpdate -u 192.168.3.1
9 Dec 07:51:41 ntpdate[1548]: step time server 192.168.3.1 offset -3557.387959 sec

PF /etc/pf.conf

# cat /etc/pf.conf                                                             
#       $OpenBSD: pf.conf,v 1.54 2014/08/23 05:49:42 deraadt Exp $
#
# See pf.conf(5) and /etc/examples/pf.conf
int_if="{ vether0 vr1 vr2 vr3 }"
ext_if="vr0"
int_net="192.168.3.0/24"
broken="224.0.0.22 127.0.0.0/8 192.168.0.0/16 172.16.0.0/12, \
        10.0.0.0/8 169.254.0.0/16 192.0.2.0/24, \
        198.51.100.0/24, 203.0.113.0/24, \
        169.254.0.0/16 0.0.0.0/8 240.0.0.0/4 255.255.255.255/32"
set block-policy drop
set loginterface egress
set skip on lo0
# scrub proporciona una medida de protección contra ciertos tipos
# de ataques basados en la manipulación incorrecta de fragmentos
# de paquetes .
match in all scrub (no-df max-mss 1440)

block return    # block stateless traffic
pass            # establish keep-state

# Por defecto, no permita conexiones remotas a X11
block return in on ! lo0 proto tcp to port 6000:6010

# Dejar pasar todo el tráfico en las interfaces internas
# vether0 es necesario aquí, pero no bridge0
# pass quick on { vether0 vr1 vr2 vr3 }
pass quick on $int_if

# permitir ICMP entrante sobre todas las interfaces
pass in inet proto icmp all icmp-type echoreq

# Traduccion de direcciones de red
match out on egress inet from !(egress:network) to any nat-to (egress:0) 

# Es recomendable desactivar el filtrado en las interfaces de
# loopback, pero esto se convierte en necesidad cuando se utilizan
# reglas contra  falsificaciones: antispoof for vr0 inet
antispoof quick for ($ext_if) inet

# bloquear todo el trafico IPv6 evaluar y soltar, sin perder el tiempo
block return out quick inet6 all
block in quick inet6 all

# fuerza redireccion de toda la LAN al servidor ntpd que corre en soekris
pass in quick on $int_if proto udp from any to ! 192.168.3.1 port 123 \
rdr-to 192.168.3.1

# Asegurese de que usted no esta realmente utilizando estos rangos de 
# direcciones o puede romper la conectividad.
block in quick on egress from { $broken no-route urpf-failed } to any

# Estas reglas se evaluan de una forma algo diferente. Si un paquete
# concuerda con la linea block, debido a la naturaleza de la opcion
# quick, se bloquea el paso a dicho paquete y se ignora el resto
# del grupo de reglas.
block in quick on $ext_if proto tcp to port ssh
pass in all

# permitir conexiones ssh desde la red interna
# pass in quick on $int_if proto tcp to port ssh



Traceroute

# traceroute www.google.es



Ajustes disco duro SSD:
Para minimizar el número de escrituras en el disco SSD vamos a el flag noatime al punto de montaje y habilitar soft updates:


SONIDO

El servidor de sonido no tiene utilidad en un router, vamos a desactivarlo:

# echo 'sndiod_flags=NO'>>/etc/rc.conf.local

CREAR ARCHIVO /etc/boot.conf antes del primer reinicio:

# echo 'stty com0 19200'>/etc/boot.conf
# echo 'set tty com0'>>/etc/boot.conf
# chmod 644 /etc/boot.conf
# reboot

APMD (net5501 no lo soporta)

También es posible habilitar apmd para ahorrar energía si el hardware lo soporta. La CPU hacia abajo en momentos de inactividad hacia arriba cuando la carga alcanza un cierto punto.

# echo 'apmd_flags="-A"' >> /etc/rc.conf.local
# /etc/rc.d/apmd start

USB SERIE NULL MODEM

Reinicio alternativo - sin archivo /etc/boot.conf

Por último vamos a detener el sistema, conectar el cable USB serial converter + null modem a una estación de trabajo (portátil FreeBSD 10.2) reiniciar y visualizar la secuencia de arranque. Conectar el cable USB serial convert y teclear en la primera terminal (1):

cu -l /dev/ttyU0 -s 19200
Conected

En una segunda terminal (2):
# ssh 192.168.3.1
# halt -p

En la terminal 1 verá - "Sistema halt teclee cualquier tecla para reicinicar". 
Siga el proceso:

- Ctrl+P
> boot
> stty com0 19200
> set tty com0
> Intro

# dmesg
...
ugen4.3: at usbus4
uftdi0: on usbus4
...

Abrir otra terminal entrar en el dispositivo via ssh y apagar. En la primera terminal saldrá un mensaje que dice el sistema fué apagado presione cualquier tecla para reiniciar.


PRUEBA MD5
A partir de la versión 5.2 de OpenBSD añade soporte a la escala de frecuencia SpeedStep.

El índice de referencia a tener en cuenta utiliza el comando md5 (1), y time trial test:

# md5 -ttt

Se puede apreciar que estoy recibiendo aproximadamente 34 Mbytes/segundo. La velocidad contratada con el proveedor ISP es de 30 MB/s.



Archivo para cambiar nivel de seguridad (securelevel)


Instalar vim no_x11 OpenBSD:

Archivo de inicialización personal ~/.vimrc:


$ cat ~/.vimrc                                                                  
set nocompatible
set et
set sw=4
set smarttab
set number

filetype plugin on
syntax on

set background=dark
colorscheme desert


Bibliografía:

http://www.tw.openbsd.org/faq/es/faq6.html
http://bodgitandscarper.co.uk/
http://www.openbsd.org/faq/

OpenBSD es genial!.

PXE Servidor FreeBSD

Instalar OpenBSD Soekris net 5501 FreeBSD.

Disco duro Intel SSD Serie 320 Sata II - 40 GB

Creación de un servidor de arranque de Red FreeBSD PXE

Necesita:
Habilitar SSH
Servidor DHCP
Servidor TFTP
Null modem cable
USB serial converter cable
Es un servidor FreeBSD con dos NIC una para el acceso desde la red externa
(em1 - WAN = 192.168.1.0/24), y otra para actuar como servidor de la red de arranque
(em0 - LAN = 192.168.3.0/24). IPFilter Firewall.
Salida VGA

Conectar al servidor para su configuración :
# ssh 192.168.3.1

Servidor dhcp

# pkg install isc-dhcp42-server
# echo 'dhcpd_enable="YES"'>>/etc/rc.conf
# echo 'dhcpd_ifaces="em0"'>>/etc/rc.conf

$ sed -e '/^[ ]*#/d' -e '/^$/d' /usr/local/etc/dhcpd.conf


Archivo /etc/rc.conf

Servidor tftpd

# sed -e '/^[ ]*#/d' -e '/^$/d' /etc/inetd.conf
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot


Archivo /etc/resolv.conf servidor

search unix.bcn
nameserver 127.0.0.1
nameserver 208.67.222.222
nameserver 208.67.220.220
options edns0

Archivo /etc/resolv.conf cliente
search unix.bcn
nameserver 192.168.1.1
lookup file bind

# sockstat -4 | grep inetd
root     inetd      702   5  udp4   *:69  *:*
# mkdir /tftpboot
# chmod 755 /tftpboot

Comprobar tftp desde el cliente:
$ hostname
openBSD.unix.bcn
$ tftp 192.168.3.1
tftp> get index.txt
Received 1380 bytes in 0.1 seconds
tftp> quit
$

Descargar archivos del servidor OpenBSD 5.7 i386 (soekris net5501)

# cd /tftpboot
# fetch http://mirror.codigo23.net/pub/OpenBSD/5.7/i386/index.txt
index.txt                                     100% of 1489  B   35 kBps 00m00s
Successfully retrieved file.

Bajar todos los ficheros listados dentro de index.txt
# cat index.txt | grep -v '.iso' | tee index.txt | while read file ;  do \
>  ftp http://mirror.roothell.org/pub/OpenBSD/5.7/i386/"$file" \
> done
100% |********************************************************************************|   106 KB    00:00  
100% |********************************************************************************| 22356       00:00  
100% |********************************************************************************|  1022       00:00  
100% |********************************************************************************| 46941 KB    00:27  
100% |********************************************************************************|  6539 KB    00:02  
100% |********************************************************************************|  6558 KB    00:03  
100% |********************************************************************************|  5461 KB    00:02  
100% |********************************************************************************|
...

Ahora crear el fichero /etc/boot.conf con este contenido:
stty com0 19200
set tty com0

Soekris utiliza esta configuración para poder acceder a la consola serie. Después de que su servidor de instalación se haya reiniciado, el proceso es el mismo que en una instalación normal.

Nota: Las tarjetas Compact Flash conectan a 115,200. Algo así:
# cu -l /dev/ttyU0 -s 115,200

Bibliografía:
http://wiki.soekris.info/Connecting_to_the_serial_console
http://dustingram.com/articles/2009/08/25/creating-a-freebsd-pxe-network-boot-server/
http://meinit.nl/install-your-soekris-or-any-other-machine-openbsd-using-openbsd

Unix es genial!.