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

Ponemos una passphrase:

Guardamos la clave privada (archivo ppk):


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:


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.