Ubuntu Server 14.04 LTS
Módulos:
- MF0488_3: GESTIÓN DE INCIDENTES DE SEGURIDAD INFORMÁTICA
- MF0489_3: SISTEMAS SEGUROS DE ACCESO Y TRANSMISIÓN DE DATOS)
Nombre: Alejandro Asenjo
Objetivo: Montar un Servidor con Ubuntu y todas sus aplicaciones, librerías y herramientas, otorgarle seguridad a través de IDS e IPS.
Herramienta: Máquina Virtual, montada en un procesador I3 con 18gb de RAM en 64 bits.
Se instalará:
- Ubuntu Server (v.14.04 LTS)
- SSH (OpenSSH v.6.6p1-2ubuntu2)
- APACHE (Apache2 v.2.4.7)
- MYSQL (v.5.5.37)
- PHPMYADMIN (v. 4.0.10-1)
- PHP (PHP5 v.5.5.9)
- FTP (VSFTPD v.3.02)
- SAMBA (v.4.1.6)
- WEBMIN (v.1.69)
- MUNIN (v.2.0.19-3)
- PROXY (Squid 3 v.3.3.8)
- Configurar Certificado SSL
- WEBMAIL
o Postfix (v.2.11.0-1)
o Dovecot (v.2.2.9-1ubunt con Certificado Digital SSL)
o SquirrelMail (v.1.4.23)
- IPTABLES (nativo)
- SNORT
- TRIPWIRE
-.ESTA INSTALACIÓN Y TODOS LOS SERVICIOS SE BASAN EN UNA INSTALACIÓN MANUAL Y NO PRE-CONFIGURADA DEL SERVIDOR.-
UBUNTU SERVER 14.04 (Ubuntu es un sistema operativo basado en Linux y que se distribuye como software libre)
Al insertar el DVD lo primero es seleccionar el idioma, lo siguiente es el menú de Ubuntu el cual eligiéremos instalar Ubuntu Server.
Importante! Cada cambio que realicemos a las configuraciones dentro de Ubuntu realizar una copia de seguridad ejemplo: cp ubuntu.conf ubuntu.backup.cfg
Importante! Para desinstalar un paquete que no funcione deberemos realizar lo siguiente:
apt-get autoremove <paquete> o apt-get remove <paquete>
apt-get purge <paquete>
apt-get clean <paquete>
PASOS A SEGUIR: (Referencia http://infosecsapobla.foroactivo.com/t200-instalar-ubuntu-server)
- Instalar Ubuntu Server
- Seleccionamos País
- Detecta la distribución del teclado (configuramos el teclado en español)
- Nombre de la máquina
- Configurar usuarios y contraseñas (usaremos por ejemplo “administrador sistema”)
- Nombre de usuario para la cuenta (“administrador)
- Contraseña para el nuevo usuario (recuerda apuntar la contraseña y el usuario usado)
- Cifrar. (No es aconsejable cifrar la carpeta)
- Configuración del reloj
- Método de particionado (dependerá si el disco está compartido con otro sistema operativo, o lo que necesitemos).
- Particionado de discos (SI, escribir los cambios en el disco)
- Configurar el gestor de paquetes (en el caso que utilicemos un proxy HTTP para acceder a la red, si no utilizamos dejamos en blanco)
- Configuración de task (actualizaciones automáticas, podemos aplicar instalar actualizaciones de seguridad automáticamente o para mayor control sin actualizaciones automáticas y nosotros actualizar y verificar su funcionamiento).
- Selección de programas (hay dos maneras de real izarlo seleccionamos nosotros los paquetes a instalar o posteriormente los instalamos manualmente, como recomendación instalaremos los paquetes posteriormente)
- Instalar el cargador de arranque GRUB en un disco duro (Respondemos que SI, para poder tener un gestor de arranque múltiple)
- Terminar la instalación (nos notifica de la finalización de la instalación y expulsa el DVD)
Ya tenemos el Servidor corriendo y la primer pantalla que nos muestra es la de “login”
Una vez dentro se recomienda trabajar con “sudo su” para la instalación de los paquetes y sus correspondientes configuraciones.
Es aconsejable ir uno por uno, configurar y testear, valga la redundancia una a la vez.
Por comodidad también instalaremos el “mc” que es como el “Norton Comannder”;
apt-get install mc.
Otra cosa que debemos prestar atención al instalar o modificar siempre es el “prompt” que nos indicará dónde nos ubicamos y como qué estamos logeados; el comando “pwd”, también nos da la información de la ubicación.
Obtener Datos de Paquetes
El comando aptitude nos abrirá la lista de paquetes instalados, los que no, etc. Y pulsando en la barra “/” nos mostrará e buscador para localizar el paquete y obtener los datos como la versión.
CONFIGURAR LA RED
El instalar de Ubuntu configura el sistema de red a través de DHCP, debemos cambiar esto porque el servidor debe tener una dirección IP estática. Se recomienda utilizar una IP alta (250, 251) y para los DNS (del IPS o los de Google por ejemplo).
-Editamos /etc/network/interfaces
nano /etc/network/interfaces
-Agregamos las siguientes líneas si no estuvieran.
# La interfaz de red de bucle invertido
auto lo
iface lo inet loopback
# La interfaz de red primaria
auto eth0
iface eth0 inet static (modificamos dhcp por static)
address 192.168.1.250
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 80.58.61.250 80.58.61.254
- address: la dirección IP que tendrá nuestra máquina
- netmask: la máscara de red. Si usamos una dirección IP de clase C, habitual en redes pequeñas, del tipo 192.168.1.x la máscara de red será 255.255.255.0
- nerwork: la dirección de la red. Será nuestra dirección IP pero con el último valor acabado en 0.
- broadcast: la dirección de broadcast. Será nuestra dirección IP pero con el último valor acabado en 255.
- gateway: la puerta de enlace, es decir, la IP del router de salida.
- dns-nameservers: la dirección IP de los servidores DNS. En este caso he usado las de mi IPS.
-Reiniciamos el server
reboot
HOST
-Editamos el fichero host para vincular el IP a un Dominio /etc/hosts
nano /etc/hosts
-Agregamos la siguiente línea debajo de: 127.0.0.1 localhost
<IP del servidor> <nombre del dominio que elegimos> <nombre de la línea>
-Ejemplo: 192.168.1.250 ubuntuserver.local server1
-Recordemos: que no debemos usar .com, .org, .es, etc.
-Ahora reiniciamos el servicio.
echo (nombre del dominio que elegimos) > /etc/hostname
-Ejemplo: echo ubuntuSRV.local /etc/hotname (con este comando agregamos el nombre que utilizamos al “hostname”.
service hostname restart
hostname
hostname –f
(Para confirmar que está correcto debería salir nuestro nombre de dominio elegido)
reboot (reiniciamos el servidor)
CONFIGURAR LA RED en VIRTUAL BOX
En el caso de Virtual Box se debe ir a “Configuración”, luego a “Red” y el adaptador conectado como “Puente” y en “Sistema”, ir a “Procesador” y dejar habilitado “PAE/NX”.
Tipos de interfaces de red:
- Bridged : Comparte el rango de red de la máquina anfitrión (la máquina en la que está instalado virtualbox).
- Host-only (Sólo anfitrión): Crea una red para compartir solamente con el anfitrión.
- Red Interna : Para comunicarse con otras máquinas virtuales que estén ejecutándose a la vez en la misma máquina y poseer una interfaz de red interna que nos facilitará la conexión con las máquinas virtuales cliente (situadas tambien en la red interna).
- NAT: Crea una interfaz en el rango 10.0.0.0 que crea una conexión NAT (traduce entre una dirección IP y la otra) con la red del anfitrión.
CONFIGURAR UN SERVIDOR SSHp(ara acceder en forma remota.)
-Para ello utilizaremos el OpenSSH:
apt-get install openssh-server
-Arrancar el servidor:
/etc/init.d/ssh start
INSTALACIÓN DE LAMP (Linux – Apache – MySQL – PHP)
- Empezaremos por APACHE 2
apt-get install apache2 -y
-(la opción “-y” es para que no pregunta y diga SI a todo)
- Instalaremos MySQL servidor y cliente
apt-get install mysql-server mysql-client
-Nos preguntará la contraseña que queremos para el usuario “root” de MySQL.
-(Opcional) Si queremos podemos instalar MySQL Workbench que es la herramienta oficial de Oracle para crear y diseñar las bases de datos.
apt-get install mysql-workbench
-(Opcional) Asegurar MySQL se realiza a través de un asistente con el siguiente comando:
mysql_secure_installation
- Instalar PHP versión 5
apt-get install php5
-(Opcional) Buscar más paquetes para PHP
apt-cache search php
-Ahora le daremos un nombre a nuestro servidor en la configuración del APACHE2 en el caso de que nos de el error como por ejemplo: “Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1”.
Se soluciona de la siguiente manera:
–Editaremos: (podemos utilizar nano o gedit o mc)
/etc/apache2/apache2.conf
-Agregamos:
#ServerName
ServerName localhost
-Editamos:
/etc/apache2/httpd.conf
-(por defecto el archivo está vacío, en el caso que no exista lo creamos con nano)
-Agregamos:
ServerName localhost
-Ya tenemos el LAMP ahora hay que reiniciar el servidor para que los cambios tengan efectos:
/etc/init.d/apache2 restart
- Para facilitar el acceso a la base de datos y otras informaciones podemos instalar phpMyAdmin para acceder en forma gráfica desde otro ordenador.
sudo apt-get install phpmyadmin
-Se abrirá una ventana preguntando el servidor web a utilizar que será APACHE2. Después nos aconseja utilizar el “dbconfig ig-common” al cual pondremos que SI. Nos pedirá proporcionar la contraseña para la cuenta de administración de la base de datos.
Importante! Recordar apuntar las contraseñas usadas, y de que el usuario por defecto para phpmyadmin es “root”.
-Podemos modificar y crear una página web nuevo en /var/www/html/
AÑADIR USUARIOS
-El comando es “adduser”
addsuser <nombreusuario>
-Para ver las opciones de adduser es el comando “man”
man adduser
CREAR GRUPOS PARA LOS USUARIOS
addgroup <nombregrupo>
AÑADIR USUARIOS AL GRUPO
adduser <nombredeusuario> <nombredelgrupo>
AGREGAR CONTRASEÑA
passwd <contraseña>
EJEMPLO DEL CREACIÓN DE USUARIO EN EL GRUPO “ROOT”
usermod -g root nuevousuario
.Ejemplo:
useradd -g root -d /home/alejandro -m -s /bin/bash alejandro
passwd admin123
- “-g” indica el grupo principal que queremos que tenga el usuario, ya debe existir.
- “-d” carpeta home del usuario.
- “-m” crear carpeta home si es que no existe
- “-s ” es un intérprete de comandos (Shell) del usuario.
NO PERMITIR A LOS USUARIOS LOGUEARSE
–Editamos el archivo sshd_config que contiene la configuración del SSH
nano /etc/ssh/sshd_config
-Buscamos la línea donde pone (DenyUsers) o la creamos nosotros mismos al final del fichero agregando los usuarios que no queremos que puedan acceder remotamente a nuestro servidor por SSH de la siguiente forma:
# No pueden los usuarios iniciar sesión.
DenyUsers alejandro
(En este caso el usuario alejandro será bloqueado paro más seguridad y podemos agregar todos los usuarios que no necesiten estrictamente acceder a
nuestro sistema.)
-Reiniciamos el Servicio
service ssh restart
INSTALACIÓN DE FTP
-Para el FTP utilizaremos VSFTPD. Antes de empezar con la instalación deberíamos realizar:
apt-get update && apt-get upgrade
-Instalaremos VSFTPD
apt-get install vsftpd
–Editaremos el archivo de configuración del vsftpd que se encuentra en /etc/vsftpd.conf con nano (editor).
nano /etc/vsftpd.conf
-Y modificaremos las siguientes líneas:
-Descomentamos:
(línea 29) write_enable=YES
(línea 33) local_unmask=022
–Para prevenir que accedan a cualquier directorio también descomentamos:
(línea 120) chroot_local_user=YES
-Añadimos:
# Permite la escritura en la carpeta de los usuarios
allow_writeable_chroot=YES
-Añadimos también las siguientes líneas para activar el modo pasivo:
# Activamos el uso de conexiones pasivas
# especificamos el rango de puertos que serán utilizados
pasv_enable=Yes
pasv_max_port=40000
pasv_min_port=40100
-Reiniciamos el servicio para que las modificaciones realizadas tengan efecto.
service vsftpd restart
-Si queremos que crear usuario para acceder por ftp y que tengan permisos para poder leer/escribir en los directorios web, podemos crear un grupo a los que añadiremos tanto los usuarios ftp como al usuario apache y aplicar asignar el nuevo grupo a los directorios que nos interesen.
groupadd user-ftp
usermod -G user-ftp <nombre del usuario>
chown -R :user-ftp /var/www
chmod -R g+rw /var/www
1.- Creamos el grupo user-ftp
2.- Agregamos al usuario “usuario” al grupo user-ftp
4.- Damos permisos recursivos al grupo user-ftp en /var/www
5.- Damos permisos recursivos y hacemos propietario al grupo user-ftp
6.- Damos permisos al grupo user-ftp de lectura y escritura en /var/www
Modos de conexión del cliente FTP
- Modo Activo: el servidor siempre crea el canal de datos en su puerto 20, mientras que en el lado del cliente el canal de datos se asocia a un puerto aleatorio mayor que el 1024.
- Modo Pasivo: Cuando el cliente envía un comando PASV sobre el canal de control, el servidor FTP le indica por el canal de control, el puerto (mayor a 1023 del servidor. Ejemplo:2040) al que debe conectarse el cliente.
INSTALACIÓN DE SAMBA
–Lo primero a realizar es verificar que “estación de trabajo” está utilizando Windows por ejemplo “WORKGROUP”.
En WINDOWS en la consola de comando “cmd” escribimos: net config Workstation (para verificar en que grupo de trabajo está la red de Windows).
-Vamos a instalar SAMBA con herramientas GUI de administración y sus dependencias en forma que cualquier usuario sin necesidad de usuario y contraseña pueda acceder.
apt-get install samba samba-common python-glade2 system-config-samba
–Abrimos el editor “nano” y escribimos las siguientes líneas al final del archivo smb.conf:
nano /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = UbuntuSRV
security = user
map to guest = bad user
dns proxy = no
#====================== Carpeta Publica =========================
[Publica]
path = /samba/Publica
browsable =yes
writable = yes
guest ok = yes
read only = no
-Con estas líneas se está utilizando una carpeta pública para compartir, con permisos de escritoras y borrados para todos los usuarios y en el grupo de trabajo que anteriormente visualizamos en Windows.
–Creamos la carpeta a compartir
mkdir –p /samba/Publica
-Reiniciamos samba
service smbd restart
-Modificamos los permisos de la carpeta para que sea accesible a todos
chmod –R 0777 /samba/Publica/
chown –R nobody:nogroup /samba/Publica/
*(chmod) Primero le damos el permiso de lectura, escritura y ejecución.
*(chown) Segundo especificando el propietario de la carpeta pública diciéndoles el dueño es “nobody” y el grupo “nogroup”)
INSTALACIÓN DE WEBMIN
Webmin es una herramienta de configuración de sistemas accesible vía web para OpenSolaris, GNU/Linux y otros sistemas Unix. Con él se pueden configurar aspectos internos de muchos sistemas operativos, como usuarios, cuotas de espacio, servicios, archivos de configuración, apagado del equipo, etcétera, así como modificar y controlar muchas aplicaciones libres, como el servidor web Apache, PHP, MySQL, DNS, Samba, DHCP, entre otros.
-Para poder instalar el “Webmin” debemos agregar el origen de la descarga de este programa al repositorio de paquetes del servidor. Para ello editamos el fichero “sources.list”
nano /etc/apt/sources.list
-Añadimos las siguientes líneas:
deb http://download.webmin.com/download/repository sarge contrib
-Ahora descargamos la clave de firma de los repositorios y las añadimos a las que tenemos:
wget http://www.webmin.com/jcameron-key.asc
apt-key add jcameron-key.asc
-Actualizamos los repositories de los paquetes e instalamos el “webmin”
apt-get update && apt-get install webmin
-El acceso es a través del navegador usando la IP asignada al servidor (es de acceso seguro en el puerto 10000)
Ejemplo: https://192.168.1.250:10000
INSTALACIÓN MUNIN
Munin es una aplicación, escrita en perl, de monitorización red/sistema que nos muestra gráficos a través de una interfaz web, con cerca de 500 plugins disponibles. Podremos supervisar el rendimiento de servidores, redes SAN y aplicaciones.
-Instalar servidor y cliente
apt-get install munin munin-node
-Modificar el archivo de configuración
nano /etc/munin/apache.conf
-Comentamos la siguiente línea:
Allow from 127.9.9.1 ::1 (línea 18)
-Permitimos el acceso para cualquiera que conozca la dirección del acceso a través del navegador escribiendo la siguiente línea:
Allow from all
-Protejemos el acceso a “Munin” con usuario y contraseña:
(Agregamos en la línea 29) AllowOverride None
(Descomentamos línea 30) AuthUserFile /etc/munin/munin-htpasswd
(Descomentamos línea 31) AuthName «Munin»
(Descomentamos línea 32) AuthType Basic
(Descomentamos línea 33) require valid-user
(guardamos y cerramos)
-Para que funcione correctamente debe estar instalado el “apache2-utils”, en el caso que no se encuentre instalado procedemos de la siguiente manera: (continuar en el siguiente punto si dio error en la creación de la contraseña y ya ha sido instalado “apach2-utils”)
apt-get install apache2-utils
-Creamos una contraseña para el usuario “Munin”
htpasswd -c /etc/munin/munin-htpasswd Munin
(Escribimos la contraseña que deseamos, recordemos anotarla)
-Reiniciamos los servicios:
service apache2 restart
service munin-node restart
-Para acceder por el navegador usamos la IP asignada “/munin”
Ejemplo:http://192.168.1.250/munin
Usuario: Munin
Contraseña: la que hayamos puesto
INSTALACIÓN PROXY
Es un programa o dispositivo que realiza una acción en representación de otro. Por ejemplo, si una hipotética máquina A solicita un recurso a una C, lo hará mediante una petición a B; C entonces no sabrá que la petición procedió originalmente de A. Esta situación estratégica de punto intermedio suele ser aprovechada para soportar una serie de funcionalidades: proporcionar caché, control de acceso, registro del tráfico, prohibir cierto tipo de tráfico, etc.
-Instalar el servidor proxy para ello utilizaremos el Squid (el cual es para web con caché)
apt-get install squid
-Editaremos el archivo de configuración “squid.conf” pero antes haremos una copia de seguridad ¡Que ya habíamos mencionado anteriormente lo importante que es!
cp /etc/squid3/squid.conf /etc/squid3/squid.conf.old
nano /etc/squid3/squid.conf
-Borramos todas las líneas y creamos la siguiente regla básica:
#Puerto de conexión para las solicitudes vinculando el servicio a la IP.
http_port 192.168.1.250:3128
#Indica las direcciones IP de los servidores DNS a utilizar
dns_nameservers 8.8.8.8 8.8.8.4
#con esta línea definimos nuestra red
acl aula src 192.168.1.0/24
#definimos las webs y palabras prohibidas creando un archivo de texto con el listado de direcciones y palabras prohibidas.
acl nopermitir url_regex “/etc/squid3/no_permitir.txt”
#denegamos el acceso a las webs prohibidas
http_access deny nopermitir
#permitimos el acceso a nuestra red
http_access allow aula
(“0j0” Debemos de tener en cuenta el rango de IP que utilizamos)
- acl: significa lista de control de acceso
- aula: es simplemente una etiqueta que podemos modificar
- src: es para que realice una búsqueda
- noway: no permitir
- deny:denegar lo que tengas por ejemplo en “noway”
- url_regex:especificar URLs que contienen un texto en concreto y a las cuales no se quiere permitir el acceso
-Crear el archivo que contiene las webs prohibidas:
touch /etc/squid3/no_permitir.txt
nano /etc/squid3/no_permitir.txt
-Escribimos por ejemplo:
www.facebook.com
www.youtube.com
porno
sex
xxx
-Reiniciamos el servicio de proxy
service squid3 restart
Para configurar nuestros navegadores utilizaremos la IP del proxy (o sea la IP de nuestro servidor y el puerto por defecto “3128”.
Podemos ver una configuración básica de SQUID según el Observatorio Tecnológico del Gobierno de España: http://recursostic.educacion.es/observatorio/web/ca/software/servidores/589-elvira-mifsud
INSTALAMOS UN CERTIFICADO SSL EN APACHE
-Activar El Módulo SSL
a2enmod ssl
service apache2 restart
-Crear Un Certificado SSL Autofirmado
Vamos a empezar por la creación de un subdirectorio dentro de las carpetas de configuración de Apache para colocar los archivos de certificado que vamos a estar creando:
mkdir /etc/apache2/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
Cuando se ejecute, se pedirá una serie de preguntas la cuales debemos responder. El punto más importante que se solicita es la línea que dice (Common Name (e.g. server FQDN or YOUR name)), “Nombre común (por ejemplo, el FQDN del servidor o su nombre)”. Se debe introducir el nombre de dominio que desea asociar con el certificado, o la dirección IP pública del servidor, si no cuenta con un nombre de dominio.
-Los detalles de la configuración son los siguientes:
- openssl: Se trata de la herramienta de línea de comandos básica proporcionada por OpenSSL para crear y administrar certificados, llaves, solicitudes de firma , etc
- req : Esto especifica un sub comando para la solicitud de certificate signing request X.509 (CSR). X.509 es un estándar de infraestructura de clave pública que SSL se añade por su clave y certificado administrado. Dado que estamos queriendo crear un nuevo certificado X.509.
- x509: Esta opción especifica que queremos hacer un archivo de certificado auto firmado en lugar de generar una solicitud de certificado.
- nodes: Esta opción le dice a OpenSSL que no queremos asegurar nuestro archivo de clave con una contraseña. Tener un archivo con clave protegida por contraseña haría que Apache se inicie automáticamente, ya que habría que introducir la contraseña cada vez que se reinicia el servicio.
- days 365: Esto especifica que el certificado que estamos creando será válida por un año.
- newkey rsa:2048: Esta opción creará la solicitud de certificado y una clave privada nueva, al mismo tiempo. Esto es necesario ya que nosotros no creamos una clave privada con antelación. El rsa: 2048 le dice a OpenSSL que genere una clave RSA que es de 2048 bits de longitud.
- keyout: los nombres de este parámetro, es del archivo de salida para el archivo de clave privada que se está creando.
- out: Esta opción da nombre al archivo de salida para el certificado que estamos generando.
-Configurar Apache Para Usar SSL
Ahora que ya tenemos nuestro certificado y la clave disponibles, podemos configurar Apache para que pueda utilizar estos archivos en un archivo de host virtual.
En lugar de basar nuestro archivo de configuración en el archivo 000-default.conf en el subdirectorio de las páginas web disponibles, vamos a basar esta configuración en el archivo default-ssl.conf que contiene un poco de la configuración SSL de forma predeterminada.
-Editamos el archivo “default-ssl.conf” que se encuentra en /etc/apache2/sites-available/default-ssl.conf
nano /etc/apache2/sites-available/default-ssl.conf
Daremos la configuración básica para un host virtual (ServerAdmin, ServerName,
ServerAlias, DocumentRoot, etc), así como cambiar la ubicación donde Apache buscara el certificado SSL y la llave
-Modificamos las siguientes líneas:
#linea 3, 4 y 5
ServerAdmin <usuarioadministrador>@ubuntuSRV.local
ServerName ubuntuSRV.local
ServerAlias ubuntuSRV.local
DocumentRoot /var/www/html
-Guardamos
– Activamos el Host Virtual SSL
Ahora que ya hemos configurado nuestro host virtual, debemos de habilitar el SSL. Podemos hacer esto escribiendo lo siguiente en la consola:
a2ensite default-ssl.conf
-Entonces, necesitamos reiniciar Apache nuevamente para cargar el nuevo archivo del host virtual:
service apache2 restart
Esto debería permitir que su nuevo host virtual, sirva de contenido cifrado utilizando el certificado SSL que ha creado.
– Comprobación De La Configuración
https://nombre_dominio_ó_ip_servidor
Recibirán un aviso de que el navegador no puede verificar la identidad de su servidor, ya que no ha sido firmado por una de las autoridades de certificación de confianza.
Esto se esperaba, ya que tenemos auto firmado nuestro certificado. Mientras que nuestro certificado no sea “valido” para nuestros usuarios, ya que no ha tenido ninguna interacción con una autoridad de certificación de confianza, todavía será capaz de cifrar la comunicación.
Dado que se espera, podemos hacer clic en el botón “Continuar de todos modos”.
Una vez que sigamos a nuestro sitio web, podemos ver el contenido que deseemos mostrar, que está cifrado.
INSTALAMOS UN SERVIDOR DE CORREO ELECTRÓNICO
- Instalación de POSTFIX: envía y recibe el correo a través del protocolo SMTP. Sólo se retransmitirá correo a otros servidores de correo si el correo es enviado por un usuario autenticado, pero cualquiera puede enviar correo a este servidor para la entrega local. Además es el agente de transferencia de correo por defecto de Ubuntu.
-Instalar Postfix
apt-get install postfix sasl2-bin
Primera Pantalla -> Sitio de Internet (ya configurado al instalar el paquete)
Segunda Pantalla -> Nombre del Sistema de Correo (ya configurado al instalar el paquete. Ejemplo: ubuntuSRV.local)
#########———SI SOLICITARA LAS SIGUIENTES PANTALLAS—–############
Tercer Pantalla -> Recipiente de correo para el administrador y postmaster (escribimos el nombre de usuario por ejemplo: administrador)
Cuarta Pantalla -> Otros destinos para los cuales aceptar correo (en blanco para ninguno) (lo único que deberíamos hacer es escribir la palabra con un punto al final “mail.” antes del dominio; ejemplo: ubuntuSRV.local, localhost.local, , localhost)
Quitna Pantalla -> ¿Forzar actualizaciones síncronas en la cola de correo? (En el cual responderemos que “NO”.
Sexta Pantalla -> Redes Locales (Por defecto viene 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128) (Agregaremos nuestro rango de IP que utilzamos) Quedaría algo así:
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.0/24
Séptima Pantalla -> Límite de tamaño de buzón de correo (en bytes) (Por defecto es cero (0) el cual dejaremos sin modificar ya que no limitaremos el espacio a utilizar)
Octava Pantalla -> Carácter de extensión de direcciones locales. (Utilizaremos el carácter por defecto que es la suma (+), no modificaremos).
Novena Pantalla -> Protocolos de internet a utilizar (Por defecto asigna “todos” el cual también usaremos)
#############################—————###############################
-Realizamos copia de seguridad del archive de configuración
cp /usr/lib/postfix/main.cf /etc/postfix/main.cf
-Editamos el archive de configuración de postfix ubicado en etc/postfix/main.cf y posteriormente realizamos los cambios mencionados.
nano /etc/postfix/main.cf
# linea 59: descomentar
mail_owner = postfix
# linea 76: descomentar y poner el host
myhostname = ubuntuSRV.local
# linea 83: descomentar y poner el dominio
mydomain = ubuntuSRV.local
# linea 104: descomentar
myorigin = $mydomain
# linea 118: descomentar
inet_interfaces = all
# linea 166: descomentar
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# linea 209: descomentar
local_recipient_maps = unix:passwd.byname $alias_maps
# linea 268: descomentar y añadir la LAN
mynetworks = 127.0.0.0/8, 192.168.1.0/24
# linea 388: descomentar
alias_maps = hash:/etc/aliases
# linea 399: descomentar
alias_database = hash:/etc/aliases
# linea 421: descomentar (utilizamos Maildir)
home_mailbox = Maildir/
# linea 557: comentar
#smtpd_banner = $myhostname ESMTP $mail_name (@@DISTRO@@)
# linea 558: AÑADIR
smtpd_banner = $myhostname ESMTP
# linea 631: AGREGAMOS al sendmail_path =
sendmail_path = /usr/sbin/postfix
# linea 636: AGREGAMOS al newaliases_path =
newaliases_path = /usr/bin/newaliases
# linea 641: AGREGAMOS al mailq_path =
mailq_path = /usr/bin/mailq
# linea 647: AGREGAMOS al setgid_group =
setgid_group = postdrop
# linea 651: comentar
#html_directory =
# linea 655: comentar
#manpage_directory =
# linea 660: comentar
#sample_directory =
# linea 664: comentar
#readme_directory =
# AÑADIMOS AL FINAL: limite de email a 10MB
message_size_limit = 10485760
# limite de disco 1GB
mailbox_size_limit = 1073741824
# configurar SMTP-Auth
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
# AÑADIMOS AL FINAL PARA CONFIGURAR SSL:
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/apache2/ssl/apache.crt
smtpd_tls_key_file = /etc/apache2/ssl/apache.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
-Guardamos el fichero
-Editamos el fichero master.cf ubicado en /etc/postfix/master.cf y realizamos las siguientes modificaciones.
nano /etc/postfix/master.cf
# líneas 28 a la 30 -Descomentamos:
smtps inet n – – – – smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-Guardamos el fichero
-Ejecutamos newaliases y reiniciamos postfix:
newaliases (si surgiera un error verificar las líneas editadas del “main.cf”)
/etc/init.d/postfix restart
Aclaración: “Postfix” utiliza por defecto el formato de buzón “mbox”, por ello al modificar el archivo “main.cf” especificamos que queremos utilizar el buzón de entrada de “Maildir” (home_mailbox = Maildir/).
- Instalación de Dovecot: Es un servidor POP e IMAP compatibles con los principales formatos de buzón del servidor que gestiona los directorios de correo locales y permite a los usuarios iniciar sesión y descarga su correo. También se encarga de la autenticación de usuarios.
-Instalamos dovecot para imap y pop3
apt-get install dovecot-core dovecot-pop3d dovecot-imapd
- Primera Pantalla: Opción de crear un certificado SSL para utilizar en IMAP o POP3 sobre SSL/TLS. A dicha creación de certificado diremos que “SI”.
- Segunda Pantalla: Nombre del equipo. (el cual utilizaremos “localhost”)
-Editar y modificar el archivo “dovecot.conf” ubicado en /etc/dovecot/dovecot.conf
nano /etc/dovecot/dovecot.conf
# linea 30: eliminamos la “coma” “los espacios” y los dos “dos puntos” quedando así:
listen = *
-Guardamos
-Editar y modificar el archivo “10-auth.conf” ubicado en /etc/dovecot/conf.d/10-auth.conf
nano /etc/dovecot/conf.d/10-auth.conf
# linea 10: descomentamos y cambiamos “yes” por “no”:
disable_plaintext_auth = no
# linea 100: añadimos “login”
auth_mechanisms = plain login
-Guardamos
-Editar y modificar el archivo “10-mail.conf” ubicado en /etc/dovecot/conf.d/10-mail.conf
nano /etc/dovecot/conf.d/10-mail.conf
# linea 24: cambiamos mail_location = maildir:~/mail:INBOX=/var/mail/%u por:
mail_location = maildir:~/Maildir
# linea 30: comentarla
#mail_location = maildir:~/mail:INBOX=/var/mail/%u
-Guardamos
-Editar y modificar el archivo “10-master.conf” ubicado en /etc/dovecot/conf.d/10-master.conf
nano /etc/dovecot/conf.d/10-master.conf
# lineas 96 a la 98: descomentar y añadir:
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
-Guardamos
-Editar y modificar el archivo “10-ssl.conf” ubicado en / etc/dovecot/conf.d/10-ssl.conf
nano /etc/dovecot/conf.d/10-ssl.conf
# linea 6: descomentamos
ssl = yes
# linea 12 y 13: añadimos la ruta del certificado y la llave
ssl_cert = /etc/apache2/ssl/apache.crt
ssl_key = /etc/apache2/ssl/apache.key
-Guardamos
-Reiniciamos el servicio “Dovecot”
service dovecot restart
Aclaración! Este (~) símbolo se puede genera presionando la tecla ALT + 126 (del teclado numérico)
- Instalación de SquirrelMail: es una aplicación webmail creada por Nathan y Luke Ehresman y escrita en PHP. Puede ser instalado en la mayoría de servidores web siempre y cuando éste soporte PHP y el servidor web tenga acceso a un servidor IMAP y a otro SMTP.
-Instalar SquirrelMail
apt-get install squirrelmail squirrelmail-compatibility squirrelmail-secure-login squirrelmail-decode squirrelmail-locales
-Configurar SquirrelMail utilizando su script llamado “conf.pl” y que se ubica en /etc/squirrelmail/
cd /etc/squirrelmail/
./conf.pl (-Ejecuta el configurador-)
- Marcamos 1 – Organización Preferences
- Marcamos 5 – Signout Page
o Cambiamos a /webmail
- Marcamos r – volver
- Marcamos 2 – Server Settings
- Marcamos 1 – Domain
o Cambiamos a ubuntuSRV.local
- Marcamos A – Update IMAP Settings
- Marcamos 4 – IMAP server
o Cambiamos a ubuntuSRV.local
- Marcamos 8 – Server software
o Escribimos dovecot
- Marcamos B – Update SMTP settings
- Marcamos 4 – SMTP server
o Cambiamos a ubuntuSRV.local
- Marcamos 7 – SMTP authentification
o Escribimos y (yes)
o Escribimos login
o Escribimos n (no)
- Marcamos r – volver
- Marcamos 10 – Languages
- Marcamos 1
o Cambiar a es_ES
- Marcamos 2 –default charset
o Cambiamos a utf-8
- Marcamos r – volver
- Marcamos 4 – General option
- Marcamos 7 – Hide SM attributions
o Escribimos y (yes)
- Marcamos r – volver
- Marcamos 8 – Plugins
- Marcamos 7 – delete_move_next
- Marcamos 15 – newmail (el número puede ser diferente)
- Marcamos 8 – compatibility (el número puede ser diferente)
- Marcamos q – salir
- Marcamos y (yes) para guardar
-Creamos y editamos la configuración de “SquirrelMail” “SquirrelMail.conf” que se ubica en /etc/apache2/conf-available/SquirrelMail.conf
touch /etc/apache2/conf-available/SquirrelMail.conf
nano /etc/apache2/conf-available/SquirrelMail.conf
-Agreagamos las siguientes líneas:
Alias /webmail /usr/share/squirrelmail
<Location /webmail>
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.1.0/24
</Location>
-Guardamos y reiniciamos apache.
service apache2 restart
-Crear un enlace de squirrelmail.conf en el directorio etc/apache2/conf-enabled
ln /etc/apache2/conf-available/squirrelmail.conf /etc/apache2/conf-enabled/squirrelmail.conf
-Crear un enlace de apache.conf del directorio /etc/squirrelmail/apache.conf en el directorio etc/apache2/sites-available
ln /etc/squirrelmail/apache.conf /etc/apache2/sites-available/squirrelmail.conf
-Crear un enlace de apache.conf del directorio /etc/squirrelmail/apache.conf en el directorio etc/apache2/sites-enabled
ln /etc/squirrelmail/apache.conf /etc/apache2/sites-enabled/squirrelmail.conf
-Reiniciamos el Servicio Apache2
service apache2 restart
- Creación de usuario de correo electrónico para uso en un cliente de correo (como puede ser thunderbird)
useradd -s /sbin/nologin nombreUsuario
passwd nombreUsuario (elegimos la contraseña)
PRUEBAS DE FUNCIONAMIENTO DE CORREO ELECTRÓNICO
Para comprobar que un servidor de correo está funcionando correctamente hay que hacer pruebas de envío y recepción de correo, tanto el envío como la recepción de correo quedará registrada en el fichero /var/log/mail.log, por lo que conviene abrirlo de forma continua en una terminal:
tail -f /var/log/mail.log
Vamos a utilizar un programa de correo en modo texto: el programa mail que se incluye en el paquete bsd-mailx. Un ejemplo de utilización sería:
mail (usuario)
Subject: Asunto
Prueba de envío local
[CTRL-D]
Cc:
Donde se envía un mensaje al usuario «usuario» del propio equipo y [CTRL-D] indica la señal de EOF (End of file) que se le ha mandado para indicar que se ha terminado de escribir el cuerpo del mensaje.
Para comprobar la recepción del mensaje, el usuario «usuario» ejecutara mail, le saldrán la lista de correos recibidos, para acceder a un correo escribimos su número, para salir del programa escribimos ‘q’.
Para entregar…
Realiza la instalación del servidor de correo. Suponiendo que tenemos dos usuarios pepe y maria, entrega un documento donde se vea como mandamos mensajes desde un usuario al otro del servidor.
IDS / IPS
IPTABLES
Netfilter es un framework disponible en el núcleo Linux que permite interceptar y manipular paquetes de red. Dicho framework permite realizar el manejo de paquetes en diferentes estados del procesamiento. Netfilter es también el nombre que recibe el proyecto que se encarga de ofrecer herramientas libres para cortafuegos basados en Linux.
El componente más popular construido sobre Netfilter es iptables, una herramienta de cortafuegos que permite no solamente filtrar paquetes, sino también realizar traducción de direcciones de red (NAT) para IPv4 o mantener registros de log. El proyecto Netfilter no sólo ofrece componentes disponibles como módulos del núcleo sino que también ofrece herramientas de espacio de usuario y librerías.
Iptables es el nombre de la herramienta de espacio de usuario mediante la cual el administrador puede definir políticas de filtrado del tráfico que circula por la red. El nombre iptables se utiliza frecuentemente de forma errónea para referirse a toda la infraestructura ofrecida por el proyecto Netfilter. Sin embargo, el proyecto ofrece otros subsistemas independientes de iptables tales como el connection tracking system o sistema de seguimiento de conexiones, que permite encolar paquetes para que sean tratados desde espacio de usuario. iptables es un software disponible en prácticamente todas las distribuciones de Linux actuales.
Más información: http://es.wikipedia.org/wiki/Iptables
Para generar las reglas de debe crear un script de la siguiente forma:
- Se crea un archivo de texto con un editor de texto como puede ser nano. A este archivo lo llamaremos cortafuegos.sh
- Se le da permiso de ejecución mediante el comando chmod u+x o también chmod 700 cortafuegos.sh.
- Se ejecuta desde la línea de comandos ./cortafuegos.sh
Ejemplo:
nano /etc/cortafuegos.sh
chmod u+x /etc/cortafuegos.sh
cd /etc/
./cortafuegos.sh
Y dentro de cortafuegos.sh agregaremos las siguientes líneas (de ejemplo):
#!/bin/bash
# Borramos las reglas, pero nos aseguramos que aun podemos conectarnos
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
# ———-
# Quitamos los pings.
/bin/echo «1» > /proc/sys/net/ipv4/icmp_echo_ignore_all
# No respondemos a los broadcast.
/bin/echo «1» > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Para evitar el spoofing nos aseguramos de que la dirección
# origen del paquete viene del sitio correcto.
for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
/bin/echo «1» > ${interface}
done
# Los ICMPs redirigidos que pueden alterar la tabla de rutas.
for interface in /proc/sys/net/ipv4/conf/*/accept_redirects; do
/bin/echo «0» > ${interface}
done
# No guardamos registros de los marcianos.
/bin/echo «1» > /proc/sys/net/ipv4/conf/all/log_martians
# Asegurar, aunque no tenga soporte el nucleo, q no hay forward.
/bin/echo «0» > /proc/sys/net/ipv4/ip_forward
# ———-
# Creamos nuestras reglas
iptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 20:21 -j LOG –log-prefix ‘INTENTO DE ACCESO A a ‘ –log-level 4
iptables -A INPUT -p tcp –syn –dport 21 -m connlimit –connlimit-above 2 -j REJECT
iptables -A INPUT -p tcp –dport 21 -j ACCEPT # ftp
iptables -A INPUT -p tcp -m tcp –dport 22:23 -j LOG –log-prefix ‘INTENTO DE ACCESO A SSH ‘ –log-level 4
iptables -A INPUT -p tcp –syn –dport 22 -m connlimit –connlimit-above 2 -j REJECT # Limitamos las conexiones a ssh a 2
iptables -A INPUT -p tcp –dport 22 -j ACCEPT # ssh
iptables -A INPUT -p tcp –syn –dport 25 -m connlimit –connlimit-above 2 -j REJECT
iptables -A INPUT -p tcp –dport 25 -j ACCEPT # smtp
iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 24 -j DROP # Limitamos peticiones http a 20
iptables -A INPUT -p tcp –dport 80 -j ACCEPT # http
iptables -A INPUT -p tcp –syn –dport 110 -m connlimit –connlimit-above 2 -j REJECT
iptables -A INPUT -p tcp –dport 110 -j ACCEPT # pop3
iptables -A INPUT -p tcp –dport 139 -j ACCEPT # netbios-ssn
iptables -A INPUT -p tcp –syn –dport 143 -m connlimit –connlimit-above 2 -j REJECT
iptables -A INPUT -p tcp –dport 143 -j ACCEPT # imap
iptables -A INPUT -p tcp –syn –dport 443 -m connlimit –connlimit-above 20 –connlimit-mask 24 -j DROP # Limitamos peticiones http a 20
iptables -A INPUT -p tcp –dport 443 -j ACCEPT # https
iptables -A INPUT -p tcp –dport 445 -j ACCEPT # ms-ds
iptables -A INPUT -p tcp –syn –dport 465 -m connlimit –connlimit-above 2 -j REJECT
iptables -A INPUT -p tcp –dport 465 -j ACCEPT # smtps
iptables -A INPUT -p tcp –syn –dport 993 -m connlimit –connlimit-above 2 -j REJECT
iptables -A INPUT -p tcp –dport 993 -j ACCEPT # imaps
iptables -A INPUT -p tcp –syn –dport 995 -m connlimit –connlimit-above 2 -j REJECT
iptables -A INPUT -p tcp –dport 995 -j ACCEPT # pop3s
iptables -A INPUT -p tcp –dport 3128 -j ACCEPT # sqid-http (proxy)
iptables -A INPUT -p tcp -m tcp –dport 6001 -j LOG –log-prefix ‘INTENTO DE ACCESO A 10000 ‘ –log-level 4
iptables -A INPUT -p tcp –dport 10000 -j ACCEPT # webmin
iptables -I INPUT 1 -i lo -j ACCEPT # Permitir loopback
iptables -A INPUT -j DROP # Drop de los paquetes restantes
iptables -A OUTPUT -o lo -j ACCEPT # Permitir loopback
Ejemplo de estructura utilizado anteriormente:
1) iptables -A INPUT -p tcp -m tcp –dport 20:21 -j LOG –log-prefix ‘INTENTO DE ACCESO A FTP ‘ –log-level 4
2) iptables -A INPUT -p tcp –syn –dport 21 -m connlimit –connlimit-above 2 -j REJECT
3) iptables -A INPUT -p tcp –dport 21 -j ACCEPT # ftp
1) Le estamos diciendo que nos cree un registro llamado “INTENTO DE ACCESO A FTP” y que nivel de registro debe utilizar.
2) Le indicamos los intentos de accesos máximos, en este caso dos (2).
3) Aceptamos el acceso a través del puerto 22.
El “Log” se guarda en /var/log/kern.log
Utilizamos el comando “tail var/log/kern.log” para visualizar los 10 últimos registros.
-Para verificar su funcionamiento usamos el siguiente comando que nos saldrán las reglas con números:
iptables -L –line-numbers
-Guardamos configuración
El comando iptables-save es una herramienta para guardar el conjunto de reglas existente en iptables a un fichero que puede utilizar iptables-restore.
iptables-save
Esto es recomendable antes de hacer cambios y a cada cambio que hacemos por si posteriormente tenemos problemas o tenemos que restaurar configuración, en entornos críticos no podemos ponernos a teclear todo a mano, cada segundo con una aplicación o servicio caído cuentan.
iptables-save > /root/iptables.`date +%F`01.txt
Con este comando guardamos las reglas en el directorio del usuario root con la fecha actual en formato iptables.201407001.txt
-Para restaurar el iptables haremos esto de la ruta original:
iptables-restore
O por el contrario para un fichero determinado
iptables-restore < /root/iptables.201407001.txt
–Leer configuración actual del iptables
iptables -nL
Iniciar IPTABLES al arrancar el servidor
-Editamos rc.local /etc/rc.loca
nano rc.local
-Justo antes de “exit 0” escribimos la siguiente línea:
/etc/cortafuegos.sh
TRIPWIRE
Tripwire es una herramienta de seguridad e integridad de datos. Es útil para monitorizar y alertar de cambios en los ficheros de un sistema de ficheros. Funciona cotejando la firma digital de archivos y directorios contra una base de datos de los mismos en un instante previo. La base de datos se genera tomando una instantánea en el momento de su instalación y se accede a ella mediante contraseña cifrada, por lo que su instalación en un sistema posiblemente infectado, carecería de efectividad y se recomienda que su instalación y configuración sea hecha antes de haber conectado el computador por primera vez a internet. Funciona en sistemas operativos GNU/Linux.
-Instalar Tripwire
apt-get install tripwire
Pantalla 1: Aceptar
Pantalla 2: Usar o Generar Clave de Sitio “SI”
Pantalla 3: Aceptar
Pantalla 4: Usar o Crear la Clave Local “SI”
Pantalla 5: Reconstruir el fichero de configuración “SI”
Pantalla 6: “INTRODUCIR CONTRASEÑA DE CLAVE DE SITIO” (apuntar las contraseñas)
Pantalla 7: “VOLVER A INTRODUCIR LA MISMA CONTRASEÑA”.
Pantalla 8: “CONTRASEÑA UTILIZADA EN CLAVE DE SITIO”
Pantalla 9: “VOLVER A INTRODUCIR LA MISMA CONTRASEÑA”.
Pantalla 10: “INTRODUCIR CONTRASEÑA DE CLAVE LOCAL”
Pantalla 11: “VOLVER A INTRODUCIR LA MISMA CONTRASEÑA”.
Pantalla 12: “CONTRASEÑA UTILIZADA EN CLAVE LOCAL”
Pantalla 13: “VOLVER A INTRODUCIR LA MISMA CONTRASEÑA”.
Pantalla 14: Se ha instalado Tripwire “ACEPTAR”
-Configuración de los archivos de Tripwire (Para ver que los archivos se han reubicado correctamente nos dirigimos a la siguiente ruta: cd /etc/tripwire (intro) ls (intro))
-Copia de seguridad
cp /etc/tripwire/twpol.txt /etc/tripwire/twpol.txt.backup
-Editar el fichero de reglas de Tripwire “twpol.txt” ubicado en /etc/tripwire/twpol.txt
nano /etc/tripwire/twpol.txt
Aclaración!: dentro del archivo se ejecutan las políticas que utiliza tripwire, podemos editarlas de acuerdo a nuestras necesidades o utilizar un ejemplo de políticas hechas como las siguientes:
# tripwire policy file
@@section GLOBAL
TWROOT=/usr/sbin;
TWBIN=/usr/sbin;
TWPOL=»/etc/tripwire»;
TWDB=»/var/lib/tripwire»;
TWSKEY=»/etc/tripwire»;
TWLKEY=»/etc/tripwire»;
TWREPORT=»/var/lib/tripwire/report»;
HOSTNAME=ubuntuSRV.local;
# Define variables for policy classifications
@@section FS
SEC_CRIT = $(IgnoreNone)-SHa ; # Critical files that cannot change
SEC_SUID = $(IgnoreNone)-SHa ; # Binaries with the SUID or SGID flags set
SEC_BIN = $(ReadOnly) ; # Binaries that should not change
SEC_CONFIG = $(Dynamic) ; # Config files that are changed infrequently but accessed often
SEC_LOG = $(Growing) ; # Files that grow, but that should never change ownership
SEC_INVARIANT = +tpug ; # Directories that should never change permission or ownership
SIG_LOW = 33 ; # Non-critical files that are of minimal security impact
SIG_MED = 66 ; # Non-critical files that are of significant security impact
SIG_HI = 100 ; # Critical files that are significant points of vulnerability@@section FS
# Protect tripwire itself. The binaries and config files should not normally
# change. The database is read often but seldom changes. The inode
# is removed because backup files are created.
(
rulename = «Tripwire Binaries»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
$(TWBIN)/siggen -> $(SEC_BIN) ;
$(TWBIN)/tripwire -> $(SEC_BIN) ;
$(TWBIN)/twadmin -> $(SEC_BIN) ;
$(TWBIN)/twprint -> $(SEC_BIN) ;
}
(
rulename = «Tripwire Data Files»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
$(TWDB) -> $(SEC_CONFIG) -i ;
$(TWPOL)/tw.pol -> $(SEC_BIN) -i ;
$(TWPOL)/tw.cfg -> $(SEC_BIN) -i ;
$(TWLKEY)/$(HOSTNAME)-local.key -> $(SEC_BIN) ;
$(TWSKEY)/site.key -> $(SEC_BIN) ;
$(TWREPORT) -> $(SEC_CONFIG) (recurse=0);
# Directories that shouldn’t change.
(
rulename = «Invariant Directories»,
severity = $(SIG_MED)
)
{
/ -> $(SEC_INVARIANT) (recurse = 0) ;
/home -> $(SEC_INVARIANT) (recurse = 0) ;
/etc -> $(SEC_INVARIANT) (recurse = 0) ;
/var/www -> $(SEC_INVARIANT) (recurse = 0) ;
}
# Programs that normally wouldn’t change.
(
rulename = «Kernel Administration Programs»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
/sbin/ctrlaltdel -> $(SEC_CRIT) ;
/sbin/sysctl -> $(SEC_CRIT) ;
}
(
rulename = «Networking Programs»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
/bin/ping -> $(SEC_CRIT) ;
}
(
rulename = «System Administration Programs»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
/bin/pwd -> $(SEC_CRIT) ;
/bin/uname -> $(SEC_CRIT) ;
}
(
rulename = «Operating System Utilities»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
/bin/date -> $(SEC_CRIT) ;
}
(
rulename = «Temporary directories»,
recurse = false,
severity = $(SIG_LOW)
)
{
/var/tmp -> $(SEC_INVARIANT) ;
/tmp -> $(SEC_INVARIANT) ;
}
(
rulename = «User binaries»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
/sbin -> $(SEC_BIN) (recurse = 1) ;
/usr/local/bin -> $(SEC_BIN) (recurse = 1) ;
/usr/sbin -> $(SEC_BIN) (recurse = 1) ;
/usr/bin -> $(SEC_BIN) (recurse = 1) ;
}
(
rulename = «Shell Binaries»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
/bin/bash -> $(SEC_BIN) ;
}
# Control files directly related to security
(
rulename = «Security Control»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
/etc/security -> $(SEC_CRIT) ;
}
# Insure that the basic login scripts don’t change.
(
rulename = «Login Scripts»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
/etc/profile.d -> $(SEC_CONFIG) ;
}
# Libraries
(
rulename = «Libraries»,
severity = $(SIG_MED)
)
{
/usr/lib -> $(SEC_BIN) ;
/usr/local/lib -> $(SEC_BIN) ;
}
# Watch for changes in the boot files.
(
rulename = «Critical system boot files»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
/boot -> $(SEC_CRIT) ;
/sbin/installkernel -> $(SEC_CRIT) ;
!/boot/System.map-3.13.0-24 ;
!/boot/System.map-3.13.0.30 ;
}
(
rulename = «System boot changes»,
severity = $(SIG_HI)
)
{
/dev/tty1 -> $(SEC_CONFIG) ; # tty devices
/dev/tty2 -> $(SEC_CONFIG) ; # tty devices
/dev/tty6 -> $(SEC_CONFIG) ;
}
(
rulename = «Root config files»,
severity = 100
)
{
/root -> $(SEC_CRIT) ; # Additions to /root
/root/Maildir -> $(SEC_CONFIG) ;
}
(
rulename = «Critical configuration files»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
/etc/crontab -> $(SEC_BIN) ;
/etc/cron.d -> $(SEC_BIN) ;
/etc/cron.daily -> $(SEC_BIN) ;
/etc/cron.hourly -> $(SEC_BIN) ;
/etc/cron.monthly -> $(SEC_BIN) ;
/etc/cron.weekly -> $(SEC_BIN) ;
/etc/default -> $(SEC_BIN) ;
/etc/fstab.d -> $(SEC_BIN) ;
/etc/group- -> $(SEC_BIN) ;
/etc/host.conf -> $(SEC_BIN) ;
/etc/hosts.allow -> $(SEC_BIN) ;
/etc/hosts.deny -> $(SEC_BIN) ;
/etc/protocols -> $(SEC_BIN) ;
/etc/services -> $(SEC_BIN) ;
/etc/init.d -> $(SEC_BIN) ;
/etc/modules -> $(SEC_BIN) ;
/etc/passwd -> $(SEC_CONFIG) ;
/etc/passwd- -> $(SEC_CONFIG) ;
/etc/profile -> $(SEC_BIN) ;
/etc/rpc -> $(SEC_BIN) ;
/etc/sysctl.conf -> $(SEC_BIN) ;
/etc/samba/smb.conf -> $(SEC_CONFIG) ;
/etc/nsswitch.conf -> $(SEC_BIN) ;
/etc/hosts -> $(SEC_CONFIG) ;
}
(
rulename = «Critical devices»,
severity = $(SIG_HI), emailto = administrador@ubuntuSRV.local
)
{
/dev/kvm -> $(Device) ;
/dev/zero -> $(Device) ;
/proc/cmdline -> $(Device) ;
/proc/misc -> $(Device) ;
}
(
rulename = «OS executables and libraries»,
severity = $(SIG_HI), emailto = adminstradror@ubuntuSRV.infosecsapobla.local
)
{
/bin -> $(SEC_BIN) ;
/lib -> $(SEC_BIN) ;
}
################################################ #
# File System and Disk Administration Programs # #
################################################
#(
# rulename = «File System and Disk Administraton Programs»,
# severity = 66, emailto = administrador@ubuntuSRV.local
#)
#{
# /var/www/ -> $(SEC_MED) ;
# /var/ -> $(SEC_MED) ;
# /home/ -> $(SEC_MED) ;
#}
#(
# rulename = «File System and Disk Administration Programs»,
# severity = 100, emailto = administrador@ubuntuSRV.local
#)
#{
# /samba/ -> $(SEC_CRIT) ;
#}
}
-Generar la base de datos de Tripwire
tripwire –init (la base de datos se genera en /var/lib/tripwire/desktop.twd).
(Solicita la clave o contraseña utilizada)
-Para que dichos cambios se queden aplicados tendremos que usar la orden:
twadmin -m P /etc/tripwire/twpol.txt
-La base de datos se guarda en: /var/lib/tripwire/report
-Generar un informe
tripwire –check > informetripwire.txt
-Podemos realizar un autoejecutable para que emita un informe cada día:
cd /etc/cron.d
touch tripwire.sh
nano tripwire.sh
-Escribimos las siguientes líneas:
#! /bin/bash
### Tripwire
# Provides: tripwire Required-Start $remote_fs %syslog Required-Stop
# $remote_fs %syslog Default-Start: 2 3 4 5 Default-Stop: 0 1 6
# Short-Description: Script para iniciar Tripwire Description:
# administrador@ubuntuSRV.local-08-07-14
## Fin de Info
#HOST_NAME=’ubuntuSRV.infosecsapobla.local’
test -f /etc/tripwire/tw.cfg
tripwire –check –quiet –email-report
¿Cómo enviar por correo electrónico?
Para indicarle al tripwire que nos mande el informe por correo electrónico se debe especificar en twpol.cfg. Después de darle la gravedad de la regla, se agrega “coma” = “correo electrónico”. (En el ejemplo enviamos el correo al administrador@ubuntuSRV.local)
# rulename = «File System and Disk Administraton Programs»,
# severity = 66, emailto = administrador@ubuntuSRV.local
Aclaración!: Para que no genere informes de cambios que realizamos como “Administradores”, cada vez que instalamos un servicio, y está comprobado su funcionamiento debemos crear la base de datos nuevamente. (tripwire –init)
SNORT / Barnyard2 / Mysql / Apache2 / BASE
Snort es un sniffer de paquetes y un detector de intrusos basado en red (se monitoriza todo un dominio de colisión). Es un software muy flexible que ofrece capacidades de almacenamiento de sus bitácoras tanto en archivos de texto como en bases de datos abiertas como lo es MySQL. Implementa un motor de detección de ataques y barrido de puertos que permite registrar, alertar y responder ante cualquier anomalía previamente definida. Así mismo existen herramientas de terceros para mostrar informes en tiempo real (ACID) o para convertirlo en un Sistema Detector y Preventor de Intrusos.
Barnyard2 es un intérprete de código abierto para archivos de salida binaria Snort unified2. Su uso principal es permitir Snort a escribir en el disco de una manera eficiente y dejando la tarea de analizar los datos binarios en varios formatos a un proceso separado que no cause que Snort se pierda el tráfico de red.
Base es una interfaz web en PHP que permite gestinar de una forma fácil y cómoda las bases de datos de seguridad generadas por varios IDS, cortafuegos, y herramientas de monitorización.
- Empezaremos por SNORT
-Primero actualizamos:
sudo apt-get update && sudo apt-get upgrade
-Instalamos snort:
apt-get install snort
Pantalla 1: Intervalo de direcciones para la red local: 192.168.1.0/24.
-Editamos el archive de configuración “snort.conf” ubicado en /etc/snort/snort.conf
nano /etc/snort/snort.conf
Línea #51 verificamos nuestra red:
ipvar HOME_NET 192.168.1.0/24
Línea #536 modificamos que quede así:
output unified2: filename snort.log, limit 128, mpls_event_types, vlan_event_types
-Reiniciamos el servicio “snort”:
service snort restart
-Eliminamos los antiguos logs:
rm /var/log/snort/snort.log
-Creamos copia de seguridad de las reglas
cp /etc/snort/rules/local.rules /etc/snort/rules/local.rules.backup
-Editamos el archivo de reglas para incluir las siguientes dos líneas:
nano /etc/snort/rules/local.rules
# Avisos de Alertas
alert icmp any any -> $HOME_NET any (msg:»Alerta de ping!!!«; classtype:not-suspicious; sid:1000001; rev:1;)
alert tcp any any -> $HOME_NET 80 (msg:»HTTP Test !!«; classtype:not-suspicious; sid:1000002; rev:1;)
-Testeamos el funcionamiento de Snort
snort -i eth0 -v
(Obtendremos una captura de paquetes en tiempo real (CTRL+C) para salir).
-Hacemos un test de configuración:
snort -i eth0 -c /etc/snort/snort.conf -T
-Ejecutamos snort en modo consola:
snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0
(Si hacemos un ping desde otro equipo nos tendrá que salir la alerta (CTRL+C) para salir).
- Empezaremos por BARNYARD
-Instalamos las dependencias de Barnyard:
apt-get install autoconf
apt-get install libtool
apt-get install libpcap-dev
apt-get install libmysqlclient-dev
-Instalamos Barnyard2 :
cd /usr/src
wget https://github.com/firnsy/barnyard2/tarball/master
tar -zxf master
cd firnsy-barnyard2*
autoreconf -fvi -I ./m4
./configure –with-mysql –with-mysql-libraries=/usr/lib/i386-linux-gnu
./configure –with-mysql –with-mysql-libraries=/usr/lib/x86_64-linux-gnu
(En el caso de error de que “make” no esté instalado, lo instalararemos con “apt-get install make”)
make
make install
cp /usr/local/etc/barnyard2.conf /etc/snort
cp schemas/create_mysql /usr/src
mkdir /var/log/barnyard2
-Editamos y realizamos los siguientes cambios en el fichero “barnyard2.conf”, ubicado en /etc/snort/barnyard2.conf:
nano /etc/snort/barnyard2.conf
Línea #224: descomentamos
output alert_fast
Línea #227: comentamos
output alert_fast: stdout
Línea #348: descomentamos y modificamos “user, password y dbname”
output database: log, mysql, user=snort password=snortpass dbname=snort host=localhost
(Estas modificaciones deberían reemplazarse por los datos que queramos, ¡apuntar!)
- Empezaremos por CONFIGURACIÓN MYSQL
-Instalaremos el MySql-Server: (en el caso de no tenerlo instalado anteriormente)
apt-get install mysql-server
(Nos solicita una contraseña para el usuario root )
-Creamos las base de dato de “Snort”.
mysql -u root -p
(contraseña del usuario root)
-Una vez dentro de la consola de MySql, crearemos la base de datos de “Snort”
Atención! Dentro de la consola de MySql, los comandos se terminan con punto y coma “;”.
create database snort;
create database archive;
grant usage on snort.* to snort@localhost;
grant usage on archive.* to snort@localhost;
set password for snort@localhost=PASSWORD(‘snortpass’); (Contraseña de snort que utilizamos en el fichero de configuración)
grant all privileges on snort.* to snort@localhost;
grant all privileges on archive.* to snort@localhost;
flush privileges;
Aclaración! Estos comando que hemos ingresados crean la base, le otorgan privilegios y además conecta con la reglas de snort.
-Sin salir de la consola de MySql, agregamos las tablas de Snort a la Base de Datos de Snort
use snort; (cambiamos la ubicación a la base de datos de snort)
source /usr/src/create_mysql; (le decimos a la base de datos de donde agregar las tablas y además las agrega)
show tables; (muestra la base de datos con las tablas agregadas)
exit (salir del modo de consola de MySQL)
-Probamos “Snort” y “Barnyard”
-Primero creamos sid-msg.map:
cd /usr/share/oinkmaster
bash -c «sudo ./create-sidmap.pl /etc/snort/rules > /etc/snort/sid-msg.map»
service snort restart
-Segundo ejecutamos el servicio manualmente de barnyard2 :
/usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log –W /var/log/barnyard2/bylog.waldo -C /etc/snort/classification.config
-Ejecutar Barnyard2 cuando se inicia el sistema, para ello debemos crear un “script”.
-Creamos un script:
touch /etc/init.d/runbarnyard2
nano /etc/init.d/runbarnyard2
-Agregamos las siguientes líneas:
#!/bin/sh
case $1 in
start)
echo «Arranca Barnyard2»
sudo bash -c «barnyard2 -D -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -n»
echo ‘Barnyard2 esta en marcha.’
;;
stop)
echo «Parrando Barnyard2»
sudo killall barnyard2
echo ‘Barnyard2 se ha parado.’
;;
restart)
$0 stop
sleep 4
$0 start
;;
*)
echo «usage: $0 (start|stop|restart)»
;;
esac
exit 0
-Damos permisos al fichero que hemos creado con el nombre de “runbarnyard2”
chmod 700 /etc/init.d/runbarnyard2
update-rc.d runbarnyard2 defaults 21 00 (para que los usuarios de Ubuntu server tengan un mejor funcionamiento).
-Editamos y modificamos “Barnyard2” para lanzarlo como demonio.
nano /etc/snort/barnyard2.conf
# Línea 85: descomentamos
config daemon
-Guardamos
-Iniciamos el servicio de barnyard
/etc/init.d/runbarnyard2 start
- Empezaremos con BASE
-Instalaremos el Apache2 y sus dependencias necesarias: (en el caso de no tenerlo instalado anteriormente)
apt-get install apache2
apt-get install libapache2-mod-php5
apt-get install libmysql++
apt-get install libphp-adodb
Pantalla 1: Configuración de libphp-adodb “ACEPTAR”
-También son necesarias pero seguramente ya las deberíamos tener instaladas:
apt-get install php5
apt-get install php5-mysql
apt-get install mysql-server
-Editamos el fichero “php.ini” que se ubica en “/etc/php5/apache2/php.ini», buscamos la línea «error_reporting» y la cambiamos.
nano /etc/php5/apache2/php.ini
#Línea 462: cambiamos la línea “error_reporting = E_ALL & ~E_DEPRECATED & ~E_ESTRICT” por:
error_reporting = E_ALL & ~E_NOTICE
-Guardamos y Salimos
-Editamos el fichero “apache2.conf” que se ubica en “/etc/apache2/apache2.conf” y adjuntamos el directorio para BASE:
nano /etc/apache2/apache2.conf
# Agregamos al final del fichero las siguientes líneas:
<Directory /var/www/html/base>
AllowOverride All
Require all granted
</Directory>
-Guardamos y Salimos
-Reiniciamos el servicio “Apache2”
service apache2 restart
-Instalamos las dependencias de “BASE”:
apt-get install php-pear
apt-get install libwww-perl
apt-get install php5-gd
pear config-set preferred_state alpha
pear channel-update pear.php.net
pear install –alldeps Image_Color Image_Canvas Image_Graph
-Instalamos BASE:
cd /usr/src
wget http://sourceforge.net/projects/secureideas/files/BASE/base-1.4.5/base-1.4.5.tar.gz
tar -zxf base-1.4.5.tar.gz
cp -r base-1.4.5 /var/www/html/base
chown -R www-data:www-data /var/www/html/base
service apache2 restart
-Configuramos BASE :
-En un navegador:
http://192.168.1.250/base (ip del servidor/base)
- Pantalla 1: Basic Analysis and Security Engine (BASE) Setup Program “CONTINUE”.
- Pantalla 2: Lenguaje “Spanish” y Path to ADODB: “/usr/share/php/adodb”.
- Pantalla 3:
(Database Name:) Nombre de base de datos: snortdb
(Database Host:) Anfitrión Base de datos: localhost
(Database Port) Puerto Base de datos:
(Leave blank for default! ) Deja en blanco para defecto!
(Database User Name:) Nombre de base de datos del usuario: snortdb
(Database Password:) Base de datos contraseña: snortpass
(Use Archive Database[?]) Utilice Archivo de base de datos [ ? ] marcar que sí, haciendo un “clic”
(Archive Database Name:) Archivo Nombre de base de datos: archive
(Archive Database Host:) Archivo Host Base de datos: localhost
(Archive Database Port) Archivo del Puerto Base de datos:
(Leave blank for default!) Deja en blanco para defecto!
(Archive Database User Name:) Archivo de base de datos Nombre de Usuario: snort
(Archive Database Password:) Archivo de base de datos contraseña: snortpass
- Pantalla 4:
(Use Authentication System) Usar el Sistema de autenticación [ ? ] marcar que sí, haciendo un “clic”
(Full Admin Name) Administrador Nombre de Usuario: administrador-snort (se pone el nombre del admnistrador de “Snort”)
(GUI password) Contraseña: admin123 (contraseña para el administrador de “Snort”)
(Full Admin Name) Nombre Compleo: Alejandro Asenjo (se coloca el nombre completo del administrador de “Snort”)
- Pantalla 5: Crear Base de Datos AG (Create Base AG), hacer un clic en create base.
- Pantalla 6. Now Continue to step 5… hacer un clic en “step 5…”
- Pantalla 7. Solicita el usuario y la contraseña del administrador de “Snort”.
Más información en: http://computer-outlines.over-blog.com/article-nids-snort-barnyard2-apache2-base-with-ubuntu-14-04-lts-123532107.html
En el caso de fallo se puede editar el archivo “base_conf.php”, que se encuentra en /var/www/html/base; para modificar el parámetro incorrecto.
Vocabularios:
Apache, el servidor web;
BASH: es un programa cuya función consiste en interpretar órdenes.
DHCP: (siglas en inglés de Dynamic Host Configuration Protocol, en español «protocolo de configuración dinámica de host») es un protocolo de red que permite a los clientes de una red IP obtener sus parámetros de configuración automáticamente. Se trata de un protocolo de tipo cliente/servidor en el que generalmente un servidor posee una lista de direcciones IP dinámicas y las va asignando a los clientes conforme éstas van quedando libres, sabiendo en todo momento quién ha estado en posesión de esa IP, cuánto tiempo la ha tenido y a quién se la ha asignado después.
Demonio o un daemon (nomenclatura usada en sistemas UNIX y UNIX-like), servicio (nomenclatura usada en Windows) o programa residente (nomenclatura usada en MS-DOS) es un tipo especial de proceso informático no interactivo, es decir, que se ejecuta en segundo plano en vez de ser controlado directamente por el usuario. Este tipo de programas continua en el sistema, es decir, que puede ser ejecutado en forma persistente o reiniciado si se intenta matar el proceso dependiendo de configuración del demonio y políticas del sistema. La palabra daemon viene de las siglas en ingles D.A.E.MON (Disk And Execution Monitor).
Dependencias: Una dependencia es un paquete accesorio requerido por un paquete instalador para hacer funcionar correctamente un programa después de instalarlo. Generalmente son bibliotecas de código o programas accesorios. Un programa puede tener múltiples dependencias, las cuales no siempre vienen instaladas en la distribución Linux elegida por diversas razones, por no ser necesarias, por aumentar demasiado el tamaño del archivo ISO, etc. En Puppy Linux, por ser una distribución minimalista de tamaño ligero, es muy frecuente tener que buscar dependencias de programas que no se suelen ofrecer en los repositorios o en los foros, por eso el administrador de paquetes incluye una herramienta para detectar y descargar las dependencias junto con el programa principal. Aunque es posible ofrecer un solo paquete que incluya el programa principal más las dependencias, muchos compiladores y desarrolladores optan por ofrecer esos componentes por separado para facilitar la descarga a través de conexiones lentas, o para darle al usuario la opción de instalar sólo los componentes que sabe que están ausentes en su sistema. Por eso, siempre es recomendable investigar cuáles son las dependencias del programa que se desea instalar, así como verificar que se tiene suficiente espacio para la instalación. No todas las dependencias son absolutamente necesarias, algunas sólo dan soporte adicional para ciertas funciones o efectos visuales que extienden las características del programa en sí mismo.
GUI: La interfaz gráfica de usuario, conocida también como GUI (del inglés graphical user interface) es un programa informático que actúa de interfaz de usuario, utilizando un conjunto de imágenes y objetos gráficos para representar la información y acciones disponibles en la interfaz. Su principal uso, consiste en proporcionar un entorno visual sencillo para permitir la comunicación con el sistema operativo de una máquina o computador.
LAMP es el acrónimo usado para describir un sistema de infraestructura de internet que usa las siguientes herramientas:
Linux, el sistema operativo; En algunos casos también se refiere a LDAP.
MySQL/MariaDB, el gestor de bases de datos;
Perl, PHP, o Python, los lenguajes de programación.
VSFTPD: es un servidor FTP bajo licencia Pública GNU, que es compatible con Ipv6 y SSL.
La combinación de estas tecnologías es usada principalmente para definir la infraestructura de un servidor web, utilizando un paradigma de programación para el desarrollo.
IPTABLES: es un sistema de firewall vinculado al kernel de linux que se ha extendido enormemente a partir del kernel 2.4 de este sistema operativo. Al igual que el anterior sistema ipchains, un firewall de iptables no es como un servidor que lo iniciamos o detenemos o que se pueda caer por un error de programación(esto es una pequeña mentira, ha tenido alguna vulnerabilidad que permite DoS, pero nunca tendrá tanto peligro como las aplicaciones que escuchan en determinado puerto TCP): iptables esta integrado con el kernel, es parte del sistema operativo. ¿Cómo se pone en marcha? Realmente lo que se hace es aplicar reglas. Para ellos se ejecuta el comando iptables, con el que añadimos, borramos, o creamos reglas. Por ello un firewall de iptables no es sino un simple script de shell en el que se van ejecutando las reglas de firewall.
TRIPWIRE: es una herramienta de seguridad e integridad de datos. Es útil para monitorizar y alertar de cambios en los ficheros de un sistema de ficheros.
SNORT: s un IDS o Sistema de detección de intrusiones basado en red (NIDS). Implementa un motor de detección de ataques y barrido de puertos que permite registrar, alertar y responder ante cualquier anomalía previamente definida como patrones que corresponden a ataques, barridos, intentos aprovechar alguna vulnerabilidad, análisis de protocolos, etc conocidos. Todo esto en tiempo real.
BASE: (Basic Analysis and Security Engine), es un front-end para el IDS Snort que nos va a permitir ver y controlar los resultados y alertas generadas por Snort de forma gráfica mediante un entorno web.
DAQ: (Adquisición de Datos) para el paquete de I/O. El DAQ reemplaza las llamadas directas en las bibliotecas de captura de paquetes como PCAP con una capa de abstracción que hace que sea fácil agregar software adicional o hardware implementaciones de paquetes de captura.
Pcap: es una interfaz de una aplicación de programación para captura de paquetes.
Redes SAN: (Storage Area Network) redes de área de almacenamiento, es una red de almacenamiento integral. Se trata de un arquitectura de red de alta velocidad de canal de fibra o iSCSI, un equipo de interconexión dedicado (conmutadores, puentes, etc) y elementos de almacenamiento de red (discos duros).
MBOX: es un término genérico para una familia de formatos de fichero que se usan para almacenar conjuntos de correos electrónicos. Todos los mensajes en un buzón mailbox están concatenados en un único fichero.
Recomendación:
Apunta los procesos a realizar, las contraseñas, usuarios, grupos, etc.
Revisa los permisos en el caso de que no se ejecute y previamente hayas revisado los pasos (estos permisos son: de lectura, escritura, ejecución y en que usuario y grupo, se encuentra el fichero o carpeta)
Comandos:
-Creamos un enlace simbólico
ln -s (archivo de origen) (archivo destino con el contenido de origen)
!: Repite el último comando colocando la letra con la que comienza el comando o su número de history. Sintaxis: !.
&: Añadiendo un & al final del comando haremos que dicho comando se ejecute en segundo plano. Sintaxis: nom_comando&.
addgroup nombre_grupo: Se utiliza para crear un grupo nuevo. Ejemplo: addgroup Pepito
adduser nombre_usuario [nombre_grupo]: Se utiliza para añadir un usuario. En ese momento, no solo se creará la cuenta del usuario sino también su directorio de trabajo, un nuevo grupo de trabajo que se llamará igual que el usuario y añadirá una serie de ficheros de configuración al directorio de trabajo del nuevo usuario. Ejemplo: adduser Pepito Invitados
alias nombre_alias=comando: En ciertas ocasiones se suelen utilizar comandos que son difíciles de recordar o que son demasiado extensos, pero en UNIX existe la posibilidad de dar un nombre alternativo a un comando con el fin de que cada vez que se quiera ejecutar, sólo se use el nombre alternativo. Ejemplo: alias instala=apt-get install
apt-cache search texto a buscar: Muestra una lista de todos los paquetes y una breve descripción relacionado con el texto que hemos buscado. Ejemplo: apt-cache search Gnome
apt-get dist-upgrade: Modifica las dependencias por la de las nuevas versiones de los paquetes.
apt-get install nombre_paquete: Instala paquetes. Ejemplo: apt-get install Gnome
apt-get remove nombre_paquete. Borra paquetes. Ejemplo: apt-get remove Gnome Con la opción –purge borramos tambien la configuración de los paquetes instalados.
apt-get update: Actualiza la lista de paquetes disponibles para instalar.
apt-get upgrade: Instala las nuevas versiones de los diferentes paquetes disponibles.
apt-get: abreviado APT, es un sistema de gestión de paquetes creado por el proyecto Debian. APT simplifica en gran medida la instalación y eliminación de programas en los sistemas GNU/Linux. No existe un programa apt en sí mismo, sino que APT es una biblioteca de funciones C++ que se emplea por varios programas de línea de comandos para distribuir paquetes. En especial, apt-get y apt-cache.
aptitude: es una interfaz para APT. Muestra una lista de paquetes de software y permite al usuario elegir de modo interactivo cuáles desea instalar o eliminar.
at [-lr] hora [fecha]: Realiza un tarea programada una sola vez.
bash / sh / ksh / csh: Existen varias shells para Unix, Korn-Shell (ksh), Bourne-Shell (sh), C-Shell (csh), bash.
bg PID: Manda un proceso a segundo plano.
cal [[mes] año]. : Muestra el calendario.
cat: Muestra el contenido del archivo en pantalla en forma continua, el prompt retornará una vez mostrado el contenido de todo el archivo. Permite concatenar uno o mas archivos de texto. || Sintaxis: cat nom_archivo.
cd: Cambia de directorio. || Sintaxis: cd nom_directorio.
chattr: Cambiar atributos de un fichero. || Sintaxis: chattr atributos nom_archivo.
chgrp: Cambia el grupo al que pertenece el archivo. || Sintaxis: chgrp nom_grupo nom_archivo.
chmod: Utilizado para cambiar la proteción o permisos de accesos a los archivos. r:lectura w:escritura x:ejecución +: añade permisos -:quita permisos u:usuario g:grupo del usuario o:otros || Sintaxis: chmod permisos nom_archivo
chown: Cambia el propietario de un archivo. || Sintaxis: chown nom_propietario nom_archivo.
chroot: Nos permite cambiar el directorio raiz. || Sintaxis: chroot nom_directorio_raiz.
clear: Limpia la pantalla, y coloca el prompt al principio de la misma. || Sintaxis: clear.
cmp, diff: Permite la comparación de dos archivos, línea por línea. Es utilizado para compara archivos de datos. Sintaxis: diff nom_archivo1 nom_archivo2 / cmp nom_archivo1 nom_archivo2.
cp: Copia archivos en el directorio indicado. || Sintaxis: cp nom_archivo nom_directorio.
crontab: Realizar una tarea programada de forma regular. || Sintaxis: minuto(0-59) hora(0-23) dia_mes(1-31) mes(1-12) dia_semana(0-6) comando.
cut: Ttiene como uso principal mostrar una columna de unasalida determinada. La opción -d va seguida del delimitador de los campos y la opción -f va seguida del número de campo a mostrar. El “delimitador” por defecto es el tabulador, nosotros lo cambiamos con la opción -d. Tiene algunas otras opciones útiles. || Sintaxis: cut [opciones] nom_archivo.
date: Retorna el día, fecha, hora (con minutos y segundos) y año. || Sintaxis: date.
dd: Copia de un archivo, convirtiendo y formateando acorde a las opciones. Muy útil para por ejemplo, «quemar» una imagen (.img) en un pendrive. Sintaxis: dd if=[a_copiar] of=[destino] [opciones]
delgroup: Se utiliza para eliminar un grupo. || Sintaxis: delgroup nom_grupo.
deluser : Elimina una cuenta de usuario. La pega de este comando es que no elimina automáticamente el directorio de trabajo del usuario. || Sintaxis: deluser nom_usuario.
df: Muestra los sistemas de ficheros montados. || Sintaxis:df
dmesg: Muestra los mensajes del kernel durante el inicio del sistema. || Sintaxis: dmesg.
dpkg -reconfigure (paquetes): Volver a reconfigurar un paquete ya instalado.
dpkg: El programa dpkg es la base del sistema de gestión de paquetes de Debian GNU/Linux. Fue creado por Ian Jackson en 1993. Se utiliza para instalar, quitar, y proporcionar información sobre los paquetes .deb.
du: Sirve para ver lo que me ocupa cada directorio dentro del directorio en el que me encuentro y el tamaño total. || Sintaxis: du
echo: Muestra un mensaje por pantalla. || Sintaxis: echo “Cadena”.
eject: Mediante la utilización de este comando se conseguirá la expulsión de la unidad de CD, siempre y cuando esta no esté en uso. || Sintaxis: eject.
env: Para ver las variables globales. || Sintaxis: env.
exit: Cierra las ventanas o las conexiones remotas establecidas o las conchas abiertas. Antes de salir es recomendable eliminar todos los trabajos o procesos de la estación de trabajo. || Sintaxis: exit.
fg: Manda un proceso a primer plano. || Sintaxis: fg PID.
file archivo: Muestra el tipo de un archivo determinado
file: Determina el tipo del o los archivo(s) indicado(s). || Sintaxis: file nom_archivo.
find /home/usuario -name *.jpg –print: Busca todas las imágenes .jpg en /home/usuario
find directorio -name nom_archivo –print: Busca todos los archivo con el nombre especificado en un directorio determinado
find: Busca los archivos que satisfacen la condición en el directorio indicado. || Sintaxis: find nom_directorio o nom_archivo condición.
finger: Permite encontrar información acerca de un usuario. || Sintaxis: finger / finger usuario.
free: Muestra información sobre el estado de la memoria del sistema, tanto la swap como la memoria física.Tambien muestra el buffer utilizado por el kernel. || Sintaxis: free.
fsck: Para chequear si hay errores en nuestro disco duro. || Sintaxis: fsck t fs_typo dispositivo.
ftp: Protocolo de Transferencia de Archivos, permite transferir archivos de y para computadores remotos. || Sintaxis: ftp maquina_remota.
gksu nautilus: acceso al navegador de archivos con privilegios de root (requiere contraseña)
grep: Su funcionalidad es la de escribir en salida estándar aquellas líneas que concuerden con un patrón. Busca patrones en archivos. || Sintaxis: grep [-cilnv] expr nom_archivos.
gzip: Comprime solo archivo utilizando la extensión .gz. || Sintaxis: gzip nom_archivo.
halt: Apaga el equipo
head: Muestra las primeras lineas de un fichero. || Sintaxis: head -count nom_archivo. history Lista los más recientes comandos que se han introducido en la ventana. Es utilizado para repetir comandos ya tipeados, con el comando !. || Sintaxis: history I
history –c: Es Utilizado para Borra el Historial de Comandos
history: Muestra el listado de comandos usados por el usuario (~/.bash_history)
id: Numero id de un usuario. || Sintaxis: id
ifconfig: Obtener información de la configuración de red. || Sintaxis: ifconfig.
insmod: Carga en memoria un módulo. || Sintaxis: insmod J
job: Lista los procesos que se están ejecutando en segundo plano. || Sintaxis: jobs
kill: Permite interactuar con cualquier proceso mandando señales.Kill (pid) termina un proceso y Kill -9 (pid) fuerza a terminar un proceso en caso de que la anterior opción falle. || Sintaxis: kill [opciones] PID. L
last: Este comando permite ver las últimas conexiones que han tenido lugar. || Sintaxis: last.
Less: Muestra el archivo de la misma forma que more, pero puedes regresar a la página anterior presionando las teclas “u” o “b”. || Sintaxis: less nom_archivo
ln: Sirve para crear enlaces a archivos, es decir, crear un fichero que apunta a otro. Puede ser simbólico si usamos -s o enlace duro. || Sintaxis: ln [-s] nom_archivo nom_acceso.
logout: Las sesiones terminan con el comando logout. || Sintaxis: logout.
lpr: Imprime un archivo en la impresora predeterminada. || Sintaxis: lpr -[lista de requerimientos]/ lpr -P nombre_archivo.
ls –F: Lista archivos y directorios mostrando un ‘/’ adicional el que indica rutas diferenciando carpetas de archivos
ls: Lista los archivos y directorios dentro del directorio de trabajo. || Sintaxis: ls.
lsattr: Ver atributos de un fichero. || Sintaxis: lsattr nom_archivo.
lsmod: Muestra los módulos cargados en memoria. || Sintaxis: lsmod.
mail: Para enviar/recibir correo a/de otros usuarios de la red, o dentro de nuestro ordenador. || Sintaxis: mail.
make: Es una herramienta que controla la creación de ejecutables y otros archivos de un programa a partir de los archivos fuente. || Sintaxis: make.
man: Ofrece información acerca de los comandos o tópicos del sistema UNIX, así como de los programas y librerías existentes. || Sintaxis: man comando.
mc: explorador de archivo que incluye su propio editor, mcedit.
mkdir: Crea un nuevo directorio. || Sintaxis: mkdir nom_directorio.
more: Muestra el archivo en pantalla. Presionando enter, se visualiza linea por linea. Presinando la barra espaciadora, pantalla por pantalla. Si desea salir, presiona q. || Sintaxis: more nom_archivo.
mount: En Linux no existen las unidades A: ni C: sino que todos los dispositivos “cuelgan” del directorio raíz /. Para acceder a un disco es necesario primero montarlo, esto es asignarle un lugar dentro del árbol de directorios del sistema. || Sintaxis: mount -t sistema_de_archivo dispositivo nom_directorio.
mmv: Este comando sirve para renombrar un conjunto. || Sintaxis: mmv nom_archivos1 nom_archivos2.
mv: Mueve archivos o subdirectorios de un directorio a otro, o cambiar el nombre del archivo o directorio. || Sintaxis: mv nom_archivo1 …nom_archivo nom_directorio.
netstat: Muestra las conexiones y puertos abiertos por los que se establecen las comunicaciones. || Sintaxis: netstat.
nice: Permite cambiar la prioridad de un proceso en nuestro sistema. || Sintaxis: nice -n prioridad PID. O Si tienes alguna sugerencia con ésta letra, coméntalo.
passwd: Se utiliza para establecer la contraseña a un usuario. Sintaxis: passwd nom_usuario.
ping: El comando ping se utiliza generalmente para testear aspectos de la red, como comprobar que un sistema está encendido y conectado; esto se consigue enviando a dicha máquina paquetes ICMP. El ping es útil para verificar instalaciones TCP/IP. Este programa nos indica el tiempo exacto que tardan los paquetes de datos en ir y volver a través de la red desde nuestro PC a un determinado servidor remoto. Sintaxis: ping (maquina).
poweroff: Apagar el ordenador. Sintaxis: poweroff.
ps –aux: Lista de los programas que se están ejecutando actualmente con su PID (Process IDentifier)
ps -ef l grep nombre_proceso: Lista los procesos que se estén ejecutando con que contengan la cadena nombre_proceso
ps: Muestra información acerca de los procesos activos. Sin opciones, muestra el número del proceso, terminal, tiempo acumulado de ejecución y el nombre del comando. Sintaxis: ps.
pstree: Muestra un árbol de procesos. Sintaxis: pstree.
pwd: Muestra el directorio actual de trabajo. Sintaxis: pwd. Q Si tienes alguna sugerencia con ésta letra, coméntalo.
reboot: Reinicia el equipo
reset: Si observamos que escribimos en pantalla y no aparece el texto pero al pulsar enter realmente se está escribiendo, o que los colores o los textos de la consola se corrompen, puede ser que alguna aplicación en modo texto haya finalizado bruscamente no restaurando los valores estándar de la consola al salir. Con esto forzamos unos valores por defecto, regenerando la pantalla. Sintaxis: reset.
rlogin: Conectan un host local con un host remoto. Sintaxis: rlogin maquina_remota.
rm: Remueve o elimina un archivo. Sintaxis: rm nom_archivo.
rmdir: Elimina el directorio indicado, el cual debe estar vacío. Sintaxis: rmdir nom_directorio.
rmmod: Descarga de memoria un módulo, pero sólo si no está siendo usado. Sintaxis: rmmod.
route: El comando route se utiliza para visualizar y modificar la tabla de enrutamiento. Sintaxis: route (muestra información del comando route).
scp: Sirve para hacer una copia segura entre dos ordenadores. La información viaja encriptada. Sintaxis: scp usuario@servidor:directorio_servidor directorio_local.
service: es un comando que nos permite detener, iniciar o reiniciar lo servicios. || Sintaxis: service <servicio> start o stop o restart
set: Para ver las variables de entorno. Sintaxis: set.
sftp: Protocolo de Transferencia de Archivos, permite transferir archivos de y para computadores remotos. La información viaja encriptada. Sintaxis: sftp maquina_remota.
shutdown -h now: Apaga el equipo
shutdown -r now: Reinicia el equipo
sort: Muestra el contenido de un fichero, pero mostrando sus líneas en orden alfabético. Sintaxis: Sort [opciones] nom_archivo.
ssh (Secure Shell Client): Es un programa para conectarse en una máquina remota y ejecutar programas en ella. Utilizado para reemplazar el rlogin y rsh, además provee mayor seguridad en la comunicación entre dos hosts. El ssh se conecta al host indicado, donde el usuario de ingresar su identificación (login y password) en la máquina remota, la cual realiza una autentificación del usuario. Sintaxis: ssh maquina_remota.
startx: Inicia el entorno gráfico(servidor X). Sintaxis: startx.
su o sudo: Con este comando accedemos al sistema como root. En Ubuntu se puede utilizar gksudo mientras en Kubuntu: kdesudo. Sintaxis: su.
tail archiv: Muestra las últimas líneas de un archivo, 10 por defecto
tail -fn 200 archivo: Muestra las últimas 200 líneas de un archivo y sigue agregando mientras crece
tail: Este comando es utilizado para examinar las últimas líneas de un fichero. Sintaxis: tail -count nom_archivo.
tar: Comprime archivos y directorios utilizando la extensión .tar. Sintaxis: tar -[arg] nom_archivo.tar nom_archivo.
telnet: Conecta el host local con un host remoto, usando la interfaz TELNET. Sintaxis: telnet maquina_remota
top: Muestra los procesos que se ejecutan en ese momento, sabiendo los recursos que se están consumiendo(Memoria,CPU,…).Es una mezcla del comando uptime,free y ps. Sintaxis: top.
touch: Crea un archivo vacio. Sintaxis: touch nom_archivo.
traceroute: Permite determinar la ruta tomada por un paquete para alcanzar su destino en Internet. Sintaxis: traceroute [opciones] host [tamaño del paquete].
type comand: Muestra la ubicación del ejecutable perteneciente al comando indicado
umask: Establece la máscara de permisos. Los permisos con los que se crean los directorios y los archivos por defecto. Sintaxis: umask a-rwx,u+rw,g+r.
umount: Establece la máscara de permisos. Los permisos con los que se crean los directorios y los archivos por defecto. Sintaxis: umask a-rwx,u+rw,g+r.
unalias: Borra un alias. Sintaxis: unalias nom_alias.
uniq: Este comando lee un archivo de entrada y compara las líneas adyacentes escribiendo solo una copia de las líneas a la salida. La segunda y subsecuentes copias de las líneas de entrada adyacentes repetidas no serán escritas. Las líneas repetidas no se detectarán a menos que sean adyacentes. Si no se especifica algún archivo de entrada se asume la entrada estándar. Sintaxis: uniq [opciones] nom_archivo_entrada nom_archivo_salida.
uptime: Nos indica el tiempo que ha estado corriendo la máquina. Sintaxis: uptime.
vi: Permite editar un archivo en el directorio actual de trabajo. Es uno de los editores de texto más usado en UNIX. Sintaxis: vi nom_archivo.
view: Es similar al vi, solo que no permite guardar modificaciones en el archivo, es para leer el contenido del archivo. Sintaxis: view nom_archivo.
wc: Cuenta los caráteres, palabras y líneas del archivo de texto. Sintaxis: wc nom_archivo.
whereis: Devuelve la ubicación del archivo especificado, si existe. Sintaxis: whereis nomb_archivo.
who, w: Lista quienes están conectado al servidor, con nombre de usuario, tiempo de conexión y el computador remoto desde donde se conecta. Sintaxis: who / w.
whoami: Escribe su nombre de usuario en pantalla. Sintaxis: whoami.
xmessage: Enviar un mensaje al display de otro usuario o al nuestro propio. Sintaxis: xmessage (mensaje) / export DISPLAY=157.92.49.211:0 xmessage Hola!!.
yes: Escribe “y” continuamente. Sintaxis: yes. Z Si tienes alguna sugerencia con ésta letra, coméntalo. Varios
zcat: muestra el contenido de un archivo comprimido (.gz)
zless fichero: Muestra el contenido de un archivo comprimido (.gz)
zmore ficher: Muestra el contenido de un archivo comprimido (.gz)
Fuentes:
- Francisco Hernández
- Tomeu Pons
- Sorin Danila
- Wiki Ubuntu
- Wikipedia
- http://www.howtoforge.com/
- http://www.guia-ubuntu.com/