Diario BSD
16Oct/09Off

IPFSTAT estado del firewall

Con el comando

# ipfstat

vemos el estado de las reglas, para ver lo que está sucediendo al estilo de top debemos ejecutarlo con la opción -t

# ipfstat -t

Para ver las reglas de salida poner el comando -o

# ipfstat -o

Para ver las reglas de entrada poner el comando -i

# ipfstat -i

Para ver las reglas de entrada o de salida con el número de regla poner respectivamente los flags -on ó -in

# ipfstat -on
# ipfstat -in

Para ver el numero de veces que se ha ejecutado cada regla, poner respectivamente los flags -oh ó -ih

# ipfstat -oh
# ipfstat -ih

con el flag -R no cambia los puertos a sus nombres de servicio.

15Oct/09Off

IPF firewall

Para activar ipf al inicio editamos el archivo /etc/rc.conf y añadimos:

ipfilter_enable="YES" # Inicia el firewall
ipfilter_rules="/etc/ipf.todo.rules"
ipmon_enable="YES"
ipmon_flags="-Ds"

Creamos el archivo que contendrá las reglas del firewall abierto

# touch /etc/ipf.todo.rules

y el archivo con nuestra reglas específicas a cargar después

# touch /etc/ipf.rules

Editamos el archivo /etc/ipf.todo.rules para crear las reglas del firewall abierto teniendo en cuenta el nombre de nuestro interface de red (vr0 en nuestro caso):

pass in quick on vr0 all
pass out quick on vr0 all

Editamos el archivo /etc/ipf.rules: con la siguiente configuración teniendo en cuenta el nombre de nuestro interface de red (vr0 en nuestro caso):

###############################################
# Sin restricciones en el Interface Loopback
###############################################
pass in quick on lo0 all
pass out quick on lo0 all

###############################################
# Interface Publico Internet (Seccion Salida)
###############################################

# Permitir el acceso al servidor de DNS's
# xxx debe ser la IP del DNS de su ISP.
# Duplicar estas lineas si su ISP tiene mas de un servidor DNS
# Obtener la direccion IP del archivo /etc/resolv.conf
pass out quick on vr0 proto tcp from any to 208.67.222.222 port = 53 flags S keep state
pass out quick on vr0 proto udp from any to 208.67.222.222 port = 53 keep state
pass out quick on vr0 proto tcp from any to 208.67.220.220 port = 53 flags S keep state
pass out quick on vr0 proto udp from any to 208.67.220.220 port = 53 keep state

# Necesario solo si tenemos la IP asignada por DHCP
#pass out log quick on vr0 proto udp from any to any port = 67 keep state
#pass out quick on vr0 proto udp from any to z.z.z.z port = 67 keep state

# Permitir conectarse a webs en el puerto 80 por ejemplo con lynxs
pass out quick on vr0 proto tcp from any to any port = 80 flags S keep state

# Permitir conectarse a webs https por ejmplo con lynx
pass out quick on vr0 proto tcp from any to any port = 443 flags S keep state

# Permitir envio y recepcion de mail
#pass out quick on vr0 proto tcp from any to any port = 110 flags S keep state
#pass out quick on vr0 proto tcp from any to any port = 25 flags S keep state

# Permitir Time
pass out quick on vr0 proto tcp from any to any port = 37 flags S keep state

# Permitir noticias nntp usenet
#pass out quick on vr0 proto tcp from any to any port = 119 flags S keep state

# Permitir conectarse a sitios FTP, por ejemplo con lynx
# Si necesita usar el comando pkg_add para instalar aplicaciones
# necesita esta regla.
pass out quick on vr0 proto tcp from any to any port = 21 flags S keep state

# Permitir SSH hacia otros servidores (para conectarnos por SSH desde esta consola)
pass out quick on vr0 proto tcp from any to any port = 22 flags S keep state

# Permitir Telnet
#pass out quick on vr0 proto tcp from any to any port = 23 flags S keep state

# Permitir funcion FBSD CVSUP
#pass out quick on vr0 proto tcp from any to any port = 5999 flags S keep state

# Permitir realizar ping a otros servidores desde este
pass out quick on vr0 proto icmp from any to any icmp-type 8 keep state

# Permitir realizar whois a Internet
pass out quick on vr0 proto tcp from any to any port = 43 flags S keep state

# Permitir acceso a Samba
#pass out quick on vr0 proto udp from any to any port = 137 keep state
#pass out quick on vr0 proto udp from any to any port = 138 keep state
#pass out quick on vr0 proto tcp from any to any port = 139 flags S keep state
#pass out quick on vr0 proto tcp from any to any port = 445 flags S keep state

# Bloquear y guardar en log solo la primera coincidencia de cada
# Esta regla refuerza la logica por defecto de block all
block out log first quick on vr0 all

###############################################
# Interface Publico Internet (Seccion Entrada)
###############################################

# Bloquear todo el trafico de entrada de los espacios reservados
# y no enrutables
block in quick on vr0 from 192.168.0.0/16 to any #RFC 1918 private IP
block in quick on vr0 from 172.16.0.0/12 to any #RFC 1918 private IP
block in quick on vr0 from 10.0.0.0/8 to any #RFC 1918 private IP
block in quick on vr0 from 127.0.0.0/8 to any #loopback
block in quick on vr0 from 0.0.0.0/8 to any #loopback
block in quick on vr0 from 169.254.0.0/16 to any #DHCP auto-config
block in quick on vr0 from 192.0.2.0/24 to any #reserved for docs
block in quick on vr0 from 204.152.64.0/23 to any #Sun cluster interconnect
block in quick on vr0 from 224.0.0.0/3 to any #Class D & E multicast

##### Bloqueo de diversas cosas no necesarias.
##### y que no deseamos ver en el log

# Bloqueo de fragmentos
block in quick on vr0 all with frags

# Bloqueo de pequenos paquetes tcp
block in quick on vr0 proto tcp all with short

# Bloqueo de paquetes enrutados desde el origen
block in quick on vr0 all with opt lsrr
block in quick on vr0 all with opt ssrr

# Bloqueo de intentos nmap OS
# Guardamos en log la primera coincidencia para poder obtener su IP
block in log first quick on vr0 proto tcp from any to any flags FUP

# Bloquear todo lo que tenga opciones especiales
block in quick on vr0 all with ipopts

# Bloquear los pings publicos hacia esta maquina
block in quick on vr0 proto icmp all icmp-type 8

# Permitir ping hacia esta maquina
#pass in quick on vr0 proto icmp all icmp-type 8
pass in quick on vr0 proto icmp from any to any icmp-type 8 keep state

# Bloquear ident
block in quick on vr0 proto tcp from any to any port = 113

# Bloquear todos los servicios Netbios. 137=name,
# 138=datagram, 139=session
# Servicios compartidos Netbios en MS/Windows
# Bloquear peticiones MS/Windows hosts2 name server al puerto 81
block in log first quick on vr0 proto tcp/udp from any to any port = 137
block in log first quick on vr0 proto tcp/udp from any to any port = 138
block in log first quick on vr0 proto tcp/udp from any to any port = 139
block in log first quick on vr0 proto tcp/udp from any to any port = 81

# Permitir trafico de entrada del servidor DHCP del ISP
#pass in quick on vr0 proto udp from z.z.z.z to any port = 68 keep state

# Permitir acceso al servidor web, Apache, Nginx...
pass in quick on vr0 proto tcp from any to any port = 80 flags S keep state

# Permitir acceso a SSH en el puerto que hayamos configurado
pass in quick on vr0 proto tcp from any to any port = 30000 flags S keep state

# Permitir acceso a Samba
#pass in quick on vr0 proto udp from any to any port = 137 keep state
#pass in quick on vr0 proto udp from any to any port = 138 keep state
#pass in quick on vr0 proto tcp from any to any port = 139 flags S keep state
#pass in quick on vr0 proto tcp from any to any port = 445 flags S keep state

# Bloquear y guardar en log solo la primera coincidencia del resto
# del trafico que nos llegue. Guardar en el log solo la primera
# coincidencia, minimiza un ataque DNS
# Esta regla refuerza la de la logica por defecto block all
block in log first quick on vr0 all
############# Fin del archivo de reglas #####################

creamos el archivo para los logs:

# touch /var/log/ipfilter.log

Para que se guarden los logs en dicho archivo deberemos poner la siguiente entrada en /etc/syslog.conf sustituyendo security.*

local0.* /var/log/ipfilter.log

En el manual aparecía security.* /var/log/ipfilter.log pero así no me guardaba en el archivo adecuado y buscando en foros he encontrado la solución mostrada arriba.
Deberemos modificar el archivo /etc/newsyslog.conf que es el encargado de rotar los logs, añadiéndole:

/var/log/ipfilter.log 644 5 100 * JC

Para que se cargue la configuración del syslog podemos reiniciar el servidor o ejecutar el comando:

# /etc/rc.d/syslogd reload

Y cargamos las reglas del Firewall (o las recargamos cada vez que realicemos modificaciones):

# ipf -Fa -f /etc/ipf.rules

14Oct/09Off

Securizando SSH

La primera acción a realizar será cambiar el puerto del SSH, crear claves y configurar usuarios para el SSH.

Generamos la clave privada y pública para nuestro servidor (desde windows con puttygen http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)

Captura de pantalla 1

Ponemos una passphrase:

Captura de pantalla 2

Guardamos la clave privada (archivo ppk):

Captura de pantalla 3

Captura de pantalla 4

Copiamos el texto de la clave pública para poner en el archivo de claves autorizadas del servidor.

Lo guardamos en un archivo de texto para posteriormente subir al servidor:

Captura de pantalla 5

Captura de pantalla 6

Editamos el archivo /etc/ssh/sshd_config

# nano /etc/ssh/sshd_config

y cambiamos o añadimos según sea el caso:

Port 30000 #<--- el puerto de nuestra elección
Protocol 2
PermitRootLogin no
PasswordAuthentication no
X11Forwarding no
UsePAM no
UseDNS no
AllowUsers demo

Subimos el archivo de clave pública al directorio del usuario autorizado a conectarse por ssh (en el caso anterior /home/demo).

Creamos directorios y damos permisos según usuario y grupo:

# mkdir /home/demo/.ssh
# mv /home/demo/id_rsa_server_web.pub /home/demo/.ssh/authorized_keys
# chown -R demo:wheel /home/demo/.ssh
# chmod 700 /home/demo/.ssh
# chmod 600 /home/demo/.ssh/authorized_keys

Reiniciamos ssh:

# /etc/rc.d/sshd reload

y ya podemos probar a conectarnos con nuestro programa ssh (por ejemplo putty en windows) con el archivo de clave privada, puerto, usuario y passphrase elegidos.