Páginas

sábado, 2 de enero de 2016

Punto de Acceso OpenBSD

Punto de Aceso (tiene las funciones de un puente, conecta dos redes con niveles de enlace parecidos o distintos) Soekris net5501 OpenBSD 5.7.

Contribuir con el projecto OpenBSD


OpenBSD Soekris router instalación y configuración

OpenBSD y su fabuloso firewall "PF" para hacer un gran punto de acceso inalámbrico, (estación base) para otras tarjetas wireless.

OpenBSD es confiable, segura y para alguien que esté familiarizado con UNIX OS muy intuitivo de usar. Todo es sencillo, bien diseñado y documentado. El principal esfuerzo del proyecto es mantener el source base libre de vulnerabilidades mediante el mantenimiento de un código fuente de alta calidad.

La tarjeta de red mini-PCI inalámbrica está basada en el chipset Atheros (ath), posee dos conectores UFL para la conexión de dos antenas externa. Soporta estándar a/b. Los chipsets basados en Realtek (rl0) funcionan mejor en OpenBSD (p.e, Ralink RT2561 mini-PCI):
OpenBSD chipsets Realtek
Soporte OpenBSD chipsets Wireless

Identificar la tarjeta inalámbrica

# /usr/sbin/pcidump |grep -i atheros
 0:17:0: Atheros AR5413

# dmesg | grep -i ath0            
mpath0 at root
scsibus0 at mpath0: 256 targets
ath0 at pci0 dev 17 function 0 "Atheros AR5413" rev 0x01: irq 15
ath0: AR5413 10.4 phy 6.1 rf 6.3 eeprom 5.3, FCC2A*, address 00:80:48:69:7f:cc



Para poder utilizar algunas de estas tarjetas, tendrá que adquirir los archivos de firmware que los fabricantes se niegan a permitir la libre distribución, por lo que no puede incluirse en OpenBSD. Para facilitarnos la vida, OpenBSD nos proporciona el comando fw_update para instalar o actualizar paquetes de firmware non-free

Calcular los rangos de IP, dos segmentos de red (ethernet, wireless)


Archivo configuración /etc/hostname.ath0 encriptación WPA
inet 192.168.3.129 255.255.255.128 NONE media autoselect mediaopt hostap \
mode 11b nwid soekris wpakey speak%#frie45 chan 4

Permisos de /etc/hostname.ath0
# chmod 0600 /etc/hostname.ath0

Cambios en el archivo /etc/hostname.vether0
inet 192.168.3.1 255.255.255.128 NONE
up

Archivo /etc/dhcpd.interfaces

# cat dhcpd.interfaces
vether0 ath0

Los clientes recibirán una ip del servidor DHCP

shared-network LOCAL-NET {
option domain-name "unix.bcn";
option domain-name-servers 208.67.222.222, 208.67.220.220;

# ethernet network
subnet 192.168.3.0 netmask 255.255.255.128 {
        option routers 192.168.3.1;
        range 192.168.3.10 192.168.3.100;
        default-lease-time 3600;
        max-lease-time 1200;
    }

# wireless network
subnet 192.168.3.128 netmask 255.255.255.128 {
        option routers 192.168.3.129;
        range 192.168.3.130 192.168.3.250;   
     }
}

dhcpd.leases* archivo(s) donde se almacena un log con todas las peticiones:

CREAR EL ARCHIVO /va/db/dhcpd.leases.ral0, interfaz inalámbrica

# touch /var/db/dhcpd.leases.ath0
# /usr/sbin/dhcpd -l /var/db/dhcpd.leases.ath0 ath0
Añadir al archivo /etc/rc.conf.local dhcpd_flags ath0:

dhcpd_flags="vether0 ath0"


Configurar unbound

# wget ftp://FTP.INTERNIC.NET/domain/named.cache -O \
/var/unbound/etc/root.hints

Archivo de configuración

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

    interface: 192.168.3.1
    interface: 192.168.3.129
    interface: 127.0.0.1
    do-ip6: no
        access-control: 127.0.0.0/8 allow
        access-control: 192.168.3.0/25 allow
        access-control: 192.168.3.128/25 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 



Archivos creados durante la instalación del Router  que no cambiarán
# cat /etc/hostname.vr0
inet 192.168.1.200 255.255.255.0
# cat /etc/hostname.vr1
up
# cat /etc/hostname.vr2
up
# cat /etc/hostname.vr3
up                                                    


Reiniciar todas las interfaces de red:
# sh /etc/netstart


dnscrypt-proxy

Instalar desde ports
# pkg_add -v dnscrypt-proxy

# 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

 Cambios en el archivo de conguración /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 ath0 }"
ext_if="vr0"
int_net="192.168.3.0/24"
table <bruteforce> persist file "/var/db/bruteforce"
table <scums> persist file "/var/db/scums"
broken="224.0.0.22 127.0.0.0/8 172.16.0.0/12 \
        10.0.0.0/8 169.254.0.0/16 192.0.2.0/24 \
        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 proteccion contra ciertos tipos
# de los ataques basados en la manipulacion incorrecta de fragmentos
# de paquetes .
match in all scrub (no-df max-mss 1440)

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

# By default, do not permit remote connections to X11
block return in on ! lo0 proto tcp to port 6000:6010

# Pass all traffic on internal interfaces
# vether0 is necessary here, but bridge0 is not
# 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

# port forwarding
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

# proteger el puerto 22 (SSH ) a partir de intentos no autorizados 
# para escribir logins fuerza bruta
block quick log from <bruteforce>
pass in quick log on vr0 inet proto tcp to (egress) port ssh flags S/SA \
keep state (max-src-conn 3, max-src-conn-rate 3/50, overload \
<bruteforce> flush global)

# bloquear spam ip's
block quick log from <scums>

# 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

# Permitir conexiones SSH desde el exterior y rdr a maquina interna
pass in on egress inet proto tcp to (egress) port ssh flags S/SA \
synproxy state rdr-to 192.168.3.130



Conectar un cliente al AP

Tablas de enrutamiento ipv4

# netstart -rn





OpenBSD es genial!.

2 comentarios:

  1. Estuve mirando los articulos que subiste de OpenBSD, muy buenos. En genearal todo el contenido del blog es genial, te felicito.

    ResponderEliminar