Sistemas

Seguridad, Servidores, Sistemas, Trucos

Cómo proteger un servidor web para que sólo acedan las IPs de Cloudflare

 Ya hemos hablado de Cloudflare, el servicio web que sirve cono CDN, cahcé, firewall y mucho más. Tiene varios planes, gratis y de pago. Pero para la mayoría de las páginas web el modo gratis es suficiente. Mientras seáis conscientes de los límites de subida que establece Cloudflare. Hoy os vamos a enseñar “un truco” por el que vamos a limitar a nuestro servidor a que acepte sólo peticiones web que accedan de las IPs de Cloudflare. Esto aumentará la seguridad en nuestra web, porque eliminará cualquier petición que no proceda de Cloudflare, y las que procedan de ahí vienen filtradas por sus sistemas de seguridad. Además, también aprovechamos la caché de Cloudflare lo que hace que el rendimiento de nuestra página y la experiencia de usuario mejore. Cómo hacerlo. 1. Lo primero que debemos hacer es activar Cloudflare. Nos registramos en ese servicio, damos de alta nuestra web y nos dirá los DNS que tenemos que poner en nuestro dominio. Después tenemos que ir al proveedor de nuestro dominio y cambiar los DNS. Apunta todos los registros de DNS que tienes para copiarlos en Cloudflare. Nota: si tienes el correo con tu proveedor, puede que tengas problemas al cambiar los DNS a otro proveedor. Consulta con ellos antes. Seguramente también se puede hacer todo esto sin cambiar los DNS a Cloudflare, pero explicamos la manera más sencilla. Una vez que hayas cambiado los DNS a Cloudflare ya podemos gestionar todo desde su panel. Tenemos que activar para nuestro dominio y para www.nuestrodominio el servicio de Cloudflare. Aseguraos que en el DNS tienen la nube en naranja, no en gris. Eso significa que pasa por sus sistemas. 2. Ya tenemos el que cualquier persona de fuera que escriba nuestro dominio irá por Cloudlfare. Ahora tenemos que asegurarnos que nuestro servidor no admita peticiones de ningún otra fuente. 2.1 Por IpTables. Para eso nos vamos a nuestro servidor (suponemos que es dedicado o Cloud). Tenemos que activar en iptables el filtro para que sólo acepte las IPs de Cloudflare. Tenemos siempre un listado actualizado de las mismas aquí. Cuidado: siempre que manejes un firewall corres riesgo. Asegúrate que pruebas todo antes de activarlo y que luego tienes una manera de retroceder. Si queremos hacer esto directamente por iptables podemos hacerlo de esta manera que sugiere Cloudflare.  Sin embargo ya hemos dicho que es más fácil realizar todas estas gestiones por programas como Firehol. En Firehol abrimos el fichero firehol.conf y después de los primeros comentarios añadimos las ips de cloudflare así (una por línea). Los puntos suspensivos indican que está el resto de ips: cloudfl_ips=”103.21.244.0/22 103.22.200.0/22 ….. “ Después, en la interfaz que esté conectada al exterior ponemos: server http accept src “$cloudfl_ips” server https accept src “$cloudfl_ips” Con esto graba el fichero y asegúrate de probar la configuración antes de reiniciar el servicio. 2.2 Por configuración del servidor web (Nginx en este caso). Podemos restringir las ips de Cloudflare en el servidor web. Hoy lo mostraremos en Nginx. Para ello creamos el fichero: etc/nginx/cloudflare-allow.conf  con un contenido como este: # https://www.cloudflare.com/ips # IPv4 allow 199.27.128.0/21; allow 173.245.48.0/20; allow 103.21.244.0/22; allow 103.22.200.0/22; allow 103.31.4.0/22; allow 141.101.64.0/18; allow 108.162.192.0/18; allow 190.93.240.0/20; allow 188.114.96.0/20; allow 197.234.240.0/22; allow 198.41.128.0/17; allow 162.158.0.0/15; # IPv6 allow 2400:cb00::/32; allow 2606:4700::/32; allow 2803:f800::/32; allow 2405:b500::/32; allow 2405:8100::/32; Después, en la carpeta sites-available (o sites-enabled), editamos el fichero de configuración de tu dominio y en el apartado server ponemos: include /etc/nginx/cloudflare-allow.conf; deny all; Y reiniciamos nginx. Esto debería restringir las ips a sólo las de Cloudflare y rechazar el resto. También se puede hacer así.

Seguridad, Servidores, Sistemas

IPTables y FireHOL: configurando el firewall en un equipo Linux

El kernel de Linux incluye un firewall muy potente, Iptables. Este programa está instalado en la mayoría de las distribuciones. Con él se pueden crear reglas de filtrado de paquetes desde muy sencillas a extremadamente complejas. De esta manera, el administrador de un equipo Linux tiene una herramienta muy poderosa para aumentar la seguridad de su sistema. Explicaremos de manera rápida la lógica de Iptables, y sus comandos básicos. Aunque hay que decir que configurar Iptables a mano es una tarea complicada, no es trivial. Además, a todos nos ha pasado, equivocarte en un comando en un cortafuegos puede llevar a que no puedas conectarte tu mismo a la máquina (ten siempre una acceso de seguridad para emergencias). Así que, más adelante, hablaremos sobre un programa que nos ayudará a configurar nuestro firewall. Conceptos de Iptables. Los paquetes puedes entrar (input), salir (output) o pasar (forward) por tu sistema. Las reglas se pueden hacer teniendo en cuenta: Protocolo del paquete (-p=protocol) . Por ejemplo Tcp, udp, icmp.. Origen del paquete (-s=source). Puede ser una ip o un rango de ips. Interfaz de entrada (-i=input) o de salida (-o=output). Por ejemplo eth0, eth1,ppp0… Por el tipo de paquete (input, output o forward). Podemos decir que hag Nateo antes de enrutar (iptables -t nat -P PREROUTING ACCEPT) o después de enrutar (iptables -t nat -P POSTROUTING ACCEPT) o ambos. Para ver las reglas que tenemos configuradas o activas en una tabla podemos hacer: iptables -L O si queremos algo organizado por servicio: iptables -S Con estos comando también podemos filtrar por tipo (Input, output, TCP), por ejemplo: sudo iptables -S TCP sudo iptables -L INPUT Para borrar todos los contadores podemos usar: iptables -Z  (podemos especificar por tipo). Para borrar todas las reglas: iptables -F  (podemos especificar por tipo). Cuidado que borra todo. Pero como decimos, configurar Iptables a mano puede ser complejo. Así que existen varias soluciones para ayudarte con ello. Hay GUIs (interfaces gráficos) como Firestarter, o programas como FireHOL, del que hablamos hoy. FireHOL es un lenguaje y un programa para ejecutarlo que, aunque no tiene asistente gráfico, nos ayuda mucho a configurar los Iptables. Consta de un fichero de configuración en /etc/firehol/firehol.conf  desde el que se configura todo. La sintaxis de FireHOL es sencilla y se basa en la idea típica de los cortafuegos “deniega todo y luego acepta sólo lo que quieres dejar pasar“. El uso es sencillo, puedes poner reglas como server (entrante) o client (saliente). Y definir tus propios servicios como: server_emule_ports=”tcp/4662,64397,7037,23213,25286 udp/4672″ client_emule_ports=”default” Y luego aceptarlos en el interfaz adecuado: server emule accept client emule accept   Una vez guardado el fichero no se activan las reglas hasta que hagas: /etc/init.d/firehol restart PERO recomiendo (y esto es una GRAN ventaja) probar primero la configuración antes de grabarla con firehol try Esto activa las nuevas reglas durante 30 segundos hasta que escribas la palabra commit. Si no lo haces (porque algo haya fallado) restaura el cortafuegos anterior (permitiéndote cambiar la configuración. Puedes ver más información aquí: https://firehol.org/guides/firehol-welcome/ https://firehol.org/documentation/#firehol http://firehol.org/tutorial/  

Diseño Web, Servidores, Sistemas

MySQL Workbench, el interfaz gráfico de Mysql para diseñar, administrar y gestionar bases de datos.

Cuando quieres gestionar bases de datos en servidores, bases de datos Mysql y SQL, la herramienta más común es PhPMyAdmin, de eso no hay duda. Sin embargo, existen alternativas muy interesantes que podemos tener que considerar en ciertas ocasiones. Hoy os hablamos de una de ellas: MySQL Workbench. En nuestro caso, usamos empezamos a usar esta GUI para bases de datos, porque necesitábamos conectarnos a servidores de base de datos que estaban muy restringidos en términos de seguridad. La conexión sólo se podía hacer por clave privada por ssh, y PhpMyAdmin no permitía esto (de manera sencilla al menos). MySQL Workbench es un gran interfaz gráfico para bases de datos SQL disponible para Windows, Linux y Mac OS X. Con esta sencilla pero potente herramienta, podemos realizar modelado de datos, desarrollo SQL, administrar servidores SQL, administrar usuarios, realizar copias de seguridad, migrar, monitorizar el rendimiento y mucho más. Si eres un administrador de servidores, y llevas varios servidores de bases de datos, te recomiendo que pruebes esta herramienta, porque te va a resultar sencillo, y muy visual, gestionar esos servidores. Además una de las grandes ventajas que tiene es que, al contrario que PhpMyAdmin, lo instalas en tu equipo en tu oficina y eso se conecta directamente con los servidores de bases de datos. No tienes que instalar nada en tu servidor, no necesitas servidores web ni tienes que dejar en el servidor programas que puedan conectarse a la base de datos y puedan ser puntos débiles de seguridad.    

Diseño Web, Sistemas, Soporte

Error Revive Adserver: Cannot redeclare plugin_geotargeting_oxmaxmindgeoip_oxmaxmindgeoip_delivery_getgeoinfo()

Si tienes un servidor de anuncios Revive Adserver, un buen servidor de anuncios opensource (aunque algo simple), puede que tengas, en el log de tu servidor, el siguiente error que devuelve páginas en blanco o errores 500 aleatorios al navegar. en el adserver. Ocurre de repente, o tras una actualización: PHP Fatal error: Cannot redeclare plugin_geotargeting_oxmaxmindgeoip_oxmaxmindgeoip_delivery_getgeoinfo() in |� /html/revive/plugins/geoTargeting/oxMaxMindGeoIP/oxMaxMindGeoIP.delivery.php Evidentemente el error lo está dando el plugin de geoTargetting por un problema de una variable declarada dos veces. Os indicamos cómo lo hemos resuelto nosotros: Edita el fichero que da el error (la ruta puede cambiar según tu servidor y configuración al instalar) html/revive/plugins/geoTargeting/oxMaxMindGeoIP/oxMaxMindGeoIP.delivery.php Ve a la línea que da el error. Suele ser la 31 o la 32. Ahí está declarada la función así: function Plugin_geoTargeting_oxMaxMindGeoIP_oxMaxMindGeoIP_Delivery_getGeoInfo($useCookie = true) Cámbiala a lo siguiente: if (!function_exists(‘Plugin_geoTargeting_oxMaxMindGeoIP_oxMaxMindGeoIP_Delivery_getGeoInfo’)) { function Plugin_geoTargeting_oxMaxMindGeoIP_oxMaxMindGeoIP_Delivery_getGeoInfo($useCookie = true) {….. } } En rojo te ponemos lo que hemos añadido. Es decir añadimos un if que me ejecuta sólo la función si no está declarada la variable, y ponemos toda la función dentro de unos paréntesis de ese if. Con esto verás que ya no da esos errores. Fuente (nota está mal la solución de la fuente, hay que retocarla como hemos hecho nosotros).

Diseño Web, Sistemas, Soporte, Trucos

Error en XAMPP. “Unable to open process”. Problema con los puertos 443 u 80

Xampp es un programa que te permite crear un servidor de Apache, Mysql, y Php en tu ordenador Windows. Una gran manera de tener un servidor de pruebas en tu ordenador. De vez en cuando, al arrancar XAMPP, obtienes un error en el puerto, puede ser el 80 o el 443 del estilo: Port 443 in use. “Unable to open Process” with PID 4! Y no puedes iniciar Apache. Este error suele originar porque algún servicio de Windows tiene ocupado el puerto 80 o el 443. En nuestro caso era el 443, porque teníamos una VPN configurada en Windows y este ocupa ese puerto. La solución puede pasar por encontrar el servicio que ocupa el puerto y desinstalarlo o pararlo. Pero puedes necesitarlo, así que la otra solución es cambiar el puerto que usa Apache como servidor http (80) y el servidor https (443). En este vídeo os explicamos cómo:    

Internet, Sistemas, Soporte, Trucos

Error 7024. El servicio Enrutamiento y Acceso Remoto no se inicia

Ayer, cuando estábamos grabando el vídeo de Cómo crear un servidor de VPN en Windows 10, el asistente nos falló en varios ordenadores. El error que daba era “El servicio enrutamiento y acceso remoto no puede iniciarse” y en el visor de eventos teníamos errores 7024. Parece ser que el error ocurre si tenías una VPN configurada antes de alguna actualización importante de Windows 10 como el Creators Update. Algo debe “romperse” tras esas actualizaciones. Hoy os dejamos cómo resolverlo. Lo primero es comprobar (Inicio>Ejecutar>services.msc) que tenemos los servicios necesarios funcionando y en Automático. Los servicios son: Enrutamiento y Acceso Remoto. Administrador de conexiones de acceso remoto. Lo siguiente, si todavía no funciona, son unos cambios en el registro. Como siempre que hacemos cambios en el registro, recomiendo siempre hacer una copia, de todo o de lo cambiado, en (dentro de regedit) Archivo>Exportar. Las claves a añadir o comprobar son: En  Equipo\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan Crear un nuevo DWORD (Edición > Nuevo > Valor de DWORD) Llama al DWORD SvcHostSplitDisable Abre el nuevo DWORD, cambia el valor a = 1, luego pincha en OK En Equipo\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RemoteAccess Crea un nuevo DWORD (Ediición> Nuevo >Valor de DWORD) Llama al DWORD SvcHostSplitDisable Abre el DWORD, dale el valor = 1,luego pincha en OK Reincicia el ordenador. Ahora debería funcionar el asistente de VPN (por lo menos a nosotros nos funcionó).

Internet, Servidores, Sistemas, Soporte

VPN en Windows 10. Cómo crear un servidor de VPN en Windows

Si no sabes lo que es una VPN, deberías aprenderlo pronto. Porque, pronto deberíamos todos tener ordenadores y móviles conectados por VPN cuando estemos en Internet. Para una conexión de VPN necesitas: Un servidor de VPN que reciba las llamadas. Esto es lo que os enseñamos a hacer hoy en Windows 10. Abrir unos puertos en el router. En este caso el 1723 hacia la IP (fija) de tu servidor de VPN. Uno o varios clientes que hagan la llamada de VPN. Esto os enseñamos a hacerlo el próximo día. En caso de no tener IP fija en tu oficina/casa (donde esté el servidor) necesitaréis un servicio de IP dinámica y configurarlo en el router para que el cliente sepa dónde está tu servidor. En este vídeo os enseñamos a crear el servidor de VPN en Windows 10 (válido con pequeñas modificaciones en cualquier Windows), y abrir los puertos en el firewall del servidor Windows. Si recibes un error al crear la conexión entrante especificada en el vídeo, mira el artículo de mañana, porque ahí os explicaremos cómo resolverlo.  

Diseño Web, Sistemas, Trucos

En phpMyAdmin no aparece la opción de editar, copiar o eliminar en una tabla

Ayer estábamos manejando la base de datos de un cliente, queríamos eliminar una fila en una tabla, pero esa tabla no tenía las opciones de editar, copiar o eliminar. En las demás tablas de la misma base de datos si que aparece. Os mostramos cómo solucionar esto y por qué sucede. Obviamente lo primero es mirar si tienes todos los permisos correctos para esa base de datos y tabla y para ese usuario. Mira en la pestaña privilegios, pero suponemos que todo está bien. La razón por la que una tabla puede no mostrarte esas opciones es porque no esté definida una Clave Primaria (Primary Key). Así que lo primero que hay que probar es eso, pinchar en la pestaña estructura en esa tabla y pinchar en el icono de la llave (Clave Primaria) en el campo que queramos definir como tal. Si podemos definir clave primaria verás que luego aparecen los campos que faltaban y podemos modificar campos. PERO, no en todas las tablas podemos definir Clave Primaria. Porque dicha clave tiene que ser única. Es decir en tablas donde un mismo valor se repite no puedes definir una Clave Primaria. ¿Qué hacer entonces? Necesitas hacerlo por MySQL. Tranquilo, no tienes que aprender muchos comandos, en la pestaña MySQL en la tabla, tienes botones de Insertar, Actualizar y Borrar. Cuando pinchas a estos botones te añade el comando de MySQL y sólo tienes que cambiar los valores. Además, en alguno de ellos de permite probar el comando antes de ejecutarlo. Obviamente, haz una copia de la base de datos antes desde Exportar en la raíz de la base de datos.  

Sistemas, Soporte, Trucos

Cómo cambiar una red de pública a privada en Windows 10

Cuando te conectas a una nueva red, normalmente lo soléis hacer vía Wifi, aunque también pasa por cable, Windows 10 la suele activar como “Red pública”. Lo podéis comprobar haciendo click derecho en el icono de red de la barra de tareas, a la derecha, y pinchando en “Abrir el Centro de redes y recursos compartidos”. Ahí podréis comprobar si la red a la que estáis conectados es pública o privada. Esto causa problemas al compartir carpetas, impresoras o conectarse a recursos compartidos. Os enseñamos a cambiarlo en el siguiente vídeo. Lo que no entendemos muy bien es por qué Windows no para de cambiar esto con cada versión de Windows. Parece que quiere liarnos a los administradores de sistemas  (y no te digo nada a los usuarios) jejejeje.

Diseño Web, Información Tecnica, Sistemas

Gestionar Mysql por línea de comandos. Comandos básicos

Si, como nosotros a veces, tenéis que gestionar bases de datos Mysql por línea de comandos (porque, por seguirdad, no admita gestión web por phpMyadmin), seguramente os olvidaréis de los comandos. Nosotros no estamos todo el día trabajando con Mysql, y usamos muchos tipos de lenguaje, así que solemos olvidarnos de los detalles. Os dejamos aquí los comandos que más necesitaréis. Recordad que esto es una guía MUY básica. Acceder a mysql. Lo ideal es acceder un un usuario que tenga permisos totales para las bases de datos o permisos tipo root. Aunque en muchos sistemas el usuario root no puede entrar en mysql. Todo depende de cómo hayas configurado el sistema. En Debian al instalar creo que lo llama debian-sys-maint. No es buena idea poner tu contraseña de mysql en línea de comandos, así que lo mejor para acceder es:mysql -u nombreusuario -p Mostrara las bases de datos: show databases; Acceder a una base de datos: use nombrebasededatos; Mostrar tablas de una base de datos: show tables; Crear una base de datos:  CREATE DATABASE nombrebasededatos; Borrar una base de datos: DROP DATABASE nombrebasededatos; Ver una lista de usuarios:  select user,host from mysql.user; Ver los permisos de un usuarios:  show grants for ‘nombredeusuario‘@’%’;% es localhost, si eso otra máquina es: show grants for ‘nombredeusuario‘@’ipdelservidor‘; Crear un usuario: CREATE USER ‘nombre_usuario’@’localhost’ IDENTIFIED BY ‘tu_contrasena’; Dar permisos a un usuario en una base de datos. En general, para todos los permisos es: GRANT ALL PRIVILEGES ON nombredelabasededatos.* TO ‘usuario’@’servidor’; Todo esto puede ampliarse con los permisos de Mysql y las opciones. Por ejemplo para una tabla sólo: GRANT ALL PRIVILEGES ON nombredelabasededatos.tabla TO ‘usuario’@’servidor’; Por ejemplo si quieres crear otro super-usuario: GRANT ALL PRIVILEGES ON *.* TO ‘usuario’@’servidor’; Quitar permisos para un usuario: REVOKE permission ON nombrebasededatos.tabla FROM ‘user’@’localhost’; Hacer copia de seguridad de la base de datos. Para esto es mejor hacerlo desde FUERA de Mysql, desde el shell del servidor, la línea de comandos de Linux, usando Mysqldump.$ mysqldump -u nombreusuario -p nombrebasededatos > nombrefichero.sql’; Para exportar una tabla:mysqldump -p –user=username database_name tableName > tableName.sql Esto lo copiará a la ruta donde estés en Linux. Más avanzado:$mysqldump –user=nombreusuario -p –all-databases > nombrefichero$(date +%Y-%m-%d-%H.%M.%S).sql; Esto hace una copia de todas las bases de datos a un fichero donde pone fecha al final del nombre. Recordad que todo esto se puede poner en un fichero para hacer copias cada cierto tiempo. Importar fichero a una base de datos. Se puede hacer de dos maneras. 1) Mysqldump. mysql -p -u username database_name < filename.sql O para una tabla: mysql -u username -p -D database_name < tableName.sql 2)Desde dentro de mysql (la que uso yo) Entrar en la base de datos con: use basededatos; Importar el fichero con source: source rutaalfichero/nombredelfichero.sql; Iremos poniendo más según vayamos echando en falta algún comando.

Scroll al inicio