Páginas

sábado, 16 de enero de 2016

OpenBSD Soekris Ralink AP

Cambiar la tarjeta wireless (AP) Atheros (estandard a/b 11 Mbps) por Ralink (estandard a/b/g 54 Mbps)

Contribuir con el projecto OpenBSD

1.- http://gnulinuxcodigo.blogspot.com.es/2015/12/pxe-servidor-freebsd.html
2.- http://gnulinuxcodigo.blogspot.com.es/2015/12/openbsd-soekris-router.html
3.- http://gnulinuxcodigo.blogspot.com.es/2015/12/scums-bruteforce-openbsd-pf.html
4.- http://gnulinuxcodigo.blogspot.com.es/2016/01/punto-de-aceso-tiene-las-funciones-de.html
5.- http://gnulinuxcodigo.blogspot.com.es/2016/01/openbsd-soekris-ralink-ap.html

Ralink RT2561T tarjeta mini PCI Soekris


El adaptador de red elegido es soportado por OpenBSD


Características

CNet CWM-854 54 Mbps 802.11a/b/g Wireless Mini PC
802.11g: OFDM
Tipo de factor de forma III B
Modulación: 802.11b: CCK, DQPSK, DBPSK
no compatible con ranuras mini PCI express

Desde un terminal entrar vía ssh al router Soekris

$ ssh 192.168.3.1
Last login: Sat Jan 16 09:05:46 2016 from 192.168.3.22
OpenBSD 5.7 (GENERIC.MP) #0: Tue Jan  5 11:47:15 CET 2016

Welcome to OpenBSD: The proactively secure Unix-like operating system.
...

Apagar la máquina

$ su
password

# halt -p

Cambiar tarjeta wireless

Despues de apagar, desconectar la fuente de alimentación, abrir y sustituir la tarjeta atheros por la ralink.

El cable serie se conecta al portátil (FreeBSD) y teclear (como usuario root):

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

Encender router Soekris

Poner en marcha el router conectando el cable de alimentación. Cargará comBios, oprimir Ctrl-P para entrar en el monitor.

> boot
> stty com0 19200
> set tty com0
> Intro

Cuando termine de cargar el sistema, entrar vía ssh desde un cliente de la red autorizado:

$ ssh 192.168.3.1

$ uname -a
OpenBSD soekris.unix.bcn 5.7 GENERIC.MP#0 i386

Si no ha creado el archivo /etc/boot.conf con anterioridad, hágalo ahora para evitar introducir estos comandos manualmente: 
$ su
Password:

CREAR ARCHIVO /etc/boot.conf:

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

Algunas consideraciones:

El script fw_update, utiliza el sistema de paquetes para buscar a través de Internet. Donde quiera que el firmware proviene, se almacena en /etc/firmware por defecto.

# ls /etc/firmware/ral-*
/etc/firmware/ral-license  /etc/firmware/ral-rt2561s  /etc/firmware/ral-rt2860
/etc/firmware/ral-rt2561   /etc/firmware/ral-rt2661

fw_update se ejecuta en el primer arranque después de instalar o actualizar OpenBSD, pero se puede ejecutar en cualquier momento que se desee (se almacena en /usr/sbin). Soporta WPA 256 bits.

En la FAQ de OpenBSD vemos que esta inalámbrica soporta el modo Access Point (AP). El chipset Ralink RT2561 consiste en dos chipsets integrados, RT2561 MAC/BBP y un transceptor de radio RT2527. Soporta cifrado WPA-PSK de 264 bits.

$ dmesg | grep -i ral0

ral0 at pci0 dev 17 function 0 "Ralink RT2561" rev 0x00: irq 15, address 00:08:a1:c0:6e:e6
ral0: MAC/BBP RT2561C, RF RT2527


Averiguar el tipo de medio físico compatible con la interfaz:

# ifconfig ral0 media

supported media:

...

media autoselect
media autoselect mediaopt ibss
media autoselect mediaopt hostap
media autoselect mediaopt monitor
media autoselect mode 11b
media autoselect mode 11b mediaopt ibss
media autoselect mode 11b mediaopt hostap
media autoselect mode 11b mediaopt monitor
media autoselect mode 11g
media OFDM48 mode 11g mediaopt ibss
media OFDM48 mode 11g mediaopt hostap
media OFDM48 mode 11g mediaopt monitor
media OFDM54 mode 11g
media OFDM54 mode 11g mediaopt ibss
media OFDM54 mode 11g mediaopt hostap
media OFDM54 mode 11g mediaopt monitor
...

El archivo /etc/hostname.ral0 queda así

# cat /etc/hostname.ral0      
                                          
inet 192.168.3.129 255.255.255.128 192.168.3.255 media OFDM54 mode 11g \
mediaopt hostap \
nwid soekris wpakey 08xK78gBuY952euO \
priority 0 \
chan 1 \
up

El archivo /etc/dhcpd.conf

shared-network LOCAL-NET {
option domain-name "unix.bcn";
option domain-name-servers 192.168.3.1, 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;
        max-lease-time 1200;
        host portatil {
            fixed-address 192.168.3.2;
            hardware ethernet 00:21:9b:e2:cd:44;
         }
        host servidor {
            fixed-address 192.168.3.10;
            hardware ethernet 00:1f:3c:bf:a0:3c;
         }
    }

# 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; 
        max-lease-time 1200;
     }
}

Iniciar el servidor dhcp
# /etc/rc.d/dhcpd start


Desde el cliente
# killall -9 dhclient
# dhclient msk0
# ifconfig msk0



Crear el archivo /var/db/dhcp.leases para ral0

# touch /var/db/dhcpd.leases.ral0
# /usr/sbin/dhcpd -l /var/db/dhcpd.leases.ral0 ral0


Permisos de /etc/hostname.ral0

# chmod 600 /etc/hostname.ral0

Sin cambios /etc/hostname.vether0

# cat /etc/hostname.vether0                                                  
inet 192.168.3.1 255.255.255.128 192.168.3.127
up

El formato para IP estática versión 4

inet => IPv4
ipaddress => 192.168.3.1
netmask => 255.255.255.128
broadcast => 192.168.3.127

# cambios en el archivo /etc/hostname.bridge0

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

Reiniciar todas las interfaces de red

# sh /etc/netstart

Sustituir en los archivos /etc/rc.conf.local, /etc/pf.conf ath0 por ral0

Los archivos restantes (dhcpd.conf, unbound.conf), no precisan cambios.

unbound dnscrypt-proxy

# cat /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: 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


# 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, -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

$ ifconfig ral0


Conectar smartphone a la red inalámbrica


Nota: Los teléfonos inteligentes Android utilizan el archivo /system/etc/resolv.conf para decirle al sistema los servidores de nombre a utilizar, (por defecto los de Google: 8.8.8.8 y 8.8.4.4). Para cambiarlos se utliza la app Terminal (Terminal emulador para Android, solo dispositivos rooteados) y desde alli remontar /system en modo rw y cambiar el contenido del archivo. También puede remontar /system con, por ejemplo, el explorador de archivos root explorer (para dispositivos rooteados):

Dentro de Terminal
> su
# mount -o remount, rw /system 
# cat /system/etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

Que permisos tiene el archivo?
# ls -l /system/etc/resolv.conf
-rwsr-xr-x root root 58 2016-03-24 20:33 resolv.conf
# chmod 4755 /system/etc/resolv.conf

Cambiar el contenido del archivo
# echo 'search unix.bcn'>/system/etc/resolv.conf
# echo 'nameserver 192.168.3.1'>>/system/etc/resolv.conf


Ahora el contenido ha cambiado:
# cat /system/etc/resolv.conf
search unix.bcn
nameserver 192.168.3.1
# mantiene compatibilidad con otras redes wifi fuera del entorno del router configurado anteriormente
nameserver 8.8.8.8 

Remontar /system en modo ro
# mount -o remount, ro /system/

Otro cambio más, esta vez en el firewall Soekris. Desactivamos dhcpd en la interfaz ral0 (wifi) en el archivo rc.conf.local y en el archivo /etc/dhcpd.interfaces. Por último otorgamos IP's fijas a los dispositivos inalámbricos.






PF /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 ral0 }"
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

# 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 $int_if
antispoof quick for egress

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

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

# para escribir logins fuerza bruta
block quick log from <bruteforce>

# 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

# bloquea todas las conexiones salientes en el puerto 53 si no se destinan
# a nuestra memoria caché DNS
block return in log on $int_if inet proto { tcp udp } from any to ! 192.168.3.1 port 53

block in all

# proteger el puerto 22 (SSH ) a partir de intentos no autorizados 
pass in quick log on $ext_if 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)

# Pass all traffic on internal interfaces
# vether0 is necessary here, but bridge0 is not
pass out quick inet
pass in on $int_if inet

# 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

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





ifconfig -a 

Mostrar todas las direcciones MAC e IPv4 que Soekris conoce

# arp -a

OpenBSD es genial!.

No hay comentarios:

Publicar un comentario