Aquí está un tutorial mejorado para instalar fail2ban en OS X 10.10 (probablemente también funciona en 10.9) basado en el (de alguna manera defectuosa) guía en forgetcomputers.zendisk.com.
El instalador automático no me funcionó en absoluto, así que lo hice manualmente.
-
cd a ~/Downloads y descarga fail2ban-0.8.10
cd ~/Downloads
curl -O https://forgetcomputers.zendesk.com/hc/en-us/article_attachments/200287990/fail2ban-0.8.10.tar.gz
-
Descomprima el paquete tar:
tar xzf fail2ban-0.8.10.tar.gz
-
cd a fail2ban-0.8.10 e instale el software:
cd fail2ban-0.8.10/
sudo python setup.py install
-
Crea un archivo para el registro:
sudo touch /var/log/fail2ban.log
-
cd atrás y descarga el paquete de modificaciones:
cd ~/Downloads/
curl -O https://forgetcomputers.zendesk.com/hc/en-us/article_attachments/200287980/install_fail2ban_mods.tar.gz
-
Desembale este paquete:
tar xzf install_fail2ban_mods.tar.gz
-
Ejecute install script desde el paquete de modificaciones:
sudo ./fail2ban_mods/install_fail2ban_mod.sh
-
Hazte sudo y renombra /etc/fail2ban/jail.local (el archivo jail.local es superior a jail.conf y podría romperlo todo porque el archivo instalado contiene una configuración totalmente inútil):
sudo bash
mv /etc/fail2ban/jail.local /etc/fail2ban/jail.local.bak
-
Añada las dos líneas siguientes a /etc/pf.conf con nano /etc/pf.conf
:
table <fail2ban> persist
block drop log quick from <fail2ban> to any
-
En /etc/fail2ban/jail.conf, modifica la sección [ssh-pf] al final con nano
como sigue:
[ssh-pf]
enabled = true
filter = sshd
action = pf
logpath = /var/log/system.log
maxretry = 3
Puede introducir otro recuento máximo de intentos o definir un tiempo de espera o de búsqueda individual.
-
En /etc/fail2ban/action.d/pf.conf, asegúrese de que los siguientes valores están configurados y modifíquelos si es necesario con nano /etc/fail2ban/action.d/pf.conf
:
actionban = /sbin/pfctl -t fail2ban -T add <ip>
actionunban = pfctl -t fail2ban -T delete `pfctl -t fail2ban -T show 2>/dev/null | grep <ip>`
[Init]
tablename = fail2ban
localhost = 127.0.0.1
-
Apaga pf, dile que recargue su configuración y vuelve a iniciarlo:
pfctl -d
pfctl -f /etc/pf.conf
pfctl -e
-
Detenga el demonio fail2ban si ya se está ejecutando, e inícielo con launchctl:
fail2ban-client stop
launchctl load -w /Library/LaunchDaemons/org.fail2ban.init.plist
launchctl load -w /Library/LaunchDaemons/org.fail2ban.redo.plist
launchctl load -w /Library/LaunchDaemons/org.fail2ban.reset.plist
Probar el sistema
-
Abra una ventana de terminal y observe el registro de fail2ban (live-update):
sudo tail -f /var/log/fail2ban.log
-
Mientras mantienes este terminal activo en el servidor, accede mediante SSH al servidor desde un cliente y observa la salida del terminal del servidor (el nombre de usuario es arbitrario, ya que estamos probando qué ocurrirá cuando se intente un inicio de sesión incorrecto; sustituye server_ip por la dirección IP o el nombre de host del servidor):
ssh username@server_ip
-
En la máquina cliente, escriba la contraseña incorrecta varias veces hasta que vea un mensaje en el registro de fail2ban que indique que el cliente ha sido baneado. Este mensaje será algo parecido a esto:
2015-08-04 18:56:25,001 fail2ban.actions [216]: NOTICE [ssh-pf] Ban 192.168.8.15
Cuando veas este mensaje, la IP de la máquina cliente ha sido baneada. En este punto, cualquier intento futuro de SSH desde esta IP (dentro del periodo de baneo de fail2ban) debería expirar y ser infructuoso.
-
Para detener la cola basta con introducir ctrlC
Si desea instalar la última fail2ban 0.9.1
-
Descargar manualmente fail2ban a su carpeta ~/Downloads
-
cd a ~/Downloads y descomprima el paquete tar:
cd ~/Downloads
tar xzf fail2ban-0.9.1.tar.gz
-
cd a fail2ban-0.9.1 e instale el software:
cd fail2ban-0.9.1/
sudo python setup.py install
-
Crea un archivo para el registro:
sudo touch /var/log/fail2ban.log
-
cd atrás y descarga el paquete de modificaciones:
cd ~/Downloads/
curl -O https://forgetcomputers.zendesk.com/hc/en-us/article_attachments/200287980/install_fail2ban_mods.tar.gz
-
Desembale este paquete:
tar xzf install_fail2ban_mods.tar.gz
-
Haga una copia de seguridad de /etc/fail2ban/filter.d/sshd.conf y copie el archivo del mod_pack al directorio fail2ban/filter.d. Puedes copiar el otro filter.conf pero mejor haz una copia de seguridad de los archivos originales. Aunque no he probado estos.
sudo bash
mv /etc/fail2ban/filter.d/sshd.conf /etc/fail2ban/filter.d/sshd.conf.old
cp ~/Downloads/fail2ban_mods/filter.d/sshd.conf /etc/fail2ban/filter.d/
cp ~/Downloads/fail2ban_mods/fail2ban_reset.sh /private/etc/fail2ban
cp ~/Downloads/fail2ban_mods/lib-launchdaemons/org.fail2ban* /Library/LaunchDaemons
-
Añada las dos líneas siguientes a /etc/pf.conf con nano /etc/pf.conf
:
table <fail2ban> persist
block drop log quick from <fail2ban> to any
-
En /etc/fail2ban/jail.conf, modifica la sección [ssh-pf] al final con nano
como sigue:
[ssh-pf]
enabled = true
filter = sshd
action = pf
logpath = /var/log/system.log
maxretry = 3
Puede introducir otro recuento máximo de intentos o definir un tiempo de espera o de búsqueda individual.
-
En /etc/fail2ban/action.d/pf.conf, asegúrese de que los siguientes valores están configurados y modifíquelos si es necesario con nano /etc/fail2ban/action.d/pf.conf
:
actionban = /sbin/pfctl -t fail2ban -T add <ip>/32
actionunban = /sbin/pfctl -t fail2ban -T delete <ip>/32
[Init]
tablename = fail2ban
-
Apaga pf, dile que recargue su configuración y vuelve a iniciarlo:
pfctl -d
pfctl -f /etc/pf.conf
pfctl -e
-
Detenga el demonio fail2ban si ya se está ejecutando e inícielo de nuevo:
fail2ban-client stop
launchctl load -w /Library/LaunchDaemons/org.fail2ban.init.plist
launchctl load -w /Library/LaunchDaemons/org.fail2ban.redo.plist
launchctl load -w /Library/LaunchDaemons/org.fail2ban.reset.plist
Ahora pruebe de nuevo su sistema como se ha descrito anteriormente.
Mejoras
Dado que la implementación de la tabla fail2ban y la regla no es estándar y fail2ban-blocking real no sobrevive a un reinicio, he reelaborado todo el pf-mecanismo, creó un ancla separada (inspirado en IceFloor ) para eliminar cualquier dependencia del archivo /etc/pf.conf de Apple y modificó la acción de prohibición.
-
A partir de la fail2ban 0.9.1 instalar descrito anteriormente entrar:
sudo bash
nano /etc/fail2ban/action.d/pf.conf
y cambie en el archivo /etc/fail2ban/action.d/pf.conf las líneas que empiezan por
actionban = ....
a
actionban = /sbin/pfctl -a fail2ban.anchor -t fail2ban -T add <ip>/32 && /sbin/pfctl -k <ip>/32 && /sbin/pfctl -Ef /etc/fail2ban/pf/fail2ban.conf
y
actionunban = ....
a
actionunban = /sbin/pfctl -a fail2ban.anchor -t fail2ban -T delete <ip>/32
-
Crear una carpeta pf en /etc/fail2ban/
mkdir /etc/fail2ban/pf
-
Cree tres archivos fail2ban, fail2ban.conf y fail2ban.sh en la carpeta creada anteriormente con el siguiente contenido; después haga fail2ban.sh ejecutable con chmod:
fail2ban:
table <fail2ban> persist
block drop log quick from <fail2ban> to any
fail2ban.conf:
############### LOOPBACK ###############
#
# skip loopback (no filtering on loopback interface)
set skip on lo0
scrub-anchor "com.apple/*"
############### INBOUND ###############
#
anchor "fail2ban.anchor"
load anchor "fail2ban.anchor" from "/etc/fail2ban/pf/fail2ban"
fail2ban.sh:
#!/bin/sh
# start
#
# We need to trap on TERM signals, according to Apple's launchd docs:
#
trap 'exit 1' 15
#
# Use the "ipconfig waitall" command to wait for all the interfaces to come up:
#
ipconfig waitall
sleep 5
#
# System sysctl
#
sysctl -w net.inet6.ip6.fw.verbose=0
sysctl -w net.inet.ip.fw.verbose=0
sysctl -w net.inet.ip.fw.verbose_limit=0
#
# interface forwarding enabled by default
#
sysctl -w net.inet.ip.forwarding=1
# enable PF and load rules from default fail2ban configuration file using tokens (apple specific PF options -E and -X)
#
/sbin/pfctl -e
/sbin/pfctl -Ef /etc/fail2ban/pf/fail2ban.conf
# Exit with a clean status
exit 0
# this file is public domain and is available to everyone with no exceptions.
-
Cree el archivo org.fail2ban.plist en /Library/LaunchDaemon con el siguiente contenido:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>ExitTimeOut</key>
<integer>1</integer>
<key>Label</key>
<string>org.fail2ban</string>
<key>Program</key>
<string>/etc/fail2ban/pf/fail2ban.sh</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
-
Elimine las dos líneas siguientes de /etc/pf.conf con nano /etc/pf.conf
:
table <fail2ban> persist
block drop log quick from <fail2ban> to any
-
Cargue el archivo /Library/LaunchDaemons/org.fail2ban.plist con launchctl después de detener fail2ban y pf:
fail2ban-client stop
pfctl -d
pfctl -f /etc/pf.conf
launchctl load -w /Library/LaunchDaemons/org.fail2ban.plist
fail2ban-client start
o reinicie su Mac después de cargar org.fail2ban.plist con launchctl.
Ahora la prohibición funciona correctamente incluso después de reiniciar el sistema. Si quieres añadir una dirección IP manualmente para bloquearla, simplemente introduce:
sudo /sbin/pfctl -a fail2ban.anchor -t fail2ban -T add <ip>/32 && /sbin/pfctl -k <ip>/32 && /sbin/pfctl -Ef /etc/fail2ban/pf/fail2ban.conf
Para desbanearlo (¡no se desbaneará automáticamente tras el tiempo de baneo de fail2ban!) introduce:
sudo /sbin/pfctl -a fail2ban.anchor -t fail2ban -T delete <ip>/32
Así que para responder a su pregunta:
Si desea utilizar la tabla fail2ban para prohibir una IP manualmente después de aplicar la directiva mejoras tienes que introducir el comando anterior. La razón de las partes adicionales:
/sbin/pfctl -k <ip>/32
es necesario para matar todos de las entradas de estado procedentes del host especificado.
/sbin/pfctl -Ef /etc/fail2ban/pf/fail2ban.conf
para recargar el fail2ban.conf con gracia y reflejar los cambios que hiciste en la tabla fail2ban.
Sin las mejoras anteriores puede utilizar:
sudo /sbin/pfctl -t fail2ban -T add <ip>/32 && /sbin/pfctl -k <ip>/32 && /sbin/pfctl -Ef /etc/pf.conf
Instalación de fail2ban 0.9.1 en El Capitan
Lo tengo instalado en El Capitan en modo rootless ( sudo nvram boot-args="rootless=0"
y reiniciar) después de eliminar la parte doc-install a /usr/share/docs/fail2ban (= las líneas 140-143) en el setup.py de fail2ban 0.9.1.
Utilice el método mejorado de instalación y configuración de la versión 0.9.1. Si el comando pfctl -sA
no revela fail2ban.anchor comprueba si las comillas dobles son correctas (¡no comillas inteligentes!) en el archivo /etc/fail2ban/pf/fail2ban.conf.
1 votos
Por cierto, pf ya está acompañado por un firewall adaptativo: verifica afctl/emond. Aunque no funciona de manera muy confiable.
0 votos
¿Es
afctl
/emond
parte del cliente de OS X? Por lo que se ve en esa pregunta a la que enlazaste (y la investigación previa), parece que son parte de OS X Server.1 votos
Revisa esto effu.se/2011/03/Integrating-PF-with-Fail2ban-0.9
0 votos
Por favor, no publiques la misma pregunta en varios sitios. Dado que esta pregunta ya tiene una respuesta en Unix & Linux, y es más una pregunta de U&L ya que OSX es muy similar a BSD para este propósito, recomiendo eliminar esta copia.
1 votos
¿Has ejecutado
tcpdump
o inspeccionaste los registros de SSH para asegurarte de que efectivamente estás llegando a la dirección IPv4 y no IPv6?1 votos
@Gilles Veamos cuál obtiene la mejor respuesta en una semana. Estoy de acuerdo en que la publicación cruzada es mala en general, pero OS X es lo suficientemente diferente de BSD como para que no esté de acuerdo en que U&L sea el mejor lugar para esto. ¿Hay mucha experiencia con launchd/bonjour allí? Vamos a charlar o preguntar en Ask Different Meta si es necesario para resolver cuál es el mejor lugar para obtener una respuesta para el OP. Además, esta es una gran pregunta en mi opinión.
1 votos
@Gilles lo siento, no sabía que era de mala educación publicar en varios lugares al mismo tiempo y hacerlo obvio, después de buscar bastante durante la última semana me encontré con varias preguntas que se publicaron en varios sitios (y el autor original no lo hizo obvio). He eliminado la pregunta en U&L ya que, a diferencia de lo que has afirmado, he recibido información más útil en Ask Different.
0 votos
@bmike El
/var/log/system.log
muestra que se está utilizando/detectando IPv4:error: PAM: error de autenticación para root desde 192.168.1.68 vía 192.168.1.68
0 votos
@forquare Actualicé mi guía paso a paso agregando algunas mejoras para evitar todas las fallas de mac-fail2ban y finalmente intenté responder tu pregunta.
0 votos
@bmike: Creo que esta pregunta es de alta calidad, y también la habría publicado en AD & U&L.