Metiéndole seguridad a OpenSSH

Mi preferencia por descargar vía torrent y una que otra vulnerabilidad “social” de mi proveedor de Internet han hecho de un tiempo acá bastante común los intentos desde fuera por acceder a mi terminal. ¿Quiénes? ¿Cuándo? ¿Cómo? No importa, lo importante es que aprendamos a no creernos invulnerables e intocables sólo porque usamos GNU/Linux.

OpenSSH (o Secure Shell) se ha convertido en el estándar en acceso remoto, reemplazando así, a telnet como protocolo, esto porque la conexión es cifrada y las contraseñas no son enviadas en texto plano para que todo mundo las vea.

De cualquier manera, la configuración por defecto de SSH no es perfecta, y cuando se corre un servidor SSH existen algunos pasos sencillos que pueden darle robustez a la configuración. Créeme que sí.

Usa contraseñas/nombres de usuarios más fuertes

Una de las primeras cosas a notarse es que si tenés SSH corriendo y expuesto al mundo exterior lo más probable es que recibas registros de intentos por parte de lamers y hackers de adivinar tu usuario o contraseña. Típicamente un hacker hará un scan para el puerto 22 (el puerto por defecto en el que SSH “escucha”) queriendo encontrar máquinas con SSH corriendo, y luego intentará un ataque de fuerza bruta contra esto. Con fuertes contraseñas en su lugar es posible que cualquier ataque sea registrado y puesto en advertencia antes de que cualquiera logre un ingreso exitoso.

Por suerte ya usás contraseñas fuertes, pero si no, entonces prueba a escoger contraseñas que contengan:

  • Mínimo de 8 caracteres
  • Mezcla de minúsculas y mayúsculas
  • Mezclas de letras y números
  • Caracteres no alfanuméricos (p.e. caracteres tales como ! ” £ $ % ^, etc)

Si absolutamente no se puede prevenir a los usuarios de escoger contraseñas débiles, entonces considera generarlas de manera aleatoria o nombres de usuario difíciles de adivinar para tus cuentas de usuario. Si los chicos malos no pueden adivinar el usuario es más difícil que logren la contraseña por fuerza bruta. Sin embargo, esto es seguridad a travéz de oscuridad, y es mejor tener en cuenta que la información se puede escapar en el envío de correos electrónicos, por ejemplo.

Desactiva Ingresos de Root

Los ajustes del servidor SSH están alojados en /etc/ssh/sshd_config. Para desactivar los ingresos de root asegúrate de corregir la siguiente entrada:

# Prevent root logins:

PermitRootLogin no

y reinicia el servicio sshd:

service sshd restart

Si necesitas ingresos de root es preferible ingresar como usuario normal y luego usar su.

Limita los ingresos de usuarios

Los ingresos de SSH pueden ser limitados a ciertos usuarios que necesitan acceso remoto. Si tu máquina tiene muchas cuentas de usuarios en el sistema, entonces es preferible limitar el acceso remoto a las cuentas de usuarios que realmente lo necesitan, limitando de esta forma el impacto de un casual usuario que tenga una contraseña débil. Agrega usuarios separados por espacio en /etc/ssh/sshd_config. Por ejemplo:

AllowUsers alice bob

y reinicia el servicio sshd.

Desactiva el Protocol 1

SSH tiene dos protocolos que puede usar, protocolo 1 y protocolo 2. El más antiguo es el protocolo 1, es menos seguro y debería ser desactivado, a menos que específicamente lo requieras. Corrige como a continuación en el archivo /etc/ssh/sshd_config:

# Protocol 2,1
Protocol 2

y reinicia el servicio sshd.

Usa puertos no estándar

Por defecto SSH “escucha” conexiones entrantes en el puerto 22. Como ya habíamos dicho, para que el hacker determine si SSH corre en tu máquina, este intentará un scan en el puerto citado. Un método efectivo es correr SSH en un puerto no estándar. Cualquier puerto sin usarse servirá, aunque uno por encima del 1024 es preferible. Mucha gente escoge el 2222 como alternativa, a como normalmente se escoge el 8080 para el puerto HTTP. Por esta razón es probable que no sea la mejor respuesta, ya que cualquier hacker estaría haciendo scan al 2222 como buena medida. Es mejor escoger algún puerto aleatoriamentem, que sea alto y que no esté siendo usado por servicios conocidos. Para hacer el cambio, agrega la linea siguiente a tu archivo en /etc/ssh/sshd_config:

# Run ssh on a non-standard port:
Port 2345  #Change me

y reinicia el servicio sshd. No olvides de hacer cualquier cambio necesario en tu enrutador y cualquier regla en el firewall.

Para mayores detalles acerca de SELinux y las reglas del firewall, visita la página que me fue de utilidad.

LG L3 e400: rooting y SDMerge400

Ya casi medio año con este dispositivo y hasta hace poco he podido estar contento con su ROM, aspecto y funcionamiento. De fábrica traía la ROM stock de LG+Claro, que ocupaba mucho espacio y apenas te concedía unos 90 Mb para aplicaciones nuevas. El resto era ocupado por otras que no servían para nada y que al final terminaban ocupando espacio. Lo primero que hice fue rootearlo con esta guía. Obviamente utilicé el script para Linux. Sin problemas.

El e400 es un smartphone barato, de plástico y con espacio muy limitado, pero es bonito y elegante. Lo que menos me gustó fue su pantalla QVGA de 320×240. Muy poco, tomando en cuenta que la misma resolución tenía el Nokia X3-02 que andaba antes, y no era un smartphone.

Lo siguiente fue que esperé hubiese una ROM disponible en Cyanogenmod. No esperé mucho, menos de un mes. Pero seguía con el problema del espacio para las aplicaciones. Tenía ahora 150 Mb de espacio, pero seguía siendo insuficiente. No pude prescindir de las aplicaciones de Google, a pesar de que Cyanogenmod te da una ROM base para que tengás disponible el mínimo necesario en apks.

Rootear LG L3 E400

Si tu interés es rootearlo, sólamente debes seguir la guía que ya mencioné antes. Funciona a la perfección. Yo mismo guardo el script que me funcionó a la primera. Luego de eso no es nada del otro mundo cambiarle el ROM. Solo recomiendo que respaldes el ROM stock con alguna de esas utilidades que encontrás en el Play Store de Google. ROM Manager viene bien. Lo siguiente es que necesitás un Recovery, ClockworkMod es lo más acertado, y ROM Manager puede hacer eso de la manera más fácil.

Una vez que has instalado el Recovery, solo necesitas descargarte la ROM de tu preferencia. CyanogenMod es la más popular de las opciones. Es la que yo recomiendo. Podés descargarla de aquí. La copiás a tu memoria SD (externa, el recovery te permitirá navegar hasta donde la hayas guardado), y una vez ahí apagás el dispositivo y lo volvés a encender presionando “botón abajo” + “power”. En cuanto vibre sueltas los botones y ya estas en el recovery. Recomendable borrar /cache, /data y /system antes de proceder. Navegás hasta donde está tu ROM y procedés a instalarla. Tomará su tiempo. Reboot y listo, en la pantalla te aparecerá la animación de Cyanogenmod 9. Eso tomará unos 7 minutos hasta que el sistema esté completamente instalado.

Podés descargar las Gapps desde aquí. Se instalan de la misma manera que cualquier ROM, como una simple actualización desde el recovery.

El siguiente paso es ampliar tu memoria para instalar con SDMergE400. Eso es opcional si preferís quedarte con la disposición de particiones que te ofrece Cyanogenmod.

SDMergE400

El propósito de SDMergE400 es obtener más espacio para el usuario removiendo la SDCARD de 1 Gb interna. Para eso se hace necesario los siguientes 4 pasos:

1. Actualizar el recovery para usar uno que soporte particionado en modo experto.

2. Reparticionar el espacio interno y crear el sistema de archivos.

3. Instalar el más reciente ROM nightly de Cyanogenmod9

4. Instalar SDMergE400 para Cyanogenmod9 nightly.

Con lo que lográs:

1. Partición /data extendida a 1.15Gb

2. Fix del encendido/batería

3. Fix del almacenamiento masivo USB

4. Fix de la encriptación ICS

5. Posibilidad de OC a 1GHz/tun/swap kernel luego del paso 4.

Cómo instalar (por primera vez)

1. Descarga el archivo con todas las partes desde aquí y desempácalo en la SD externa. Descarga también el más reciente CM9 nightly en tu SD externa. Asegúrate que el teléfono tiene carga completa.

2. Actualiza tu recovery a la versión 5.8.4.5 (eso es posible vía ROM Manager)

3. Desconecta el cargador y rebootea al recovery.

4. Aplica SDMergE400_Step1.zip desde la SDCARD. El teléfono rebooteará satisfactoriamente hacia un nuevo recovery.

5. Aplica SDMergE400_Step2.zip desde la SDCARD. El teléfono rebooteará satisfactoriamente hacia una versión vieja de recovery para que logrés completar el step3 y luego del paso 6 de la guía, el zip del step4

6. Aplica el último nightly de CM9, y luego de esto, sin reiniciar, aplica SDMergE400_Step4.zip desde la SDCARD.

ACTUALIZACION: SDMergE400_step4_v1.2b para CM9 disponible.

7. Rebootea y cruza los dedos. Luego de 2-3 minutos verás tu home o lock del PIN.

Para actualizar a nuevas versiones de CM9 nightlies:

1. Copia el más reciente CM9 nightly a la SD externa

2. Aplica CM9 desde el recovery. Sin reboot.

3. Aplica SDMergE400-Step4.zip o su última versión desde la SD externa.

4. Reboot. Voilà.

Nótese que para actualizar SDMergE400 es necesario el step4 únicamente.

Para revertir el mod SDMergE400 deberías flashear con KDZ.

Esto es posible al trabajo de gellmar. Las actualizaciones de SDMergE400 son anunciadas en éste hilo de foro.

Compartir conexión desde Fedora

Recientemente cambié de proveedor del servicio de Internet. La conexión decente en Nicaragua es un mito. Conozco alguna gente que tiene algún negocio y usan hasta dos o tres proveedores a la vez para poder resolver sus necesidades satisfactoriamente. Bueno, dejemos el ranting por ahora.

Sucede que tengo ahora un módem USB para conectarme a Internet, y pues por el momento hace un trabajo decente. He estado necesitando la conexión WiFi por diversas razones y no había tenido tiempo para sentarme y resolver eso compartiendo una conexión desde mi computadora de escritorio. Pensaba yo que necesitaba algo de guía para eso, pero no, las guías que seguí para compartir conexión fueron un completo fracaso, además de ser viejas y caducas maneras de compartir una conexión con GNU/Linux.

Así que, luego de descartar eso, simplemente borré las conexiones que había creado con NetworkManager. Conecté el cable de red de mi enrutador al puerto ethernet de mi computadora y esperé que Fedora hiciera el resto del trabajo de manera automática. Tampoco funcionó. Pero, un momento…

Me fui a la Terminal y abrí de nuevo:

$ nm-connection-editor

uno

Edité la configuración que automáticamente se había creado, esto en la pestaña de configuración general, quité el check en donde dice “conecta automáticamente cuando esté disponible”, y luego en la pestaña de los ajustes de IPv4, en el método de conexión que dice “compartido con otras computadoras”.

dos

tres

Guardé y listo. Fedora se encargó previamente de asignar un IP a esa conexión; asimismo, mi enrutador recibió esa conexión y la puso disponible en sus puertos. Resuelto el problema de falta de WiFi.

Obviamente la conexión que transmite mi enrutador sólo está disponible cuando la computadora de escritorio esté en funcionamiento.

TeXlive en Fedora 18

De un release a otro muchas cosas cambian. No deja de suceder con \TeXLive en Fedora 18, y en mi intento por habilitar un entorno mínimo de \TeXLive, me doy cuenta que mi método de instalación anterior no funciona o no me proporciona lo que necesito. Así que buscando una solución a esto (al parecer \TeXLive ahora cuenta con su “propia” nomenclatura de paquetes en Fedora 18), logré encontrar una. Como de costumbre, sin más explicación, en F18, instalamos \TeXLive así:

# yum install texstudio texlive-collection-latex texlive-collection-latexextra texlive-collection-science texlive-collection-latexrecommended texlive-collection-genericextra texlive-collection-genericrecommended texlive-collection-fontsrecommended tex-pst-optexp texlive-epstopdf-bin

Nótese que el primer paquete es texstudio, que es el editor que yo uso. Podés instalar en su defecto, kile o texmaker.

Fedora 18

Siempre es grato descargar una nueva versión de Fedora y seguir manteniendo una buena impresión de esta distribución GNU/Linux que para nadie es secreto sigue siendo mi preferida a través del tiempo. Porque no lo niego, he usado otras distros en diferentes momentos, pero ninguna me brinda la experiencia que Fedora.

Ojalá tuviera el tiempo y la disposición para seguir contribuyendo como lo hacía antes a este proyecto. Me perdí hoy la fiesta de lanzamiento local que normalmente se hace con el esfuerzo de quienes son parte de Fedora Nicaragua, eso por cosas del trabajo. Y es que siempre me he sentido cómodo en esta comunidad porque hasta hoy mantiene, si no sus contribuidores, gente que la usa, la disfruta, la difunde, y como yo, dispuesta a aportar cuando nos es posible.

Impaciente esperé dos días para poder instalarla durante la descarga via torrent. No supe en el momento qué sucedía con la .ISO, pero logré copiarla a la USB con dd, luego de que intentara dos veces, dos veces en una USB de 4GB (sin atreverme a fijarme en el tamaño) y sin darme cuenta que nunca iba a caber. Al fin la puse en una USB de 8GB y voilà… después del chequeo de integridad empezó a darme las opciones de instalación. Como de costumbre, mantengo mi /home, particiones sin LVM, /root aparte. Instalado exitosamente.

Luego de pelear con uno de los repos de RPMfusión (problema de las llaves GPG) terminé de instalar lo básico y me dispuse a dar seed de la .ISO… Fedora sigue siendo Fedora.

———-

It’s always grateful to download a brand new version of Fedora and keep besides a good impression from this GNU/Linux distro, which is no secret it’s my preferred all through the time. I can’t deny, I have used other distros in different moments, but no other gives me the experience Fedora does.

I wished I had the time and availability to keep contributing as I used to do before to this project. I missed today the local release party that it’s usually celebrated with the effort of whom are part of Fedora Nicaragua; that happened because of my job. For I have always felt comfortable being part of this community, because so far it keeps, if not its contributors, people who uses it, enjoys it, and spreads it, and as I do, people wanting to bring to the project when it is possible.

Impatient I waited to install it during it was downloading via torrent. I didn’t know by the time what was going on with my ISO file, but I got to copy it with dd to a USB memory, after two tries, two tries to a 4GB USB memory (without noticing in the size of the ISO) and with no notice it was not going to fit there. At last I put it in a 8GB USB memory and voilà… after checking integrity it started to ask options to install. As usual, I kept my /home, no LVM partitions, /root apart. Successfully installed.

After a fighting a while with a certain RPMfusion’s repo (GPG keys issue,) I got to install basics and started to seed what I just downloaded. Fedora keeps being Fedora.

¿Dispersar esfuerzos es también Libertad?

Tras el post de Miguel de Icaza de porqué el escritorio Linux acabó muerto a manos de OS X surgieron sinnúmero de opiniones de las que todavía no he rescatado mucho bueno, partiendo de la primicia de que no se puede comparar el autoritarismo reflejado en la estructura del OS X con los esfuerzos comunitarios que se llevan a cabo en los diversos proyectos Linux/Software Libre (kernel, GNOME, KDE, XFCE, LXDE, E, etc). Linus Torvalds defiende el proyecto que dirige y no deja de tener razón en sus señalamientos: el kernel Linux tiene algo que muchos otros proyectos no tienen: retro-compatibilidad, además de cumplir y satisfacer las necesidades de miles de usuarios sin contravenir el hardware que usen o necesidad que suplan (servidores multiprocesador, estaciones de trabajo, teléfonos, dispositivos móviles, etc).

Desgraciadamente (nótese mi sarcasmo) la comunidad de desarrolladores no puede contar con un aparato de dirección que te diga qué tenés que hacer para engrosarles las ganancias a sus dueños. Sencillamente porque los proyectos no tienen dueño. OS X sí, y Apple es un negocio para generar ganancias.

Tengo que estar de acuerdo, desde mi punto de vista de usuario y defensor del FOSS, cuando De Icaza señala que es necesario que el escritorio Linux se convierta en una experiencia u esfuerzo uniforme, es decir, que tantos proyectos dispersos empujen en una sola dirección. Pero lo que tenemos es lo que la comunidad es capaz de hacer en plena libertad. Diran algunos que podría ser falta de liderazgo a lo interno de cada uno de los proyectos, o que definitivamente en general no existe un liderazgo que haga posible un solo esfuerzo que empuje al asalto de restarle cuota de mercado al escritorio Windows.

Hay opiniones de opiniones. Algunos dirán que qué diablos, que para qué necesitamos que el escritorio Linux empiece a desplazar Windows; otros en absoluto no les importa porque ya Linux tiene más del 80% de cuota de mercado en servidores y mainframes, otro tanto en dispositivos móviles.

Esta discusión, además de entretenerme en mi tiempo libre, me lleva a pensar que seguiré usando GNU/Linux sin importar que el bendito escritorio Linux se posicione donde muchos lo quieren ver, sin importar si sigue a como está, con tantos esfuerzos dispersos. Y probablemente se les haga algún día lo del escritorio Linux, pero les aseguro que los esfuerzos dispersos seguirán naciendo, forkeándose, muriendo y volviendo a nacer con otro nombre, porque está claro que con el FOSS aprendimos todos, usuarios, promotores y desarrolladores, a pensar y actuar con Libertad (al menos en cuanto al software que usemos). Eso es lo que estamos haciendo ¿no?

Paranóico en GNU/Linux?

No es para menos si venimos de usar reconocidos sistemas operativos bastante vulnerables a ataques desde afuera o por malware. Y qué bien si nunca los usamos… habrá alguno nacido en los 90’s que tuvo la dicha de nunca depender del otro SO. Pero algo es seguro, y no existe sistema seguro, recordemos que los SOs son hechos por humanos, y los humanos nos equivocamos cuando es que no somos perfectos. Si bien es cierto Linux en cuanto a seguridad sólo es comparable a sus primos mayores (BSDs), no todo Linux se usa para servidor y no se toman las precauciones correspondientes al instalarlo.

Y bueno, hace rato conocí nethogs porque había detectado una IP muy rara desde los registros de mi router. Eso porque el 85% de mis descargas para entretenimiento las hago via bittorrent, y porque también uso a menudo el IRC para pedir soporte, platicar de software y compartir un rato con mis iguales. Qué tiene que ver eso? Pues tiene que ver que normalmente dejás al descubierto tu IP al usar estos servicios, y no falta algún aventurero, lamer o como se le llame, que quiera probar la seguridad de tus equipos.

Entonces me di a la tarea hace poco (luego de que alguien lograra acceder a un par de servicios web que uso), de chequear cómo andaban mis cajones en cuanto a eso.

Encontré un par de posts bastante interesantes, de los que logré sacar lo más notable:

UNO

Si creés que alguien está tratando de alzarse con la gloria de meterse con tu cajón, lo primero es ver las conexiones abiertas y listarlas por IP:

# netstat -atun | awk '{print $5}' | cut -d: -f1 | sed -e '/^$/d' |sort | uniq -c | sort -n

Eso te da una salida más o menos como esta:

1 199.47.216.148
1 199.47.219.160
1 66.220.151.82
1 69.192.114.110
1 72.233.61.125
1 74.125.130.125
1 74.125.229.246
1 Address
1 and
12 0.0.0.0

Luego te auxilias de un servicio que te dé la ubicación de esas IP’s, más bien un servicio tipo ip_look_up, para así descartar un acceso que no sea de los que tenés actualmente en uso en tus servicios.

DOS

A la par de eso podés auxiliarte de nethogs, que está en los repos de las distros más usadas (y de las menos también). Lo instalás y lo ponés a trabajar:

# nethogs <tu_adaptador_de_red>

Y eso te va a dar la salida de todas las conexiones entrantes que estén usando tu ancho de banda.

Podés ir más allá si tus equipos están comprometidos. Ojo, esto no es la recomendación de un experto. Me considero un usuario avanzado, y cuando busco documentarme confío plenamente en la comunidad. Ya me he encontrado con mínimos posts donde, en los comentarios, te advierten cuando alguien le da seriedad a comandos que hacen cosas diferentes de lo que andás buscando. Es recomendable leer el manual de los comandos que no entendás, siempre con:

$ man <comando>

Así evacuás dudas y aprendés un poco más de lo que estés por hacer.

TRES

Supongamos que el IP que está queriendo meterse con tu cajón es el 72.75.22.228

# route add 72.75.22.228 gw 127.0.0.1 lo

Verificás con lo siguiente:

# netstat -nr

o con:

# route -n

También para lo mismo podés hacer uso de:

# route add -host IP-ADDRESS reject
# route add -host 72.75.22.228 reject

Y lo confirmás con:

# ip route get 72.75.22.228

Y te da una salida más o menos como esta:

RTNETLINK answers: Network is unreachable

CUATRO

Si estás más que comprometido, te recomiendo los siguientes enlaces, o que busques ayuda profesional para que asegures tu enrutador/modem/cajón.
Enlace 1
Enlace 2
Enlace 3

Saludes.