Evita ataques SSH de Bots directos contra tu cuenta en Mac OS X
Mi máquina estaba siendo atacada por muchos ataques automatizados que intentan adivinar los nombres y contraseñas vía sshd. (este problema ha sido comentado en esta truco) Gracias a Little Snitch, es muy fácil ver cuando esto pasa. De cualquier manera, es molesto, y quería añadir una regla ipfw para bloquear estas máquinas que no pueden conectarse después de 15 intentos o más. Así que escribí un script para hacer esto.
<?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>Label</key>
<string>se.sics.lra.denyhosts</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/awk</string>
<string>
substr( $5, 0, 4) == "sshd" && $6 == "Failed" {
ip = $13
count[ip] += 1
}
END {
s = "ipfw delete 101; "
sep = "ipfw add 101 deny src-ip "
for (ip in count) {
if (count[ip] > 15) {
s = s sep ip
sep = ", "
print count[ip] " failed attempts from " ip
}
}
system(s)
}
</string>
<string>/var/log/secure.log</string>
</array>
<key>StartInterval</key>
<integer>20</integer>
<key>UserName</key>
<string>root</string>
<key>StandardOutPath</key>
<string>/tmp/denyhosts.out</string>
</dict>
</plist>
Puse el script terminado en: /Library/LaunchAgents/se.sics.lra.denyhosts.plist
y puse el propietario del script como Root:
# chmod root:wheel /Library/LaunchAgents/se.sics.lra.denyhosts.plist
Para iniciarlo (sin reiniciar) sólo haz esto (en la Terminal como root)
# launchctl load /Library/LaunchAgents/se.sics.lra.denyhosts.plist
El script escanea /var/log/system.log cada 20 segundos para buscar intentos de autentificación ssh. Si encuentra más de 15 de una dirección en particular, esa dirección es deshabilitada por ipfw. Haz sudo ipfw list para ver las reglas activas. Nota que cuando las entradas desaparezcan del registro las reglas ipwf son eliminadas. El script desafortunadamente debe ejecutarse como root, pues sólo root tiene permiso de leer /var/log/system.log y modificar las reglas ipwf.






Si configuras bien una única regla que permita el ssh desde la ip que tú le digas (si es que realmente necesitas acceso ssh desde internet a tu mac) no tienes que preocuparte de cargar de un trabajo extra y poco valioso a tu mac.