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

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