Archivos de la categoría ‘Server’

Cuando desplegamos una aplicación, es imprescindible aplicar medidas de seguridad. Una de ellas puede ser utilizar una plataforma como Cloudfare. Por un lado, oculta la IP real del servidor. Por otro, frena ataques DDOS, que, probablemente, desde nuestra infraestructura no podríamos parar. Además, añade una protección adicional a los accesos desde redes anónimas, como puede ser Tor.

Utilizar esta plataforma es muy útil pero no es suficiente. Os voy a contar un caso real, para ilustrar el por qué.

(más…)

grsecEn Mejora la respuesta de tu desktop con linux-ck, os hablé sobre el linux-ck, el kernel con unos parches, que permiten mejorar la respuesta del sistema. Sin embargo, si estamos hablando de servidores, o estamos preocupados por la seguridad del sistema, ese conjunto de parches o el kernel por defecto, no será suficiente.

El kernel por defecto viene compilado para poder utilizar SELinux o AppArmor. Para poder utilizarlos, deberemos recurrir al AUR o a repositorios no oficiales, pues, el primero necesita que ciertas partes del sistema estén parcheadas y, el segundo, unas utilidades específicas.Algo que sí está soportado desde hace poco tiempo, es grsecurity. Un conjunto de parches y utilidades, que nos van a proporcionar una funcionalidad similar a SELinux y AppArmor, además de una protección adicional, mediante PaX, que permite añadir una protección a la memoria, de manera que podamos proteger el equipo de exploits que utilizan desbordamientos de la misma.

Lo primero que vamos a hacer es instalar el kernel parcheado y generar las entradas para el Grub. No se eliminan el resto de kernels, así que no hay por qué preocuparse:

sudo pacman -S linux-grsec
sudo grub-mkinstall -o /boot/grub/grub.cfg

Las opciones de grsecurity se activan mediante sysctl y están disponibles en /etc/sysctl.d/05-grsecurity.conf. Podemos ajustar, según sea nuestra necesidad. Encontraremos opciones que van desde restringir nuevos USBs, hasta restricciones para chroot, bloquear las restricciones en sysctl para impedir modificaciones en valores de grsec, etc.

Para el caso de servidores, es muy interesante el RBAC (Role Based Access Control). Podemos crear diferentes roles para las aplicaciones, de manera que podamos controlar mejor qué pueden hacer, disminuyendo el alcance en caso de una intrusión.

Esto está desactivado por defecto y guarda alguna similitud con SELinux y AppArmor. Para habilitarlo y ver cómo crear los roles, os recomiendo echar un ojo aquí y a la documentación del proyecto. Necesitamos instalar el siguiente paquete:

sudo pacman -Syu gradm

La protección PaX está desactivada por defecto. Esto es porque no todos los binarios soportan bien todas las opciones de protección y hay que añadir excepciones para desactivar alguna. Para poder testear y revisar el estado de los binarios, instalaremos:

 pacman -Syu checksec pax-utils paxtest

Os dejo una captura, a la izquierda, un test realizado con paxtest con PaX desactivado, a la derecha, activado.

screenshot2014-07-11_210254_755473508

Hay varios métodos para controlar las excepciones que necesitemos desactivar en los binarios. El más cómodo es utilizar  paxd, un daemon que también se encuentra en community.

sudo pacman -Syu paxd

Este paquete consta de un servicio estático (está habilitado por defecto) y, en el archivo /etc/paxd.conf, se añaden las excepciones necesarias. Si lo editamos, vemos que es muy fácil deshabilitar las excepciones.

Tanto en las opciones de grsecurity, como en la configuración de paxd, se está trabajando para conseguir un equilibrio entre seguridad, funcionalidad y estabilidad, de manera que, con la paquetería soportada, no necesitemos tocar nada (instalar y a correr 😉 ).

En cualquier caso, si al instalar paxd algún binario deja de funcionar, podemos chequear si ha sido por una restricción, ejecutando:

sudo dmesg | grep nombre_binario

Por ejemplo, elinks necesita la excepción mprotect. Al ejecutarlo sin añadirla, obtendremos una “Violación de segmento”. Si ejecutamos el comando anterior, nos devolverá algo siminar a:

[ 2906.767704] grsec: denied RWX mmap of <anonymous mapping> by
/usr/bin/elinks[elinks:3800]uid/euid:1000/1000 gid/egid:1000/1000,
parent /usr/bin/bash[bash:2213] uid/euid:1000/1000 gid/egid:1000/1000

Una vez localizado el problema, editados /etc/paxd.conf y desactivamos la opción correspondiente:

 m /usr/bin/elinks

En realidad, elinks necesita añadir las excepciones emr, pero ya lo están en el fichero configuración.

Volvemos a lanzar el comando y, si todo va bien, sería interesante avisar al desarrollador en github, enviando los datos, para que pueda comprobarlo y corregirlo.

En el caso de Firefox, en algunos sistemas x86_64, crashea si no está añadida la excepción p. Es un caso curioso porque, si lo ejecutamos en safe-mode, no ocurre. Además, no es en todos los sistemas. Si, al activar PaX, Firefox crashea al poco de iniciarlo, bastará editar el /etc/paxd.conf y añadir la excepción, quedando la línea correspondiente así:

pem /usr/lib/firefox/firefox

En cualquier caso, os animo a que lo utilicéis, sobre todo, por la seguridad adicional que nos aporta.

¡Espero que os sea útil!

Hoy voy a presentaros Ranger, un gestor de archivos para consola… Pero… ¿Cómo? ¿Para consola? ¿En 2014? Pues, aunque no parezca necesario, hay muchas circunstancias en las que, por sus características, nos puede ser muy útil.

Una de ellas es su bajo consumo que, junto a un emulador de terminal como urxvt, es mínimo. Esto, en máquinas con pocos recursos, es una buena alternativa, junto con gestores de ventanas ligeros.

Otro uso, puede ser en servidores. En muchas ocasiones son administrados remotamente y mediante ssh. Tanto si es una sesión gráfica, como si no, cuantos menos recursos consumamos, mejor.

(más…)

Email-Logo

En un sistema GNU/Linux, el mecanismo para envío de notificaciones de determinados demonios (servicios), es mediante el envío de correos con sendmail. En este artículo veremos cómo enviar correos, sin necesidad de configurar un servidor de correo.

En el artículo sobre Exim, vimos cómo configurar este servidor para hacer esto. Ahora, veremos dos alternativas que nos permiten enviar correos, sin necesidad de utilizar un servidor de correo. No podremos recibir/enviar correos a otros equipos de nuestra red local, pero sí enviarlos a cuentas externas, mediante una cuenta, por ejemplo, de gmail, incluso hacer una entrega de correo en local, a los buzones de los usuarios del sistema.

(más…)

Email-LogoEXIM es un servidor de correo, utilizado por algunas distribuciones por defecto, que nos puede venir muy bien para el envío de correo local. Así podremos recibir notificaciones de algunos servicios, como pueden ser cron, fail2ban, etc.

En el caso de querer levantar un servicio de correo no solo para nuestra red local, y con acceso desde fuera de la misma, quizás sea más interesante utilizar PostFix. En este artículo veremos cómo configurar EXIM para que funcione dentro de nuestra red y, además, pueda enviar correo al exterior utilizando otro servidor smtp, por ejemplo,  una cuenta de GMAIL.

(más…)

Instalando Friendica…

Publicado: diciembre 16, 2011 en Server, System
Etiquetas:, , , ,
¿Qué es friendica?
¿Te imaginas una red social en la que puedas seguir a tus contactos, aunque estén en otras redes? Todas tus conversaciones de Facebook, Diaspora, Identi.ca, correos, RSS, étc. tenerlos en una misma línea de tiempo, pudiendo agrupar contactos, controlar la privacidad de las publicaciones, tener múltiples perfiles…
Una red donde tus publicaciones son tuyas. Tus imágenes son tuyas. Y, tus imágenes privadas, son realmente privadas.
Descentralizada, libre, federada (con StatusNet, GnuSocial, Diaspora… ), extensible y gratuita. Eso es friendica.
Dispone de varios conectores para publicar a la vez en WordPress, Posterous, StatusNet, Twitter y Tumblr.
Para hacernos una idea de las características principares, podemos echar un ojo a esta comparativa.
Podemos usar cualquier servidor de friendica existente, aunque, podemos realizar una instalación y controlar todavía más nuestros contenidos. Éstos estarían en nuestro PC. Aunque apaguemos el equipo, las publicaciones podrían ser comentadas por contactos que no se encuentren en nuestro servidor. Al encender, se actualizarán estos comentarios.
Instalación de friendica
Necesitaremos un dominio. En este tutorial, la instalación está preparada para http, con lo que uno de no-ip, por ejemplo, sería suficiente. Tened en cuenta que, una vez instalado con un dominio concreto, ya no hay marcha atrás. Todavía no es posible realizar un cambio del mismo y, si lo hacemos, nuestros usuarios perderían la conexión con el resto de contactos.
Instalamos el software necesario php, mysql y Apache.
# pacman -S apache php-apache php php-gd php-mcrypt mysq
Envío de correo:
Necesitamos poder enviar correos. Para ello usaremos msmtp, un cliente smpt con una excelente compatibilidad con sendmail.
# pacman -S msmtp
Editamos el archivo /etc/msmtprc y configuramos nuestra cuenta con la que enviar los correos:
# Accounts will inherit settings from this section
defaults
auth             on
tls              on
#tls_trust_file   /usr/share/ca-certificates/mozilla/Thawte_Premium_Server_CA.crt
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
# A first gmail address
account        gmail
host           smtp.gmail.com
port           587
from           <tucuenta>@gamil.com
user           <tucuenta>@gmail.com
password       <tupass>

#second
account yahoo
host smtp.correo.yahoo.es
port 25
from <tucuenta>@yahoo.es
user <tuusuario>
auth on
auth plain
tls off
password <tupass>
# Set a default account
account default : gmail 
Editamos /etc/mail.rc y añadimos al final:
set sendmail=/usr/bin/msmtp
Probamos si funciona:
Creamos un fichero, test.mail, con el siguiente contenido:
To: <username>@domain.com 
From: username@gmail.com 
Subject: A test Yadda, yadda, yadda.
Ejecutamos:
$ cat test.mail | msmtp -a default <username>@domain.com
Debería llegarnos un correo a <username>@domain.com.
Editamos el arhivo /etc/php/php.ini, buscamos la cadena sendmail_path y ponemos:
sendmail_path =”/usr/bin/msmtp -t “
 
Configuración de PHP:
Ahora, vamos a configurar las extensiones necesarias para friendica:
extension=curl.so
extension=gd.so
extension=gettext.so
extension=iconv.so
extension=imap.so
extension=json.so
extension=mcrypt.so
extension=mysqli.so
extension=mysql.so
extension=openssl.so
En el bloque [date], buscamos la clave date.timezone y ajustamos los valores, seǵun esta lista. Por ejemplo, para Madrid:
 
date.timezone = “Europe/Madrid”
date.default_latitude = 40.416126
date.default_longitude = -3.696706
 
Creación de la Base de Datos:
Después de esto, vamos a lanzar MySql y a crear una base de datos y un usuario para manejarla:
1.- Lanzamos del daemon de mysql:
# systemctl start mysqld.service2.- Configuramos la BBDD: 
     # mysql_secure_installation

     # systemctl restart mysqld.service
3.- Nos conectamos como root a mysql:  
     $ mysql -uroot -p
4.- Creamos la BBDD:
     CREATE DATABASE friendica;
5.- Creamos un usuario con privilegios desde localhost para friendica: 
GRANT ALL PRIVILEGES ON friendica.* TO ‘adminfriendica’@’localhost’ IDENTIFIED BY ‘clave’ WITH GRANT OPTION;
5.- Actualizamos los permisos:
     FLUSH PRIVILEGES;
6.- Cerramos sesión: 
     exit
 
Configuración de Apache:
Editamos el archivo /etc/httpd/conf/httpd.conf, y comentamos la línea LoadModule unique_id_module modules/mod_unique_id.so, poniendo una # delante.
# LoadModule unique_id_module modules/mod_unique_id.so
Al final del bloque de módulos, añadimos:
#configuración PHP
LoadModule php5_module modules/libphp5.so
Include conf/extra/php5_module.conf
Descomentamos la línea MIMEMagicFile conf/magic, quitando la #, y nos aseguramos que la línea TypesConfig conf/mime.types, dentro del bloque <IfModule mime_module> está descomentada también.
Descomentamos la línea Include conf/extra/httpd-vhosts.conf .
Una vez hecho esto, editamos el archivo /etc/httpd/conf/extra/httpd-vhosts.conf y añadimos nuestro servidor virtual para friendica:
<VirtualHost *:80>
ServerAdmin email@ejemplo.com
DocumentRoot “/srv/friendica”
ServerName ejemplo.com
    ErrorLog “/var/log/httpd/error_log”
CustomLog “/var/log/httpd/access_log” common
<Directory “/srv/friendica”>
DirectoryIndex index.php
AllowOverride All
Options All
Order allow,deny
Allow from all
php_admin_value open_basedir “/srv/:/tmp/:/srv/friendica/:./”
</Directory>
</VirtualHost>
Ya tenemos el acceso por el puerto 80. Ahora necesitamos habiliar el puerto 443 para tener acceso por HTTPS:En el archivo /etc/httpd/conf/httpd.conf, descomentar la línea:

Include conf/extra/httpd-ssl.conf

Editamos el archivo conf/extra/httpd-ssl.conf y modificamos los valores según nuestra instalación:

DocumentRoot “/srv/friendica”
ServerName http://www.example.com:443
ServerAdmin you@example.com


…..

 <Directory “/srv/friendica”>
DirectoryIndex index.php
AllowOverride All
Options All
Order allow,deny
Allow from all
php_admin_value open_basedir “/srv/:/tmp/:/srv/friendica/:./”
</Directory>

</VirtualHost>

Sustituyendo email@ejemplo.com y ejemplo.com por los valores correctos.Creamos el certificado (si es autofirmado):

# cd /etc/httpd/conf 

# openssl genrsa -des3 -out server.key 1024 
# openssl req -new -key server.key -out server.csr 
# cp server.key server.key.org 
# openssl rsa -in server.key.org -out server.key 
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt 

Instalación de la aplicación

Ejecutamos:

sudo git clone https://github.com/friendica/friendica.git /srv/friendica
cd /srv/friendica
sudo touch .htconfig.php
sudo chmod 777 .htconfig.php
Iniciamos apache
# systemctl restart mysqld.service
# systemctl start httpd.service
Visitamos nuestro sitio web con nuestro navegador preferido, si vamos a usar un certificado autofirmado: http://ejemplo.com. En caso de que el cerficado esté firmado por alguna agencia, accederemos con https://ejemplo.com.
Se lanzará el proceso de instalación, pidiéndonos el email del usuario administrador, y los parámetros para conectar con la base de datos creada:
Una vez finalizada la instalación, se nos pedirá que registremos un usuario, para lo cual, usaremos el email del administrador. Nos dirigiremos a la sección Admin->módulos y marcaremos el Poor Man Cron, además de todos aquellos que queramos tener en nuestro sitio web.
Toda la configuración de Friendica se hace desde la sección “Admin”, de una forma muy intuitiva.
Cuando hayamos terminado la configuración, no olvidar proteger el archivo de configuración:
 
sudo chmod 755 /srv/friendica/.htconfig.php
Para realizar actualizaciones, bastará con ejecutar:
cd /srv/friendica
sudo git pull
cd addon
sudo git pull
Añadimos los servicios al /etc/rc.conf para que se lancen automáticamente en el inicio:

# systemctl enable mysqld.service
# systemctl enable httpd.service


NOTA: Antes de añadir contactos, revisad, con una simple prueba que todo está correcto:
Publicad el perfil de vuestro usuario recién creado en el directorio global. Si, al visitar el directorio global, éste no se ha publicado, la comunicación con vuestro servidor está fallando. Es posible que tengáis el puerto 80 filtrado. Os recomiendo echar un ojo a este artículo. Una vez que podáis publicar vuestro usuario en el directorio global, podréis ir añadiendo vuestros contactos de las demás redes.


Enlaces de Interés: