Páginas

Mostrando entradas con la etiqueta Vim. Mostrar todas las entradas
Mostrando entradas con la etiqueta Vim. Mostrar todas las entradas

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

martes, 13 de diciembre de 2011

PHP Vim

Función para la correcta visualización de acentos y caracteres especiales:

Vim se ha convertido en mi editor favorito, sin quitar mérito a otros editores como Emacs (el monstruo de los editores de Linux y el preferido por los programadores, altamente configurable, rápido y potente, IDE utilizando plugins, etc..), jedit, gedit, komodo, etc. Para editar archivos de texto cualquier editor vale, pero, ¿y si queremos un IDE para programar en ruby, php, html, etc con función de autocompletado, explorador de archivos y poder abrir una terminal desde vim ?.
Vi con algunos plugins será suficiente:
NERD_tree Navegador de archivos:
La página de descarga es: http://www.vim.org/scrits/script.php?script_id=1658

Descomprimir el archivo NERD_tree.zip dentro del directorio ~/.vim
Asegúrese de comprobar que el archivo NERD_tree.vim esta en ~/.vim/plugin y NERD_tree.txt
en ~/.vim/doc.

Gentoo utiliza /var/www/localhost/htdocs como directorio predeterminado. El archivo
de configuración de vim y agregar está linea:

# vi /etc/vim/vimrc.local
" Teclado rápido para abrir explorador de archivos NERTree
map ex :NERDTree /var/www/localhost/htdocs

Conque es un plugin para vi que permite abrir una terminal sin salir de vi.
La página de descarga es:
http://www.vim.org/scripts/script.php?script_id=2771

Después de descargar el plugin debe abrirse con vi, acto seguido teclear
:so %

En este momento puede abrir una terminal desde vi:
:ConqueTermSplit bash

Utilizar teclas rápidas desde vi pasa por agregar al archivo de configuración
/etc/vim/vimrc.local:

# vi /etc/vim/vimrc.local
" Crear alias para abrir terminal dentro de vi
" la primera linea abre un terminal
" la segunda abre un terminal vertical (V).
map ct :ConqueTermSplit bash
map cv :ConqueTermVSplit bash

" mapeo para editar el fichero a traves del
" interprete de php
autocmd FileType php noremap :w!:!/usr/bin/php %

" mapeo para pasear la sintaxis del fichero
" a traves del interprete de php en modo lint
autocmd FileType php noremap :!/usr/bin/php -l %

" Activar autocompletado php y html
" ctrl + x para autocomplete
" ctrl +o muestra opciones de autocomplete
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags

Luego al abrir un archivo .php, para activar el autocompletado:
Ctrl + z y Ctrl + o.

Es importante saber que para movernos por las diferentes por las diferentes ventanas
utilzaremos las teclas Ctrl + w seguido de la tecla de dirección hacia la ventana que
queremos movernos, (Der, Izq, Arriba o Abajo).

Por último el plugin Tag List. Un plugin para el navegador de código fuente de Vim
y proporciona una visión general de la estructura de archivos de código fuente para
los diferentes lenguajes de programación. El link de descarga:

http://www.vim.org/scripts/script.php?script_id=273

Descomprimir el archivo taglist_45.zip en el directorio ~/.vim
Compruebe el archivo principal y la documentación:

plugin/taglit.vim
doc/taglis.txt

$ cd ~/.vim/doc
$ ~/.vim/doc $ ls -l
total 168
-rw-r--r-- 1 carlos users 27142 Nov 30 07:55 conque_term.txt
-rw-r--r-- 1 carlos users 50021 Dec  1  2009 NERD_tree.txt
-rwxr-xr-x 1 carlos users 69366 May 24  2007 taglist.txt
-rw-r--r-- 1 carlos users 10673 Dec 13 14:18 tags

Iniciar vim y dentro de vim en modo comando (Esc):
:helptags .  <--- no olvidar el punto. Este comando procesa la ayuda del archivo tatglist.


Linux es genial!.

domingo, 9 de agosto de 2009

VI EDITOR

Vi Editor de texto.

vi es uno de los editores de texto más poderosos. Conocer lo básico de vi facilitara la edición de ficheros de texto.

vim es una versión mejorada de vi que añade color a la sintaxis

Para acceder a vim desde la consola teclee vim nombre_fichero, verá algo como esto:

vim fichero.txt

~
~
~

"fichero.txt" [Fichero nuevo] 0,0-1 Todo

El cursor se mueve utilizando teclas hjkl.
h (izquierda) j (abajo) k (arriba) l (derecha), o las teclas de dirección (flechas).

ESC :q! INTRO para salir del editor sin guardar los cambios pulse
ESC :qw INTRO para salir del editor guardando los cambios.

Pulsando ESC se cancela un mandato no deseado.

Pulse ESC y luego i para insertar texto, al finalizar de insertar texto pulse ESC.

Utilice la x para borrar un carácter. Después utilice ESC para salir del modo de borrado y volver al modo normal.
Teclee :w para guardar los cambios seguido de INTRO.

Para guardar el fichero con otro nombre:

saveas otro_nombre.txt INTRO

Para borrar:

dw se utiliza para borrar hasta el final de la palabra
d$ para borrar hasta el final de la linea.
de para borrar desde el cursor hasta el final de la palabra, sin incluir el espacio.
dd para borrar una linea entera
3dd para borrar tres lineas

Reemplazar:

Para sustituir el carácter bajo el cursor pulse r seguido del carácter.

Mandato change:

cw para cambiar desde el cursor hasta el final de la palabra,
c$ para cambiar hasta el final de la línea.

Para deshacer previas acciones teclee u
Deshacer todos los cambios en una linea U
Deshacer lo deshecho CTRL-R

Poner (mandato PUT)

dd para borrar una linea (queda almacenada en el buffer de vim)
p para pegar el texto que ha sido borrado anteriormente con dd.

Sustituir texto:

Pulse ESC
:s/anterior/actual/g para sustituir anterior por actual INTRO
:s/anterior/actual para sustituir anterior por actual en una línea (primera coincidencia)
:s/anterior/actual/g para sustituir todos los anterior por actual en una línea
:%s/anterior/actual/g para sustituir anterior por actual en todo el fichero
:%s/anterior/actual/gc para pedir confirmación en cada caso

El símbolo % significa que se aplicará el procedimiento a todo el fichero
La letra s que se realizará la búsqueda de la cadena de caracteres definida después de la barra (/) por la cadena de caracteres después de la siguiente barra (/) en toda la línea, y c pide confirmación.

Buscar utilizando opciones:

:/relativo para buscar la palabra relativo. Encuentre todas las coincidencias pulsando la letra n

:set ic La opción ic distinguirá entre mayúsculas y minúsculas (case-sensitive):

:set ingnorecase Encontrara todas las palabras sin distinguir caracteres mayúsculas o minúsculas.

:/relativo Busque nuevamente la palabra. Encontrará todas las coincidencias de la palabra sin distinguir mayúsculas o minúsculas

:set hls Utilícese para resaltar las coincidencias.

:nohl Cancelar lo que se encuentra resaltado de los resultados.

:wq! ++enc=utf8 Codifica el fichero en UTF-8.

Pulse una R mayúscula para sustituir más de un carácter. Para salir pulse .
Teclee a (minúscula) para añadir texto DESPUÉS del carácter que está sobre el cursor.
Pulsando una A mayúscula añade automáticamente texto al final de la línea.
Pulse o si desea abrir una línea debajo del cursor y sitúa el cursor en la línea abierta en modo Insert.
Con O mayúscula se abre una línea encima del cursor. 



Seleccionar texto:


Linea Visual: Seleccionamos lineas. Para ello, desde el modo de comandos simplemente escribimos MAY+v y con el cursor nos movemos para ampliar o reducir las lineas incluidas en la selección.



Pegar:

Simplemente con la tecla "p". Pegará justo despues de la linea en la que se encuentre.

Archivo ~/.vimrc

"numera las lineas
set number
"activa el resaltdo de sintaxis
syntax on
"sombreamos todo lo que se pase de 80 caracteres
"au BufEnter,BufNewFile,BufRead * exec 'match Todo /\%>' . 80 . 'v.\+/'
"ver siempre la posicion del cursor
set ruler

Bibliografía:
vim avanzado: http://amix.dk/blog/viewEntry/51
Implementación de servidores con GNU-Linux Joel Barrios Dueñas
vimtutor Escrito por Michael C. Pierce y Robert K. Ware.


Linux es genial!