Sei sulla pagina 1di 208

CapÃtulo 1: Introducción al Software Libre y Linux, instalación de Linux VPS

##############################################################################
#####################

1.- Introducción a Software Libre y Linux


##############################################################################
#####################

Introduccion: - Richard Stallman creó el movimiento del Software Libre con el


proyecto
GNU (GNU not UNIX) que intentaba crear un sistema operativo superior a Unix y
que fuera
completamente Libre; por ello creo el proyecto GNU en 1983 y la Fundación de
Software
Libre (FSF) en 1985, donde estableció de un marco de referencia moral, polÃ-
tico y legal
para el movimiento del software libre, como una alternativa al desarrollo y
distribución del software no libre o privativo.

- Fruto de este trabajo se creó la licencia GPL y LPGL.


La GPL establece 4 libertades [1]
* Libertad 0: la libertad de usar el programa, con cualquier propósito.
* Libertad 1: la libertad de estudiar cómo funciona el programa y
modificarlo,
adaptándolo a tus necesidades.
* Libertad 2: la libertad de distribuir copias del programa, con lo cual
puedes ayudar
a tu prójimo.
* Libertad 3: la libertad de mejorar el programa y hacer públicas esas
mejoras a los
demás, de modo que toda la comunidad se beneficie.

Cuando uno publica o distribuye un software bajo la GPL esta obligado a


publicar el
código fuente del mismo.
Quien recibe el software puede modificarlo a su gusto; pero no puede
redistribuir el
código modificado sin que estas tengan el código fuente de sus
modificaciones, con lo
cual se asegura la libertad del usuario.
Sin embargo lo que no obliga la GPL, es que tu tengas que publicar
obligatoriamente
las modificaciones del software GPL que hayas tomado como base.
Por ejemplo Google gana miles de millones de dólares usando Linux y software
libre
(GPL y otros) pero solo publica un porcentaje muy limitado de sus proyectos
internos.

- En 1991, en Helsinki, Linus Torvalds comenzó un proyecto que más tarde se


llegó a ser
el núcleo Linux; en ese instante el no sabÃa la dimensión que iba a alcanzar
su
proyecto. A fines de 1992, Linux libera su kernel con la licencia GPL,
consiguiendo
que el Sistema Operativo lograra un crecimiento espectacular. - Linux como
proyecto
es solamente el núcleo (kernel) del sistema operativo; la combinación con
las
herramientas de GNU (compilador de C, bash, el debugger) ha creado la base
para
desarrollar las distribuciones; por eso es común referirse a Linux como
GNU/Linux.

- Las distribuciones toman en un momento determinado una versión del kernel


de Linux y
la combinan con herramientas GNU, le crean un instalador y herramientas de
administración, algunas distribuciones se basan en otras distribuciones y le
dan un
valor añadido.
Sin embargo del universo de distribuciones las más importantes; por su
relevancia e
influencia en las demás distribuciones, son dos: Debian (basado en deb y apt)
y Red Hat (basado en rpm y yum).

Mapa de Distribuciones

* Distribuciones
Debian (Servidor) |Red Hat
Ubuntu (Distro mas popular) | Centos 7 (Escritorio)
Desktop (Escritorio), | RHEL (Servidor)
Kubuntu/Xubuntu, etc | CentOS (clon de RHEL)
Server (Servidor) | Oracle Linux (Clon de RHEL)
| Scientific Linux (Clon de RHEL)
Linux Mint(Escritorio) |SuSE
Basado en Ubuntu | OpenSuSE (Escritorio)
| SLES (Servidor)
|Mageia (Escritorio)

Otros: Slackware, Gentoo, DanSmall Linux, etc

- Debian representa el éxito de la comunidad, garantizando la libertad de sus


usuarios
y apoyo desinteresado de los mismos para hacer de Debian una distribución de
excelente
calidad.

- Red Hat representa el éxito de la empresa y consolida a Linux dentro de los


servidores corporativos.

Linux: ------> Tiene su propio sistema de archivos ext2,ext3,ext4,btrfs


Swap --> es una memoria virtual en el disco duro
Linux soporta: FAT, NTFS, JFS, XFS
Para instalar en linux se necesita como mÃnimo una particion Swap y una
partición raÃz.

Estructura de Directorios: -----------

/ ----> raiz

/boot ----> directorio de arranque del sistema operativo


configuración de grub

/etc ----> archivos de configuración

/home ----> directorios de los usuarios

/usr ----> binarios,librerÃas,documentacion

/var ----> archivos que crecen o modifican (correo,base de datos, logs)

/dev ----> referencia de los perifericos (hardware)

/proc ----> directorio temporal con punteros a los recursos fisicos


de la computadora

/root ----> directorio principal de Dios

/tmp ----> directorio temporal

/opt ----> algunos programas instalan aquÃ

/mnt --|>[sirven para mostrar dispositivos de media, unidades de red.


/media--|

2.- Instalación Ubuntu VPS


##############################################################################
#####################
Acceder al proxmox e instalar el VPS con Ubuntu Desktop
Ver video

3.- Configuración Básica de Red


##############################################################################
#######################
Para configurar la red debemos tener en consideración lo siguiente:
- Verificar la conexión fÃsica cable ( estado linkeado)
- Configurar tarjeta de red
- Cargar driver tarjeta, si el kernel no reconoció la tarjeta, verificar el
modelo de
la misma, instalar y probar de nuevo la configuración de la tarjeta de red.

Configurar parámetros de la tarjeta de red


- IP
- Mascara de red
- pasarela
- Configurar los dns server
- ping a la pasarela
- ping a google

Configuración temporal general desde proxmox


------------------------------------------------------------------------------
----------------
loguearse desde proxmox como tuxito

loguearse como root


$> sudo su -
Verificar su Ip
$> ifconfig -a

Ver la puerta de enlace


$> route -n

Verificar los DNS


$> cat /etc/resolv.conf

Ping puerta de enlace


$> ping 149.56.218.222 ---> ping a la puerta de enlace

$> ping 8.8.8.8 ---> ping a un ip público

$> ping www.google.com ---> ping a google para validar resolución DNS

Actualizar Ubuntu
=============================================================
Actualizar lista de paquetes
$> apt update

Actualizar paquetes
$> apt upgrade

Instalar vim y ssh


$> apt install vim ssh

Configuración de red de forma permanente


=========================================================
loguearse como root
$> sudo su -

editar archivo de configuracion /etc/network/interfaces


$> nano /etc/network/interfaces
-----------------------------------------
auto lo
iface lo inet loopback

auto ens18
iface ens18 inet static
address 149.56.218.X
netmask 255.255.255.224
gateway 149.56.218.222
dns-namservers 8.8.8.8
ctrl+o Enter
ctrl+x

$> systemctl restart network-manager

Conectarse remotamente al VPS


Linux
$> ssh tuxito@149.56.218.X

Winbugs
usar putty
CapÃtulo 2:

4.- Comandos básicos de Ubuntu Linux


##############################################################################
#############
Una vez instalado Ubuntu, hemos configurado el usuario tuxito, con la clave
que usaron para instalar
haremos uso ahora de los comandos básicos.
Convenciones
$> ---> Representa el prompt por lo tanto no debe escribirse como comando Los
comandos
se ejecutan secuencialmente, es importante ver el resultado de los
mismos.

Ficheros (Archivos)
--------------------
@ Planos /etc/network/interfaces
@ Binarios /usr/bin/vim
@ Enlaces /vmlinuz-->/boot/vmlinuz...
@ Especiales /dev/sda1-->partición montada en la raiz /

Información del tipo de archivo


############################################################
1. Regular file(-)
2. Directory files(d)
Special files
3. Block file(b)
4. Character device file(c)
5. Named pipe file or just a pipe file(p)
6. Symbolic link file(l)
7. Socket file(s)

Consolas de Linux
############################################################
tty1
tty1
. ]
. ]--->consolas de texto
. ]
ty6 ]
ty7 --->consola de gráfica

tty1 --> Entrar con Ctrl+Alt+F1, para tty3 (Ctrl+Alt+F3)

Entrar en una de las consolas con el usuario creado en la instalación:


user:tuxito
pass:XXXXX

Las extensiones de archivo no interesan; las mayúsculas se diferencias de las


minúscula

. ]
. ]--->consolas de texto
. ]
tty6 ]
tty7 --->consola de gráfica
tty1 --> Entrar con Ctrl+Alt+F1, para tty3 (Ctrl+Alt+F3)

Prompt del Sistema


------------------------------
[tuxito@localhost ~]
| | |__________________________________________ Ruta del
Directorio actual
| |_________________________Nombre del Equipo (Hostname)
|Ì£___Ì£_______ Nombre del usuario

Modificar el nombre de Host


----------------------------------------------------------
Mostrar la forma del prompt
$> echo $PS1

Cambiar el nombre del hostname


$> sudo hostnamectl set-hostname linuxY
$> exit

Volver a loguearse

Comandos básicos
----------------

ls --> lista los archivos o directorios


cd --> permite cambiar directorio
pwd --> muestra el path (ruta actual de directorios)
mkdir --> crear directorios
cp --> copiar archivos o directorios
mv --> mover o renombrar archivos o directorios
rm --> borrar archivos o directorios
ctrl+l--> limpiar la pantalla

Creacion de archivos con redirección de comandos y con uso de touch:


-------------------------------------------------------------------

> --> crea un nuevo archivo desde la salida estándar (monitor),


si el archivo existe lo sobreescribe
>> --> añade la salida estandar al final de un archivo, si el
archivo existe agrega siempre al final del mismo
touch --> creacion de archivos vacios

Rutas de Archivos o Directorios:


----------------------------------

@ Ruta Absoluta.- aquella ruta que se toma en cuenta desde la raiz


-------------
ejemplo:
$> ls /etc/network/interfaces
@ Ruta Relativa.-aquella ruta que se toma en cuenta desde el
directorio actual
-------------
ejemplo:
$> cd /etc/network (ruta absoluta)
$> ls interfaces (ruta relativa al directorio network)
$> ls ../../usr/share/doc (.. es directorio padre)
$> ls . (. es el directotio actual)

Ayudas en Consola
------------------
Flecha arriba y Flecha Abajo ---> navegan por el historial de comandos
(para comandos recientes)

Shift + AvPág --> navegan en forma vertical por la consola


Shit + RetPág

TAB --> desaznador de Linux


---
Autocompleta Rutas (Absolutas y Relativas de archivos y de directorios)
Autocompleta nombres de comandos
Autocompleta nombres de variables de entorno

Aplicando Ejercicios (Ejecutar en el VPS):


=============================================
loguearse al VPS
$> ssh tuxito@IPdeTuVPS

loguearse como root con sudo


$> sudo su -

Asignar una clave a root


$> passwd
clave: Una clave fuerte

Cerrar sesión actual


$> exit

Loguearse como root en forma estandar


$> su -

ingresar al directorio /etc


$> cd /etc

salir del directotio /etc


$> cd ..

mostrar en que directorio me encuentro


$> pwd

ir al directorio por defecto del usuario ej: pepito -> /home/pepito root ->
/root
$> cd

crear el directorio pruebas


$> mkdir pruebas

crear el directorio pruebas,imagenes,fotos uno dentro del otro


$> mkdir -p pruebas/imagenes/fotos

si añadimos la opción -p mkdir se encarga de crear, si no existen,


los directorios miprograma y documentacion. Si usaras este comando
sin la opción -p obtendrÃas como resultado un error.
$> mkdir -p miprograma/documentacion/html

cambiar al directorio pruebas


$> cd pruebas
$> pwd

crear el archivo vacio saludo


$> touch saludo

listar con detalles el archivo saludo


$> ls -l saludo

mostrar un mensaje a la pantalla y lo redirecciona el archivo


saludo lo sobreescribe
$> echo "hola mundo" > saludo

mostrar el contenido del archivo saludo


$> cat saludo
copiar archivo saludo dentro /tmp
$> cp saludo /tmp

listar el archivo copiado


$> ls /tmp/saludo

copiar archivo saludo con un nuevo nombre hola (dentro del mismo directorio)
$> cp saludo hola

Listar el directorio actual en columnas y con detalle (vemos los archivos


saludo y hola)
$> ls -l

crear el directorio documentos


$> mkdir documentos

copiar el archivo saludo,hola dentro del directorio documentos


$> cp saludo hola documentos/

listar con detalles el directorio documentos (no su contenido)


$> ls -ld documentos

listar el contenido del directorio documentos


$> ls -l documentos

copiar el directorio documentos como el directorio archivos,


incluyendo subdirectorios, -R es recursivo
$> cp -R documentos archivos

copiar el directorio documentos como el directorio archivos,


incluyendo subdirectorios y preservando los permisos originales
$> cp -Rp documentos archivos

$> cp -Rpf documentos archivos (forzarÃa la escritura)

* En centos, CentOS, redhat


$> unalias cp
$> cp -Rpf documentos archivos (fuerza la sobreescritura y no pregunta)

copiar el directorio imagenes dentro del directorio documentos


$> cp -R imagenes documentos

listar el directorio documentos


$> ls -l documentos

listar todos los archivos y directorios del directorio actual,


incluyendo archivos ocultos
$> ls -la
$> ls -la ~ lista el directorio principal del usuario logueado, sin importar
el directorio actual

.bash_history ----> archivo de historial del usuario


.bash_logout ----> archivo que se ejecuta al cerrar la sesion
.bash_profile
.bashrc ----> archivo que se ejecuta al iniciar una sesion

listar en columnas por tiempo y modo reverso


$> ls -lrt
$> ls -lrt /

listar todos los archivos y directorios del directorio documentos


$> ls -la documentos

listar con detalles por orden de tamaño en modo reverso


$> ls -lSr /usr/bin
listar en columnas incluyendo ocultos y subdirectorio del
directorio documentos
$> ls -lRa documentos
$> ls -lRa /

listar archivos y directorios que comiencen con sa


$> ls sa*

listar archivos y directorios que contengan la palabra ol


$> ls -l *ol*

mostrar en forma resumida las opciones del comando


$> ls --help

mover el archivo hola dentro del /tmp


$> mv hola /tmp
$> ls /tmp/hola

mover el archivo /tmp/hola al directorio actual


$> mv /tmp/hola .

mover el archivo actual "hola" como "holitas" dentro del mismo directoria,
(renombra el archivo)
$> mv hola holitas
$> ls

mover archivo holitas dentro de imagenes y lo renombra como hola


$> mv holitas imagenes/hola
$> ls imagenes

mover directorio imagenes en el mismo directorio renombralo


como galeria, no necesita recursivo -R para directorios
$> mv imagenes galeria

borrar archivo saludo no hay undelete


$> rm saludo

borrar forzadamente sin pregunta archivo saludo


$> rm -f saludo

borrar forzadamente el directorio galeria


$> rm -fR galeria

Modo Interactivo (para comandos como man,less)


-------------------------------------------------
Flecha Arriba y Abajo, AvPág RetPág --> Navegan por la visualización
/cadena --> busca cadena (se pueden usar expresiones regulares)
n --> sigue buscando
1G --> va a primera linea
G --> va a la ultima lÃnea
27G --> va a linea 27
h --> muestra la ayuda del modo interactivo
q --> salir del modo interactivo o de la ayuda

Ej:
$> less /etc/services
Flecha Arriba
Flecha Abajo
Av Pagina
Ret Pagina
/smtp
n
n
n
1G
455G
q

Ayuda del Sistema


--------------------------------------------------------------------
El comando man nos sirve para revisar la documentación de un comando
$> sudo apt-get install manpages-es
$> man ls (muestra la ayuda del comando ls)
/directorio ---> busca la palabra directorio
n ---> seguir buscando
n
1G ---> ir a la primera lÃnea
/reverse ---> buscar la palabra reverse
n ---> seguir buscando
G ---> ir a la última lÃnea
q ---> salir

Secciones de Manuales
-----------------------------
Hay diferentes secciones de páginas de manual, cada tipo se diferencia por un
número, que se detallan a continuación:

1 Programas ejecutables y guiones del intérprete de órdenes


2 Llamadas del sistema (funciones servidas por el núcleo)
3 Llamadas de la biblioteca (funciones contenidas en las bibliotecas del
sistema)
4 Ficheros especiales (se encuentran generalmente en /dev)
5 Formato de ficheros y convenios p.ej. /etc/passwd
6 Juegos
7 Paquetes de macros y convenios p.ej. man(7), groff(7).
8 Órdenes de admistración del sistema (generalmente solo son para root)
9 Rutinas del núcleo [No es estándar]
n nuevo [obsoleto]
l local [obsoleto]
p público [obsoleto]
o viejo [obsoleto]

$> man 1 ls (Lista el manual de la sección 1 del comando ls)


$> man -a ls
Presenta, secuencialmente, todas las páginas del comando ls disponibles en el
manual. Entre página y página se puede decidir saltar a la siguiente o
salir del paginador completamente.

$> man -k printf


Lista todos los manuales (incluido el tipo de manual) donde haga referencia a
printf.

5.- Historial de comandos (History)


##############################################################################
###############

lista los comandos ejecutados y los identificado por el numero de


ejecucion
$> history

Ejecuta el comando 127 del History


$> !127

Ejecuta el ultimo comando del history, que empieza con vim


$> !vim

Archivo donde se guarda el history


$> cat /root/.bash_history

* Tamaño del History


Está definido ṕor la variable de entorno $HISTSIZE
podemos modificar esa variable para guardar una mayor cantidad de lÃneas
agregnado la variable de entorno al final del archivo ~/.bashrc

$> echo "export HISTSIZE=1000000">>~/.bashrc


$> su -
$> echo $HISTSIZE
Bloquear el history
-------------------
$> chattr +i /root/.bash_history hace inmutable el archivo
$> chattr -i /root/.bash_history quita inmutabilidad

Ejercicio práctico: Como Hacer Backups:


----------------------------------------

Creo un directorio backup en la raiz


$> mkdir /backup

Creo directorios etc y network en forma parentada dentro del backup


$> mkdir -p /backup/etc/network

Copio archivos dentro del backup/etc preservando permisos


los sÃmbolos > de la segunda y tercera lÃnea no se escriben
estos sales por el uso del \ al final de una lÃnea para indicar
que el comando continúa en la siguiente lÃnea
$> cp -p /etc/passwd /etc/shadow \
> /etc/group /etc/hosts \
> /backup/etc

Copia archivos interfaces preservando permisos


$> cp -p /etc/network/interfaces \
/backup/etc/network

Copia todo el home dentro del backup preservando permisos uids,gids


$> cp -Rp /home /backup

cambia la raiz
$> cd /

Empaqueta y comprime el directorio backup y el archivo resultado


se llama backup.tgz
$> tar -zcpvf backup.tgz backup

Mueve archivo backup.tgz dentro del /root


$> mv backup.tgz /root

6.- Enlaces de Archivos y Directorios:


#############################################################
Existen dos tipos de enlaces: blandos y duros

Crear un enlace blando


---------------------------------------------------------------------
(similar al acceso directo, si se borra el
archivo original el enlace se queda roto)
$> echo "date"> /usr/bin/fecha ---> creando archivo fecha
$> chmod 755 /usr/bin/fecha ---> dando permisos de ejecución
$> fecha ---> ejecutando comando fecha

Creando enlace suave fechita


$> ln -s /usr/bin/fecha /usr/bin/fechita

Listar el enlace nuevo


$> ls -l /usr/bin/fechita

Comprobar los inodos del enlace y el archivo


$> ls -i /usr/bin/fecha
$> ls -i /usr/bin/fechita

Ejecutando comando fechita


$> fechita

Borrando archivo original


$> rm -f /usr/bin/fecha

Ejecutando fechita
$> fechita

Listando enlace roto


$> ls -l /usr/bin/fechita

Borrando enlace roto


$> rm -f /usr/bin/fechita

Crear un enlace duro


---------------------------------------------------------------------
(Es como una copia de archivo, si el archivo original se borra, el enlace aún
funciona)
$> echo "date"> /usr/bin/fecha ---> creando archivo fecha
$> chmod 755 /usr/bin/fecha ---> dando permisos de ejecución
$> fecha ---> ejecutando comando fecha

Creando enlace duro fechita


$> ln /usr/bin/fecha /usr/bin/fechita

Listar el enlace nuevo


$> ls -l /usr/bin/fechita

Comprobar los inodos del enlace y el archivo


$> ls -i /usr/bin/fecha
$> ls -i /usr/bin/fechita

Ejecutando comando fechita


$> fechita

Borrando archivo original


$> rm -f /usr/bin/fecha

Ejecutando fechita, vemos que aún funciona


$> fechita

Listando enlace
$> ls -l /usr/bin/fechita

Enlace de Directorios
$> ln -s /usr/bin /programas
$> ls -l /

CapÃtulo 3: Comandos de administración


##############################################################################
#################

7.- Comandos de Visualización y extracción de información archivos


======================================================================
cat --> muestra un archivo arriba abajo
tac --> al reves del cat
cut --> extrae por columnas un archivo, en base a un caracter de
separacion
grep --> lista las lineas de un archivo que contenga una palabra como
filtro
egrep --> filtra como grep pero con un conjunto amplio de expresiones
regulares
fgrep --> filtra como grep pero sin expresiones regulares, es el mas rapido
tail --> muestra las ultimas lineas de un archivo
head --> muestra las primeras lineas de un archivo
more --> como cat pero con pausa
less --> visualizacion con pausa y en modo interactivo
wc --> cuenta las lineas, palabras o caracteres
sed --> buscar y reemplaza cadena en un archivo
tr --> efectúa transformación de caracteres en la vista de un archivo
pr --> visualiza un archivo en formato de impresión

Redirección y TuberÃa:
------------------------------------------------------------------------------
----------
> Redicciona la salida estándar a un archivo, sobreescribiéndolo si
existe
>> Redicciona la salida estándar a un archivo, añadiendo al final del
mismo
< Redirecciona la entrada estándar desde un archivo
| (Tuberia, concatenando comandos). permite combinar las salidas estándar
de 2 o más
comandos
------------------------------------------------------------------------------
-----------

Flujos de consola
--------------------------------------------------
0 Entrada Estandar (stdin)
1 Salida Estandar (stdout)
2 Salida de Error Estandar (stderr)

Ejercicios
----------------
$> cat /etc/passwd
Muestra el contenido de un archivo sin pausa
$> tac /etc/passwd
Muestra el contenido de un archivo sin pausa pero al reves,
lo mismo que cat pero al reves

$> more /etc/services


Muestra un archivo con pausa por pagina, enter para seguir avanzando

$> less /etc/services


Muestra un archivo en modo interactivo
Su principal uso es para visualizar archivos grandes como los logs

$> less /var/log/syslog


Visualiza los logs del sistema

$> tail /etc/passwd


Muestra las ultimas 10 lineas de un archivo

$> tail -1 /etc/passwd


Muestra la ultima linea de un archivo

$> tail -5 /etc/passwd


Muestra las ultimas 5 lineas de un archivo

$> tail -f /var/log/syslog


Muestra en forma interactiva los cambios en las ultimas lineas
de un archivo: ctrl+c para salir
Sirve para ver los logs en tiempo real

$> tail -f /var/log/squid3/access.log | grep pepito


Este ejemplo me mostrarÃa la navegación del usuario pepito en
tiempo real

$> cat /etc/services | less


visualiza el contenido del archivo /etc/services y el resultado
se concatena en less

$> less /etc/services


Tiene el mismo resultado que el comando anterior

$> cat -n /etc/services | less


Lo mismo que los archivos anteriores pero mostrando los numeros de
linea

$> cat /etc/hosts /etc/network/interfaces


Concatena la visualizacion de los dos archivos en una sola salida
por el stdout (pantalla)

Cat como editor de texto


$> cat>archivo
hola mundo
linux es chevere
ctrl+c
$> cat archivo
echo como editor de texto
$> echo "hola
> mundo
> linux es
> chevere" > archivo

$> cat archivo


Muestra lo que se escribio anteriormente

$> cat /etc/passwd > passwords


Creando archivo a partir de la salida estandar

$> cat /etc/group >> passwords


Añade al final del archivo

$> grep imap /etc/services ; echo hola


Filtra por palabra la visualizacion del archivo ";" se usa para
ejecutar otro comando en la misma linea

$> wc /etc/services
Cuenta el numero de lineas palabras y caracteres del archivo

$> wc -l /etc/services
Cuenta solo numeros de lineas

$> tail /etc/services


Visualiza las 10 ultimas lineas

$> tac /etc/services


Visualiza de abajo hacia arriba el contenido del archivo

$> head /etc/services


Visualiza las 10 primeras lineas

$> head -8 /etc/services


Visualiza las 8 primeras lineas

$> tail -1 /etc/passwd


Muestra el ultimo usuario creado

$> head -30 /etc/services | tail -5


Muestra las lineas de la 25 a la 30

$> cat /etc/group | tee -a passwords


Añade al final del archivo y muestra la salida estandar

$> cut -d ":" -f1 /etc/passwd


Corta las lineas por columna separandolas por ":" y muestra la primera
columna

$> cut -d ":" -f1,3 /etc/passwd


Corta las lineas por columna separandolas por ":" y muestra la primera y
tercera columna

$> sed -e "s/smtp/correo/g" /etc/services | less


Reemplaza la palabra smtp por correo (solo en la salida estándar)
$> sed -e "s/telnet/conexion remota/g" \
-e "s;smtp;correo;g" /etc/services
Reemplaza la palabra telnet y smpt por correxion remota y correo

$> sed -i "s;smtp;correo;g" /etc/services NO EJECUTAR


Reemplaza la palabra smtp por correo (modifica el archivo)

$> cat /etc/services | tr a-z A-Z


Transforma las letras minusculas a mayusculas

$> cat /etc/passwd | tr -d "[0-9]"


Borra los numeros

$> cat /etc/passwd | tr -c "[a-z A-Z]" "-"


Transforma los caracteres que no sean letras en "-"

$> cat /etc/services |tr -s "\n*"


Transforma los saltos de lineas consecutivas en uno solo (elimina
linea en blanco)

$> pr /etc/services
Visualiza en formato de impresion

$> pr /etc/services | less

$> pr /etc/services > /dev/lp0


Impresion del archivo /etc/services lp0 es el puerto paralelo

Expresiones Regulares:
-------------------------------------------------------------------
* --> 0 o mas coincidencias
+ --> 1 o mas coincidencias
? --> una coincidencia
{1,} --> equivalente a +
{0,} --> equivalente a *
{1} --> equivalente a ?
{2,5} --> de 2 a 5 coincidencias
^ --> que comienza
$ --> que termina
[a-z] --> solo letras minusculas
[A-Z] --> solo letras mayusculas
[a-zA-Z] --> solo letras
[a-zA-ZáéÃóúñÑÁÉÍÓÚ] --> alfabeto español
[0-9] --> solo numeros
( ) --> bloque de expresiones
(exp1 |exp2) --> coincidencia de exp1 o exp2
[^exp] --> negacion de la expresion
\ --> caracter de escape
. --> cualquier caracter

Ejercicios:
=========================================================
Crear el usuario tuxito
$> adduser tuxito
Tuxito Linuxero
$> passwd tuxito (poner clave fuerte)
$> grep tuxito /etc/passwd
Muestra todas las lineas en el fichero /etc/passwd que contengan la
expresion tuxito

$> grep -v tuxito /etc/passwd


Filtra las lineas que no contengan la expresion tuxito

$> grep "^a" /etc/passwd


Busca las lineas que comienzan con a

$> egrep "[0-9]" /etc/hosts


Acepta un mayor conjunto de expresiones regulares, filtra las lineas
que contengan numeros

$> fgrep tuxito /etc/passwd


Filtra por palabras no por expresiones regulares, es más rápido que
grep y egrep

$> fgrep -R tuxito /etc 2>/dev/null


Buscamos la palabra tuxito en cualquier archivo del /etc direccionando la
salida de error al /dev/null

Ejercicio: Arma una expresion regular para validar numeros de ips

Crear una Regexp


#############################################
1.- Enunciar los datos especÃfcos
2.- Buscamos patrones comunes entre los datos especÃficos
3.- Representamos los patrones comunes con expresiones regulares
4.- Validamos la expresión regular final

Regexp para una IP


---------------------------------------------------
1.- 192.168.120.101
255.255.255.0
8.8.8.8
10.4.3.5
0.0.0.0
3.4.5.234

2.- - Caracteres permitidos: Números y el punto


- 4 triadas de números separos por punto
- La triada va de un rango de 1 a 3 dÃgitos

3.- [0-9]\.
[0-9]{1,3}\.
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

Simplificación ([0-9]{1,3}\.){3}[0-9]{1,3}

Solucion:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

$> egrep -R "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" /etc 2>/dev/null

Ejercicio: Escribe una expresion regular para validar emails en


cualquier archivo del directorio /etc o sus subdirectorios
pepito@gmail.com
pepito_linux@gmail.com
pepito.linux@gmail.com
7318@gmail.com

Solucion: "[a-zA-Z0-9]?[a-zA-Z0-9\-\._]+@[a-zA-Z0-9]?[a-zA-Z0-9\-\.]+[a-zA-Z]
{2,4}"
$> egrep -R "[a-zA-Z0-9]?[a-zA-Z0-9\-\._]+@[a-zA-Z0-9]?[a-zA-Z0-9\-\.]+[a-zA-
Z]{2,4}" /etc 2>/dev/null | grep -v binario

8.- El Editor VIM


##############################################################################
#################

Comandos de vim
------------------------------------------------------------------------------
------------

ESC : ingresa al modo comando


i : entra en modo insercion desde la misma linea
o : entra en modo insercion desde la sgte linea
1G : va a la primera linea
23G : va a la linea 23
:45 : va a la linea 45
G : va a la ultima linea
/palabra : busca una cadena
n : sigue buscando
dd : corta o borra una linea
d8d : corta o borra 8 lineas
yy : copia una linea
y7y : copia 7 lineas
p : pega el contenido del portapapel desde la siguiente
lÃnea
P : pega el contenido del portapapel desde la lÃnea
actual
5p : pega 5 veces el contenido del portapapel
u : deshace la ultima accion
ctrl+R : rehace la ultima accion
x : borra una letra
:w : graba el archivo actual
:wq : graba y sale
:w! : graba de forma forzada
:wq! : graba y sale forzadamente
:q! : sale forzadamente
:1,$s/busqueda/reemplaza/g :busca una cadena y la reemplaza
:! comando : ejecuta un comando en bash y vuelve a VIM
:e archivo : abre un nueva archivo en el sgte buffer
:b1 : va el primer buffer abierto
:b2 : va al segundo buffer, para cambiar de buffer hay que
grabar el buffer actual
:set number : muestra los numeros de linea
:set nonumber : quita los numeros de linea
:set paste : habilita el pegado sin auto identificacion
:set ts=3 : establece a 3 los espacios de los tabs
Insertar : entra en modo de reemplazo
:saveas archivo : guarda como nombre archivo
:shitf+a : entra en modo insercion al final dpel
D : elimina texto desde el cursosr actual hasta
el final
de la linea
dG : elimina todo hasta la ultima linea
:wq! ++utf8 : guarda el fichero en modo UTFP (por defecto)
:nohl : cancela los resultados de busqueda
yG : copia desde la linea del curso actual hasta la última lÃnea

Instalar VIM
----------------------------------------------------------
$> su -
$> apt-get update
$> apt-get install vim

Crear archivo poema


----------------------------------------------------------
$> vim poema
i -----> Inserta texto
Oh gran Linux que quita la ignorancia en mi vida,
a ti te consagro mi aprendizaje.
ESC ----> Lleva al modo comando
:wq ----> graba y sale

$> cat poema

Gestion de temporales
----------------------------------------------------------
$> vim poema (agregar al final)
G ----> van a la última lÃnea
o ----> modo inserción en una nueva lÃnea
Prometo alejarme del maligno windows

Cerrar a la mala dando click en la X de la ventana del terminal

$> vim poema


Sale el mensaje de alerta el temporal yp uedo elegir entre estas opciones
[A]brir para lectura únicamente, (E)ditar de todas formas, (R)ecuperar,
(B)orrar(S)alir, (A)bortar:

Seleccionamos "r" y le damos enter


i -----> insetar texto
desde mañana
ESC -----> volver al modo comando
:wq! -----> grabar y salir forzadamente

Borrar el temporal
$> rm -f .poema.swp

Crear archivo saludo y ejecutar ejercicios de comandos vim


---------------------------------------------------------
$> vim saludo
i
hola mundo
ESC
yy
20p
G
o
windows es lo maximo
ESC
/hola
n
n
:set number
G
yy
30p
:1,$s/windows/linux/g
dd
45G
d2d
dG
u
ctrl+r
:! date
:w
:e otrosaludo
:b1
1G
yG
:b2
P
:wq!

$> cat saludo

$> cat otrosaludo

Archivo de configuracion de VIM


------------------------------------------------------
$> vim /etc/vim/vimrc
20G
"syntax on
syntax on
29G (brorrar comilla inicial de la linea 29 a la 31)
"if has
"
"
G
o
" evita que genera archivo backup ej: archivo~
set nobackup
" muestra numeros de linea
set number
" establece el espacio de los tabs a 3
set ts=3
" evita autoindentar cuando se pega el portapapeles desde el modo grafico
set paste
ESC :wq
Comprobar cambios
$> vim /etc/vim/vimrc
ESC:q

9.- Configuración de Red por archivo de Configuración en Ubuntu


#################################################################
Detectar las tarjetas de red
$> ifconfig -a
ó
$> ip link show
Ej: detecta que Ethernet es ens18

Editar el archivo /etc/network/interfaces

$> vim /etc/network/interfaces


auto lo
iface lo inet loopback

auto ens18
iface ens18 inet static
address 149.56.218.X
netmask 255.255.255.224
gateway 149.56.218.222
dns-nameservers 8.8.8.8

Reiniciar servicio en Ubuntu Server


$> systemctl restart networking

Reiniciar servicio en Ubuntu Desktop


$> systemctl restart network-manager

Verificar la configuración
$> ip addr show
$> ip route show
$> ping 8.8.8.8
$> ping www.google.com

10.- Resolución de Hosts y DNS


##################################################################
Ubuntu 14.04
$> vim /etc/hostname
linuxY.aulautil.com
$> hostname linuxY.aulautil.com
$> reboot

Ubuntu 16.04
$> hostnamectl set-hostname linuxY.aulautil.com
$> exit
$> exit

Conectar al vps
$> su -
$> hostnamectl
Opcional: Cambiar la forma del prompt para root, para que muestre nombre
completo del host
$> sudo su -
$> vim ~/.bashrc (ir a la última lÃnea y agregar)
export PS1="\[\e]0;\u@\H: \w\a\]${debian_chroot:+($debian_chroot)}\u@\H:\w\$ "

$> su -

11.- Configurar la resolución local de nombres


##################################################################

Ej: resolviendo la ip local, una ip de la red y un dominio ficticio con


nuestra propia ip

$> vim /etc/hosts


127.0.0.1 localhost
::1 ip6-localhost ip6-loopback
127.0.1.1 linuxY linuxY.aulautil.com www.mocosoft.com

Pruebas
---------------
$> ping linuxY (SQDN)
$> ping linuxY.aulautil.com (FQDN)
$> ping www.mocosoft.com (Dominio Ficticio)

Nota:
----------------------------------------------------------------------------
Para resolver los nombre de host a nivel de red se usa un servidor DNS
Bind ó dnsmasq

******** Deshabilitar DNSMASQ de NetworkManager ****************


$> sudo su -
$> vim /etc/NetworkManager/NetworkManager.conf
3: #dns=dnsmasq

$> service network-manager restart


$> cat /etc/resolv.conf

12.- Búsqueda de Archivos


##############################################################################
########
find,locate,whereis,which
--------------------------

$> find ./ -name a\*


Busca archivos y directorios que comiencen con a, tomando como base el
directorio actual

$> find -name "a*"


Busca archivos y directorios que comiencen con a, tomando como base el
directorio actual

$> find /etc -name hosts


Busca desde el /etc el archivo o directorio interfaces
$> find /usr -size +300k
Busca todos los archivos en el /usr que pesen mas de 300K

$> find /etc -name passwd -exec cat {} \;


Busca todo los archivos llamados passwd dentro de /etc y luego visualiza
el contenido de cada uno de ellos con el comando cat

$> find /etc -exec sed -i "s/smtp/correo/g" {} \; NO EJECUTAR


Busca y reemplaza smtp por correo en todos los archivos dentro de /etc

$> find / -user tuxito -size +3M


Busca archivos del usuario tuxito que sean mayores a 3 Megas en
todo el sistema

$> find / -user root -size +3M

Utilidad locate
----------------------------------------------------------------------
$> apt-get -y install mlocate

$> updatedb
Actualiza la base de datos de la lista de archivos y directorios
existentes en el sistema

$> locate interfaces


Busca en la base de datos el archivo interfaces

$> whereis vi
Muestra la ruta de binarios, librerias y documentacion del comando vi

$> which vi
Muestra la ruta del binario del comando vi

13.- Empaquetado y comprension:


##############################################################################
########

$> mkdir /backups

$> cd /backups

$> tar -cvf etc.tar /etc


empaqueta el directorio en un solo archivo etc.tar

$> gzip etc.tar


comprime en formato gzip un archivo y le añade extension .gz

$> tar -cvf etc.tar /etc

$> bzip2 etc.tar


comprime en formato bzip2 un archivo y le añade extension .bz2

$> ls -l

$> tar -zcpvf etc.tgz /etc


empaqueta y comprime en formato gzip
z --> comprimir con gzip
c --> empaquetar
p --> preservar los permisos
v --> verbose
f --> file (archivo a generar)

$> tar -jcpvf etc.tbz /etc


empaqueta y comprime en formato bzip2

j --> comprimir en bzip2

$> gunzip etc.tar.gz

descomprime un archivo de formato bzip

$> ls -l

$> tar -xvf etc.tar


desempaqueta un archivo de formato tar

x --> desempaqueta

$> bunzip2 etc.tar.bz2


descomprime un archivo de formato bzip2

$> ls -l

$> tar -xvf etc.tar

$> tar -zxpvf etc.tgz


descomprime y desempaqueta un archivo de formato gzip

$> tar -jxpvf etc.tbz


desempaqueta y descomprime un archivo de formao bzip2

Archivos Zip windows


-------------------------------------------------------
$> apt-get -y install unzip
$> unzip archivo.zip
descomprime un archivo .zip

Archivos rar
-----------------------------------------------------------
Instalar unrar
$> apt-get install unrar
$> unrar x archivo.rar

Programa gráfico para KDE


---------------------------------------
ark

14.- Usuarios y Grupos


##############################################################################
####################

Archivos importantes de usuarios, grupos y contraseñas


--------------------
/etc/passwd (lista de usuarios)
/etc/group (lista de grupos)
/etc/shadow (lista de contraseñas de usuarios)
/etc/gshadow (lista de contraseñas de grupos)

Crear usuarios
--------------

crear un nuevo usuario, su directorio de trabajo y su grupo igual al nombre de


usuario
$> adduser tuxito

crear o cambiar la contraseña de un usuario


$> passwd tuxito

* Plantilla de los home directory


---------------------------------------------------------
$> ls -la /etc/skel

mostrar información del usuario actual


$> id

salir de la sesion actual


$> exit

$> id

crear usario linuxero con descripcion, grupo principal y grupos adicionales,


asà como su intérprete de comandos
$> useradd -md /home/linuxero -c "linuxero fanatico" \
-g users -G video,audio -s /bin/bash linuxero

$> passwd linuxero

$> grep linuxero /etc/passwd


linuxero:x:1003:100:linuxero fanatico:/home/linuxero:/bin/bash

Donde:
linuxero = nombre del usuario
x = la clave del usuario esta en /etc/shadow
1003 = uid del usuario
100 = gid del usuario
linuxero fanatico = descripción
/home/linuxero = directorio de trabajo del usuario
/bin/bash = interpretes de comandos

$> grep users /etc/group


users:x:100:pepito,tuxito,windozero

Donde:
users = nombre del grupo
x = la clave del grupo esta en /etc/gshadow (no es
comun)
100 = gid del grupo
pepito,tuxito,windozero = usuarios adicionales del grupo
$> grep linuxero /etc/shadow (archivo de contraseñas)
linuxero:$6$qf7G8CbU$R9wiKgiN0rVaP1qsjQnzRsYfywP3L468:15297:0:99999:7:::

Donde:
linuxero = nombre del usuario
$6$qf7G... = contraseña encriptada en un algoritmo como MD5, SSHA,
si está vacÃo no requiere contraseña, si tiene un
asterisko al inicio, la cuenta está deshabilitada
15297 = El número de dÃas desde la era Unix en que el password
fue cambiado
(01 de Enero de 1970).
0 = Número de dÃas mìnimo en que el password podrá sea
cambiado (0 indica que puede ser
cambiado en cualquier momento)

99999 = El número de dÃas máximo en que el password debe ser


cambiado (99999
indica que el password puede permanecer sin cambiar por
muchos años)

7 = El número de dÃas de alerta al usuario antes que su clave


expire (7 es una semana)

= Número de dÃas que se deshabilitará la cuenta, una vez


que expire el password

= Número de dìas desde la era Unix que la cuenta


será deshabilitada

= Campo reservado para futuro uso

Opciones del passwd para cambiar las opciones de la contraseña


------------------------------------------------------------------------------
------------------------
$> passwd --help
-d, --delete delete the password for the named account (root
only)
-l, --lock lock the named account (root only)
-u, --unlock unlock the named account (root only)
-x, --maximum=DAYS maximum password lifetime (root only)
-n, --minimum=DAYS minimum password lifetime (root only)
-w, --warning=DAYS number of days warning users receives before
password expiration (root only)
-i, --inactive=DAYS number of days after password expiration when an
account becomes disabled (root
only)

Ejemplo:
Modificamos la expiracion de contraseña del usuario linuxero a 30 dÃas
$> passwd -x 30 linuxero

Verificamos el cambio
$> grep linuxero /etc/shadow

Bloqueamos el login del usuario linuxero, deshabilitando su contraseña


$> passwd -l linuxero

Verificamos el cambio
$> grep linuxero /etc/shadow

Desbloqueamos el login
$> passwd -u linuxero

Modificar usuarios
------------------------------------------------------------------------------
--
$> grep tuxito /etc/passwd

$> usermod -c "tuxito hacker" tuxito (modificamos a sus usuarios)

$> grep tuxito /etc/passwd

$> vim /etc/passwd (modifica el archivo de usuario)

Borrar usuarios
------------------------------------------------------------------------------
--
$> userdel linuxero (borra el usuario pero no su directorio de trabajo)

$> userdel -r tuxito (borra el usuario incluyendo su directorio)

Crear un Grupo
------------------------------------------------------------------------------
--
$> groupadd fanaticos

vuelvan a crear tuxito

Agregar un usuario a un grupo


------------------------------------------------------------------------------
--
$> gpasswd -a tuxito fanaticos (agrega al usuario tuxito al grupo fanaticos)

$> grep fanaticos /etc/group

$> vim /etc/group


se puede agregar un usuario directamente a un grupo editando el archivo groups

15.- Permisos de archivos y directorios


##############################################################################
#####################
$> ls -l /etc/hosts

inodo tamaño en bytes fecha y hora de modificacion


| | |
| | |
-rw-r--r--. 2 root root 240 2009-05-04 08:15 /etc/hosts
|______ | | | |
| | | | | |
| | | dueño grupo ruta del archivo
| | ---> permiso especial
| |---> triada de permisos para el archivo del dueño, usuario
| y el resto del mundo
| --> r=read 4
| --> w=write 2
| --> x=exec 1
|

Información del tipo de archivo


------------------------------------------------------------------------------
1. Regular file(-)
2. Directory files(d)
Special files
3. Block file(b)
4. Character device file(c)
5. Named pipe file or just a pipe file(p)
6. Symbolic link file(l)
7. Socket file(s)

$> su -

$> cd

$> ls -l saludo

$> chmod 664 saludo


(6=permiso dueño,6=permiso grupo,4=permiso de otros)

$> ls -l saludo

$> chmod 777 saludo (permisos totales para todos)

$> ls -l saludo

Se pueden usar letras para cambiar los permisos con chmod


u=user, g=group, o=others, a=all
r=read, w=write, x=execution
-=quita permisos , +=añade permisos

quitar al resto del mundo todos los permisos al archivo saludo


$> chmod o-rwx saludo

$> ls -l saludo

Agregar permisos de lectura escritura y ejecucion al dueño y grupo del


archivo
$> chmod ug+rwx saludo

$> chown tuxito saludo (cambia de dueño al archivo)

$> ls -l saludo

$> chgrp tuxito saludo (cambia de grupo al archivo)

$> ls -l tuxito
$> chown -R tuxito.tuxito /home/tuxito
----- ------
dueño grupo
cambia de dueño y grupo al directorio /home/tuxito incluyendo sus
subdirectorios

* Nota
-------------------------------------------------------------------------
el comando chmod lo puede ejecutar el dueño del archivo y el usuario root
el comando chown solo lo puede ejecutar root

Máscara de Permisos por Defecto


------------------------------------

muestra la mascara de permisos con que se crean archivos o directorios


$> umask

muestra los permisos con que se crea los directorios


u=rwx, g=rx, o=rx
$> umask -S

el umask con 0077 establece una nueva mascara


$> umask 0077

Cambio de mascara de permisos de usuarios de forma permanente


-------------------------------------------------------------
$> su - tuxito
$> umask
$> vim ~/.bashrc
umask 0077 ---> poner en la ultima linea

$> su - tuxito
$> umask

Notas:
chmod = solo lo puede ejecutar el dueño del archivo y root
chown = solo lo ejecuta root

16.- Procesos:
##########################################################################

$> ps
lista procesos del usuario

$> ps ax
lista todos los procesos

$> ps axf
lista todos los procesos, jerarquÃa y ruta de los comandos

$> ps ax | grep gdm


verifica si en la lista de procesos se esta ejecutando gdm

2550 PID --> identifica el proceso

? TTY --> consola desde donde se esta ejecutando


sS STATE --> estado del proceso

0:00 TIME --> tiempo que se esta ejecutando el proceso

COMMAND --> comando del proceso

$> man ps
verifica fligs en la pagina del manual

Matar procesos:
--------------
Ejecuta un proceso que guarda en el archivo boom y lo manda a segundo plano

$> yes (te muestra y infinitamente)


ctr+c ---> cancela el proceso

$> yes > boom (lo direcciona a un archivo y bloquea la consola)


ctrl +c

$> yes > boom &


lo manda en segundo plano y desbloquea la consola

$> ps ax | grep yes


verifico la ejecucion del proceso

$> ls -l boom

$> killall -9 yes (-9 indica maximo nivel de matanza)


mata el proceso por el nombre del proceso

$> ps ax | grep yes


verificar la ejecucion del proceso

$> yes > boom &

$> ls -l boom

$> ps ax | grep yes


verifico cual el PID del proceso (Ej 2525)

$> kill -9 2525 --> 2525 es el PID del proceso, es un ejemplo

$> ps ax | grep yes

Monitoreo del sistema


================================================
Podemos usar el comando top o htop
$> top

$> sudo apt-get install htop


$> htop
Capitulo 4: Configuración del escritorio Ubuntu Linux
##############################################################################
##########################
Instalación y Gestión de Paquetes
==============================================================================
======
Configuración de repositorios

$> vim /etc/apt/sources.list


----------------------------------------------------------------------------
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://pe.archive.ubuntu.com/ubuntu/ trusty main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://pe.archive.ubuntu.com/ubuntu/ trusty-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu


## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://pe.archive.ubuntu.com/ubuntu/ trusty universe
deb http://pe.archive.ubuntu.com/ubuntu/ trusty-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu


## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://pe.archive.ubuntu.com/ubuntu/ trusty multiverse
deb http://pe.archive.ubuntu.com/ubuntu/ trusty-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://pe.archive.ubuntu.com/ubuntu/ trusty-backports main restricted
universe multiverse
----------------------------------------------------------------------------

APT
############################################################################
$> apt ---> lista las opciones del comando apt

Actualizar lista de paquetes


$> apt-get update

Buscar un paquete
-------------------------------------------------------------------
$> apt-cache search nmap

Instalar o actualizar un paquete


--------------------------------------------------------------------
$> apt-get -y install nmap

Desinstalar un paquete
--------------------------------------------------------------------
$> apt-get remove nmap
Desintalar totalmente un paquete
$> apt-get remove --purge nmap

Actualizar todos los paquetes


--------------------------------------------------------------------
$> apt-get dist-upgrade

Listar todos los paquetes instalados


------------------------------------------------------------------
$> dpkg -l

Ver si un paquete esta instalado (ej: mlocate)


$> dpkg -l | grep mlocate

Listar los archivos de un paquete


$> dpkg -L mlocate

Instalar un paquete deb manualmente


$> dpkg -i /ruta/a/paquete.deb

Fixear errores de dependencias


$> apt-get -f install

Repositorios adicionales de Ubuntu


##############################################################################
################################
Ubuntu por defecto viene con los repositorios Universe
y Multiverse que permite instalar múltiples paquetes
$> sudo su -
$> apt-get -y update

Idioma español
###########################################################################
$> apt-get -y install language-pack-es libreoffice-l10n-es \
firefox firefox-locale-es language-pack-gnome-es libreoffice-help-es myspell-
es wspanish

Luego cerrar el entorno gráfico y volver a abrir

Codecs Multimedia, tipografÃas, flash, java y compresores


###########################################################################
$> apt-get install ubuntu-restricted-extras
Seleccionar Aceptar y SÃ cuando pregunte

Leer Dvds
##########################################################################
$> apt-get install libdvdread4

OpenJDK (java)
##########################################################################
Ubuntu 14.04
$> apt-get install openjdk-7-jre icedtea-plugin

Ubuntu 16.04
$> apt-get install openjdk-8-jre icedtea-plugin
Formatos de compresión
##############################################################################
#############
$> apt-get install rar unzip unrar unace p7zip-full p7zip-rar bzip2 lzop
sharutils mpack lhasa arj

Configuración de la Tarjeta de Video con los drivers privativos (ATI, Nvidia)


##############################################################################
######
Verificar el modelo de la tarjeta de video
$> lspci | grep VGA

Nvidia

Ejecutar Driver Manager


En el menu inicio buscar "Administrador de Controladores" Ubuntu 14.04
En el menu inicio buscar "Controladores Adicionales" Ubuntu 16.04

Seleccionar
- fglrx para AMD (Ubuntu 14.04)
- nvidia para Nvidia

Si la tarjeta es muy nueva, seleccionar fglrx-updates ó nvidia-310-updates


Si la tarjeta es antigua nvidia-173

eso instalará el driver de video para Nvidia o ATI


cuando termine de instalar, reiniciar

Nota:
==============================================================================
===
En Ubuntu 16.04 y posterior en AMD ATI viene el driver open source AMDGPU en
reemplazo
de fglrx y el driver Radeon para las tarjetas antiguas.

Programas adicionales
##############################################################################
#####
Google Chrome
------------------------------------------------------------
Descargar deb de 64 bits para Ubuntu desde
64 bit .deb (para Debian/Ubuntu)
https://www.google.es/chrome/browser/desktop/index.html

Instalar chrome
$> sudo dpkg -i /home/tuxito/Descargas/google-chrome-stable_current_amd64.deb
$> apt-get -f install

Chromium
------------------------------------------------------------------------------
-------
$> apt-get -y install chromium-browser

Skype
========================================================================
$> dpkg --add-architecture i386
$> add-apt-repository "deb http://archive.canonical.com/ $(lsb_release -sc)
partner"
$> apt-get update
$> apt-get -y install skype

Teamviewer
========================================================================
Instalación
------------------------------------------------------------------------------
------
Como usuario tuxito Descargar teamviewer v11.0.57095 (deb 32-Bit / 64-Bit
Multiarch)
luego instalar el paquete deb

$> dpkg --add-architecture i386


$> apt-get update
$> dpkg -i /home/tuxito/Descargas/teamviewer_11.0.57095_i386.deb
$> apt-get -f install

Ejecutar teamviewer

Alt+F2
$> teamviewer

Anydesk
===========================================================================
Descargar de http://anydesk.es/download
$> sudo su -
$> wget https://download.anydesk.com/linux/anydesk_2.9.3-1_amd64.deb
$> dpkg -i anydesk_2.9.3-1_amd64.deb
$> apt-get -f install

Como usuario click en menu inicio y buscar Anydesk

Cliente VNC y RDP


-----------------------------------------------------
Unity/Gnome
$> apt-get -y install remmina

KDE
$> apt-get -y install krdc

Enchula tu desktop
##############################################################################
###############

Unity
==========================================================================
Manipular efectos gráficos
$> apt-get install compizconfig-settings-manager compiz-plugins-extra

Ejecutar Alt+F2 ccsm


si se pone inestable, borrar como tuxito
$> rm -fR ~/.compiz
$> rm -fR ~/.config/compiz*
Cerrar sesión y volver a abrir

Escitorio alternativo KDE Plasma (Opcional)


####################################################################
$> apt-get install kubuntu-desktop
seleccionar lightdm

Si falla instalacion
$> dpkg -i --force-all /var/cache/apt/archives/kde-config-telepathy-
accounts*.deb
$> reboot
Loguearse con kde

Personalizar kde
==========================================================
Abrir preferencias del sistema

Color del Desktop


----------------------------
Apariencia de las aplicaciones -> Colores -> Dar click Obtener nuevos esquemas
y buscar Ghost

Íconos
------------------------------
entrar a www.kde-look.org
Descargar IceGlass
Instalar en
Apariencia de las aplicaciones -> Iconos -> Instalar archivo del tema

Decoracion de Ventana
------------------------------------------------------------------
Apariencia del Espacio de Trabajo -> Decoracion de ventanas-> Obtener Nuevos
esquemas y buscar Ghost

Tema de Escritorio (Plasma)


------------------------------------------------------------------------------
Apariencia del Espacio de Trabajo -> Tema de Escritorio -> Obtener Nuevos
esquemas y buscar Ghost

Wallpaper
-----------------------------------------------------------------------------
Click derecho en el escritorio
Preferencias del escritorio por omisión -> click en Abrir y buscar el
wallpaper

Efectos del Escritorio


------------------------------------------------------------------------------
-
Configurar el driver de video (ATI o Nvidia)
Luego habilitar los efectos de escritorio

Deshabilitar/Habilitar efectos
-----------------------------------
Alt+Shift+F12
Reproductor de Música
------------------------------------------------------------
$> apt-get -y install amarok

Instalar reproductor de video


---------------------------------------------------------------------------
$> apt-get -y install vlc

Quemar dvds cds


--------------------------------------------------------------------------
$> apt-get -y install k3b

Bittorrent
--------------------------------------------------------------------------
$> apt-get -y install ktorrent

Aplicaciones Windows
##############################################################################
#################

Instalar IE8 y juegos con wine y PlayOnlinux


------------------------------------------------------------------------------
-----------------
$> wget
http://www.playonlinux.com/script_files/PlayOnLinux/4.2.10/PlayOnLinux_4.2.10.
deb
$> dpkg -i PlayOnLinux_4.2.10.deb
$> apt-get -f install
$> apt-get install xterm wine

como usuario tuxito ejecutar


$> playonlinux

Instalar programas windows con cxoffice


------------------------------------------------------------------------------
-----------------
$> su -
$> cd /opt

Entrar a página de Crossover Office y comprar o descargar trial


Descomprimir archivo de crossover Office
$> tar -zxvf cxoffice.tgz
$> apt-get install python-gtk2 python-glade2
$> su - tuxito
$> /opt/cxoffice/bin/cxsetup

Libre Office Draw (reemplaza a Visio)


------------------------------------------------------------------------------
-----------
Descargar galerÃas de
www.draw-shapes.de

Fuente de Winbugs en Linux


-------------------------------------------------------------------
Ejemplo: /dev/sda1 es el disco C:\

$> mkdir /winbugs


$> mount /dev/sda1 /winbugs
$> cp -R /winbugs/Windows/Fonts/* /usr/share/fonts/truetype

Listado de programas alternos a los de Windows


=================================================================
3D Home Architect
Sweet Home 3D (http://sweethome3d.sourceforge.net/index.html)
3D Studio Max
Art of Illusion (http://www.artofillusion.org/)
Blender (http://www.blender.org/)
K-3D (http://www.k-3d.org/)
Wings 3D (http://www.wings3d.com/)
ACDSee
Eye of GNOME (http://www.gnome.org/projects/eog/)
Geeqie (http://geeqie.sourceforge.net/)
GQview (http://gqview.sourceforge.net/)
Gwenview (http://gwenview.sourceforge.net/)
KuickShow (http://kuickshow.sourceforge.net/)
ShowImg (http://freecode.com/projects/showimg)
Adobe Acrobat Reader
ePDFView (http://trac.emma-soft.com/epdfview/)
Evince (http://www.gnome.org/projects/evince/)
okular (http://okular.kde.org/)
Xpdf (http://www.foolabs.com/xpdf/)
Adobe Audition
Audacity (http://audacity.sourceforge.net/)
Adobe Illustrator
Inkscape (http://www.inkscape.org/)
Calligra Karbon (http://www.calligra.org/karbon)
sK1 Project (http://sk1project.org/)
Skencil (http://www.skencil.org/)
Xara Xtreme (http://www.xaraxtreme.org/)
Alchemy (http://al.chemy.org/gallery/)
Open Office Draw (http://www.openoffice.org/product/draw.html)
Libre Office Draw (https://es.libreoffice.org/descubre/draw/)
Adobe Lightroom
Darktable (http://darktable.sourceforge.net/)
Adobe PageMaker
Scribus (http://www.scribus.net/)
Adobe Photoshop
CinePaint (http://www.cinepaint.org/)
GIMP (http://www.gimp.org/)
GIMPShop (http://www.gimpshop.com/)
Krita (http://krita.org/)
Ant Movie Catalog
Moviefly (https://savannah.nongnu.org/projects/lmc/)
AOL Instant Messenger (AIM)
Instantbird (http://instantbird.com/)
Kopete (http://kopete.kde.org/)
Pidgin (http://pidgin.im)
PSI (http://psi-im.org/)
Empathy (https://live.gnome.org/Empathy)
APC PowerChute
Apcupsd (http://www.apcupsd.com/)
Network UPS Tools (http://www.networkupstools.org/)
PowerD (http://power.sourceforge.net/)
Collectorz
Alexandria (https://github.com/mvz/alexandria-book-collection-
manager)
aviManager (http://sourceforge.net/projects/avimanager/)
GCstar (http://www.gcstar.org/)
Griffith (http://griffith.cc/)
Katalog (http://salvaste.altervista.org/)
Tellico (http://tellico-project.org/)
vMovieDB (http://vmoviedb.sourceforge.net/)
DAMN NFO Viewer
NFO Viewer (http://home.gna.org/nfoview/)
Dreamweaver
Bluefish (http://bluefish.openoffice.nl/index.html)
BlueGriffon (http://bluegriffon.org/)
Geany (http://geany.uvena.de)
KompoZer (http://www.kompozer.net/)
Nvu (http://www.nvu.com/)
Quanta Plus (http://quanta.sourceforge.net/release2.php)
Screem (http://www.screem.org/)
DVDShrink
AcidRip (http://sourceforge.net/projects/acidrip/)
dvd::rip (http://www.exit1.org/dvdrip/)
k9copy (http://sourceforge.net/projects/k9copy-reloaded/)
OGMRip (http://ogmrip.sourceforge.net/)
qVamps (http://vamps.sourceforge.net/)
Thoggen (http://thoggen.net/)
xdvdshrink (http://dvdshrink.sourceforge.net/)
Everest
HardInfo (http://sourceforge.net/projects/hardinfo.berlios/)
Evernote
BasKet (http://basket.kde.org/)
Chandler (http://chandlerproject.org/)
QuickFox Notes (https://addons.mozilla.org/en-
US/firefox/addon/13572/)
Tomboy (https://wiki.gnome.org/Apps/Tomboy)
Zim (http://zim-wiki.org/)
Finale
Brahms (http://brahms.sourceforge.net/)
Denemo (http://denemo.sourceforge.net/index.html)
Lilypond (http://www.lilypond.org)
MuseScore (http://musescore.org/)
NoteEdit (http://sourceforge.net/projects/noteedit.berlios/)
Rosegarden (http://www.rosegardenmusic.com/)
FL Studio
Ardour (http://www.ardour.org)
Jokosher (http://sourceforge.net/projects/jokosher/)
LMMS (http://lmms.sourceforge.net/)
Fontographer
FontForge (http://fontforge.sourceforge.net/)
foobar2000
Amarok (http://amarok.kde.org/)
Aqualung (http://aqualung.factorial.hu/misc.html)
aTunes (http://www.atunes.org/)
Banshee (http://banshee.fm/)
Decibel Auto Player (http://decibel.silent-blade.org/)
Exaile (http://www.exaile.org/)
gtkpod (http://www.gtkpod.org/)
Listen (http://listengnome.free.fr/)
minitunes (http://flavio.tordini.org/minitunes)
Quod Libet (http://code.google.com/p/quodlibet/)
Rhythmbox (http://www.gnome.org/projects/rhythmbox/)
Forte Agent
Pan (http://pan.rebelbase.com/)
Fraps
recordMyDesktop (http://recordmydesktop.sourceforge.net/)
Yukon (https://github.com/wereHamster/yukon/)
FreeRIP
Grip (http://nostatic.org/grip/)
KAudioCreator
(https://www.kde.org/applications/multimedia/kaudiocreator/)
ripperX (http://ripperx.sourceforge.net/)
Rubyripper (http://wiki.hydrogenaudio.org/index.php?
title=Rubyripper)
Sound Juicer (http://www.burtonini.com/blog/computers/sound-
juicer)
FruityLoops
Hydrogen (http://www.hydrogen-music.org/)
Google Desktop Search
Beagle (http://beagle-project.org/)
Google Desktop (http://desktop.google.com/linux/index.html)
Google Earth
Earth 3D (http://www.earth3d.org/)
Marble (http://edu.kde.org/marble/)
Guitar Pro
DGuitar (http://dguitar.sourceforge.net/)
kguitar (http://sourceforge.net/projects/kguitar/)
TuxGuitar (http://www.tuxguitar.com.ar/home.html)
Legacy Family Tree
GRAMPS (http://gramps-project.org/)
LimeWire
FrostWire (http://www.frostwire.com/)
Meal Master
Gourmet Recipe Manager (http://grecipe-
manager.sourceforge.net/)
krecipe (http://krecipes.sourceforge.net/)
Microsoft Access
GNOME-DB (http://www.gnome-db.org/)
Kexi (http://www.kexi-project.org/)
knoda (http://www.knoda.org)
Microsoft Excel
Gnumeric (http://www.gnome.org/projects/gnumeric/)
Calligra Sheets (http://www.calligra-suite.org/sheets/)
Open Calc (http://www.openoffice.org/product/calc.html)
Libre Office Calc (https://es.libreoffice.org/descubre/calc/)
Microsoft HyperTerminal
GtkTerm (http://freshmeat.net/projects/gtkterm/)
minicom (http://alioth.debian.org/projects/minicom/)
Microsoft Internet Explorer
Chromium (http://www.chromium.org/Home)
Epiphany (http://www.gnome.org/projects/epiphany/)
Firefox (http://www.mozilla.com/firefox/)
Seamonkey (http://www.seamonkey-project.org/)
Konqueror (http://www.konqueror.org/)
Opera (http://www.opera.com/download/)
Microsoft Money
Gnofin (http://gnofin.sourceforge.net/)
GNUcash (http://www.gnucash.org/)
Grisbi (http://www.grisbi.org/)
HomeBank (http://homebank.free.fr/)
KMyMoney (http://kmymoney2.sourceforge.net/)
Skrooge (http://www.kde.org/applications/office/skrooge/)
Microsoft Office
GNOME Office (http://www.gnome.org/gnome-office/)
Calligra (http://www.calligra-suite.org/)
OpenOffice (http://www.openoffice.org/)
LibreOffice (http://es.libreoffice.org/)
Microsoft Outlook
Evolution (http://www.gnome.org/projects/evolution/)
Thunderbird (http://www.mozilla.com/thunderbird/)
Claws Mail (http://www.claws-mail.org/)
KMail (http://kontact.kde.org/kmail/)
Sylpheed (http://sylpheed.sraoss.jp/en/)
Microsoft Powerpoint
Calligra Stage (http://www.calligra-suite.org/stage/)
Open Office Impress
(http://www.openoffice.org/product/impress.html)
Libre Office Impress
(https://es.libreoffice.org/descubre/impress/)
Microsoft Project
GanttProject (http://ganttproject.sourceforge.net/)
Calligra Plan (http://www.calligra-suite.org/plan/)
OpenProj (http://openproj.org/openproj)
Planner (http://live.gnome.org/Planner)
TaskJuggler (http://www.taskjuggler.org/)
Microsoft Visio
Dia (http://www.gnome.org/projects/dia/)
Calligra Flow (http://www.calligra-suite.org/flow/)
Libre Office Draw
Microsoft Windows Media Center
Boxee (http://www.boxee.tv/)
Freevo (http://freevo.sourceforge.net/)
LinuxMCE (http://www.linuxmce.com/)
Moovida (http://www.moovida.com)
MythTV (http://www.mythtv.org)
XBMC Media Center (http://xbmc.org/)
Microsoft Word
AbiWord (http://www.abisource.com/)
Calligra Words (http://www.calligra-suite.org/words/)
Open Office Writer
(http://www.openoffice.org/product/writer.html)
Libre Office Writer
(https://es.libreoffice.org/descubre/writer/)
mIRC
BitchX (http://www.bitchx.org/)
ChatZilla! (http://chatzilla.hacksrus.com/)
irssi (http://www.irssi.org/)
Konversation (http://konversation.kde.org/)
KVIrc (http://www.kvirc.net/)
Pidgin (http://pidgin.im)
Xchat (http://www.xchat.org/)
Empathy (https://live.gnome.org/Empathy)
Mp3tag
Audio Tag Tool (http://pwp.netcabo.pt/paol/tagtool/)
Cowbell (http://more-cowbell.org/)
EasyTAG (http://easytag.sourceforge.net/)
Kid3 (http://kid3.sourceforge.net/)
Pinkytagger (http://pinkytagger.sourceforge.net/)
MS Paint
KolourPaint (http://kolourpaint.sourceforge.net/)
Pencil (http://www.pencil-animation.org/)
Pinta (http://pinta-project.com/)
TuxPaint (http://tuxpaint.org/)
Mudbox
SharpConstruct (http://sourceforge.net/projects/sharp3d/)
Nero Burning Rom
Brasero (http://perso.orange.fr/bonfire/index.htm)
GnomeBaker (http://sourceforge.net/projects/gnomebaker/)
Graveman! (http://graveman.tuxfamily.org/)
K3b (http://www.kde.org/applications/multimedia/k3b/)
X-CD-Roast (http://www.xcdroast.org/)
NetMeeting
Ekiga (http://www.ekiga.org/)
NetStumbler
Kismet (http://www.kismetwireless.net/)
SWScanner (http://www.swscanner.org/)
NewzCrawler
Akregator (http://akregator.kde.org/)
BasKet (http://basket.kde.org/)
Blam (http://www.inhaltsangabe.info/rss-reader/blam/)
Liferea (http://liferea.sourceforge.net/)
RSSOwl (http://www.rssowl.org/)
Straw (http://www.gnome.org/projects/straw/)
Notepad
gedit (http://www.gnome.org/projects/gedit/)
jEdit (http://www.jedit.org/)
Kate (http://kate-editor.org/)
leafpad (http://tarot.freeshell.org/leafpad/)
NEdit (http://www.nedit.org/)
Scribes (http://scribes.sourceforge.net/)
tpad (http://tclpad.sourceforge.net/)
OrangeCD Catalog
GWhere (http://www.gwhere.org)
Origin SciGraphica (http://scigraphica.sourceforge.net/)
Partition Magic
GParted (http://gparted.sourceforge.net/)
Palimpsest (http://library.gnome.org/users/palimpsest/)
Partimage (http://www.partimage.org/Main_Page)
QtParted (http://qtparted.sourceforge.net)
PhotoME
FotoTagger (http://sourceforge.net/projects/fototagger/)
Picasa
digiKam (http://www.digikam.org/)
F-Spot (http://f-spot.org/Main_Page)
flPhoto (http://www.easysw.com/~mike/flphoto/)
gThumb (http://live.gnome.org/gthumb/)
jBrout (http://jbrout.manatlan.com/)
KPhotoAlbum (http://www.kphotoalbum.org/)
Shotwell (http://www.yorba.org/shotwell/)
Picasa (http://picasa.google.com/)
SoulSeek
Nicotine (http://nicotine.thegraveyard.org/)
Nicotine-Plus (http://nicotine-plus.sourceforge.net/)
SoundForge
ReZound (http://rezound.sourceforge.net/)
Total Commander
GNOME Commander (http://www.nongnu.org/gcmd/)
Krusader (http://krusader.sourceforge.net/)
Midnight Commander (http://www.ibiblio.org/mc/)
Tux Commander (http://tuxcmd.sourceforge.net/)
xfe (http://roland65.free.fr/xfe/)
Traktor DJ
Mixxx (http://mixxx.sourceforge.net/)
terminatorX (http://www.terminatorx.org/)
TweetDeck
Choqok (http://choqok.gnufolks.org/)
Gwibber (http://gwibber.com/)
Pino (http://code.google.com/p/pino-twitter/)
uTorrent
qBittorrent (http://qbittorrent.sourceforge.net/)
Transmission (http://www.transmissionbt.com/)
Deluge (http://deluge-torrent.org/)
rTorrent (http://libtorrent.rakshasa.no/)
Bittornado (http://www.bittornado.com/)
Torrentflux (http://sourceforge.net/projects/tf-b4rt.berlios/)
KTorrent (http://ktorrent.pwsp.net/)
Vuze (http://www.vuze.com/)
uTorrent (http://www.utorrent.com/downloads/linux)
Videora
thin liquid film (http://thinliquidfilm.org/)
Winamp
Amarok (http://amarok.kde.org/)
Rythmbox (http://www.gnome.org/projects/rhythmbox/)
Audacious (http://audacious-media-player.org/)
Deadbeef (http://deadbeef.sourceforge.net/)
Exaile (http://www.exaile.org/)
Banshee (http://banshee-project.org/)
BMP (http://sourceforge.net/projects/beepmp)
Sonata (http://sourceforge.net/projects/sonata.berlios/)
XMMS (http://www.xmms.org/)
GMPC (http://gmpc.wikia.com/wiki/Gnome_Music_Player_Client)
Windows Media Player
Totem (http://www.gnome.org/projects/totem/)
mplayer (http://www.mplayerhq.hu/design7/news.html)
SMplayer (http://smplayer.sourceforge.net/)
KMplayer (http://kmplayer.kde.org/)
UMplayer (http://www.umplayer.com/)
VLC Player (http://www.videolan.org/vlc/)
Kaffeine (http://kaffeine.kde.org/)
xine (http://xinehq.de/)
Miro (http://www.getmiro.com/)
Moovida Media Center (http://www.moovida.com/)
Windows Movie Maker
Avidemux (http://fixounet.free.fr/avidemux/)
cinefx (http://www.cinefx.org/)
Cinelerra (http://cinelerra.org/1/)
Kdenlive (http://kdenlive.sourceforge.net/)
Kino (http://www.kinodv.org/)
LiVES (http://lives.sourceforge.net/)
Open Movie Editor (http://www.openmovieeditor.org/)
OpenShot (http://www.openshotvideo.com/)
PiTiVi (http://www.pitivi.org/wiki/Main_Page)
VideoLAN Movie Creator (http://trac.videolan.org/vlmc/)
WinIso
KIso (http://kiso.sourceforge.net/)
WinMerge
KDiff3 (http://kdiff3.sourceforge.net/)
Kile (http://kile.sourceforge.net/)
Meld (http://meld.sourceforge.net/)
xxdiff (http://furius.ca/xxdiff/)
WinTV
KWinTV (http://www.kwintv.org/)
tvtime (http://tvtime.sourceforge.net/)
xawtv (http://linux.bytesex.org/xawtv/)
XdTV (http://xawdecode.sourceforge.net/)
Zapping (http://zapping.sourceforge.net/Zapping/index.html)
WS_FTP
FireFTP (http://fireftp.mozdev.org/)
gFTP (http://gftp.seul.org/)
FileZilla (http://filezilla.sourceforge.net/)
KFTP (http://www.kftp.org/)
NCFTP (http://www.ncftp.com/ncftp/)
LFTP (http://lftp.yar.ru/)
ZoneAlarm
Firestarter (http://www.fs-security.com/)
Guarddog (http://www.simonzone.com/software/guarddog/)
Zscreen
Shutter (http://shutter-project.org/)

Servidor SSH
###################################################################
$> apt-get -y install ssh

Habilitar el acceso de root


$> vim /etc/ssh/sshd_config modificar linea 28
PermitRootLogin yes

$> service ssh restart

Cliente SSH
#######################################################################
$> ssh usuario@host (se conecta al servidor host con un usuario en
un determinado puerto)
$> ssh tuxito@192.168.20.163 (cuando no hay puerto por defecto es 22)

* Si no se puede conectar como tuxito al servidor remoto


-----------------------------------------------------------
- La clave esta mal
- No existe el usuario tuxito en el servidor remoto
- El usuario tuxito está restringido a iniciar sesión
- El servicio está caido
- El firewall local no permite la conexión

Ahora conectarse como tuxito a su propio host


$> ssh tuxito@vmX
$> id

Saber que sesiones de ssh estan abierta


----------------------------------------------------------
Ver desde que Ip están abiertas las sesiones
$> who

Saber que procesos están ejecutando las sesiones abiertas


$> w

$> ssh 192.168.20.163 (cuando sno se especifica usuario intenta conectarse


como el usuario actual)

$> ssh -p 666 root@192.168.20.163 (se conecta al servidor 192.168.20.163


como root en el puerto 666)

Ejecucion Remota de un comando


$> ssh usuario@host comando

$> ssh root@192.168.20.163 date (el date se ejecuta en el servidor remoto)


$> ssh root@192.168.20.163 poweroff (apaga el servidor remoto)

Forwarding del modo gráfico


-------------------------------------
$> ssh -X 192.168.20.163
$> kate (editor de texto)

SCP (Secure Copy)


---------------------------------------------
Sirve para copiar un archivo local a un servidor remoto o al reves
$> scp arhivolocal usuario@host:rutadedestino

Ej: archivo local a servidor remoto


-----------------------------------------
$> scp /etc/hosts root@192.168.20.163: (cuando no se pone la ruta de
destino se copia en la carpeta de
trabajo del usuario)

$> scp /etc/hosts root@192.168.20.163:/root (equivalente al anterior)

$> scp -r /etc 192.168.20.163:/tmp (copia el directorio /etc local al


servidor remoto como el usuario actual)

Ej: archivo remoto a ruta local


-----------------------------------------
$> scp root@192.168.20.163:/etc/hosts /tmp (copia el /etc/hosts remoto a
el /tmp local)
$> scp -r 192.168.20.163:/etc /tmp (copia el directorio remoto al /tmp local
$> scp -P 666 192.168.20.163:.bash_history historial
(copia el bash_history del usuario actual que esta en el servidor
remoto; usando el puerto 666 en el directorio local actual y lo renombra como
historial)

CapÃtulo 5: Atributos especiales, permisos especiales, jobs, información del


sistema, bash
##############################################################################
#############################

Atributos Especiales (ext3, etx4):


---------------------------------------

$> su -
$> vim prueba
hola mundo

$> chattr +i prueba


añade el bit de inmutabilidad, el archivo no puede ser modificado

$> lsattr prueba


lista los atributos de un archivo

$> vim prueba


hola mundo
que tal
ESC:wq!

$> chattr -i prueba


quita el bit de inmutabilidad

$> vim prueba


hola mundo
que tal
ESC:wq

$> chattr +a prueba


establece que el archivo solo se puede escribir añadiendo contenido

$> echo "esto no funciona"> prueba

$> echo "esto si funciona">> prueba


$> cat prueba

$> chattr -a prueba


quita la opcion de solo añadir

$> man chattr


para ver lista de atributos

Permisos Especiales:
----------------------------------------------------------

SUID ---> system UID, permite ejecutar un archivo con los


permisos del uid asignado.
SGID ---> system GID, permite ejecutar un archivo con los
permisos del gid asignado.

Sticky ---> bit de persistencia, solo el propietario del archivo


puede borrar el archivo o directorio.

Nivel especial: (solo root puede asignar este bit)


---------------

0 ---> ningun permiso, valor por defecto

1 ---> sticky

2 ---> sgid

3 ---> sgid+sticky

4 ---> suid

5 ---> suid+sticky

6 ---> suid+sgid

7 ---> suid+sgid+sticky

ejemplo de Sticky (Bloqueando borrado de archivos)


-------------------------------------------------

$> su -

$> mkdir /a

$> chmod 1777 /a

Dando permisos de sticky al directorio; solo root podra borrar los archivos
del directorio; aunque estos tengan permisos totales

$> echo "date" > /a/lahora

$> chmod 777 /a/lahora


le damos permisos totales al archivo lahora

$> ls -ld /a
se verifica el sticky del directorio

$> su - tuxito

Como tuxito intentar borrar lahora


$> rm /a/lahora
no puede borrar el archivo ya que el directorio con sticky
protege a los archivos, solo root puede borrar

Ejemplo de SUID (ejecutando un archivo como el dueño)


-----------------------------------------------------

$> su -
$> chmod 4755 /usr/bin/vim
Asignando el SUID al editor de texto vim

Loguearnos como usuario


$> su - tuxito

Editar archivo /etc/hosts, agregando al final, grabar con ESC:wq!


$> vim /etc/hosts
149.56.218.201 mail.aulautil.com

El usuario tuxito pudo grabar en el archivo /etc/hosts porque ejecuto vim como
si fuera root

$> su -
$> chmod 0755 /usr/bin/vim
Reestablece los permisos originales y le quita el SUID

Ejemplo de SGID (directorio de grupo)


-------------------------------------------
$> groupadd sistemas
$> mkdir /sistemas
$> chgrp sistemas /sistemas
$> chmod 2770 /sistemas
$> gpasswd -a tuxito sistemas
$> gpasswd -a alumno sistemas
$> su - tuxito
$> touch /sistemas/unarchivo
$> exit
$> su - alumno
$> touch /sistemas/otroarchivo
$> exit
$> su - root
$> touch /sistemas/nuevoarchivo
$> ls -l /sistemas ---> se observa que los archivos se crearon con grupo
sistemas

* NOTA
Se recomienda usar una máscara 0007 para los usuarios
del grupo o mìnimo una máscara 0002

Configuración de sudo (programa para ejecutar comandos como root)


-------------------------------------------------------------------
$> sudo apt-get install nmap (ejecutar como usuario tuxito)

Para que un usuario pueda ejecutar sudo tiene que estar en el /etc/sudoers
su usuario o un grupo y ser parte de el

$> su -

$> vim /etc/sudoers (archivo de configuracion de sudo)

#permiso por defecto para que root pueda ejecutar sudo


20: root ALL= (ALL:ALL) ALL

#Habilita al grupo sudo ejecute todos los comandos con permisos de root
26: %sudo ALL= (ALL:ALL) ALL
#define el alias SERVICES para comandos de servicio
31: Cmnd_Alias SERVICES = /usr/sbin/service, /bin/systemctl

#le da permiso al usuario tuxito para ejecutar comandos de servicio


32:alumno ALL=(ALL) SERVICES

ESC:wq!

Ejemplo: reiniciando la red como usuario alumno


$> su - alumno
$> sudo systemctl restart network-manager

$> su -
Cambiando de grupo principal sudo al usuario alumno para que pueda ejecutar
sudo

$> usermod -g sudo alumno


$> su - alumno
$> sudo apt-get install nmap

Ejecucion de tareas:
==============================================================================
$> yes
ejecuta proceso en primer plano ctrl+c cancela la ejecucion del comando

$> yes >/dev/null &


ejecuta el proceso en segundo plano, /dev/null es el agujero negro

$> ps axf | grep yes


muestra la ruta del comando ejecutado

$> jobs
lista los procesos ejecutados por el usuario

$> fg 1
vuelve a primer plano el proceso 1 de la lista anterior

ctrl + c -> interrumpe y cancela el proceso (trata de matar)

$> yes > /dev/null


ctrl + z ---> pone en stop el proceso (detenido, pero
no muerto)

$> fg 1
ctcl + c

$> ps ax | grep yes

$> kill -9 PID ( -9 maximo nivel de matanza )

$> nohup yes >/dev/null &


permite ejecutar un proceso a nivel sistema de tal forma que el proceso no
esta enlazado al tyy se sigue ejecutando cuando se cierra
la session
Ejemplo: Nos conectamos a un servidor a traves de ssh
---------

$> ssh 200.53.97.85

$> nohup wget -c http://ubuntu.com/ubuntu.iso &


se crea un archivo nohup.out donde se muestra el avance del wget

$> exit
aunque salga de la sesion el proceso se sigue ejecutando

Informacion del sistema:


------------------------

Información del Hardware


##############################################
Ejecutar como tuxito
$> sudo apt-get -y install lshw lshw-gtk

$> sudo lshw | less


$> sudo lshw-gtk
Dar Refresh y doble click en los nodos para que muestre información

Comandos con información especÃfica


#######################################################
$> hostname
muestra el nombre de la pc

$> uptime
tiempo total desde el ultimo arranque de la Pc

$> uname -a
muestra la version del kernel y la arquitectura del pc

$> dmesg | less


muestra los eventos log del kernel desde que se inicio la Pc

$> free
informacion de la ram disponible y usada

$> fdisk -l
muestra todas las particiones fisicas existentes (Tabla ms-dos)

$> parted -l
muestra todas las particiones fisicas existentes (Tabla GPT o ms-dos)

$> df -h
informacion de las particiones montadas y los espacios en disco usado

$> du -sH /usr


informacion del espacio en disco usado por /usr

$> du -bh /usr | less


informacion de los espacios en disco usado por /usr y subdirectorios
$> cat /proc/cpuinfo
informacion del cpu

$> cat /proc/meminfo


informacion de la memoria Ram

$> cat /proc/interrupts


informacion de la IRQS

$> lspci
lista de todos los dispositivos PCI

$> lspci | grep Ethernet


lista las tarjetas de red Ethernet

$> lspci | grep Network


lista las tarjetas de red wireless

$> lspci | grep VGA


lsita las tarjetas de video

$> lsusb
lista los dispositivos usb

$> lsmod
lista los modulos del kernel incluidos drives que esten cargados
activos en el sistema (si carga drivers de tarjeta aqui se carga y
lista)

$> who
muestra los usuarios locales y remotos que tienen una sesion activa
(muestra que usuarios estan en el sistema en el momento)

$> w
muestra los usuarios locales y remotos que tienen una sesion activa
y que comandos estan ejecutando

$> last
muestra el historial de sesiones abiertas en el sistema

$> ifconfig -a
muestra informacion delas interfaces de redes rps,mascara,mac address
muestra tarjeta de red y toda la informacion

$> route -n
muestra informacion de las pasarelas de red

$> cat /etc/resolv.conf


muestra informacion de los servidores DNS

$> netstat -nltp


muestra informacion de los puertos TCP abiertos

$> netstat -nlup


muestra los puertos UDP abiertos

$> netstat -na


muestra todas las conexiones TCP,UDP,unix, activas

$> netstat -r
igual al comando route -n

$> cat /etc/hosts


lista los nombres de pcs asociados a su ips

$> less /etc/services


lista los puertos TCP y UDP y los nombres de servicios asociados a
ellos

$> mc (explorador de archivos de modo texto)

Instalar mc en Fedora
$> apt-get -y install mc

$> mc

$> mount
Muestra los dispoditivos montados y sus opciones de montaje

$> cat /etc/fstab


Muestra la configuracion de los puntos de los montajes de
las particiones de disco

$> blkid /dev/sda1


Muestra el UUID de una partición; esa información puede ser
usado en el fstab

Capitulo6: Bash Script


##############################################################################
Ejecución de Scripts
--------------------------------------------------
$> vim /usr/bin/damelahora
#!/bin/bash (define el interprete del script)
echo "son las"
date "+%H:%M"

$> /usr/bin/damelahora (ejecuta el archivo si tiene permisos en ejecucion)

$> chmod 755 /usr/bin/damelahora (agrega permisos de ejecucion al archivo)

$> /usr/bin/damelahora (ejecuta el archvio, es necesario darle su ruta


absoluta)

$> damelahora (ejecuta un comando que se encuentra en algunos de los


directorios de $PATH)

$> echo $PATH (muestra el valor de la variable de entorno /bin:/sbin


/usr/sbin:/usr/load/bin)

Script en php
$> vim /usr/bin/damelahora.php
#!/usr/bin/env php
<?php
echo "son las ".date("H:i")."\n";

$> chmod 755 /usr/bin/damelahora.php

Instalar intérprete php


$> apt-get -y install php-cli

Establecer la zona horaria en el php.ini


$> sed -i "s/\;date.timezone =/date.timezone =America\/Lima/g"
/etc/php/7.0/cli/php.ini

Ejecutar script
$> damelahora.php

Ejecucion en modo relativo


--------------------------
$> cd /usr/bin
$> ./damelahora
/usr/bin/damelahora

$> cd
$> vim hola
#!/bin/bash
echo Hola Mundo

$> chmod 755 hola


$> ./hola

La primera lÃnea identifica al intérprete; se usa para cualquier lenguaje de


script
(perl, php, python)

Estados de la consola Valor


---------------------
Entrada estandar stdin 0
Salida estandar stdout 1
Salida de error stderr 2

- stdout a un fichero

Esto hará que la salida de un programa se escriba en un fichero.


$> ls -l
$> ls -l > ls.txt

En este caso, se creará un fichero llamado 'ls.txt' que contendrá lo que se


verÃa en la pantalla si escribiese el comando 'ls -l' y lo ejecutase.

-stdin desde un fichero


$> mysql -u root -p < data.sql

- stderr a un fichero
Esto hará que la salida stderr de un programa se escriba en un fichero.

$> ls loquesea
$> ls loquesea 2> error-ls.txt
$> cat error-ls.txt

En este caso, se creará un fichero llamado 'error-ls' que contendrá la parte


stderr de la salida que darÃa el comando 'ls loquesea'.

- stdout a stderr

Esto hará que la salida stdout de un programa se escriba en el mismo


descriptor de fichero que stderr.

$> grep -R da / 1>&2

En este caso, la parte stdout del comando se envÃa a stderr; puede observar
eso de varias maneras.

- stderr a stdout

Esto hará que la salida stderr de un programa se escriba en el mismo


descriptor de fichero que stdout.

$> tail /var/log/syslog loquesea > resultado 2>&1

Variables (para declarar no se usa dolar; una vez declarado se usa dolar)
-------------------------------------------------------------------------
$> vim holamundo
#!/bin/bash
CAD="¡Hola Mundo!"
echo $CAD

Ejecución de bash dentro de bash


---------------------------------
$> vim backup
i
#!/bin/bash
OF=/var/mi-backup-$(date +%Y%m%d).tgz
tar -zcf $OF /home/yo/

$> vim backup2


OF=/var/mi-backup-`date +%Y%m%d`.tgz
tar -zcf $OF /home/yo/

Variables predefinidas ($0 es el script $1,$2,$3 son los argumentos que se le


pasa al script)
------------------------------------------------------------------------------
----------------
$> vim fileattr
#!/bin/bash
ATRIBUTOS_SCRIPT=`/bin/ls -l $0`
echo "El usuario '$USER' ha ejecutado el script $0, en el ordenador
'$HOSTNAME'. con el argumento $1"
echo "Los atributos del script son: "
echo $ATRIBUTOS_SCRIPT

$> chmod 755 fileattr


$> ./fileattr habla

Variables locales
-----------------
$> vim varlocal
#!/bin/bash
HOLA=Hola
function hola {
local HOLA=Mundo
echo $HOLA
}

echo $HOLA
hola
echo $HOLA

Condicionales
---------------
$> vim condicionales
#!/bin/bash
if [ "petete" = "petete" ]; then
echo expresión evaluada como verdadera
fi

if [ "petete" = "petete" ]; then


echo expresión evaluada como verdadera
else
echo expresión evaluada como falsa
fi

T1="petete"
T2="peteto"
if [ "$T1" = "$T2" ]; then
echo expresión evaluada como verdadera
else
echo expresión evaluada como falsa
fi

FILE=~/.basrc

if [ -f $FILE ]; then
echo el fichero $FILE existe
else
echo fichero no encontrado
fi

# Se puede haber usado tambien if [ 'test -f $FILE']


Operadores de conparación
----------------------------------------------------
Comparación de enteros (números)

-eq
es igual a
if [ "$a" -eq "$b" ]

-ne
no es igual a / es distinto a

if [ "$a" -ne "$b" ]

-gt
es mayor que

if [ "$a" -gt "$b" ]

-ge
es mayor que o igual a

if [ "$a" -ge "$b" ]

-lt
es menor que

if [ "$a" -lt "$b" ]

-le
es menor que o igual a

if [ "$a" -le "$b" ]

<
es menor que (dentro de doble paréntesis)

(("$a" < "$b"))

<=
es menor que o igual a (dentro de doble paréntesis)

(("$a" <= "$b"))

>
es mayor que (dentro de doble paréntesis)

(("$a" > "$b"))

>=
es mayor que o igual a (dentro de doble paréntesis)

(("$a" >= "$b"))

Comparación de cadenas

=
es igual a

if [ "$a" = "$b" ]

==
es igual a
if [ "$a" == "$b" ]

Nota: Aunque es un sinónimo de = el operador == se comporta diferente


cuando se usa dentro de corchetes dobles que simples, por ejemplo:

[[ $a == z* ]] # Verdadero si $a empieza con una "z" (expresión regular


coincide).
[[ $a == "z*" ]] # Verdadero si $a es igual a z* (coincide literalmente).

[ $a == z* ] # Ocurre división de palabras.


[ "$a" == "z*" ] # Verdadero si $a es igual a z* (coincide literalmente).

!=
no es igual a / Distinto

if [ "$a" != "$b" ]

NOTA: este operador usa coincidencia de patrón dentro de doble corchete.


<
es menor que (en orden alfabético ASCII)

if [[ "$a" < "$b" ]]


if [ "$a" \< "$b" ]

Nota: el operador “<” necesita ser escapado dentro de corchetes.


>
es mayor que (en orden alfabético ASCII)

if [[ "$a" > "$b" ]]


if [ "$a" \> "$b" ]

Nota: el operador “>” necesita ser escapado dentro de corchetes.


-z
La cadena está vacÃa (nulll), tiene longitud cero.

cadena='' # Variable de longitud cero (null)


if [ -z "$String" ]
then
echo "\$String está vacÃa."
else
echo "\$String no está vacÃa."
fi

-n
cadena no está vacÃa (contiene algo)
nota: El operador -n exige que la cadena esté entre comillas entre
paréntesis. Aunque el uso son comillas puede funcionar es altamente
recomendable usar comillas.

Comparaciones lógicas

-a
Y lógico (and)

exp1 -a exp2

devuelve verdadero si ambas exp1 y exp2 son verdaderas.


-o
O lógico (or)

exp1 -o exp2

devuelve verdadero si alguna de las expresiones exp1 y exp2 son


verdaderas.

Éstos últimos operadores son similares a los operadores de Bash && (and) y
|| (or) cuando se usan con doble corchete:

[[ condition1 && condition2 ]]

$> vim bucles


#!/bin/bash
for numeros in 1 2 3 4 5 6 7 8 9
do
echo $numeros # cada numero en una linea separada
done

echo

for numeros in "1 2 3 4 5 6 7 8 9"


# Todos los número en la misma linea.
# Una lista entre comillas crea una única variable.
do
echo $numeros
done

for planet in "Mercury 36" "Venus 67" "Earth 93" "Mars 142" "Jupiter 483"
do
set -- $planet
# divide los valores y crea parámetros posicionales ($1, $2 ...)
# "--" evita problemas si $planet empieza con guiones o es una cadena
vacÃa.

echo "$1 $2,000,000 millas del sol"


#-------2 tabuladores-añade ceros al parámetro $2
done

LIMITE=10
a=1

while [ "$a" -le $LIMITE ]


do
echo -n "$a " # -n = no añade retorno de carro
let "a+=1"
done

for i in $( ls ); do
echo item: $i
done

for i in `seq 1 10`;


do
echo $i
done

CONTADOR=0
while [ $CONTADOR -lt 10 ]; do
echo El contador es $CONTADOR
# let se usa para forzar que contador sea un valor numerico
let CONTADOR=CONTADOR+1
done
echo

LIMITE=10
a=1

until [ "$a" -ge $LIMITE ]


do
echo -n "$a " # -n = no añade retorno de carro
let "a+=1"
done
echo

$> vim funciones


fun () {
if [ "$1" ] # Is parameter #1 zero length?
then
echo "Parametro #1 es \"$1\".-"
fi

return 0
}

echo "sin parametros."


fun
echo

echo "1 parametro."


fun uno
echo

Ejemplo de case y un demonio


-----------------------------
$> vim demonio
#!/bin/bash

function sanityCheck {
q=`ps -ef |grep $0 |grep -v "grep"|grep -v $$| wc -l`
if [ $q != "0" ]; then
echo "Another instance of $0 running..."
exit 1
fi
}
function start {
sanityCheck
echo "Starting daemon..."
main
}

function shutdown {
echo "Shutting down daemon..."
kill `ps -ef |grep $0|grep -v $$ |grep -v "grep"|awk '{print($2)}'`
}

function main {
{
while [ 1 ]; do
echo "Test..."
sleep 2
done
} &
}

case $1 in
"start")
start
;;
"shutdown")
shutdown
;;
*)
start
;;
esac

$> chmod 755 demonio

Ejecutar en una consola


$> ./demonio start

Ejecutar en otra consola


$> ./demonio shutdown

Breakpoints y salida de un script


---------------------------------
break es el comando que se usa para salir de un bucle
exit 0 se usa para cortar la ejecucion del script

Practica Calificada

Práctica dirigida
#######################################################
0.- Loguearse como root
1.- Listar el directorio actual
2.- Lista el archivo .bashrc de cualquier usuario
3.- Crear directorios emparentados /root/manuales/linux/centos
4.- Crear archivo vacÃo /root/manuales/linux/centos/instalacion.txt
5.- Cambiar el promtp al directorio /root/manuales
6.- Crear archivo README con el siguiente contenido
"Linux es
chevere, si
practicas buen
padawan serás"
7.- Copiar archivo README como LEEME en el mismo directorio
8.- Copiar directorio /root/manuales dentro de /usr/share
9.- Crear enlace suave /usr/share/tutos apuntando al directorio
/usr/share/manuales
10.- Lista recursivamente, ordenado por fecha el directorio /usr/share
11.- Borrar directorio manuales
12.- Ver el manual de rm
buscar la palabra directory
seguir buscando
saltar a la lÃnea 313
buscar la palabra recursive desde la primera lÃnea
salir

Practica dirigida
############################################################

0.- Listar solo los nombres de los 5 últimos usuarios creados


1.- Concatenar los archivos /etc/services y /etc/hosts en un archivo
infosistemas
2.- Listar el últimousuario creado en el sistema
3.- Buscar los archivos del usuario tuxito y que sean mayores a 100k
4.- Listar los nombres de los usuarios en mayúsculas
5.- Buscar los archivos que se llamen hosts y visualizar su contenido
6.- Buscar todos los archivos del usuario tuxito y verificar si en alguno
de ellos hay un ip
7.- Mostar la ruta de binarios, librerÃas y documentación del comando rm
8.- Mostrar en forma continua los eventos del cron
9.- Mostrar la cantidad de grupos que hay en el sistema
10.- Mostrar las lineas del 20 al 30 del archivo /etc/services incluyendo sus
números de lÃnea

Practica Dirigida
##########################################################
1.- Crear un archivo manual en vim
- Ingresar el siguiente contenido:
Linux es difÃcil, solo tienes que usarlo
- Copiar la lÃnea
- Pegar 18 veces
- Buscar y reemplazar difÃcil por fácil
- Ir a la primera lÃnea
- Grabar y salir forzadamente
2.- Crear grupo hackers
crear usuario tuxdark con grupo principal hackers y grupos adicionales
audio y video
3.- Crear un usuario luser1 con grupo luser1
crear un usuario luser2 con grupo /user2
agregar al grupo hackers los usuarios luser 1 y luser2,
4.- Crear directorio /var/www/imagenes
Cambiar de dueño (alumno) y grupo (alumno) al directorio creado, en forma
recursiva
5.- Cambiar de permisos al directorio anterior, dándole accesos totales en
forma recursiva
6.- Alterar el path para agregar una ruta del directorio bin dentro de la
carpeta de cualquier usuario
ej: /home/alumno/bin

Practica Dirigida
##########################################################
1.- Crear el siguiente script nomuere con el siguiente contenido
#!/bin/bash
while [ 1 ]; do
echo date >>/tmp/hora
sleep 5
done

Copiar en el directorio /usr/bin y darle permisos de ejecución


Ejecutar el script anterior en segundo plano desligado de la terminal.
Luego matar el proceso por su PID

2.- Crear un directorio de grupo /hackers


con grupo hackers, loguearse como usuario luser1 y crear
/hackers/prueba1
loguearse como luser2 y crear /hackers/prueba2.

3.- Crear el directorio /respaldo dentro de él crear el archivo empaquetado


backup.tgz que respalde los directorios /home y /etc

4.- Obetner información de


- Tarjetas de video
- Tarjetas de red y Wireless
- Memoria
- CPU
- Tamaño de discos
- Particiones
- Sistema de archivos de las particiones

MODULO AVANZADO
//////////////////////////////////////////////////////////////////////////////
/////

Capitulo 7: Instalación del Sistema Operativo de Servidor CentOS 7


##############################################################################
##################################

Instalación nueva de CentOS


########################################################################3
Seleccionar particiones estandar para Sistema Operativo
y LVM para particiones de datos
Seleccion de Software Minimal

Configurar la red de la instalación mÃnima


################################################################
$> su -

Ver las tarjetas de red detectadas y sus Ips (si la tuvieras)


$> ip addr show

Ver que tarjeta de red esta activa (con el cable conectado)


$> ip link show
ver la tiene en su estado "state UP"

Ej: supongamos que ens18 está activo, pasamos a configurar la tarjeta


$> vi /etc/sysconfig/network-scripts/ifcfg-ens18
DEVICE=ens18
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=149.56.218.X
PREFIX=27
GATEWAY=149.56.218.222
DNS1=8.8.8.8

Reiniciar el servicio de red


$> systemctl restart network

Verificar que no hubo errores


$> systemctl status network

Comprobar los parámetros de red y el estado

ver ips y máscaras


$> ip addr show

ver puertas de enlace


$> ip route show

ver configuración del DNS


$> cat /etc/resolv.conf

ping a la puerta de enlace


$> ping 149.56.218.222

ping a google
$> ping www.google.com

ping a 8.8.8.8
$> ping 8.8.8.8

Opcional (Configuracion de Proxy)


------------------------------------------------------------------------------
----
$> echo 'export http_proxy="http://usuario:password@IPProxy:3128"'>>
/etc/bashrc
$> echo 'export ftp_proxy=$http_proxy'>> /etc/bashrc
$> su -
$> echo $http_proxy

$> yum -y install elinks


$> echo $ftp_proxy
------------------------------------------------------------------------------
----

Opcional Registro de Red Hat Enterprise Linux


------------------------------------------------------------------------
* Nota si estamos usando Red Hat Enterprise Linux
Debemos suscribir Red Hat.
$> rhn_register
Debo poner el correo electrónico y la clave del red hat network
------------------------------------------------------------------------

Instalación de paquetes básicos para la instalación minimal


------------------------------------------------------------------------
$> yum -y install elinks net-tools wget telnet ftp vim rsync

Cambiar la forma del prompt


----------------------------------------------------------------
$> echo "export PS1='\[\033[1;32m\]\u\[\033[1;31m\]@\[\033[1;34m\]\H:\
[\033[1;35m\]\w\[\033[1;31m\]$\[\033[0m\] '" >> /etc/bashrc
$> su -

Ver la versión de CentOS instalada


--------------------------------------------
$> uname -a
$> cat /etc/redhat-release

Actualización de la distro
------------------------------------------------------------------------
$> yum -y update

Instalamos elinks para probar si hay internet y para descargar un iso


$> yum -y install elinks

Usar elinks
##############################################################################
$> elinks -eval 'set connection.ssl.cert_verify=0' https://aulautil.com/curso-
linux-avanzado
user: aulautil
pass: XXXXXX

--> adelante
<-- atras
para escribir texto "Enter" en la caja de texto
TAB para desplazarse a la otra casilla
ESC para salir de las cajas de texto
q ---> salir
Instalación a través de ISO con un repo local (util cuando no hay interneto
éste es muy lento)
##############################################################################
#######################
Descargar el ISO Everything de CentOS desde los repos oficiales
Ej.

$> curl -O http://mirrors.oit.uci.edu/centos/7.3.1611/isos/x86_64/CentOS-7-


x86_64-Everything-1611.iso

Crear carpeta
$> mkdir /centos7

Mover el iso al opt


$> mv CentOS-7-x86_64-Everything-1611.iso /opt

Montar el iso en la carpeta


$> mount -o loop /opt/CentOS-7-x86_64-Everything-1611.iso /centos7

* Nota
------------------------------------------------------------------------
Si se desea hacer permanente el punto de montaje

Agregar en la última lÃnea


$> vi /etc/fstab

/opt/CentOS-7-x86_64-Everything-1611.iso /centos7 iso9660


noauto,ro,loop=/dev/loop0 0 0

Cuando querramos usar el repositorio ejecutar


$> mount /centos7

Creamos un repositorio local


##########################################################################
$> vi /etc/yum.repos.d/local.repo
[local]
name= Local repo
baseurl=file:///centos7
gpgcheck=0

Instalar vim, herramientas de red


$> yum -y install net-tools vim telnet pciutils ftp --disablerepo=base
--disablerepo=updates

Instalar kde (solo si es indispensable tener modo gráfico)


#############################################################
$> yum -y groupinstall "X Window System" "Espacios de trabajo Plasma KDE"
--disablerepo=base --disablerepo=updates

$> reboot

Si sale mensaje de Licencia no aprobada; ejecutar


r
1
2
c
c

Loguearse como root


$> su -

Ir al modo gráfico
$> init 5

Ir al modo solo consola (modo 3)


$> init 3

Volver al modo gráfico


$> init 5

KDE en español
$> yum -y install kde-l10n-Spanish --disablerepo=base --disablerepo=updates

En System Settings --> Locale habilitar español como lenguaje predeterminado

Cerrar sesión gráfica y volver a abrir

Nota
------------------------------
Si ya no se quiere usar el repo local
$> rm -f /etc/yum.repos.d/local.repo

* Instalar epel
#############################################################################
$> yum -y install epel-release

Capitulo 8: Firewall Perimetral Endian (1ra parte)


##############################################################################
###################

Firewalls en Linux
A) El firewall de host (FIREWALL BASTION HOST) solo protege a la maquina local
o servidor
B) El firewall de red (FIREWALL PERIMETRAL) protege a la maquina local y redes
que pudieran estar detras de ella

Instalación de Endian
##############################################################################
#####

1.- Primero debemos poner al servidor centOS en una red DMZ y quitarle Ip
pública
------------------------------------------------------------------------------
-----
$> ssh root@149.56.218.201
$> vi /etc/sysconfig/network-scripts/ifcfg-ens18
DEVICE=ens18
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.3.1XX
PREFIX=24
GATEWAY=192.168.3.2XX
DNS1=8.8.8.8

$> reboot

2.- Instalar Endian 3.2.2


------------------------------------------------------------------------------
------
Select Language: English
OK
OK
Instalation .... /dev/sda YES
Enable Console serial NO
IP Address: 192.168.3.2XX
MASK: 255.255.255.0
OK
OK
Apagar Endian
Click en Mostrar detalles de la Máquina virtual (Ícono I o foco)
Click en Agregar Hardware
Red ---> Fuente de Red: Red virtual wan
Finalizar

3.- Configurar Endian Firewall Perimetral VPS


------------------------------------------------------------------------------
-----
Descargar el VNC viewer
https://www.realvnc.com/download/viewer/
Para Linux elegir Binary x64 --> Click Download VNC Viewer
Abrir terminal local
$> chmod 755 Descargas/VNC--->tab
$> Descargas/VNC-->tab
I have Read ---> OK
Con VNC acceder: 167.114.119.10:XX
Poner la clave asignada en clase

Configuración dentro del VNC


-------------------------------------------------------------
Click Derecho --> Aplicaciones --> consola --> bash
$> iceweasel

Acceder a https://192.168.3.2XX:10443/
Click e Avanzado --> Añadir excepcion

Welcome to Endian Firewall >>>


Language: Spanish Timezone: America/Lima
Aceptar Licencia GPL
Desea restaurar backup: No
Contraseña: XXXXXXXXXXXX para root y admin
Modos de Red: Enrutamiento
Ethernet estático
Seleccione la zona de red: Naranja

VERDE 192.168.3.2XX /24


Puerto 1
NARANJA 192.168.2XX.1 /24
Puerto 3
Nombre del Host: firewall
Nombre del dominio: aulautil.com
ROJO 149.56.218.2XX /27
Puerto 2
Puerta de enlace predeterminada: 149.56.218.222
DNS1 8.8.8.8
DNS2 8.8.4.4
>>>
>>>
Aceptar, Aplicar Configuración

Sale para loguearse


user: admin
clave: XXXXXXXXXXXXXX

Dar click en "No quiero actualizaciones"

Abrir el puerto 10443 para administración remota


--------------------------------------------------------------------
Ir a la pestaña Firewall
Acceso al Sistema
Añadir una nueva regla de Acceso al Sistema
Ir a Protocolo: TCP
Puerto de Destino 10443
Registrar todos los paquetes aceptados (check)
Observación: "Acceso al panel Endian"
Click en Añadir Regla --> Aplicar

Probar desde la laptop acceder a la Ip pública del Endian


https://149.56.218.2XX:10443

Cambiar las redes LAN y DMZ


##############################################################################
###############
https://149.56.218.2XX:10443
No quiero actualizaciones

Ir a sistema --> configuración de red


1) Enrutamiento, Ethernet Estático >>>
2) Seleccione Zona de red: Naranja
3)
VERDE 192.168.2XX.1 /24
Puerto 3
NARANJA 192.168.3.2XX /24
Puerto 1
Nombre del Host: firewall
Nombre del dominio: aulautil.com
4)
ROJO 149.56.218.2XX /27
Puerto 2
Puerta de enlace predeterminada: 149.56.218.222
5) >>>
6) >>>
7) Aceptar y aplicar configuración
Configuración del servidor Linux en DMZ
============================================================================
Ping a la puerta de enlace (endian)
$> ping 192.168.3.2XX

Ping a 8.8.8.8
$> ping 8.8.8.8

En el Endian dar salida a internet a el servidor de DMZ


----------------------------------------------------------------------------
Firewall --> Tráfico de Salida
Añadir Regla
Origen: 192.168.3.101 (servidor CentOS)
Destino: Rojo
Servicio: Cualquiera Protocolo Cualquiera
Permitir con IP:
Obeservacion: Salida libre Servidor Web de DMZ
Registrar todos los paquetes aceptados (check)
Crear Regla
Aplicar

En el servidor Linux instalar un paquete


$> yum -y install wget vim

Natear el servicio SSH hacia el servidor CentOS en DMZ


==============================================================================
Entrar a Endian Ir a Firewall--> Redirección de puertos
Añadir nueva reglas de reenvÃo de puertos
Direccion IP de Entrada: 149.56.218.2XX
Servicio Puerto de Entrada
Protocolo: TCP Puerto/Rango: 22
Traducir a
Insertar IP: 192.168.3.1XX
Puerto/Rango: 22
Log (check)
Observación: nat ssh servidor Web
Crear Regla --> Aplicar

Probar la conexion remota desde la laptop


==============================================================================
$> ssh root@149.56.218.2XX

CapÃtulo 9: Administración de CentOS,


##############################################################################
###############

Configuración de Red, Hostname, niveles de arranque, servicios, Grub2, rpm y


yum
##############################################################################
###

Configuracion de Red en CentOS Linux


#########################################################################
Del capÃtulo intermedio 1, en instalación mÃnima instalar paquetes
$> yum -y install net-tools pciutils vim elinks telnet psmisc

Procedimiento General de Configuracion de la Tarjeta de Red


#########################################################################

Para configurar la red debemos tener en consideracion lo siguiente:

-Verificar la conexion fisica cable ( estado linkeado)


-Configurar tarjeta de red
-Cargar driver tarjeta, si el kernel no reconocio la tarjeta, verificar el
modelo de
la misma, instalar y probar de nuevo la configuración de la tarjeta de red.

Configurar parametros de la tarjeta de red


-IP
-Mascara de red
-Pasarela
-Configurar los dns server
-ping a la pasarela
-ping a google

Instalar Driver de Tarjeta si el kernel no lo reconocio


##############################################################################
#
ej
$> lspci | grep Ethernet
04:00.0 Ethernet controller: VIA Technologies, Inc. VT6105/VT6106S [Rhine-III]
(rev 8b)

La tarjeta VIA VT6105 no esta soportada en CentOS 7


En otro equipo con internet buscamos en google
Centos 7 VT6105

Ubicaremos un rpm
ftp://ftp.pbone.net/mirror/elrepo.org/elrepo/el7/x86_64/RPMS/kmod-via-rhine-
1.5.1-1.el7.elrepo.x86_64.rpm

Descargamos el rpm y lo instalamos en el servidor donde no se reconce la


tarjeta
$> rpm -Uhv kmod-via-rhine-1.5.1-1.el7.elrepo.x86_64.rpm

Cargamos el módulo del kernel para via


$> modprobe via-rhine

Verificamos si cargó el módulo del kernel


$> lsmod | grep via

Configuramos la tarjeta de red


$> nmtui

Configuracion General de la Tarjeta de Red.


##############################################################################
#######
Listar todas las interfaces
$> ifconfig -a

ó

$> nmtui

ó

$> ip addr show

Verficar si las interfaces de red (ens18, eth1, etc) estan linkeando, los
nombres de las tarjetas
------------------------------------------------------------------------------
----------------
se ven con el comando anterior
$> mii-tool ens18
$> ethtool ens18
$> ip link show
Ver tarjeta con state UP

Configurar manualmente la Ip, la máscara y puerta de enlace


##########################################################################
Habilitar una interfaz
------------------------------
$> ifconfig ens18 up
ó
$> ip link set ens18 up

Deshabilitar una interfaz


-----------------------------
$> ifconfig ens18 down
ó
$> ip link set ens18 down

Definir una IP
----------------------------------------
$> ifconfig ens18 192.168.3.X netmask 255.255.255.0
ó
$> ip addr add 192.168.3.X/24 dev ens18

Borrar una ip
-----------------------------------------
$> ip addr del 192.168.3.X/24 dev ens18

Ver las puertas de enlace


-------------------------------------------
$> route -n
ó
$> netstat -r
ó
$> ip route show
ó
$> ip route list

Definir la puerta de enlace por defecto


----------------------------------------------
$> route add default gw 192.168.3.1 ens18
ó
$> ip route add 192.168.3.0/24 dev ens18
$> ip route add default via 192.168.3.1

Borrar la puerta de enlace por defecto


---------------------------------------------
$> route del default gw 192.168.3.1 ens18
ó
$> ip route delete 192.168.3.0/24 dev ens18

Configurando dns server


----------------------------
$> echo "search cloudperu.pe
nameserver 8.8.8.8" > /etc/resolv.conf
ó
$> vim /etc/resolv.conf
search cloudperu.pe
nameserver 8.8.8.8

Pruebas de configuración
#################################################
Haciendo ping a la pasarela
$> ping 192.168.3.1

Haciendo ping a Google


$> ping www.google.com

Mostrando las pasarelas de red, incluido la por defecto


$> route -n

Instalar el comando traceroute


$> yum -y install traceroute

$> ping 8.8.8.8


$> traceroute -n 8.8.8.8

Rutas estáticas
###################################################################
Para agregar mas rutas de redes (ej, ruteando un radio enlace)
---------------------------------------------------------------------
$> route add -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.3.1 dev ens18
ó
$> ip route add 192.168.5.0/24 via 192.168.3.1 dev ens18

Borrar una ruta estática


---------------------------------------------------------------
$> route del -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.3.1 dev ens18
ó
$> ip route del 192.168.5.0/24 via 192.168.3.1 dev ens18

Estos comandos son validos para la sesion actual si reiniciamos la PC se


perdera la
configuracion de red, para que se vuelva a configurar las interfaces se tienen
que
incluir en el archivo que se ejecuta cada vez que se reinicia la PC
$>vim /etc/rc.local

Configuracion de la Tarjeta de Red por archivos para CentOS.


------------------------------------------------------------
Tarjeta Ethernet
$> vim /etc/sysconfig/network-scripts/ifcfg-ens18
DEVICE=ens18
TYPE=Ethernet
BOOTPROTO=statice
IPV6INIT=no
NAME=ens18
ONBOOT=yes
IPADDR=192.168.3.100
PREFIX=24
GATEWAY=192.168.3.1
DNS1=8.8.8.8
DOMAIN=aulautil.com

TYPE = tipo de interfaz (Ethernet, Bridge, Wireless)


BOOTPROTO = tipo de configuración: estática (none, static)
dinámica (dhcp)
NAME = nombre de la interfaz (ej: eno1, ens18)
IPADDR0 = IP primario de la tarjeta ( ej: 192.168.3.100)
PREFIX0 = máscara corta de la ip primaria (24)
GATEWAY0= puerta de enlace de la ip primaria (ej: 192.168.3.1)
DNS1 = servidor de nombres primario (ej: 8.8.8.8)
HWADDR = Mac address (ej: 00:1E:90:BB:EA:C7)
DOMAIN = Dominio principal del host

Configurando el nombre del hostname y resolución local de nombres


===================================================================
Ver el nombre actual del equipo
$> hostnamectl
ó
$> hostname

Ver detalle completo del hostname


$> hostnamectl status

Configurar el nombre del host


----------------------------------------
$> hostnamectl set-hostname vpsX.aulautil.com

Cerrar la sesión y volver a iniciar la sesión


$> exit
$> su -
$> hostname

* En CentOS 6
----------------------------------------
$> vim /etc/sysconfig/network
HOSTNAME=vpsX.aulautil.com

$> hostname vpsX.aulautil.com


$> exit
$> su -
$> hostname
Configurar la resolución local de nombres
################################################33

Ej: resolviendo la ip local, una ip de la red y un dominio ficticio con


nuestra propia ip

$> vim /etc/hosts


127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.3.X vpsX.aulautil.com vpsX
192.168.3.X www.mocosoft.com

Pruebas
---------------
$> ping vpsX (SQDN)
$> ping vpsX.aulautil.com (FQDN)
$> ping www.mocosoft.com (Dominio Ficticio)

Nota:
#########################################################
Para resolver los nombre de host a nivel de red se usa un servidor DNS
Bind ó dnsmasq

* Niveles de Arranque (Runlevels)


########################################################

0 Apagar
1 Prueba de Fallos
2 Prueba de Fallos con red
3 consola estandar
4 consola estandar
5 consola estandar + modo grafico
6 reiniciar

Cambiar de nivel de arranque


---------------------------------------
$> init 3
ó
$> telinit 3

$> init 5

Modo de arranque por defecto


#######################################################

Obtener el modo de arranque por defecto


#########################################
CentOS 7
----------------------------------------
$> systemctl get-default

CentOS 6
$> cat /etc/inittab (ver última lÃnea)
Cambiar el modo de arranque por defecto
################################################
CentOS 7
----------------------------------------

Nivel 3 (Server)
------------------------------------------------
$> rm -f /etc/systemd/system/default.target
$> ln -s /usr/lib/systemd/system/multi-user.target
/etc/systemd/system/default.target

Nivel 5 (Escritorio)
----------------------------------------------------
$> rm -f /etc/systemd/system/default.target
$> ln -sf /lib/systemd/system/runlevel5.target
/etc/systemd/system/default.target
ó
$> ln -sf /lib/systemd/system/graphical.target
/etc/systemd/system/default.target

CentOS 6
----------------------------------------------------
$> vim /etc/inittab (modificar la última lÃnea)
id:3:initdefault:

Arranque de emergencia (modo 1)


################################################################
CentOS 7
##############################################
Reiniciar el servidor
cuando salga grub presionar ESC
cuando sale la linea CentOS presionar e
ir a la linea donde dice
linux16 /boot/vmlinuz......
borrar ro rhgb quiet
y poner en su reemplazo rw init=/bin/bash
y presionar Ctrl +x

Cambiar la clave de root


--------------------------------------
Ejecutar

$> passwd (le cambia la clave a root)


$> touch /.autorelabel
$> exec /sbin/init

Verificar Errores del raiz


----------------------------
Entrar en arranque de emergencia
y Ejecutar
$> df -h (muestra la partición raiz)
$> umount / (desmonta el raiz)

Reparar errores en ext4


$> /sbin/fsck.ext4 /dev/sda1
Reparar errores en xfs
$> /sbin/xfs_repair -d /dev/sda1

CentOS 6
##############################################
Reiniciar el servidor
cuando salga grub presionar
ESC
cuando sale la linea CentOS presionar e
ir a la linea donde dice kernel ..... y presionar e
escribir linux 1 luego Enter
y presiona b

Cambiar la contraseña de root


--------------------------------
$> passwd
$> reboot

Verificar Errores del raiz


----------------------------
$> umount /
$> fsck.ext4 /dev/sda1

* Grub 2 (CentOS 7)
#####################################################
Visualizar el archivo de configuración

$> vim /boot/grub2/grub.cfg


--------------------------------------------------
.
.
.
.
menuentry 'CentOS Linux, with Linux 3.10.0-123.el7.x86_64' --class centos
--class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option
'gnulinux-3.10.0-123.el7.x86_64-advanced-030b1c1d-0d43-4b00-8be1-f05238cfc8ce'
{
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2
--hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 --hint='hd0,msdos2'
030b1c1d-0d43-4b00-8be1-f05238cfc8ce
else
search --no-floppy --fs-uuid --set=root 030b1c1d-0d43-4b00-8be1-
f05238cfc8ce
fi
linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=030b1c1d-0d43-
4b00-8be1-f05238cfc8ce ro nomodeset vconsole.keymap=la-latin1
vconsole.font=latarcyrheb-sun16 crashkernel=auto rhgb quiet LANG=es_PE.UTF-8
initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
}

.
.
.
.

Menuentry ---> nombre del Sistema Operativo


set root='hd0,msdos2' ---> indica en que partición esta
la imagen del kernel
hd0 = /dev/sda
hd1 = /dev/sdb
msdos2 = partición 2 del disco
de tabla de particion DOS /dev/sda2
linux16 ---> Indica el archivo del kernel y las opciones
que se le pasan al kernel en el arranque
root=UUID=030b1c1d-0d43-4b00-8be1-f05238cfc8ce
--> indica cual es la particion raiz
UUID se calcula $> blkid /dev/sda2
initrd16 ---> Inicia la memoria virtual del arranque

Instalar o reintalar grub2


############################################3
$> grub2-install /dev/sda

Generar una nueva configuración de grub con valores por defecto de los S.O.
instalados
$> grub2-mkconfig -o /boot/grub2/grub.cfg

Listar todas las entradas de menú de grub2


$> grep ^menuentry /boot/grub2/grub.cfg | cut -d "'" -f2

Definir la entrada de menú por defecto


$> grub2-set-default "CentOS release 6.5 (Final)"

Comprobar la entrada por defecto


$> grub2-editenv list

Grub2 en CentOS/fedora ( consola de grub)


##############################################################################
####################
Encontrando el temido indicador de arranque de GRUB 2

Si no está configurado correctamente, GRUB 2 puede fallar al cargar y


posteriormente encontrarse con un indicador de arranque. Para solucionar este
problema, haga lo siguiente:

1. Listar las unidades que observa GRUB 2:

grub2> ls
2. El resultado de una tabla de particiones DOS /dev/sda con tres particiones
deberÃa ser algo parecido a esto:
(hd0) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)
3. Mientras que el resultado de una tabla de particiones gpt /dev/sda con
cuatro particiones serÃa similar a la siguiente:

(hd0) (hd0,gpt4) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1)


4. Con esta información ahora puede examinar cada partición de la unidad y
localizar los archivos vmlinuz e initramfs:

ls (hd0,1)/
Esto mostrará una lista de los archivos en /dev/sda1. Si esta partición
contiene /boot, la salida mostrará el nombre completo de vmlinuz e initramfs.

5. Conociendo la ubicación y el nombre completo de vmlinuz e initramfs ya


puede arrancar el sistema.

5a. Defina su partición raÃz:

grub> set root=(hd0,1)


5b. Defina el kernel que desea utilizar:

grub> linux (hd0,1)/vmlinuz-3.0.0-1.fc16.i686 root=/dev/sda3 rhgb quiet


selinux=0
# NOTE : add other kernel args if you have need of them
# NOTE : change the numbers to match your system
5c. Defina el archivo initrd a utilizar:

grub> initrd (hd0,1)/initramfs-3.0.0-1.fc16.i686.img


# NOTE : change the numbers to match your system
5d. Instruir a GRUB 2 para que arranque los archivos seleccionados:

grub> boot
6. Después del arranque, abra un terminal.

7. Ejecute el comando grub2-mkconfig para volver a crear el archivo grub.cfg


que grub2 necesitó para arrancar su sistema:

grub2-mkconfig -o /boot/grub2/grub.cfg
8. Ejecute el comando grub2-install para instalar grub2 en el disco duro y
hacer uso de su configuración:

grub2-install --boot-directory=/boot /dev/sda


# Note: your drive may have another device name. Check for it with mount
command output.

* Grub 1 (CentOS 6)
#####################################################
Fichero de grub
$> /etc/grub.conf
ó
$> /boot/grub/grub.conf
ó
$> /boot/grub/menu.lst
Ej:

$> vim /boot/grub/grub.conf


------------------------------------------------------------------------------
------------
default=0 ----> indica que title arranca por defeto
timeout=5 ----> tiempo de espera antes del arranque automatico
splashimage=(hd0,6)/boot/grub/splash.xpm.gz
#hiddenmenu ----> oculta el menu, comentar si se quiere ver las opciones
del grub
title Red Hat Enterprise Linux (2.6.32-279.el6.x86_64) ----> posicion 0
root (hd0,6) -------------> indica que particion tiene la imagen
del kernel (disco 1, particion 7 ej: /dev/sda7)
kernel /boot/vmlinuz-2.6.32-279.el6.x86_64 ro root=UUID=81b14a1f-693e-
4979-918c-43ae03fcc3fe rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=es rd_NO_MD
SYSFONT=latarcyrheb-sun16 LANG=es_ES.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
radeon.modeset=0 ------> Opciones del kernel
initrd /boot/initramfs-2.6.32-279.el6.x86_64.img
------> Imagen del kernel
title CentOS (2.6.32-279.el6.x86_64) ----> posicion 1
root (hd0,8)
kernel /boot/vmlinuz-2.6.32-279.el6.x86_64 ro root=UUID=8179a730-56c7-
4aa9-9ec7-a62e5fdd4d84 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=es rd_NO_MD
SYSFONT=latarcyrheb-sun16 LANG=es_ES.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
radeon.modeset=0
initrd /boot/initramfs-2.6.32-279.el6.x86_64.img
title Other ----> posicion 2
rootnoverify (hd0,0)
chainloader +1
------------------------------------------------------------------------------
------------

* Reinstalación de Grub
############################################################################

Verificando los discos


$> grub-install /dev/sda --recheck

Instalando grub
$> grub-install /dev/sda

Gestión de Servicios
################################################

CentOS 6
############################################
Listar todos los servicios
$> chkconfig --list

Ver los scripts de inicio de los servicios


$> ls -l /etc/init.d

Ver todos los servicios activos


$> chkconfig --list | grep :activo | less (si esta en ingles :on)

Ver todos los servicios activos en modo 3


$> chkconfig --list |grep 3:activo | cut -d":" -f1

Ver el estado de arranque de un servicio


$> chkconfig --list | grep rpcbind
ó
$> chkconfig --list rpcbind

Deshabilitar el arranque automatico de un servicio


$> chkconfig rpcbind off

Habilitar el arranque automatico de un servicio


$> chkconfig rpcbind on

Iniciar un servicio
$> service rpcbind start
$> /etc/init.d/rpcbind start

Detener un servicio
$> service rpcbind stop

Reiniciar un servicio
$> service rpcbind restart

Deshabilitar servicios innecesarios


------------------------------------
Ver puertos TCP abiertos
$> netstat -nltp

Ver puertos UDP abiertos


$> netstat -nlup

Deshabilitar NFS
$> service rpcbind stop
$> chkconfig rpcbind off
$> service nfslock stop
$> chkconfig nfslock off

Deshabilitar CUPS
$> service cups stop
$> chkconfig cups off

$> netstat -nltp

CentOS 7
#######################################
Listar todos los procesos del arranque
$> systemctl list-units

Listar los servicios activos


$> systemctl list-units --type=service

Listar todos los servicios en general


$> ls /lib/systemd/system/*.service /etc/systemd/system/*.service
Verificar en que runlevels se ejecuta un servicio
Ej: sshd
$> ls /etc/systemd/system/*wants/sshd.service

Deshabilitar un servicio
$> systemctl disable sshd.service

Habilitar un servicio (arranque automático)


$> systemctl enable sshd.service

Iniciar un servicio
$> systemctl start sshd.service

Detener un servicio
$> systemctl stop sshd.service

Reiniciar un servicio
$> systemctl restart sshd.service

Volver a leer la configuracion del servicio


$> systemctl reload sshd.service

Saber el estado del servicio


$> systemctl status sshd.service

Deshabilitar servicios innecesarios


---------------------------------------------
Ver puertos TCP abiertos
$> netstat -nltp

Ver puertos UDP abiertos


$> netstat -nlup

Deshabilitamos
------------------
$> systemctl stop rpcbind.socket
$> systemctl stop rpcbind.service
$> systemctl disable rpcbind.socket
$> systemctl disable rpcbind.service

Ejemplo quiero matar cups


Saber el nombre del servicio
$> systemctl list-units --type=service|grep cups

$> systemctl stop cups.path


$> systemctl stop cups.socket
$> systemctl stop cups.service
$> systemctl disable cups.path
$> systemctl disable cups.socket
$> systemctl disable cups.service

$> netstat -nltp

RPM (sistema de Paquetes)


################################################################
Descargar un rpm de internet, ej: OpenVPN
$> wget ftp://195.220.108.108/linux/epel/7/x86_64/o/openvpn-2.4.3-
1.el7.x86_64.rpm

Obtener informacion del paquete


$> rpm -pqi openvpn-2.4.3-1.el7.x86_64.rpm

Obtener lista de archivos incluidos en el paquete


$> rpm -pql openvpn-2.4.3-1.el7.x86_64.rpm

Instalar paquete
$> rpm -ihv openvpn-2.4.3-1.el7.x86_64.rpm

Instalar y/o Actualizar paquete


$> rpm -Uhv openvpn-2.4.3-1.el7.x86_64.rpm

Nota:
----------------------------------------
se puede instalar con YUM el rpm y resuelve las depencias y las instala

$> yum -y install epel-release


$> yum -y install openvpn-2.4.3-1.el7.x86_64.rpm

Desinstalar paquete
$> rpm -e openvpn

Listar paquetes instalados


$> rpm -qa

Saber si un paquete esta instalado


$> rpm -qa | grep kernel

Listar info de un paquete instalado


$> rpm -qi vim-enhanced

Listar archivos de un paquete instalado


$> rpm -ql vim-enhanced

Saber en que paquete vino incluido un archivo


$> rpm -qf /usr/bin/vim

YUM
------------------------------------------------------------------------------
--------
Lista los repositorios configurados (archivos .repo)
$> ls -l /etc/yum.repos.d

configurar repositorios de YUM


$> cd /etc/yum.repos.d

Ver la configuración por defecto del repositorio de CentOS


$> vim CentOS-Base.repo
------------------------------------------------------------------
[base] ====================>>> Nombre del repositorio
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?
release=$releasever&arch=$basearch&repo=os ==================>>>>> Lista
de los mirrors
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1 =================>>>>> Comprobar firma digital del repo
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ===> archivo de la clave
publica de la firma digital

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?
release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful


[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?
release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages


[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?
release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

* Deshabilitar un repositorio, ej: rpmforge


################################################
$> vim /etc/yum.repos.d/rpmforge.repo
[rpmforge]
.
.
.
enabled=0
.
.

Instalar un paquete desde los repositorios


$> yum -y install nmap

Buscar paquetes
$> yum search nmap

Obtener informaciòn de un paquete


$> yum info nmap
Verificar que repositorios proveen un paquete; asà como sus versiones
anteriores
$> yum provides openvpn

Desinstalar un paquete
$> yum remove nmap

Desinstalar un paquete, incluido archivos de configuración


$> yum erase nmap

Nota: Aveces yum se bloquea porque hay un servicio llamado yum-updatesd


o PackageKit; que busca si hay actualizaciones de paquetes y esto proceso
bloquea yum

Sale un mensaje similar a:


----------------------------------------------------------------------
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: PackageKit
Memory : 44 M RSS (1.3 GB VSZ)
Started: Sun Jan 26 11:21:58 2014 - 00:10 ago
State : Sleeping, pid: 3954
------------------------------------------------------------------

Solucion: matar el proceso con el pid indicado


$> kill -9 3954

* Opciones de grupos de paquetes

Listas los grupos de paquetes


$> yum grouplist

Obtner informacion de un grupo


$> yum groupinfo Milkymist

Instalar un grupo de paquete


$> yum -y groupinstall "Eclipse"

Desinstalar un paquete, borrando archivos de configuracion


$> yum erase nmap

Actualizar un paquete
$> yum update alsa-utils

Actualizar todos los paquetes (No ejecutar)


$> yum update

* Repositorios Adicionales en YUM


#########################################################################
EPEL (Repositorio comunitario mantenido por Fedora y CentOS)
$> yum -y install epel-release

ELREPO (contiene drivers adicionales de video, wifi y Ethernet)


$> rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
$> rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

NUXDESKTOP (programas adicionales para mejorar el escritorio CentOS 7)


$> yum -y install epel-release && rpm -Uvh
http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-
5.el7.nux.noarch.rpm

WEBTATIC (php en sus últimas versiones)


$> rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-
7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

Hacer un downgrade de un paquete


-------------------------------------------
Primero verifico las versiones anteriores del paquete
Ej: openvpn
$> yum provides openvpn

Hacer un downgrade a la versión inmediata anterior


$> yum downgrade openvpn

Hacen un downgrade a una aversión anterior especÃfica


$> yum downgrade openvpn-2.0.9-1.el6.rf.x86_64

* Borrar cache de yum


$> yum clean headers
$> yum clean packages

Crear paquetes rpms


http://fedoraproject.org/wiki/How_to_create_an_RPM_package/es

Crear un repositorio con tus propias firmas


http://linuxsysconfig.com/2013/04/create-a-yum-repository-with-custom-gpg-
signed-packages/

Colecciones de Software
##########################################################
Existe un proyecto que permite instalar versiones actuales de
programas con sus librerÃas dependientes dentro de /opt

Esto como alternativa a compilar programas y sin que haga conflicto


con los paquetes base de la distribución

https://www.softwarecollections.org

Ejemplo Instalar Ruby 2.3


#########################################################
$> yum -y install epel-release

# 1. Install a package with repository for your system:


# On CentOS, install package centos-release-scl available in CentOS
repository:
$> yum -y install centos-release-scl

# On RHEL, enable RHSCL repository for you system:


$> yum-config-manager --enable rhel-server-rhscl-7-rpms
# 2. Install the collection:
$> yum -y install rh-ruby23

# 3. Start using software collections:


$> scl enable rh-ruby23 bash
The last command runs the Bash shell in the environment with rh-ruby23
Software Collection enabled, which means that at this point you are able to
use ruby just as a normal application. Some examples of available commands
follow:

$> ruby --version


$> cd
$> gem install activeresource
$> irb
Ctrl+d
quit

Saber los paquetes ruby instalados


$> rpm -qa | grep ruby

CapÃtulo 10: Virtualización tradicional (KVM) y ligera (docker)


#############################################################

Host Anfitrion: Host donde se instala la tecnologÃa de virtualización


(comunmente hypervisor)
--------------

Host Invitado (Guest): Máquina Virtual que se crea desde el Host Anfitrion
----------------------

TecnologÃas de Virtualización
#############################################################

Virtualización Completa
---------------------------------------------
KVM -----> Desarrollado por RedHat
Xen -----> Desarrollado Citrix
VirtualBox -----> Desarrollado por Oracle
VMWare(ESX) -----> Desarrollado por VMWare

Vritualización Ligera
----------------------------------------------
OpenVZ -----> Virtualización a nivel de núcleo con uso de templates
Docker -----> Virtualización a nivel de núcleo con uso de contenedores

Virtualización Completa: KVM


############################################################
KVM usa la funcionalidad de virtualización nativa de servidores
y el host anfitrion sólo puede ser instalado en un S.O. de 64 bits.
Las máquinas virtuales sobre KVM puede ser 32 o 64 bits (Windows o
Linux).

Verificar que procesador tenemos y si esta habilitado la virtualizacion nativa


en el bÃos
------------------------------------------------------------------------------
-----------
vmx (intel)
svm (amd)

$> egrep --color "(svm|vmx)" /proc/cpuinfo

Actualizar la distro
##############################################################

CentOS 7
==================================================
$> yum -y update
$> reboot

Ubuntu
================================================
$> sudo apt-get -y update
$> sudo apt-get -y dist-upgrade
$> reboot

Reiniciar con el kernel actualizado (por defecto)

Herramientas para administrar Kvm


=====================================
- Virt Manager (desktop)
- Wok, Kimchi (Web)
http://kimchi-project.github.io/wok/downloads/

Instalar kvm y virt-manager


-----------------------------------------------------------------

CentOS 7
==================================================================
$> yum -y install kvm virt-manager libvirt qemu-kvm qemu-kvm-tools

Ubuntu 16.04
==============================================================================
$> sudo apt-get update
$> sudo apt-get install libvirt-bin qemu-kvm virt-manager virtinst virt-viewer

Cargar los módulos de kvm


--------------------------------------------------
$> modprobe kvm
$> modprobe kvm_intel (si el procesador es intel)
$> modprobe kvm_amd (si el procesaror es amd)

Verificar si esta cargado los módulos de kvm


$> lsmod| grep kvm

Tiene que listar kvm y (kvm_intel o kvm_amd)

Reiniciamos el servicio libvirtd (servicio que gestiona las máquinas


virtuales)
CentOS 7
=====================================================================
$> systemctl restart libvirtd
$> systemctl enable libvirtd

Ubuntu 16.04
=====================================================================
$> sudo systemctl restart libvirt-bin
$> sudo systemctl enable libvirt-bin

Abrir virt manager


Ubuntu
$> sudo virt-manager

CentOS 7
$> virt-manager

Configuración de una máquina virtual Endian Local


##############################################################################
#######

1.- Crear Nueva red local WAN con Virt-manager


==============================================================================
En nuestra laptop abrir virt-manager
Editar --> detalles de la conexion, click en el icono +

Nombre de la red: wan Adelante


Red: 192.168.10.0/24
Habilitar DHCP: Inicio: 192.168.10.128 Fin: 192.168.10.254

Adelante
Adelante
Conectado a una red FÃsica
ReenvÃo a la red fÃsica Destino:cualquier dispositivo Modo: NAT
Nombre de dominio DNS: wan
Finalizar

2.- Descargar e Instalar Endian 3.2.2 en la laptop


=============================================================================
En su laptop
$> wget https://netcologne.dl.sourceforge.net/project/efw/Development/EFW-
3.2.2/efw_community-x64_3.2.2_softwarex86-64_20161122054246.iso

Instalar Endian 3.2.2


----------------------------------------------------------------------------
Virt Manager ---> Archivo-> Nueva Máquina Virtual
Medio de Instalación Local
Utilizar Imagen ISO, Click en Explorar
Explorar Localmente ---> Buscar ISO de Endian y Abrir
Adelante
Memoria: 1024 CPU:1
Tamaño del disco: 8GB
Nombre: Firewall
Selección de Red: red virtual default (NAT)
Select Language: English
OK
OK
Instalation .... /dev/sda YES
Enable Console serial NO
IP Address: 192.168.122.254
MASK: 255.255.255.0
OK
OK
Apagar Endian
Click en Mostrar detalles de la Máquina virtual (Ícono I o foco)
Click en Agregar Hardware
Red ---> Fuente de Red: Red virtual wan
Finalizar
Prender la máquina virtual Endian

3.- Configurar Endian Firewall Local


=============================================================================
Acceder a https://192.168.122.254:10443/
Welcome to Endian Firewall >>>
Language: Spanish Timezone: America/Lima
Aceptar Licencia
Desea restaurar backup: No
Contraseña: Lolcito.123 para root y admin
Modos de Red: Enrutamiento
Ethernet estático
Naranja: Ninguno
VERDE 192.168.122.254 /24
Puerto 1
Nombre del Host: firewall
Nombre del dominio: aulautil.local
ROJO 192.168.10.2 /24
Puerto 2
Puerta de enlace predeterminada: 192.168.10.1
DNS1 8.8.8.8
DNS2 8.8.4.4
>>>
Aceptar, Aplicar Configuración

Creación de Máquina virtual CentOS


###############################################################
Ejecutamos virt-manager y creamos maquinas virtuales
$> virt-manager

Nota: si sale error ejecutar virt-manager como usuario tuxito

descargamos el iso de CentOS 7 de internet lo copiamos en un USB


CentOS-7.0-1511-x86_64-Minimal.iso de centos.org

$> wget http://mirrors.unifiedlayer.com/centos/7.2.1511/isos/x86_64/CentOS-7-


x86_64-Minimal-1511.iso

* Instalar NTFS en CentOS 7 para que detecte USB


======================================================================
$> yum -y install epel-release
$> yum -y install ntfs-3g ntfsprogs
====================================================================
Creamos una máquina virtual de CentOS 7
=========================================================================
1.- Click derecho en localhost --> Conectar (se conecta al hipervisor)
2.- Click derecho en localhost --> Nuevo
3.-
Etapa 1 de 5
Nombre: Server
Medio de Instalación Local
Adelante
4.-
Etapa 2 de 5
Utilizar Image ISO
Click en Explorar
Exploracion Local ---> ir a /home/tuxito/Descargas y seleccionar ISO
Tipo de OS: Linux
Versión: Red Hat Enterprise Linux 7
Adelante
5.-
Etapa 3 de 5
Memoria RAM: 1024
CPU: 1
Adelante
6.-
Etapa 4 de 5
Habilitar almacenamiento para esta Máquina Virtual
Crear una imagen en el disco duro de la computadora
10 GB
Alojar en este momento la totalidad del disco
Adelante
7.-
Etapa 5 de 5
Opciones Avanzadas:
Red Virtual 'default' NAT
Tipo de Virtualización: kvm
Arquitectura: x86_64
Finalizar
8- Install CentOS 7

Nombre: Server1
Medio de Instalación Local

9.- Instalar CentOS y Reiniciar


/ ---> 9G
swap ---> 1G

* Notas
###############################################################

Si sale un error de permiso denegado al crear la VM


-------------------------------------------------------------
Ejecutar
$> chown root.kvm /dev/kvm

$> vim /etc/libvirt/qemu.conf (descomentar)


204: user = root
208: group = kvm
$> systemctl restart libvirtd

Cerrar Virt-Manager y volver a abrir


Borrar la máquina virtual y volver a crearla
-------------------------------------------------------------

la configuración de la VM se guarda en
/etc/libvirt/qemu/Server.xml

la imagen del disco virtual se guarda en


/var/lib/libvirt/images/Server.img

Para sacar el mouse de la maquina virtual; presionan


Ctrl + Alt

Datos de la máquina virtual


#################################################
Instalar la máquina virtual en clase
9GB para el / particion standar y xfs
1GB para el swap

LLamar a la máquina virtual


server.aulautil.com

Configuración de la Máquina Virtual


###################################################
Verificacion de las tarjetas
$> ip link show
Ej: eth0

Asignación de Ip dinámica a la máquina virtual


####################################################
$> ip link set eth0 up
$> dhclient eth0

Verificacion de las Ips


$> ip addr show

Instalando programas adicionales a la maquina virtual


##################################################
$> yum -y install vim elinks wget ftp telnet rsync curl net-tools mlocate
psmisc

Configurar Manualmente la tarjeta de red de la máquina virtual


###########################################################################

Saber la ip dhcp de la Máquina Virtual


$> ip addr show

Ahora configuramos en la máquina virtual su IP con los siguientes parámetros


IP: 192.168.122.2/24
Puerta de Enlace: 192.168.122.254 (Servidor firewall)
DNS: 8.8.8.8
Ver las tarjetas de red detectadas y sus Ips (si la tuvieras)
$> ip addr show

Ver que tarjeta de red esta activa (con el cable conectado)


$> ip link show
ver la tiene en su estado "state UP"

Ej: supongamos que enp6s0 está activo, pasamos a configurar la tarjeta


$> vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.122.2
PREFIX=24
GATEWAY=192.168.122.254
DNS1=8.8.8.8

Reiniciar el servicio de red


$> systemctl restart network

Verificar que no hubo errores


$> systemctl status network

Compobar los parámetros de red y el estado

ver ips y máscaras


$> ip addr show

ver puertas de enlace


$> ip route show

ver configuración del DNS


$> cat /etc/resolv.conf

ping a la puerta de enlace


$> ping 192.168.122.254

ping a google
$> ping www.google.com

ping a 8.8.8.8
$> ping 8.8.8.8

Dar nombre a la máquina virtual


$> hostnamectl set-hostname server.aulautil.com
$> exit

Conectarnos a la máquina virtual vÃa SSH


$> ssh root@192.168.122.2

==============================================================================
================================================
Configuración de la Interfaz Bridge en el host anfitrión (Con red Ethernet)
##############################################################################
#
Verifcar la interfaz activa, Ej: enp6s0
$> ip link show | grep "state UP"

$> echo "DEVICE=enp6s0


ONBOOT=yes
BRIDGE=br0" > /etc/sysconfig/network-scripts/ifcfg-enp6s0

$> echo "DEVICE=br0


ONBOOT=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.20.X
PREFIX=24
GATEWAY=192.168.20.1
DNS1=8.8.8.8
STP=on
DELAY=0" > /etc/sysconfig/network-scripts/ifcfg-br0

Reiniciar la Red
#############################################
Apagar interfaz activa actual
$> ifdown enp6s0

$> systemctl restart NetworkManager

Esperar un minuto
$> ping 192.168.20.1
$> ping 8.8.8.8
$> ping www.google.com

Comprobar las interfaces


#############################################
$> ifconfig
$> ifconfig br0
$> ifconfig enp6s0

Modificar la máquina virtual para que use la interfaz bridge


######################## ###########################################
$> systemctl restart libvirtd

Cerrar el Virt Manager y volver a abrir


Apagar la VM
Luego Abrir la VM
Click en el Ãcono I
NIC: Dispositivo Fuente: Dispositivo de equipo xxxx (Puente br0) --->
Aplicar

Iniciar la máquina virtual

Ejecutar en la máquina virtual


$> ip addr show

Cambiarle la IP a la máquina sumando + 100 a la IP de la máquina anfitrion


$> vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.20.X+100
PREFIX=24
GATEWAY=192.168.20.1
DNS1=8.8.8.8

Reiniciar el servicio de red


$> ifdown eth0
$> systemctl restart NetworkManager
$> ip addr show
$> ping 192.168.20.1 (puerta de enlace)

$> ping 8.8.8.8 (demora un poco)


Si no hace ping a 8.8.8.8
$> reboot
==============================================================================
=================================

* VIRSH
###################################################################
Similar a virt-manager existe la herramienta virsh que funciona
por consola

Para acceder al prompt de virsh ejecutamos


$> virsh

Ver ayuda de vish


$> virsh help
ó
$> virsh
virsh> help

Para listar todas las VMs (encendidas o apagadas)


virsh> list --all

Para iniciar una vm


virsh> start nombrevm

Para apagar de manera amigable una vm


virsh> shutdown nombrevm

Para apagar a la maldad una vm


virsh> destroy nombrevm

Habilitar el arranque automático de una máquina virtual


virsh> autostart nombrevm

Deshabilitar el arranque automático de una máquina virtual


virsh> autostart nombrevm --disable

Para borrar el estado guardado de una vm (cuando se apaga el equipo


anfitrión indebidamente; la vm no se puede levantar por virt-manager)
virsh> managedsave-remove nombrevm
Para ver mas opciones de virsh
virsh> help

Para salir
virsh> quit

Extra
##################################################################
Instalar PCI passthroug para que una máquina Windows tenga mejor
performance gráfico
http://www.firewing1.com/howtos/fedora-20/create-gaming-virtual-machine-using-
vfio-pci-passthrough-kvm
https://www.reddit.com/r/CentOS/comments/35j086/centos_7_and_pci_passthrough_q
uestion/
https://www.pugetsystems.com/labs/articles/Multiheaded-NVIDIA-Gaming-using-
Ubuntu-14-04-KVM-585/

DOCKER
#########################################################################
Habilitar contabilidad de la memoria y el swap
$> vim /etc/sysconfig/grub
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 crashkernel=auto
vconsole.font=latarcyrheb-sun16 rhgb quiet cgroup_enable=memory swapaccount=1"

Actualizar grub
$> grub2-mkconfig -o /boot/grub2/grub.cfg
$> grub2-install /dev/sda

Reiniciar
$> reboot

Instalar Docker (Ejecutar en el VPS)


#####################################################################
$> yum -y install docker

Iniciar servicio
$> systemctl start docker

Habilitar arranque automático de docker


$> systemctl enable docker

Obtener información de la instalación docker


$> docker info

Descarga de imágenes
#####################################################################
Buscar imágenes de contenedores disponibles de centos, incluido tags
$> docker search centos | less

Buscar imágenes de contenedores disponibles de ubuntu


$> docker search ubuntu | less

Buscar imágenes de contendores disponibles de zentyal


$> docker search zentyal
Descargar la imagen oficial de CentOS 7
$> docker pull docker.io/centos

Ver imágenes descargadas


$> docker images

Ver contenedores en ejecución


$> docker ps

Ver todas las imágenes(contenedores) y sus tags


$> docker images

Ejecutar un nuevo contenedor (instancia en ejcución de una imagen)


#################################################################
(si el contenedor no existe intentará descargar la imagen)
$> docker run -i -t docker.io/centos /bin/bash
ó
$> docker run -i -t docker.io/centos:latest /bin/bash

En otra consola ejecutar ps para ver los contenedores ejecutados y su ID


$> docker ps

Ejecutar dentro del contenedor


$> cat /etc/redhat-release
Instalamos paquetes utiles de red
$> yum -y install net-tools iproute
$> ip addr show
$> ip link show
$> ping 172.17.42.1
$> ping 8.8.8.8
$> touch hola

Salir de la sesión y detener el contenedor


$> exit

Verificar los contenedores en ejecución


$> docker ps

Ejecutar un nuevo contenedor con un nuevo ID


$> docker run -i -t docker.io/centos /bin/bash
$> cat hola
$> exit
Al salir del container se detiene el mismo

Ejecutar un cotenedor apagado


=================================================================
Ver todos los contenedores y verifica el ID del contenedor que se quiere
ejecutar
$> docker ps -a

Iniciar contenedor apagado


$> docker start IDContenedor

Acceder a contenedor que está ejecutandose en background


$> docker attach IDContenedor

Ejecutar un nuevo contenedor y guardar los cambios como nueva imagen


####################################################################
$> docker run -i -t docker.io/centos /bin/bash
$> yum -y install net-tools vim elinks iproute

En otra consola ejecutar ps para ver los contenedores ejecutados y su ID


$> docker ps

Guardar la imagen con sus cambios en un nuevo contenedor


$> docker commit 62342ea9b173 tuxito/centos7

Ahora volver a la consola del contenedor y salir


$> exit

Verificar la imagen guardada


$> docker images

Iniciar el contener guardado


$> docker run -i -t tuxito/centos7 /bin/bash

Verificar los cambios guardados


$> ifconfig
$> route -n

En otra consola ejecutar ps para ver los contenedores ejecutados y su ID


$> docker ps

Ver información de un contenedor


#################################################
En otra consola ejecutar ps para ver los contenedores ejecutados y su ID
$> docker ps

$> docker inspect cc26dee81ff7

Detener un contenedor por su ID


######################################################################
$> docker stop cb8f352245a5
$> docker ps

Detener un contenedor a la fuerza


$> docker kill cb8f352245a5
$> docker ps

Ver la lista de contenedores detenidos y en ejecución


$> docker ps -a

Ejecutar un contenedor detenido


-------------------------------------------------------------------
verificamos primero el ID con
$> docker ps -a

luego ejecutamos el contenedor


$> docker start cb8f352245a5

Borrar un contenedor
-------------------------------------------------------------------
Detener primero el contenedor
$> docker kill cb8f352245a5
Borrar el contenedor
$> docker rm cb8f352245a5

Borrar una imagen


######################################################################
Se deberÃan borrar primero todos los contendores de la imagen
Primero detener todos los contenedores de la imagen luego:
Borra otodos los contenedores dependientes de la imagen

Buscar el id de la imagen
$> docker images

Borrar la imagen por su ID


$> docker rmi cb8f352245a5 (borrar la imagen docker.io/centos)
$> docker images

Borrar todos los contenedores detenidos


############################################################
$> docker ps -a | awk '{print $1}' | grep -v CONTAINER | xargs docker rm

Automatización de despliegue de imágenes con Dockerfiles


#####################################################################
Un procedimiento común para desplegar las imágenes es hacer uso de
Dockerfiles que son archivos con un lenguaje de script que permite
automatizar el despliegue de servicios (instalación, configuración)

Para centos 7 existe el proyecto


https://github.com/CentOS/CentOS-Dockerfiles

que son una serie de Dockerfiles para desplegar múltiples servicios

Para descargar estos Dockerfile instalamos git en el máquina fÃsica


$> yum -y install git

Luego descargamos los Dockerfiles


$> git clone https://github.com/CentOS/CentOS-Dockerfiles

Veremos los archivos Dockerfiles en la carpeta


$> ls -l CentOS-Dockerfiles

Editar un archivo Dockerfile


----------------------------------------------------------------------
Vamos a editar el Dockerfile de httpd y modificamos el FROM
$> vim CentOS-Dockerfiles/httpd/centos7/Dockerfile
FROM tuxito/centos7

Deployar una nueva imagen con el Dockerfile (ejemplo apache)


-----------------------------------------------------------------------
$> cd CentOS-Dockerfiles/httpd/centos7
$> docker build --rm=true -t tuxito/httpd .

Visualizar las imágenes generadas


$> docker images
Ejecutar un container en background en un puerto especÃfico de la máquina
real
------------------------------------------------------------------------------
-
Con la imagen deployada tuxito/httpd vamos a ejecutarlo como demonio en el
puerto 80 de la máquina local, con la opcion restart=always el contenedor se
ejecutará automáticamente cada vez que se reinicia docker
y con la opción -l le damos un nombre al conetenedor para no estar buscando
el ID

$> docker run --restart=always -l apache1 -d -p 80:80 -t tuxito/httpd /run-


httpd.sh

Ejemplo Opcional
Se puede usar un puerto distinto en la máquina real
$> docker run -d -p 8080:80 -l apache2 -t tuxito/httpd /run-httpd.sh

*** Natear con Endian el puerto 80 desde la Ip pública a la IP del VPS CentOS

Acceder con el navegador al VPS


http://IPPúblicaVPS
http://IPPúblicaVPS:8080

Apagar los contenedores después


$> docker ps
$> docker stop apache1
$> docker stop apache2

Reiniciar docker
$> systemctl restart docker

Verificar los contenedores


$> docker ps
$> docker ps -a

Gestión de Storage
##############################################################################
####
Los cambios que se dan en el contenedor se destruyen cuando se detiene este;
sin embargo desde la máquina real se le puede asignar un directorio en el
cual
el contenedor podrá escribir los cambios y de esta manera mantener archivos
persistentes

Ej: vamos a desplegar el servidor web con el directorio /var/www/html asignado


desde
la máquina real

En la máquina real ejecutamos


Creando un directorio para la data de los containers
$> mkdir /data
$> mkdir /data/html
$> vim /data/html/index.html
<h1>Hola Mundo</h1>

Contextos de SELINUX
------------------------------------------------------------------------------
------------
Si SELINUX esta en modo enforce es necesario brindarle el contexto web al
nuevo directorio
de la máquina real para que pueda ser accedido en el contenedor

$> yum -y install policycoreutils policycoreutils-python


$> semanage fcontext -a -t httpd_sys_content_t "/data/html(/.*)?"
$> restorecon -FRvv /data/html

Ejecutando con el Storage asignado


------------------------------------------------------------------------------
---------------------
Vamos ahora a ejecutar el contenedor con el directorio de la máquina VPS
/data/html apuntado al directorio
/var/www/html del contenedor

$> docker run -d -p 80:80 -v /data/html:/var/www/html -t tuxito/httpd /run-


httpd.sh

Visualizar ahora en el navegador de nuestra laptop


http://IPPublicaVPS

Detener el contenedor
$> docker ps
$> docker stop IDContainer

Ejecutando un contenedor con lÃmite de memoria y CPU


------------------------------------------------------------------------------
-----------
Ejemplo: Limitando la memoria a 1024M y el uso de 2 CPUs como máximo
$> docker run -d -p 80:80 -m="1024m" --cpu-shares=2 -v
/data/html:/var/www/html -t tuxito/httpd /run-httpd.sh

Práctica: Deployar MariaDB

Exportar una imagen de docker


=============================================================================
$> docker save tuxito/httpd > /tmp/tuxito-httpd.tar

Importar la imagen de docker


=============================================================================
$> docker load < /ruta/a/tuxito-httpd.tar
ó
$> docker import /ruta/a/tuxito-httpd.tar

Tarea, descargar Zentyal en tu laptop o PC de trabajo


##############################################################################
#
Zentyal 5.0
https://sourceforge.net/projects/zentyal/files/
Capitulo 11: Servidor SAMBA ADS con Zentyal
##############################################################################
#########
Descargar el iso de Zentyal 5.0 desde
https://sourceforge.net/projects/zentyal/files/zentyal-5.0-development-
amd64.iso/download

Crear una nueva máquina virtual de zentyal


#################################################################
1.- Click derecho en localhost --> Nuevo
2.- Nombre: ADS
Medio de Instalación local
3.- Utilizar Image ISO
Ej: /home/tuxito/Descargas/zentyal-5.0-development-amd64.iso
Tipo de SO: Linux
Versión: Ubuntu 14.04 Trusty
4.- Memoria RAM: 1024
Cpu: 1
Adelante
5.- Habilitar almacenamiento para esta máquina virtual
Crear una imagen de disco
20G
Adelante
Finalizar

6.- Editar la máquina virtual para que user drivers paravirtualizados(mejorar


performance)
- Apagar la máquina virtual
- Cambiar en IDE disco
Opciones Avanzadas: Bus de Disco: VirtIO
formato de almacenamiento: qcow2
Click en Aplicar
- Seleccionar interfaz de red
Modelo de dispositivo: virtio
Click en Aplicar
- CDRom click en conectar y buscar el ISO de Zentyal
Click en Aplicar
- Opciones de Arranque, Habilitar el menú de Arranque
Seleccionar IDE Cdrom y VirtIO Disco
Primero debe estar IDE Cdrom
- Iniciar la máquina virtual
7.- Instalación de Zentyal
a) Idioma español
b) Install Zentyal 5.0 delete All Disk
c) Pais o territorio: Perú
d) Configure el teclado.
¿Detectar la disposición del teclado? NO
e) PaÃs de origen del Teclado: Español (latinoamericano)
f) Seleccione distibución de teclado para este equipo
Español (latinoamericano)

Opcional si falla el dhcp


g) Se produjo un fallo al configurar la Red; seleccionar continuar.
h) No configurar la red en este momento

i) Nombre de la máquina:
adsserver
j) Nombre de usuario para la cuenta
tuxito
Clave
Lolcito.123
h) Terminar la Instalación
Continuar
- Reboot de la VM
- Apagar la VM
- Cambiar el driver de video a "Cirrus"
- Opciones de Arranque, Habilitar el menú de Arranque
Primero debe estar VirtIO Disco
- Iniciar la máquina virtual

8.- Configuración de Zentyal


Loguearse con
usuario: tuxito
clave:Lolcito.123

a) Configuración Inicial
Continuar
b) Roles del Servidor
Domain Controller and File Sharing
Instalar
c) Paquetes a Instalar
Continuar
d) Interfaces de red
eth0: Internal
Continuar
e) Método: Static
DIrección IP: 192.168.122.10
Máscara: 255.255.255.0
Puerta de Enlace: 192.168.122.254
Servidor de Nombres primario: 8.8.8.8
Continuar
f) Usuarios y Grupos
Rol: Servidor Standalon
Dominio: aulautil.local
Finalizar
Guardar

Nota: Se desaparencen las letras en el firefox de la máquina virtual


Presionar
ctrl+
ctrl-

Una vez que terminó de configurar, acceder desde el navegador de la máquina


anfitrión

https://IPDeServidorZentyal:8443

Configuración del ADS


##############################################################################
##################3333
Click en Usuarios y Equipos---> Gestionar
Crear un grupo
------------------------------------------------------------------------------
-----------------
Seleccionar Grupos y el luego dar click al sÃmbolo + en la parte inferior de
la ventana derecha

Grupo de Seguridad
Nombre de Grupo: sistemas

Crear un usuario
------------------------------------------------------------------------------
--------------------
Seleccionar Users y el luego dar click al sÃmbolo + en la parte inferior de la
ventana derecha
Nombre de usuario: linuxero
Nombre: Linuxero
Apellido: Hacker
Contraseña: Linuxero1.
Grupo: Sistemas

Crear un usuario administrador del dominio


------------------------------------------------------------------------------
--------------------
Seleccionar Users y el luego dar click al sÃmbolo + en la parte inferior de la
ventana derecha
Nombre de usuario: domainadmin
Nombre: Domain
Apellido: Admin
Contraseña: Domain1.
Grupo: Domain Admins

Compartición de Ficheros
#######################################################################

Crear recurso compartido


------------------------------------------------------------------------------
-----------------
Añadir Nuevo

Nombre del Recurso Compartido: sistemas


Directorio bajo Zentyal: sistemas (la ruta fÃsica será
/home/samba/shares/sistemas/
Comentario: carpeta para el grupo sistemas

Añadir, Guardar Cambios

Control de Acceso al recurso


------------------------------------------------------------------------------
-----------
Seleccionar recurso compartido click en la Rueda "Control de Acceso"
Añadir Nuevo

Usuario/Grupo
----------------
Grupo: sistemas
Permisos
----------------
De lectura y escritura
Añadir
Guardar Cambios

Agregar una máquina Windows al Dominio


###########################################################################

1.- La máquina winbugs debe tener una ip estática de la LAN


2.- El dns de la máquina windows tiene que ser zentyal
3.- EL ntp de la máquina windows tiene que ser zentyal
4.- Ahora agregamos la máquina al dominio
Configuración Avanzadas de Sistemas
Nombre de Equipo ---> Cambiar
Dominio: aulautil.local

Pide usuario y clave:


usuario: domainadmin
clave: Domain1.
pide reiniciar

- Loguearse como usuario linuxero en el dominio


- acceder a la carpeta compartida \\adsserver\sistemas

Puertos del servidor Samba


##############################################################################
#
El servidor de archivos Windows/Samba Apertura los siguientes puertos
TCP 139
TCP 445
UDP 137
UDP 138
UDP 53

DNS Local de Zentyal (DNS de LAN)


############################################################################
- Ir a la Opción DNS del menú Izquierdo
- Click en la rueda "Nombre de Máquinas" del dominio aulautil.local
- Click Añadir Nuevo
Nombre: contabilidad1
- Click en rueda: Dirección IP
Anadir Nuevo, IP: 192.168.122.X, Añadir
Guardar Cambios --> Guardar

- Click en la rueda "Nombre de Máquinas" del dominio aulautil.local


- Click Añadir Nuevo
Nombre: contabilidad1
- Click en rueda: Dirección IP
Anadir Nuevo, IP: 192.168.122.11, Añadir
Guardar Cambios --> Guardar

Desde Windows abrir cmd


cmd> ping contabilidad1
cmd> ping contabilidad1.aulautil.com

****** Caso de que tenga servidores en DMZ ******


La red LAN no debe resolver los nombre de los servidores de la DMZ con IP
pública,
si no con las ips privadas de la DMZ

dominio IP pública IP DMZ


---------------------------------------------------------
Ej: www.dominio.com ---> 149.56.21.34 ---> 192.168.3.2
Ej: mail.dominio.com ---> 149.56.21.33 ---> 192.168.3.3

* En zentyal agregar un nuevo dominio: dominio.com


Dominio: Añadir Nuevo: dominio.com

Agregar nombres de equipo para www y mail


- Ir a la Opción DNS del menú Izquierdo
- Click en la rueda "Nombre de Máquinas" del dominio dominio.com
- Click Añadir Nuevo
Nombre: www
- Click en rueda: Dirección IP
Anadir Nuevo, IP: 192.168.3.2, Añadir
Guardar Cambios --> Guardar

- Click en la rueda "Nombre de Máquinas" del dominio dominio.com


- Click Añadir Nuevo
Nombre: mail
- Click en rueda: Dirección IP
Anadir Nuevo, IP: 192.168.3.3, Añadir
Guardar Cambios --> Guardar

Desde Windows abrir cmd


cmd> ping www.dominio.com
cmd> ping mail.dominio.com

Resolución de un host con Ip pública desde Zentyal


==============================================================================
========
Ej: quiero resolver en mi red LAN, intranet.dominio.com con Ip Pública
149.56.218.201
porque está lojado en un hosting externo de cloudperu.pe

- Ir a la Opción DNS del menú Izquierdo


- Click en la rueda "Nombre de Máquinas" del dominio dominio.com
- Click Añadir Nuevo
Nombre: intranet
- Click en rueda: Dirección IP
Anadir Nuevo, IP: 149.56.218.201, Añadir
Guardar Cambios --> Guardar

Desde Windows abrir cmd


cmd> ipconfig /flushdns (refresca el cache de DNS)
cmd> ping intranet.dominio.com

Cliente SMB Linux (máquina anfitrión)


#############################################################################
Explorar los recursos de un servidor de archivos

Test de telnet para saber si el servidor es accesible


$> telnet 192.168.122.Y 139
$> telnet 192.168.122.Y 445

Ctrl+5 cancela el telnet


telnet> quit

$> smbclient -L 192.168.122.Y


clave: Enter

Explorar los recursos de un servidor de archivos autenticandose como usuario


del
dominio
$> smbclient -U "DOMINIOX\linuxero" -L 192.168.122.Y
clave: Linuxero11.

Montar un directorio del servidor de archivos Windows


-------------------------------------------------------------------
$> mkdir -p /fileserver/sistemas
$> mount -t cifs //192.168.122.Y/sistemas /fileserver/sistemas -o
username=linuxero,password=Linuxero1.
$> touch /fileserver/sistemas/prueba
$> df -h

Definir un punto de montaje permanente


-------------------------------------------------------------------
Agregar al final
$> vim /etc/fstab
//192.168.122.Y/sistemas /fileserver/sistemas cifs
rw,noauto,username=linuxero,password=Linuxero1.,domain=DOMINIOX,acl 0 0

$> umount /fileserver/sistemas


$> mount /fileserver/sistemas

Cliente gráfico
--------------------------------------------------------------------------
Con dolphin se puede visualizar las carpetas de un servidor Windows o Samba
Editar la dirección
smb://192.168.122.Y

Doble click en la carpeta sistemas


pide
usuario: DOMINIOX\linuxero
clave: Linuxero1.

Servidor Linux Zentyal


#################################################################
Loguearse al servidor Zentyal
$> ssh tuxito@192.168.122.10
$> sudo su -

Actualizar lista de paquetes


$> apt-get update

Buscar un paquete
$> apt-cache search iftop

Instalar un paquete
$> apt-get -y install iftop vim

Ver la configuración de repositorios


$> less /etc/apt/sources.list

Ver la configuración de red


$> vim /etc/network/interfaces
$> ip addr show
$> ip route show

Ver puertos abiertos


$> netstat -nltp
$> netstat -nlup

Capitulo 12: Proxy Endian 3.2.2


##############################################################################
######################

1.- Configuraicón del Proxy


------------------------------------------------------------------------------
-----
Ir a Proxy ---> Configuración
- Habilitar proxy Http --> queda pensando F5
- Verde: No transparente
- Puerto utilizado por el proxy: 3128
- Puertos SSL Agregar
10443 # endian
7071 # zimbra
- Configuración del registro
Habilitar el registro
Registrar filtro de contenido
- Administración del cache
Tamaño del cache en disco: 6000
GUARDAR ---> Aplicar

2.- Integración al Active Directory


------------------------------------------------------------------------------
------
Ir a Proxy --> Autenticación
- Método de autenticación: Windows Active Directory (NTLM)
- Dominio de Autenticación : aulautil.local
- Nombre del Dominio del Servidor AD * : aulautil.local
- Nombre del Host PDC del Servidor AD* : adsserver
- Dirección IP del PDC del Servidor AD : 192.168.122.10
Click en Guardar --> Aplicar

- Click en unirse al dominio


* Nombre de usuario administrador del
Active Directory : domainadmin
* Constaseña ... : Domain1.
Click en Unirse al Dominio

3.- Filtro de Contenido


------------------------------------------------------------------------------
-----
Crearemos 4 perfiles
a) gerente --> acceso total, excepto warez
b) asistente --> acceso total, menos: warez, porno, hack, proxys
c) empleado --> acceso total, menos: wares,porno, hack, proxys, chat,
video, musica, red social
d) limitado --> solo acceso a webs de gobierno, google search y bancos

gerente
================================================================
Ir a Proxy --> Filtro de contenido
- click en "create profile"
- Nombre del perfil: gerente
- click en "Activar escaneo Antivirus"
- Click en Filter pages (URL BlackList)
Denegar: (click en fkecha verde y que se ponga rojo)
- Hacking & Warez
- Internet Threads
- Click en "crear perfil" --> Aplicar

asistente
================================================================
Ir a Proxy --> Filtro de contenido
- click en "create profile"
- Nombre del perfil: asistente
- click en "Activar escaneo Antivirus"
- Click en Filter pages (URL BlackList)
Denegar:
Hacking & Warez, Internet Threads, Adulto, Citas, Violencia,
Web proxies, Apuestas, Drogas
- Click en "crear perfil" --> Aplicar

empleado
================================================================
Ir a Proxy --> Filtro de contenido
- click en "create profile"
- Nombre del perfil: empleado
- click en "Activar escaneo Antivirus"
- Click en Filter pages (URL BlackList)
Denegar:
Internet, PiraterÃa, Adulto, Citas, Violencia, Web proxies,
Apuestas, Audio, Chat, Drogas, Juegos, Media,
Foros->Social Network
- Click en "crear perfil" --> Aplicar

limitado
================================================================
El usuario limitado se creará en PolÃtica de Acceso no necesita Fitro de
contenido

4.- PolÃtica de Acceso


------------------------------------------------------------------------------
---
Ya hemos definido nuestro perfiles de filtrado y estos se deben aplicar en
la opción PolÃticas de acceso.
4.1.- Debemos en Zentyal crear los siguientes grupos y usuarios
https://192.168.122.10:8443
grupo: gerentes
usuarios: gerentazo
grupo: asistentes
usuarios: linuxero
grupo: empleados
usuarios: windozero
grupo: limitados
usuarios: luser

4.2.- Volvemos a Endian


Apagar y prender proxy, para que refresque el endian. (siempre
reiniciar el proxy cuando se editen usuarios y grupos)

Luego ir a Proxy --> PolÃtica de Acceso

a) Lista blanca Global (limitados sólo podrán acceder a esta lista)


Click en añadir PolÃtica de Acceso
- Tipo de fuente: cualquiera
- Tipo de destino: dominio
Agregar dominios (uno por lÃnea)
.gob.pe
.edu.pe
www.google.com
google.com
www.google.com.pe
google.com.pe
.viabcp.com
.bancocontinental.com
- Autenticación: (en base al grupo)
Seleccionar con el click y la tecla control
* asistentes
* gerentes
* limitados
* empleados
- Filtro de perfil: ninguno
- Posición: primera posición
Click en crear polÃtica ---> Aplicar

b) PolÃtica para gerentes


Click en añadir PolÃtica de Acceso
- Tipo de fuente: cualquiera
- Tipo de destino: cualquiera
- Autenticación: (en base al grupo)
* gerentes
- Filtro de perfil: gerente
- Posición: última posición
Click en crear polÃtica ---> Aplicar

c) PolÃtica para asistentes


Click en añadir PolÃtica de Acceso
- Tipo de fuente: cualquiera
- Tipo de destino: cualquiera
- Autenticación: (en base al grupo)
* gerentes
- Filtro de perfil: asistente
- Posición: última posición
Click en crear polÃtica ---> Aplicar

d) PolÃtica para empleados


Click en añadir PolÃtica de Acceso
- Tipo de fuente: cualquiera
- Tipo de destino: cualquiera
- Autenticación: (en base al grupo)
* empleados
- Filtro de perfil: empleado
- Posición: última posición
Click en crear polÃtica ---> Aplicar

5.- Crear una GPO en el Active Directory para configurar el Proxy de Los
usuarios
##############################################################################
########################

WINDOWS 7
==============================================================================
==================
Cerrar la sesión de linuxero en Windows 7 y loguearse como domainadmin
Crear una GPO para preconfigurar el proxy del navegador
===============================================================
Descargar e Instalar Herramientas de administración remota del servidor
para Windows 7 con Service Pack 1 (SP1)
https://www.microsoft.com/es-ES/download/details.aspx?id=7887
Ir a panel de Control ---> Programas ---> iActivar, Descativar CaracterÃ-
sticas de Windows

Activar en
Herramientas de administración de CaracterÃsticas --> Herramientas de
administración de Directivas de Grupo

Luego ir a Herramientas Administrativas ---> Herramientas de


administración de Directivas de Grupo
click en Bosque-->Dominios-->aulautil.local
click en Objetos de Directiva de Grupo
click derecho en Default Domain Policy-->editar
Configuracion de Usuario--> Drectivas --> Configuración de Windows -->
Mantenimiento de Internet Explorer--> Conexion --> Configuración de
los servidores proxy
Habilitar confguración de Proxy
1.-HTTP: 192.168.122.254 Port 3128 OK (Usar el miso proxy
para todas las direcciones)
cerrar sesión y entrar como linuxero y comprobar configuración del
proxy navegando
probar los filtros también como empleado, gerentazo, windozero y luser

WINDOWS XP
==============================================================================
===================
Cerrar la sesión de linuxero en Windows XP y loguearse como domainadmin
descargar de aulautil archivos dotnetfx.exe y gpmc.msi, instalarlos
Crear una GPO para preconfigurar el proxy del navegador
===============================================================
Ejecutar desde menu inicio
gpmc.msc

click en Forest-->Domains-->dominioX.com
click derecho en Group Policy Object
click derecho en Default Domain Policy-->edit
User Configuration --> Windows Settings --> Internet Explorer
Maintenance--> Connection
doble click en Proxy Settings
Enable Proxy settings
1.-HTTP: 192.168.122.254 Port 3128 OK
cerrar sesión y entrar como linuxero y comprobar configuración del
proxy navegando
probar los filtros también como usuario gerentazo, windozero y luser

6.- Estableciendo restricciones a nivel de Firewall para que solo el proxy y


algunos servidores tengan internet
##############################################################################
#################################
Nuestro laptop local es el firewall perimetral de las redes virtuales
Ej: 192.168.122.0/24 ---> LAN
192.168.100.0/24 ---> DMZ

Debemos crear un script de firewall perimetral


================================================================
Loguearse como root

CentOS
================================================
$> yum -y install iptables-services

Ubuntu
================================================
$> sudo apt-get remove --purge ufw

Crear el script

$> vim firewall-perimetral.sh


------------------------------------------------------------------------------
-----------------------
#!/bin/bash
# Firewall hecho por Tuxito
# https://aulautil.com es cool
# 2016

echo "limpiando todas las reglas, deshabilitando firewalld"


systemctl stop firewalld
systemctl disable firewalld
/usr/libexec/iptables/iptables.init stop

echo limpiando reglas de firewall


iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
iptables -F
iptables -X

echo "Estableciendo la politica por defecto a DROP"


iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

echo "configurando INPUT y OUTPUT"


echo "dando acceso total al loopback"
# todo lo que entra y sale desde el loopback se acepta
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

################ Nuestro host como SERVIDOR


######################################################3
echo "permitiendo acceso al servidor SSH (protocolo tcp, puerto 22) desde
cualquier origen "
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j
ACCEPT

echo "permitiendo acceso al servidor VPN Sucursal"


iptables -A INPUT -p udp --dport 1194 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A OUTPUT -p udp --sport 1194 -m state --state ESTABLISHED,RELATED -j
ACCEPT

################ Nuestro host como Cliente


######################################################3
echo "habilitando navegacion a internet del propio firewall puertos
SSH,FTP,HTTP y HTTPS, Proxmox, Endian"
iptables -A OUTPUT -p tcp -m multiport --dports 20,21,22,80,443,8006,10443 -m
state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports 20,21,22,80,443,8006,10443 -m
state --state ESTABLISHED,RELATED -j ACCEPT

echo "habilitando las consultas DNS"


iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j
ACCEPT

echo "Habilitando tráfico libre desde el firewall hacia la LAN"


iptables -A OUTPUT -d 192.168.122.0/24 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.122.0/24 -m state --state ESTABLISHED,RELATED -j
ACCEPT

echo "permitiendo el ping desde cualquier origen a nuestro firewall"


iptables -A INPUT -p icmp --icmp-type echo-request -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -m state --state
ESTABLISHED,RELATED -j ACCEPT

echo "haciendo ping desde el firewall a la INTERNET"


iptables -A OUTPUT -p icmp --icmp-type echo-request -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m state --state
ESTABLISHED,RELATED -j ACCEPT

######################## TRAFICO FASTIDIOSO DE LAN A WAN


###########################
echo "trafico de LAN2WAN (control de lusers) acceso desde la LAN hacia la
internet"
echo "Haciendo que la LAN salga a internet con la 'IP Publica' por el wifi"
iptables -t nat -A POSTROUTING -o wlo1 -s 192.168.122.0/24 -j MASQUERADE

echo "dando salida libre al servidor proxy"


iptables -A FORWARD -p tcp -s 192.168.122.254 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.122.254 -m state --state
ESTABLISHED,RELATED -j ACCEPT

echo "Dando salida de DNS al Active Directory"


iptables -A FORWARD -p udp -s 192.168.122.10 --dport 53 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p udp -d 192.168.122.10 --sport 53 -m state --state
ESTABLISHED,RELATED -j ACCEPT

echo "reglas para tráfico VPN"


##############################################################################
###########
echo "habilitando la conexion hacia la VPN central"
iptables -A OUTPUT -p udp -m multiport --dports 1194,1195 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp -m multiport --sports 1194,1195 -m state --state
ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i tap0 -d 192.168.122.0/24 -j ACCEPT


iptables -A FORWARD -o tap0 -s 192.168.122.0/24 -j ACCEPT

#Guardando permanente las reglas


/usr/libexec/iptables/iptables.init save

# en Ubuntu guardar en /etc/rc.local


------------------------------------------------------------------------------
------------------------------

Ejecutar el script
$> chmod 755 firewall-perimetral.sh
$> /root/firewall-perimetral.sh

Probar la navegación sin proxy y con proxy en el Windows

7.- Reportes del Proxy


##############################################################################
#########
Loguearse con SSH al Endian

Para ver los logs en tiempo real


$> tail -f /var/log/squid/access.log_short

Ver la navegación en tiempo real del usuario luser


$> tail -f /var/log/squid/access.log_short | grep luser

SARG

==============================================================================
=====
Sarg viene preconfigurado en endian y generará reportes automáticos al
final del
dÃa, semana y mes
Los reportes de sarg se encuentran en
Registros --> Proxy --> Informe HTTP

Si queremos revisar los reportes del momento, conectarse con SSH al


Endian y ejecutar
$> sarg
Accedemos a https://192.168.122.254:10443/sarg/ONE-SHOT

Servidor Proxy Squid puro y Sarg


##############################################################################
######################
1.- Instalar Paquetes
$> yum -y install squid httpd

2.- Configurar Proxy


$> cd /etc/squid
$> vim squid.conf
------------------------------------------------------------------------------
---------------
#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.


# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged)
machines

acl SSL_ports port 443


acl SSL_ports port 7071
acl SSL_ports port 8443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

# ACLs personalizados
#############################################################
acl gerentes src "/etc/squid/reglas/gerentes.ips"
acl asistentes src "/etc/squid/reglas/asistentes.ips"
acl usuarios src "/etc/squid/reglas/usuarios.ips"
acl limitados src "/etc/squid/reglas/limitados.ips"

acl redessociales url_regex "/etc/squid/reglas/redessociales"


# dominios permitidos
acl listablanca dstdomain "/etc/squid/reglas/listablanca"
# dominios denegados
acl listanegra dstdomain "/etc/squid/reglas/listanegra"
# ips permitidos
acl ipsblancos dst "/etc/squid/reglas/ipsblancos"
# pornos
acl palabrasprohibidas url_regex "/etc/squid/reglas/palabrasprohibidas"
# eje: avi, mp3
acl archivosprohibidos urlpath_regex "/etc/squid/reglas/archivosprohibidos"
# eje: pif, bat
acl archivospeligrosos urlpath_regex "/etc/squid/reglas/archivospeligrosos"
# hora de almuerzo
acl almuerzo time MTWHFS 13:00-14:00

#
# Recommended minimum Access Permission configuration:
#

########### Restricción de accesos


# Only allow cachemgr access from localhost
http_access allow localhost manager
## denegando acceso a archivos perligrosos
http_access deny archivospeligrosos

## acceso libre a gerentes


http_access allow gerentes

# Deny requests to certain unsafe ports


http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports


http_access deny CONNECT !SSL_ports

# aceso libre para todos a la lista blanca e ips blancos


http_access allow asistentes listablanca
http_access allow asistentes ipsblancos
http_access allow usuarios listablanca
http_access allow usuarios ipsblancos
http_access allow limitados listablanca
http_access allow limitados ipsblancos
# todo el mundo tiene redessociales solo una horita en el almuerzo pa que no
se estresen
http_access allow redessociales almuerzo
# asistente se le deniega palabras prohibidas pero tiene redessociales
http_access deny palabrasprohibidas
http_access allow asistentes
http_access deny redessociales
http_access deny listanegra
http_access deny archivosprohibidos
# usuario no tiene redessociales, porno ni baja archivos de hueveo
http_access allow usuarios

http_access deny manager

# We strongly recommend the following be uncommented to protect innocent


# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.


# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed

http_access allow localhost


http_access deny localnet

# And finally deny all other access to this proxy


http_access deny all

# Squid normally listens to port 3128


http_port 3128
cache_mem 1576 MB
maximum_object_size 8192 KB
visible_hostname localhost

# Uncomment and adjust the following to add a disk cache directory.


cache_dir ufs /var/spool/squid 6200 16 256

# Leave coredumps in the first cache dir


coredump_dir /var/spool/squid
cache_access_log /var/log/squid/access.log
logfile_rotate 7
error_directory /usr/share/squid/errors/es-pe

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
------------------------------------------------------------------------------
---------------

Explicación de parámetros
##############################################################################
##############

Definición de Acls
--------------------------------------------------------------------------
acl nombredelacl tipodeacl valor tipos de acl
-------------------------------
src direccion o red de origen
port puerto de destino
proto proceso
dst direccion o red de destino
url_regex filtro de palabras en el URL
urlpath_regex extension de archivo
dstdomain dominio de destino
proxy_auth verifica autenticaciòn
time especifica una restricciòn
horaria

# Red local
8 acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
9 acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
10 acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
11 acl localnet src fc00::/7 # RFC 4193 local private network range
12 acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged)
machines

# Puertos que se pueden usar en https


Ej: https://dom.com:7071

14 acl SSL_ports port 443


15 acl SSL_ports port 7071
16 acl SSL_ports port 8443

# puertos que se pueden usar en http


Ej: http://dom.com:70
17 acl Safe_ports port 80 # http
18 acl Safe_ports port 21 # ftp
19 acl Safe_ports port 443 # https
20 acl Safe_ports port 70 # gopher
21 acl Safe_ports port 210 # wais
22 acl Safe_ports port 1025-65535 # unregistered ports
23 acl Safe_ports port 280 # http-mgmt
24 acl Safe_ports port 488 # gss-http
25 acl Safe_ports port 591 # filemaker
26 acl Safe_ports port 777 # multiling http

############# ACLs personalizados

# Perfiles de usuarios por IP


31 acl gerentes src "/etc/squid/reglas/gerentes.ips"
32 acl asistentes src "/etc/squid/reglas/asistentes.ips"
33 acl usuarios src "/etc/squid/reglas/usuarios.ips"
34 acl limitados src "/etc/squid/reglas/limitados.ips"
# regla de palabras que contienen nombres de redes sociales en el url
36 acl redessociales url_regex "/etc/squid/reglas/redessociales"

# dominios permitidos
38 acl listablanca dstdomain "/etc/squid/reglas/listablanca"

# dominios denegados
40 acl listanegra dstdomain "/etc/squid/reglas/listanegra"

# ips permitidos
42 acl ipsblancos dst "/etc/squid/reglas/ipsblancos"

# pornos
44 acl palabrasprohibidas url_regex "/etc/squid/reglas/palabrasprohibidas"

# Archivos prohibidos eje: avi, mp3


46 acl archivosprohibidos urlpath_regex "/etc/squid/reglas/archivosprohibidos"

# Archivos peligrosos eje: pif, bat


48 acl archivospeligrosos urlpath_regex "/etc/squid/reglas/archivospeligrosos"

# hora de almuerzo
50 acl almuerzo time MTWHFS 13:00-14:00

# Only allow cachemgr access from localhost


58 http_access allow localhost manager
## denegando acceso a archivos perligrosos
60 http_access deny archivospeligrosos
61
## acceso libre a gerentes
63 http_access allow gerentes
64
# Deny requests to certain unsafe ports
66 http_access deny !Safe_ports
67
# Deny CONNECT to other than secure SSL ports
69 http_access deny CONNECT !SSL_ports
70
# aceso libre para todos a la lista blanca e ips blancos
72 http_access allow asistentes listablanca
73 http_access allow asistentes ipsblancos
74 http_access allow usuarios listablanca
75 http_access allow usuarios ipsblancos
76 http_access allow limitados listablanca
77 http_access allow limitados ipsblancos
# todo el mundo tiene redessociales solo una horita en el almuerzo pa que no
se estresen
79 http_access allow redessociales almuerzo
# asistente se le deniega palabras prohibidas pero tiene redessociales
81 http_access deny palabrasprohibidas
82 http_access allow asistentes
83 http_access deny redessociales
84 http_access deny listanegra
85 http_access deny archivosprohibidos
# usuario no tiene redessociales, porno ni baja archivos de hueveo
87 http_access allow usuarios
# denegando el proceso local
89 http_access deny manager

# denegando acceso al localhost


104 http_access allow localhost
# denegando acceso a las redes locales
105 http_access deny localnet

# And finally deny all other access to this proxy


108 http_access deny all

# Puerto donde se escucha squid


111 http_port 3128

# Tamaño máximo de la cache en la RAM


112 cache_mem 1576 MB

# Máximo tamaño de un objeto en la cache


113 maximum_object_size 8192 KB

# Nombre del localhost


114 visible_hostname localhost

# Directorio para el cache (6GB, 16 directorios, 256 subdirectorio por cada


directorio)
117 cache_dir ufs /var/spool/squid 6200 16 256

# Archivo de los logs de acceso


121 cache_access_log /var/log/squid/access.log

# El log rota cada 7 dÃas


122 logfile_rotate 7

# Directorio con los mensajes de error


123 error_directory /usr/share/squid/errors/es-pe

$> cd /etc/squid
$> wget --user=aulautil --password=Tuxito,123 www.aulautil.com/curso-
centos7/reglas.tgz
$> tar -zxvf reglas.tgz
$> cd reglas
$> vim gerentes.ips
192.168.20.101
$> vim asistentes.ips
192.168.20.102
$> vim usuarios.ips
192.168.20.103
192.168.20.104
$> vim limitados.ips
192.168.20.105

$> systemctl start squid


$> systemctl enable squid
$> systemctl status squid

Ver Logs del Servicio


$> tail -f /var/log/squid/squid.out

Ver logs de Acceso


$> tail -f /var/log/squid/access.log

Ver logs de Acceso de un usuario especifico (ej 192.168.100.232)


$> tail -f /var/log/squid/access.log | grep 192.168.100.232

Hacer pruebas de navegacion poniendole proxy al navegador

Cuando se hace cambios en los archivos de reglas


Ejecutar
$> systemctl restart squid

Agregar al script del firewall el acceso al puerto 3128 tcp

echo "permitiendo acceso al servidor squid"


iptables -A INPUT -p tcp --dport 3128 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A OUTPUT -p tcp --sport 3128 -m state --state ESTABLISHED,RELATED -j
ACCEPT

ec
$> vim /root/firewall-bastion
.
.

$> ./firewall-bastion

SARG
--------------------------------------------------------------------
Sarg genera reportes diarios, semanales y mensuales, automaticamente

$> yum -y install gcc gd gd-devel make perl-GD wget httpd pcre-devel
$> cd
$> wget http://garr.dl.sourceforge.net/project/sarg/sarg/sarg-2.3.7/sarg-
2.3.7.tar.gz
$> tar -xvzf sarg-2.3.7.tar.gz
$> cd sarg-2.3.7/
$> ./configure
$> make
$> make install
$> vim /usr/local/etc/sarg.conf
7: access_log /var/log/squid/access.log
120: output_dir /var/www/sarg
216: date_format e
257 overwrite_report yes

Generar los reportes del momento ejecutando


$> mkdir /var/www/sarg
$> sarg -x

Ver Reportes de Sarg a nivel de toda la red


------------------------------------------------
$> vim /etc/httpd/conf.d/sarg.conf
Alias /sarg /var/www/sarg

<Directory /var/www/sarg>
Options Indexes FollowSymLinks
AllowOverride All
DirectoryIndex index.html
Order deny,allow
Allow from all
</Directory>

$> vim /var/www/sarg/.htaccess


AuthType basic
AuthName "reportes de sarg"
AuthUserFile /usr/local/etc/sarg.user
Require valid-user

$> htpasswd -c /usr/local/etc/sarg.user admin


clave: admin

$> systemctl restart httpd


$> systemctl enable httpd

Agregar al script del firewall el acceso al puerto 80 tcp


$> vim /root/firewall-bastion
.
.

$> ./firewall-bastion

Acceder con
http://192.168.20.X/sarg

Automatizando los reportes de sarg


$> vim /etc/cron.daily/sarg
#!/bin/bash
sarg -d day-1 -w /tmp/sarg.daily -o /var/www/sarg/Daily
/var/log/squid/access.log*

$> vim /etc/cron.weekly/sarg


#!/bin/bash
sarg -d week-1 -w /tmp/sarg.weekly -o /var/www/sarg/Weekly
/var/log/squid/access.log*

$> vim /etc/cron.monthly/sarg


#!/bin/bash
sarg -d month-1 -w /tmp/sarg.monthly -o /var/www/sarg/Monthly
/var/log/squid/access.log*

$> chmod 755 /etc/cron.daily/sarg /etc/cron.weekly/sarg /etc/cron.monthly/sarg

Proxy con autenticacion


##############################################################################
############
Comentamos las lÃneas de usuarios con Ip y agregamos usuarios por
autenticación
$> vim /etc/squid/squid.conf
31 #acl gerentes src "/etc/squid/reglas/gerentes.ips"
32 #acl asistentes src "/etc/squid/reglas/asistentes.ips"
33 #acl usuarios src "/etc/squid/reglas/usuarios.ips"
34 #acl limitados src "/etc/squid/reglas/limitados.ips"
35 auth_param basic program /usr/lib64/squid/basic_ncsa_auth
/etc/squid/usuarios
36 acl gerentes proxy_auth "/etc/squid/reglas/gerentes.usr"
37 acl asistentes proxy_auth "/etc/squid/reglas/asistentes.usr"
38 acl usuarios proxy_auth "/etc/squid/reglas/usuarios.usr"
39 acl limitados proxy_auth "/etc/squid/reglas/limitados.usr"

$> vim /etc/squid/reglas/gerentes.usr


pepito
$> vim /etc/squid/reglas/asistentes.usr
tuxito
$> vim /etc/squid/reglas/usuarios.usr
luser
$> vim /etc/squid/reglas/limitados.usr
windozero

Cerar usuarios del proxy


-------------------------------------------------
$> htpasswd -c /etc/squid/usuarios pepito
clave: pepito

$> htpasswd /etc/squid/usuarios tuxito


clave: tuxito

$> htpasswd /etc/squid/usuarios luser


clave: luser

$> htpasswd /etc/squid/usuarios windozero


clave: windozero

$> systemctl restart squid

Cerrar navegador y abrir nuevamente


probar localmente con direferentes usuarios

CapÃtulo 13: Compilación de programas, PotstgreSQL, Servidor NTP, tareas


programadas, Servidor SSH, rsync y respaldo
##############################################################################
#################################################

Compilar Programas
##############################################################################
##########################

Instalación de PostgreSQl por códigofuente


------------------------------------------------------------------------------
-------------------------

Debemos tener un compilador; lo instalamos


$> yum -y install gcc gcc-c++ automake make autoconf bison flex
Bajamos un codigo fuente de un programa que vamos a compilar
$> cd /usr/local/src
$> wget http://ftp.postgresql.org/pub/source/v9.6.1/postgresql-9.6.1.tar.bz2

Descomprimo el codigo fuente


$> yum -y install bzip2
$> tar -jxvf postgresql-9.6.1.tar.bz2

Entro al directorio descomprimido


$> cd postgresql-9.6.1

Ejecuto el configure (Opciones con que se va a compilar)


Ver las opciones del configure
$> ./configure --help | less

Luego ejecuto el configure con las opciones elegidas


ej: quiero que el prefix (Directorio raiz sea /opt/postgresql9)
$> ./configure --prefix=/opt/postgresql9 --with-selinux

Si el configure falla (librer+ia dependiente, paquete fuente, etc) ; ver los


errores
Instalar el readline y el zlib
$> yum -y install zlib-devel.x86_64 readline-devel.x86_64
$> ./configure --prefix=/opt/postgresql9 --with-selinux

Sale error de selinux


Instalamos las librerÃas de desarrollo de selinux
$> yum -y install libselinux-devel
$> ./configure --prefix=/opt/postgresql9 --with-selinux

Luego compilo
$> make

Luego instalo lo que se ha compilado


$> make install

Notas
------------------------------------------------------------------------------
----
* Si falla algo en la compilación, ver los errores e instalar librerÃas
dependientes

* Si deseo recompilar
make clean ---> borra los binarios y librerÃas generados por el make en el
código fuente del programa
./configure
make
make install ---> chanca archivo de la instalación anterior

Creamos el usuario postgres


$> adduser postgres

$> passwd postgres

$> cd /opt/postgresql9

$> mkdir data


$> chown postgres:postgres data

$> su - postgres

crear las bases de datos del sistema


$> /opt/postgresql9/bin/initdb -D /opt/postgresql9/data/

Iniciar el servidor postgres


$> /opt/postgresql9/bin/postmaster -D /opt/postgresql9/data >logfile 2>&1 &

Verificar el servicio
$> netstat -nltp | grep 5432

Crear base de datos de prueba


$> /opt/postgresql9/bin/createdb test

Ejecutar el prompt de postgresql


$> /opt/postgresql9/bin/psql test

test=# BEGIN;
test=# create table cliente(id INT, nombre varchar(150));
test=# INSERT INTO cliente(id,nombre) VALUES (1,'pepito');
test=# COMMIT;
test=# SELECT * FROM cliente;

Salir de la consola de postgresql


Presionar Ctrl+d

Nota:
-------------------------------------------------------------------------
Si por ejemplo hubiese querido instalar el módulo de python para postgresql
necesitaba primero instalar python-devel
$> yum -y install python-devel

y en el configure habilitar la opción --with-python

$> ./configure --prefix=/opt/postgresql9 --with-python

Si el make falla (libreria dependiente, paquete fuente, etc) ; ver los errores

Comprobamos la instalación en
/opt/postgresql9

Configurar la hora del sistema y del BIOS


###############################################################
Configurar la zona horaria

CentOS 6
------------------------------------------------------------

$> zic -l America/Lima

ó

$> tzselect
2
37
1

Verificamos la hora del sistema


$> date
dom ene 19 13:10:49 PET 2014 ---> PET zona horaria

Verificamnos la hora del bios


$> hwclock
dom ene 19 08:10:31 PET 2014

Veremos si las horas del sistema y la del bÃos están sincronizadas

Configuración de hora del bÃos


$> hwclock --set --date="20140119 13:10"

Sincronizar la hora del reloj con la del sistema


$> hwclock -s

Verificar la hora del sistema


$> date

Cambiar la hora del sistema


$> date --set="20140119 13:10"

Sincronizar la hora del sistema hacia la hora del bÃos


$> hwclock --systohc

* Modo gráfico
$> yum -y install system-config-date
$> system-config-date

CentOS 7
---------------------------------------------------------
Ver la configuración actual de la zona horaria
$> timedatectl

Ver ayuda de timedatectl


$> timedatectl --help

Listar las zonas horarias


$> timedatectl list-timezones

Definir la zona horaria local a Buenos Aires


$> timedatectl set-timezone America/Argentina/Buenos_Aires
$> timedatectl
$> date

Definir zona horaria a Lima


$> timedatectl set-timezone America/Lima

Definimos la hora y fecha del sistema


$> timedatectl set-time "2014-10-01 20:10:00"
Sincronizar hora del sistema con del firmware
$> hwclock --systohc

Ver hora del firmware


$> hwclock

Configurar un cliente y servidor NTP


############################################################################
Sincroniza la hora del sistema con un servidor a través del protocolo UDP
puerto 123

Instalar el cliente NTP


-------------------------------------------
$> yum -y install ntpdate

Sincronizar la hora local con un servidor de tiempo


$> ntpdate 0.br.pool.ntp.org
$> date
$> hwclock
$> hwclock --systohc

Configurar el cliente NTP


--------------------------------
$> yum -y install ntp
$> vim /etc/ntp.conf (agregar por la linea 21, aparte hay que darle
salida a internet al equipo al puerto UDP 123) puerto 123 UDP)
20:server 0.br.pool.ntp.org

Deshabilitar el servicio chronyd


$> systemctl disable chronyd

Habilitar arranque automático de ntpdate


$> systemctl enable ntpdate

Comprobar la sincronización automática


$> systemctl restart ntpdate
$> systemctl status ntpdate

Configurando como servidor


-------------------------------------------
$> yum -y install ntp
$> vim /etc/ntp.conf (agregar por la linea 21, aparte hay que darle
salida a internet puerto UDP 123)
server 0.br.pool.ntp.org

Iniciamos el servicio de ntp


$> systemctl start ntpd

Verificar el socket del servicio


$> netstat -nlup | grep 123

Habilitar arranque automático de ntpd


$> systemctl enable ntpd

Deshabilitar arranque de ntpdate


$> systemctl disable ntpdate

* Habilitar el acceso en el firewall


Modo consola
##############################################################################
$> yum -y install firewalld
$> systemctl start firewalld
$> systemctl enbale firewalld

Crear una regla permanente para habilitar servicio ntp


$> firewall-cmd --permanent --zone=public --add-service=ntp

Reinicia el firewall
$> firewall-cmd --reload

* Comprobar las reglas del firewall, si está abierto ntp


$> iptables -S | grep 123

Lista servicios del firewall


$> firewall-cmd --list-services

Con esta configuración nuestro servidor puede


ser usado como servidor de tiempo para la LAN

(Programación de Tareas con CRON y AT)


##############################################################################
##############
Programar tareas

$> crontab -e
# Minuto Hora DiaMes Mes DiaSemana Comando

# Ejecutar tarea todos los dias a la 1 a.m.


0 1 * * * date>>/root/lafecha

# Ejecutar tarea todos los dias cada 15 minutos


*/15 * * * * date>>/root/lafecha

# Ejecutar tarea cada 15 minutos entre las 2 y 4 p.m.


*/15 14-16 * * * date>>/root/lafecha

# Ejecutar tarea cada 15 minutos todos los dias a la 2 y a las 4 p.m..


*/15 14,16 * * * date>>/root/lafecha

# Ejecutar tarea a las 0 horas del primer dia del año


0 0 1 1 * date>>/root/lafecha

# Ejecutar tarea a las los dias domingo del mes a las 11 p.m.
0 23 * * 7 date>>/root/lafecha

# Ejecutar tarea los lunes a las 3 p.m. y Miercoles a las 5 p.m.


0 15 * * 1 date>>/root/lafecha
0 17 * * 3 date>>/root/lafecha

$> crontab -l visualiza las tareas del usuario


* crear un script automatizado
########################################################3
$> yum -y install php-cli

$> vim /usr/bin/hora


#!/usr/bin/env php
<?php
system("date >> /root/lahora");

$> chmod 755 /usr/bin/hora


$> hora
$> cat /root/lahora
$> crontab -e
# programar tarea hora cada 3 horas
0 */3 * * * hora

Verificar la ejecucion de tareas


--------------------------------------------------------
$> less /var/log/cron
$> tail -f /var/log/cron

Cron define unos directorios para las tareas del sistema


cron.hourly/ scripts se ejecutan cada hora
cron.daily/ scripts se ejecutan cada dia
cron.weekly/ scripts se ejecutan cada semana
cron.monthly/ scripts se ejecutan cada mes

Programar script a nivel de sistema


$> cd /etc/cron.daily
$> vim tarea
#!/bin/bash
.....
....
.....
exit 0
$> chmod 755 tarea

Programar tareas No repetitivas


------------------------------------------------------------------------
$> yum -y install at
$> systemctl start atd
$> systemctl enable atd
$> systemctl status atd

Ej :Programar una tarea a las 23 horas

$> at 23:00
at> init 0
Crtl + d

Mostrar lista de tareas programadas con at


$> atq

Borrar una tarea programada


$> atrm 1
$> atq
Servidor SSH
------------------------------------------------------------------------------
Viene instalado por defecto en todos los CentOS

$> vim /etc/ssh/sshd_config


17: Port 666 ----> (cambia el puerto por defecto del ssh de 22 a 666)
AllowUsers tuxito (por defecto todos los usuarios con bash se pueden
conectar remotamente; con este parametro se restringe
los usuarios que pueden inicar una sesion remota)

* Permitir en el selinux el nuevo puerto del ssh


---------------------------------------------------------------

$> yum -y install policycoreutils policycoreutils-python

Listar los puertos y contextos asociados


$> semanage port -l

Ver el valor del contexto del puerto ssh


$> semanage port -l | grep ssh

Cambiar el contexto del puerto por defecto de ssh para agregar


el puerto 666 además del 22
$> semanage port -a -t ssh_port_t -p tcp 666

Habilitar en el firewall el puerto 666


$> firewall-cmd --permanent --zone=public --add-port=666/tcp
$> firewall-cmd --reload
$> firewall-cmd --list-ports
$> firewall-cmd --list-services

* Verificar los puertos abiertos y reglas de filtrado en el firewall


$> iptables -L -n

* Ver las reglas generadas


$> iptables -S

$> systemctl restart sshd


$> systemctl enable sshd

Verificar el puerto del servicio ssh


$> netstat -nltp | grep 666

Prueba de cliente
----------------------
$> ssh root@localhost (no funciona)
$> ssh -p 666 root@localhost (no funciona)
$> ssh -p 666 tuxito@localhost (si funciona)

$> vim /etc/ssh/sshd_config (comentar las lineas agregadas)


#Port 666
#AllowUsers tuxito

$> systemctl restart sshd

Monitoreo del SSH


-------------------------------------------------
$> tail -f /var/log/secure

Saber las ultimas sesiones abiertas


$> last

Ver las sesiones abiertas


$> who

Ver las sesiones abiertas (locales y remotas) y que comando se esta ejecutando
$> w

Proteger el SSH con Fail2Ban


===========================================================
$> yum -y install epel-release
$> yum -y install fail2ban
$> systemctl start fail2ban
$> systemctl enable fail2ban

RSYNC ( Copia incremental Segura )


------------------------------------------------------------------------------
---
$> yum -y install rsync

Ejecucion Local
$> mkdir /backup

1era ejecución de rsync, realiza una copia completa desde /etc a /backup/etc
$> rsync -avz /etc /backup

$> mkdir /etc/prueba


$> touch /etc/pruebita

2da ejecución de rsync, solo se copiaran archivos nuevos y modificados


desde /etc a /backup/etc, archivo borrado en el origen no se sincronizan
$> rsync -avz /etc /backup

$> rm /etc/pruebita

3ra Ejecucion queremos que archivos borrados también se sincronizen


$> rsync -avz --delete /etc /backup

Ejecución remota (Trabaja con SSH, Ejecutar desde la laptop)


------------------------------------------------------------------------------
$> mkdir /backupremoto
$> rsync -avz 149.56.218.X:/etc /backupremoto

* Creación de Script de backup


$> cd
$> vim backup-etc-rsync
#!/bin/bash
# copia imagen del directorio
rsync -avz --delete 149.56.218.X:/etc /backupremoto

# empaquetado diario
cd /backupremoto
FILE=etc-$(date +%Y-%m-%d).tgz
tar -zcvf $FILE etc

$> chmod 755 backup-etc-rsync


$> ./backup-etc-rsync

Clave compartida en SSH (ejecutar en la laptop)


##############################################################################
###############

Primero generar la calve publica en el servidor de origen donde se ejecuta el


rsync
$> ssh-keygen -t rsa (dar enter enter enter)
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
b6:f9:93:e1:9a:3a:ff:fd:34:e5:b4:1d:bf:13:fe:75 root@localhost.localdomain
You have new mail in /var/spool/mail/root

Copiar la clave publica generada al servidor remoto donde queremos acceder sin
contraseña
$> ssh-copy-id -i /root/.ssh/id_rsa.pub root@149.56.218.X

Loguearse en el servidor remoto (no debe pedir contraseña)


$> ssh 149.56.218.X
$> exit

$> ./backup-etc-rsync

******* Programando el backup en cron

$> crontab -e
# Programando la tarea todos los dias a las 11 p.m.
0 23 * * * /root/backup-etc-rsync

Capitulo 14: Servidor OpenVPN Server Net2Net entre Endian Firewalls


##############################################################################
#######

1.- Crear Nueva red local WAN con Virt-manager


==============================================================================
En nuestra laptop abrir virt-manager
Editar --> detalles de la conexion, click en el icono +

Nombre de la red: wan Adelante


Red: 192.168.10.0/24
Habilitar DHCP: Inicio: 192.168.10.128 Fin: 192.168.10.254

Adelante
Adelante
Conectado a una red FÃsica
ReenvÃo a la red fÃsica Destino:cualquier dispositivo Modo: NAT
Nombre de dominio DNS: wan
Finalizar

2.- Descargar e Instalar Endian 3.2.2 en la laptop


=============================================================================
En su laptop
$> wget https://netcologne.dl.sourceforge.net/project/efw/Development/EFW-
3.2.2/efw_community-x64_3.2.2_softwarex86-64_20161122054246.iso

Instalar Endian 3.2.2


----------------------------------------------------------------------------
Virt Manager ---> Archivo-> Nueva Máquina Virtual
Medio de Instalación Local
Utilizar Imagen ISO, Click en Explorar
Explorar Localmente ---> Buscar ISO de Endian y Abrir
Adelante
Memoria: 1024 CPU:1
Tamaño del disco: 8GB
Nombre: Firewall
Selección de Red: red virtual default (NAT)
Select Language: English
OK
OK
Instalation .... /dev/sda YES
Enable Console serial NO
IP Address: 192.168.122.3
MASK: 255.255.255.0
OK
OK
Apagar Endian
Click en Mostrar detalles de la Máquina virtual (Ícono I o foco)
Click en Agregar Hardware
Red ---> Fuente de Red: Red virtual wan
Finalizar
Prender la máquina virtual Endian

3.- Configurar Endian Firewall Local


=============================================================================
Acceder a https://192.168.122.3:10443/
Welcome to Endian Firewall >>>
Language: Spanish Timezone: America/Lima
Aceptar Licencia
Desea restaurar backup: No
Contraseña: Lolcito.123 para root y admin
Modos de Red: Enrutamiento
Ethernet estático
Naranja: Ninguno
VERDE 192.168.122.3 /24
Puerto 1
Nombre del Host: firewall
Nombre del dominio: aulautil.local
ROJO 192.168.10.2 /24
Puerto 2
Puerta de enlace predeterminada: 192.168.10.1
DNS1 8.8.8.8
DNS2 8.8.4.4
>>>
Aceptar, Aplicar Configuración

** Cambiar las puertas de enlace de las máquinas virtuales locales


de 192.168.122.1 a 192.168.122.3

4.- Configurar Servidor VPN en Endian VPS


==============================================================================
Ir a VPN
Habilitar servidor OpenVPN
Tipo de Autenticación PSK
Configuración de Certificado: Usar certificado seleccionado:
149.56.218.X

Tipo de Dispositivo: TAP


Puerto: 1194
Con puente (Check)
Enlazado a Verde
Dirección inicial del conjunto de IP dinámicas: 192.168.X.240
Dirección final del conjunto de IP dinámicas : 192.168.X.254

Guardar --> Aplicar

************ Crear usuario que se autentique al VPN ****************


Ir a atenticación --> Añadir nuevo usuario local
Nombre de usuario: tuxito
Contraseña: (Poner contraseña fuerte) Confirmar Contraseña (la misma
clave)
Configuración del Certificado: (No cambiar)
Dar click en "Invalidar opciones de Openvpn"
Redes detrás del cliente
192.168.122.0/24
Activado (check)
Click en Añadir

5.- Configurar el cliente VPN Net2Net


==============================================================================
=
Abrir el firewall endian local de la Laptop
Ir a VPN
Cliente OpenVPN(Gw2Gw)
Añadir configuración del Tunel
Nombre de la conexión: vpnsucursal1
Conectar a: 149.56.218.X
Cargar Certificado: Descargar certificado del Servidor VPS 149.56.218.X
VPN --> Servidor OpenVPN --> Descargar Certificado
Seleccionar Archivo Ej: /home/tuxito/Descargas/cacert.pem
PKCS#12 contraseña de desafÃo: Dejar vacÃo
Nombre de usuario: tuxito
Contraseña: Lolcito.123

Configuración Avanzada del Tunel


Tipo de dispositivo: TAP
Tipo de Conexión Con Puente
Enlazar a VERDE
Usar compresión LZO (check)
Protocolo UDP
Guardar

Se ve lista de conexiones; click en el check de Acciones (Descativar y


Activar)
Verificar que Estado diga "Establecida"

Verificar conexiones establecidas de clientes VPN en el Servidor VPS


=====================================================================
Ir a Estado ---> Conexiones VPN

6.- Configurar El cliente VPN Móvil en Winbugs


==============================================================================
Descargar e Instalar OpenVPN para windows desde
https://openvpn.net/index.php/open-source/downloads.html

Crear archivo de configuración


$> C:\Archivos de Programas\openvpn\config\clusterN.ovpn
------------------------------------------------------------------------------
client
dev tap1
proto udp
remote 149.56.218.X 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca cacert.pem
auth-user-pass tuxito.pk
comp-lzo
route 192.168.7.0 255.255.255.0
-----------------------------------------------------------------------------

Crear archivo con clave de tuxito


C:\Archivos de Programas\openvpn\config\tuxito.pk
tuxito
CLAVEDETUXITO

Descargar el certificado cacert.pem desde Endian y copiar a C:\Archivos de


Programas\openvpn\config\
Luego iniciar VPN
Abrir como administrador C:\Archivos de Programas\openvpn\bin\Openvpn-gui.exe

En el system tray dar doble click al Ãcono de OpenVPN

Probar conexión
ping a Endian
cmd> ping 192.168.7.X

ping a server linuxlan1


cmd> ping 192.168.7.Y
VPN puros Entre servidores CentOS
##############################################################################
########

VPN Central en CentOS


=================================================================
1) Instalar epel
$> yum -y install epel-release

2) Instalar OpenVPN y OpenSSL


------------------------------------------------
$> yum -y install openvpn openssl

************************************ Configuracion de VPN con claves secretas


compartidas ******************************
$> vim /etc/openvpn/central.conf
# dispositivo de tunel
dev tun0
# usamos: ifconfig ipdelserver ipdelcliente
ifconfig 10.1.0.1 10.1.0.2
# Clave del servidor
secret /etc/openvpn/sucursal1.key
#puerto
port 1194
#usuario bajo el cual ejecutaremos
user nobody
group nobody
#Rutas del vpn de la red remota
route 192.168.122.0 255.255.255.0
#up ./office.up

# opciones, comprimir con lzo, ping cada 15 segs, verbose 1 (bajo)


comp-lzo
ping 15
verb 1

Generar Clave para la suscursal 1


--------------------------------------------------
$> openvpn --genkey --secret /etc/openvpn/sucursal1.key
Habilitar boleano
$> setsebool -P allow_ypbind 1

Iniciar openvpn de la central


$> systemctl start openvpn@central.service

Habilitar el arranque automático


$> systemctl enable openvpn@central.service

Configurar la VPN sucursal


===========================================================================
1) Instalar epel
$> yum -y install epel-release

2) Instalar OpenVPN y OpenSSL


$> yum -y install openvpn openssl

$> vim /etc/openvpn/server.conf


# dispositivo de tunel
dev tun0
# Apuntamos al ip publico de la central
remote 149.56.114.250 1194
# usamos: ifconfig ipdelserver ipdelcliente
ifconfig 10.1.0.2 10.1.0.1
# Clave del servidor
secret /etc/openvpn/sucursal1.key
#puerto
port 1194
#usuario bajo el cual ejecutaremos
user nobody
group nobody
#Rutas del vpn
route 192.168.50.0 255.255.255.0
#up ./office.up

# opciones, comprimir con lzo, ping cada 15 segs, verbose 1 (bajo)


comp-lzo
ping 15
verb 1

Copiar clave remota compartida (sucursal1.key)


$> cd /etc/openvpn
$> scp 149.56.114.250:/etc/openvpn/sucursal1.key /etc/openvpn

$> restorecon -FRvv /etc/openvpn

Iniciar VPN
$> systemctl start openvpn@server.service

Pruebas
----------------------------

Desde sucursal hacer ping


$> ping 192.168.50.2

Desde centarl hacer ping


$> ping 192.168.122.10

Configuracion de punto movil


------------------------------------------------------------
Central
----------------
$> vim /etc/openvpn/movil1.conf
# dispositivo de tunel
dev tun1
# usamos: ifconfig ipdelserver ipdelcliente
ifconfig 10.2.0.1 10.2.0.2
# Clave del servidor
secret /etc/openvpn/movil1.key
#puerto
port 1195
#usuario bajo el cual ejecutaremos
user nobody
group nobody

# opciones, comprimir con lzo, ping cada 15 segs, verbose 1 (bajo)


comp-lzo
ping 15
verb 1

Generar Clave
-----------------------
$> openvpn --genkey --secret /etc/openvpn/movil1.key

$> systemctl restart openvpn@movil1


$> systemctl enable openvpn@movil1

* COnfiguracion de firewall
Habilitar puerto udp 1195

* Configuracion de SELINUX
Habilitar puerto 1195 para el contexto openvpn_port_t
$> yum -y install policycoreutils-python
$> semanage port -a -t openvpn_port_t -p udp 1195

Configurar Cliente windows


------------------------------------------
Instalar OpenVPN para winbugs

$> notepad c:/Archivos de Programas/Openvpn/config/central.ovpn


dev tun
ifconfig 10.0.0.2 10.0.0.1
proto udp
remote 149.56.114.250 1195
resolv-retry infinite

# Downgrade privileges after initialization (non-Windows only)


;user nobody
;group nobody
# Try to preserve some state across restarts.
#persist-key
persist-tun
# port number here. See the man page
# if your proxy server requires
# authentication.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# Wireless networks often produce a lot


# of duplicate packets. Set this flag
# to silence duplicate packet warnings.
#;mute-replay-warnings

# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key secret.key
secret movil1.key

# Enable compression on the VPN link.


# Don't enable this unless it is also
# enabled in the server config file.
comp-lzo

# Set log file verbosity.


verb 3

# Silence repeating messages


mute 20

route 192.168.50.0 255.255.255.0

Copiar clave con winscp 149.56.114.250


c:/Archivos de Programas/Openvpn/config/movil1.key

Iniciar el vpn en el icono Openvpn – Gui

CapÃtulo 15: Gestión de Storage: FileSystem Local y en Red


#############################################################################

Particionamiento de discos (fdisk)


##############################################################################
########

Se agrega un disco al VPS de 2 GB

Si se deseas desde una máquina virtual local con VirtManager


$> virt-manager
Con el asistente gráfico asignamos un nuevo disco a la máquina
virtual (click en la máquina virtual y luego ir a Editar-> Detalles de la
máquina virtual)
Luego le damos click al icono del foco "Mostrar detalles de la máquina
virtual"
Click en agregar hardware, Seleccionamos Storage; crear imagen de disco
de 2GB
Desmarcar "Alojar en este momento la totalidad del disco"
Tipo de Disco: Disco VirtIO

Ejecutar en el VPS
==============================================================================
===
Utilidades de Discos:
-------------------------
fdisk,parted,mkfs,fsck,mount,df,blkid
--------------------------------------
$> fdisk -l
Muestra todas las particiones de todos los discos incluidos los discos usb
de una tabla de partición DOS

$> parted -l
Muestra todas las particiones de todos los discos incluidos los discos usb
de una tabla de partición DOS o GPT

$> df -h
Muestra informacion de las particiones montadas y los espacios usados

$> mount
Muestra los dispoditivos montados y sus opciones de montaje

$> cat /etc/fstab


Muestra la configuracion de los puntos de los montajes de
las particiones de disco

$> blkid /dev/vda1


Muestra el UUID de una partición; esa información puede ser
usado en el fstab

Ejercicio Particionar el nuevo disco agregado a la máquina virtual:


-------------------------------------------------------------------

$> su -

Ver los últimos cambios en el kernel al conectar un nuevo disco externo (ej:
usb)
$> dmesg

$> fdisk -l
este comando verifica como se detecto el disco ej:/dev/vdb

ejecutar la utilidad de particiones de discos en el disco nuevo


(suponiendo que ha sido detectado como /dev/vdb)
$> fdisk /dev/vdb

m --> muestra ayuda


p --> imprime la lista de particiones
d --> borra particion, si hay mas de una, se pide el numero
de particion
w --> escribe los cambios de particiones en modo fisico

Creando una particion primaria:


-------------------------------
n --> crea una nueva particion
p --> crea una particion primaria
1 --> crea la primera particion primaria
Enter --> elige el cilindro 1 como inicio
+1G Enter --> tamaño de la particion 1G
w --> escribe los cambios en el disco

$> fdisk -l

Si se equivocó en el particionamiento, entonces:

d --> borra
n --> nuevamente crea particion
p --> lista las particiones

observacion: Se pueden crear hasta 4 particiones primarias


Bloques: Muestra el numero de bytes ocupados por una particion

Ejercicio creando dos particiones primarias en el disco nuevo de 2 GB


---------------------------------------------------------------------
$> fdisk /dev/vdb

Primero borro la partición existente


d

Luego imprimo la tabla de particiones


p

Crear una nueva partición


n --> crea una nueva particion
(consulta si se quiere crear una
particion primaria o extendida)

p --> aqui sale el número de particion que quiero crear


1
Primer cilindro: Enter
last cilindro: +1G
p --> lista mi tabla de particiones
n
p
2
primer cilindro: Enter
Ultimo cilindro: Enter
p
w --> graba las modificaciones
$> fdisk -l

Ejercicio: Crear 5 particiones (2 primarias, 1 extendida y 2 lógicas)


----------------------------------------------------------------------
$> fdisk /dev/vdb
p
d
1
d
n
p
1
Enter
+512M
n
p
2
Enter
+512M
n
e ---> crea una particion extendida
3 ---> numero de particion 3
Enter
Enter
p ---> Tenemos 2 primarias y 1 extendida
n
l ---> Crea una logica
Enter
+512M
n
l
Enter
Enter
p --> Tenemos 2 primarias, una extendida y 2 logicas
w

$> fdisk -l

Con las particiones creadas, se formateará de la siguiente forma:


/dev/vdb1 ------------> ext3
/dev/vdb2 ------------> ntfs
/dev/vdb5 ------------> ext4
/dev/vdb6 ------------> swap

Formatear partición en ext3


$> mkfs.ext3 /dev/vdb1

Formatear partición en ntfs


* Le vamos a dar primero soporte de ntfs a rhel

Instalamos epel
$> yum -y install epel-release

$> yum -y install fuse-ntfs-3g


$> yum -y install ntfsprogs

$> mkfs.ntfs /dev/vdb2


Formatear partición en ext4
$> mkfs.ext4 /dev/vdb5

Formatear como disco swap una partición


$> mkswap /dev/vdb6

Ahora crear directorios para montar las particiones


$> mkdir /data1
$> mkdir /data2
$> mkdir /data3

Montar las particiones


$> mount -t ext3 /dev/vdb1 /data1
$> mount /dev/vdb2 /data2 (si no se le pone -t autodetecta el tipo)
$> mount /dev/vdb5 /data3

$> mkdir /data1/prueba


$> ls /data1
$> df -h
$> yes > /data2/archivo
$> df -h

Desmontar el /data2
$> umount /data2
ó
$> umount /dev/vdb2

Definir un punto de montaje permanente, que se monte automáticamente


##########################################################################
al reiniciar el equipo (montar /data1)

$> blkid /dev/vdb1 (me va a mostrar el UUID)


$> vim /etc/fstab (Agregar al final del archivo)
UUID=XXXXXXXXX /data1 ext3 defaults 0 0

Como punto de montaje predefinido el mount se simplifica


$> mount /data1
$> umount /data1

Ampliar el disco swap


---------------------------
Verifico el tamaño del swap actual
$> free

Verifico el UUID de la nueva partición swap


$> blkid /dev/vdb6

Agrego la definición de swap al /etc/fstab


$> vim /etc/fstab
UUID=YYYYYYYY swap swap defaults 0 0

Deshabilito todas las particiones swap


$> swapoff -a

Habilito ahora todas las particiones swap, para que se lea la nueva
partición
$> swapon -a

Verificar el nuevo tamaño del swap


$> free

Comentar las 2 últimas lineas agregadas al fstab


$> vim /etc/fstab
#
#

$> swapoff -a
$> swapon -a

$> cat /etc/mtab


Muestra informacion de las particiones montadas y sus logs (sistema
de archivos,permisos)

Verificar errores en una partición


---------------------------------------
Se debe primero desmontar la partición
$> umount /dev/vdb1

Luego se comprueba los errores de acuerdo al tipo de sistema de archivos


$> fsck.ext3 /dev/vdb1

Particionar con Parted


##########################################################################
Borrar todos los puntos de montaje agregados en /etc/fstab con fdisk
/data1
swap

Ej
UUID=d6b368fd-0009-450b-90ae-88a27e467e2b /data1 ext3 defaults 0 0
UUID=151acef4-d21c-487e-8a0f-008367142bdc swap swap defaults 0 0

Borrar esas lÃneas

$> umount /data1


$> umount /data2
$> umount /data3
$> swapoff -a
$> swapon -a

Particionando el disco con parted


$> parted /dev/vdb

Ayuda de parted
(parted) help

Imprimir tabla de particiones actual


(parted) print

Definiendo el tipo de tabla de particiones (gpt, msdos)


(parted) mklabel gpt
Borrar todas las particiones: Yes

Crear una particion (todas las creará como primarias)


(parted) mkpart
¿Nombre de la partición? []? data1
¿Tipo de sistema de ficheros? [ext2]?
¿Inicio? 1
¿Fin? 512

(parted) mkpart
¿Nombre de la partición? []? data2
¿Tipo de sistema de ficheros? [ext2]?
¿Inicio? 512
¿Fin? 1024

(parted) mkpart
¿Nombre de la partición? []? data3
¿Tipo de sistema de ficheros? [ext2]?
¿Inicio? 1024
¿Fin? 2147 (se ve en el detalle del disco)

(parted) quit

$> parted -l

Luego se formatean con mkfs.xxx y se definen los puntos de montaje permanente


en el /etc/fstab como en el anterior laboratorio.

Gestion de Volúmenes Lógicos LVM


##############################################################################
########
Conectarse al VPS por ssh

Listar los discos de la VM


$> parted -l

Instalar las utilidades de lvm


$> yum -y install lvm2

Si la instalación de CentOS es minima y no se definieron particiones en LVM


reiniciar
$> reboot

Visualizar los Volúmenes FÃsicos y a que grupo de volumen estan asignados


$> pvscan

Visualizar los Grupos de Volumenes existentes


$> vgscan

Visualizar los Volúmenes Lógicos existentes


$> lvscan

Particionar el nuevo disco y crear 1 particion primaria de 1024M en un disco


gpt
##############################################################################
###
Borramos primero las particiones anteriores
$> parted /dev/vdb
(parted) mklabel gpt
Delete All: Yes
(parted) print
(parted) mkpart
¿Nombre de la partición? []? home
¿Tipo de sistema de ficheros? [ext2]?
¿Inicio? 1
¿Fin? 1024
(parted) print
(parted) quit

$> parted -l

Crear un Volumen FÃsico


$> pvcreate /dev/vdb1
warning ..... : y

Ver los volúmenes fÃsicos existentes


$> pvscan

Crear un grupo de Volumen


$> vgcreate VolGroup /dev/vdb1

Ver los VG existentes


$> vgscan

Mostrar información de un Grupo de volumen creado


$> vgdisplay VolGroup

Crear un nuevo volumen lógico


$> vgdisplay VolGroup (me da info del espacio libre)
$> lvcreate VolGroup -n home -L 972M

Borrar un volumen logico (No ejecutar)


$> lvscan (me da info de los volumenes lógicos)
$> lvremove /dev/VolGroup/home

Montar el nuevo volumen lógico en un directorio


$> cd /
$> mkdir home.old
$> mv home/* home.old

Formateamos el nuevo volumen lógico con ext4 y lo montamos en home


$> mkfs.ext4 /dev/mapper/VolGroup-home
$> mount /dev/mapper/VolGroup-home /home
$> df -h (vemos que el home tiene 1 GB)

Movemos todo lo del home antiguo al nuevo home


$> mv /home.old/* /home

Restaurar contextos de selinux


$> restorecon -FRvv /home
Agregamos el nuevo punto de montaje para el home
$> vim /etc/fstab (Agregar al final)
/dev/mapper/VolGroup-home /home ext4 defaults 0 0

Llenamos la particion
$> yes > /home/data
$> df -h

Creamos una nueva partición para definirlo como PV y anexarlo


al VG existente
###################################################################
$> parted /dev/vdb
(parted) print
(parted) mkpart
¿Nombre de la partición? []? home2
¿Tipo de sistema de ficheros? [ext2]?
¿Inicio? 1024
¿Fin? 2147
(parted) print
(parted) quit

Redimensionar el volumen lógico para darle mas espacio


------------------------------------------------------
creamos el volumen fÃsico
$> pvcreate /dev/vdb2

Verificamos los pv asociados a un VG


$> pvscan

agregamos el volumen fÃsico al grupo de volumenes


$> vgextend VolGroup /dev/vdb2

$> pvscan

verificamos el nuevo espacio libre


$> vgdisplay VolGroup

desmontamos el home
$> umount /home

agregamos el espacio libre del VolGroup al volumen lógico y redimensionamos


el filesystem
$> lvextend /dev/mapper/VolGroup-home -L 1,99G

Verificamos que no haya errores en el filesystem


$> e2fsck -f /dev/mapper/VolGroup-home
ó
$> xfs_repair -f /dev/mapper/VolGroup-home

Redimensionamos el filesystem a su máximo tamaño posible


$> resize2fs /dev/mapper/VolGroup-home

montamos nuevamente el home y comprobamos el nuevo espacio libre


$> mount /home
$> df -h
NFS Server (la máquina virtual)
##############################################################################
###
Instalamos los paquetes necesarios
$> yum -y install rpcbind nfs-utils

Habilitar servidor NFS


$> systemctl start rpcbind
$> systemctl start nfs-lock
$> systemctl start nfs-server
$> systemctl enable nfs-lock
$> systemctl enable nfs-server
$> systemctl enable rpcbind

Crear un recurso compartido


$> mkdir /compartir
$> chmod 777 /compartir
$> touch /compartir/notas

Definir un recurso compartido


$> vim /etc/exports
/compartir *(rw) ---> se esta compartiendo el directorio /compartir
a todo el mundo (*) en modo lectura y escritura

/media 192.168.3.0/24(ro)--> se esta compartiendo el directorio


media a la red 192.168.3.0/0 en modo
solo lectura
$> systemctl restart nfs-server
$> exportfs ----> visualiza los recursos compartidos definidos

Definir puertos del NFS (agregando al final)


------------------------------------------------
$> vim /etc/sysconfig/nfs

RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020

Habilitación de Puertos en el Firewall


-------------------------------------------------
tcp 111
tcp 662
tcp 875
tcp 892
tcp 2049
tcp 20048
tcp 32803
udp 111
udp 662
udp 875
udp 892
udp 2049
udp 20048
udp 32769
$> yum -y install firewalld
$> systemctl start firewalld
$> systemctl enable firewalld
$> firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --permanent --add-port=662/tcp
firewall-cmd --permanent --add-port=875/tcp
firewall-cmd --permanent --add-port=892/tcp
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=20048/tcp
firewall-cmd --permanent --add-port=32803/tcp
firewall-cmd --permanent --add-port=111/udp
firewall-cmd --permanent --add-port=662/udp
firewall-cmd --permanent --add-port=875/udp
firewall-cmd --permanent --add-port=892/udp
firewall-cmd --permanent --add-port=2049/udp
firewall-cmd --permanent --add-port=20048/udp
firewall-cmd --permanent --add-port=32769/udp
$> firewall-cmd --reload

Reiniciar NFS
$> systemctl restart nfs-server

Verificar los puertos que está haciendo el NFS


$> rpcinfo -p

NFS cliente (Trabajar con los VPS de sus compañeros)


#########################################################################
Instalar el paquete de cliente NFS
$> yum -y install nfs-utils

Verificar los recursos compartidos de un servidor NFS


$> showmount -e 192.168.3.X

Montar un recurso compartido del servidor NFS a un directorio local


$> mkdir /compartidoremoto
$> chmod 777 /compartidoremoto
$> mount -t nfs 192.168.3.X:/compartir /compartidoremoto

Verificar los dispositivos montados


$> mount
$> df -h
$> mkdir /compartidoremoto/prueba

En el servidor remoto ejecutar


$> ls -la /compartir

Desmontar el recurso nfs


$> umount /compartidoremoto

Caso Práctico
##################################################################
(Compartir un iso de instalacion por NFS, para instalar por red), esto se usa
con un net-install o para máquinas Virtuales.

En el servidor nfs descargar el iso Ej: /root/centos7.iso


Luego montar el iso en un directorio que se va a compartir por NFS
$> mkdir /centos7
$> mount -o loop /root/centos7.iso /centos7

Ahora compartir el directorio /centos7 a todo el mundo en modo solo lectura


$> vim /etc/exports
/centos7 *(ro)

$> service nfs restart

Cuando pongamos la url de instalación será:


nfs://192.168.3.X:/centos7

* ISCSI Server
##############################################################################
#############################
Vamos a configurar un servidor de storage en la máquina virtual compartiendo
discos
a través de iscsi

Creamos con Virt-Manager un disco virtual de 2 GB (VirtIO Disk) y se lo


agregamos a
nuestra máquina virtual

Iniciamos el servidor y nos logueamos como root

Listamos los disco reconocidos


$> parted -l (nos muestra los disco; ejemplo nuestro nuevo disco es
/dev/vdc)

Ahora creamos la tabla de partición GPT


$> parted /dev/vdc
(parted) mklabel gpt
(parted) quit

Instalación de ISCSI server


------------------------------------------------------------------------------
------------------------------
$> yum -y install epel-release
$> yum -y install scsi-target-utils

Editamos la configuración de iscsi (Agregamos al final)


$> vim /etc/tgt/targets.conf
---------------------------------------------------------------------------
# Identificador del disco (LUN)
<target iqn.2016-01.server:target0>
# Disco en red a compartir
backing-store /dev/vdc
# Ip del servidor que puede montar este disco (iscsi initiator)
# en clase es la Ip del cliente
initiator-address 192.168.3.X
# usuario y contraseña de autenticacion
incominguser pepito pepito
</target>
---------------------------------------------------------------------------

$> systemctl start tgtd


$> systemctl enable tgtd

Verificación de LUNs compartidas


$> tgtadm --mode target --op show

Opciones de firewall (puerto 3260 tcp)


$> firewall-cmd --permanent --add-port=3260/tcp
$> firewall-cmd --reload

* ISCSI cliente (Host Anfitrion)


##############################################################################
###################################
Ahora que hemos configurado el servidor, en la máquina cliente (host
anfitrión), instalaremos el cliente iscsi
y montaremos el disco en red

Instalación de ISCSI cliente


$> yum -y install iscsi-initiator-utils

Configuración
$> vim /etc/iscsi/iscsid.conf
------------------------------------------------------------------------
41:node.startup = automatic
57:node.session.auth.authmethod = CHAP
61:node.session.auth.username = pepito
62:node.session.auth.password = pepito
------------------------------------------------------------------------

$> systemctl enable iscsid

Autodescubriendo los LUNs y montándolos


$> iscsiadm --mode discovery -t sendtargets --portal 192.168.3.X --login

Verificando que se inicio el servicio


$> systemctl status iscsid

Verificando si el kernel detecto el disco


$> dmesg

Verificando los LUNs montados


$> iscsiadm --mode session --op show

Obteniendo información detallada del LUN montado


$> iscsiadm --mode session -P 3

Listando los discos locales (ya se puede visualizar el disco en red)


$> parted -l

Ahora vamos a particionar el nuevo disco detectado (ej: en el host anfitrion


se ve como sdb)
$> parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart
¿Nombre de la partición? []? data
¿Tipo de sistema de ficheros? [ext2]?
¿Inicio? 1
¿Fin? 2147
Aviso: The resulting partition is not properly aligned for best performance.
Descartar/Ignore/Cancelar/Cancel? Ignore
(parted) print
(parted) quit

$> parted -l
$> mkfs.xfs /dev/sdb1
$> mkdir /data
$> mount /dev/sdb1 /data
$> yes > /data/boom
$> df -h
$> mount

Definiendo el punto de montaje de forma permanente (NO EJECUTAR EN CLASE)


$> vim /etc/fstab (agregar al final)
/dev/sdb1 /data xfs _netdev,rw,seclabel,relatime,attr2 0 0

Capitulo 16: firewall Bastion Host, SELINUX


##############################################################################
########

Firewalls en Linux
##############################################################################
###################
- El firewall de host (FIREWALL BASTION HOST) solo protege a la maquina local
o servidor
- El firewall de red (FIREWALL PERIMETRAL) protege a la maquina local y redes
que pudieran estar detras de ella

Esquema de un firewall Bastion Host


##############################################################################
###

Firewall Bastion Host como servidor


------------------------------------------------------------------------------
---

HOST HOST
Servidor Cliente
________ ________
| |<-----------------------------| |
| ssh | -A INPUT -p tcp --dport 22 | | * Restricción de origen
| tcp | -m state --state | | INPUT: -s IPoHost
| 22 | NEW,ESTABLISHED,RELATED | |
| | | |
| | | |
| |----------------------------->| |
-------- -A OUTPUT -p tcp --sport 22 ---------
-m state --state OUTPUT: -d IPoHost
ESTABLISHED,RELATED

Firewall Bastion Host como cliente


------------------------------------------------------------------------------
---

HOST HOST
Cliente Servidor
________ ________
| |----------------------------->| |
| ssh | -A OUTPUT -p tcp --dport 22 | ssh | * Restricción de
destino
| tcp | -m state --state | tcp | OUTPUT: -d IPoHost
| 22 | NEW,ESTABLISHED,RELATED | 22 |
| | | |
| | | |
| |<-----------------------------| |
-------- -A INPUT -p tcp --sport 22 ---------
-m state --state INPUT: -s IPoHost
ESTABLISHED,RELATED

Configuración del Firewall Bastion Host


##############################################################################
#
tareas principales de un firewall

1.- Filtrado de paquetes--------------------->firewall bastion

Tabla FILTER
-----------------------------------------------------------
- INPUT paquete que entra al host
- OUTPUT paquete que salen del host
- FORWARD paquetes que pasa por el host (Firewall de perÃmetro)

2.- Nat (Firewall de perÃmetro)

Tabla NAT
-----------------------------------------------------------
-PREROUTING, permite asignar NAT de Destino (DNAT)
-POSTROUTING, permite asignar NAT Fuente (SNAT)
-INPUT
-OUTPUT

3.- Ruteo Avanzado y QoS

Tabla MANGLE
----------------------------------------------------------
- PREROUTING
- POSTROUTING
- INPUT
- OUTPUT
- FORWARD
IPTABLES
################################################################
Opciones del comando:
-P policy (politica por defecto) DROP, ACCEPT
-i input interface
-o output interface
-p protocol (tcp,udp,icmp
-s source address (IP o red de origen)
-d destination address (IP o red de destino)
-t table (tabla: filter, nat)
-A Append (agrega una regla en una chain cadena; al final)
filter: INPUT, OUTPUT, FORDWARD
nat: PREROUTING, POSTROUTING
-I Insert (agrega una regla en una chain al inicio)
-X Borra una regla en una chain
-F Borra todas las reglas de un chain
--sport source port (puerto de origen)
--dport destination port (puerto de destino)
-m module (modulo adiccional cargado)
ejemplo
-m multiport me da opciones
--sports (multiples puertos de origen)
-j jump (indica que hacer con el paquete) (DROP, ACCEPT, REJECT,
DNAT,SNAT,LOG)

----------------------------------------------------
-L lista las reglas definidas (apesta)
-S lista las reglas definidas (formato legible)
-n no resuelve nombres de host
-N crea una nueva cadena

===============================

$> iptables -L -n ----------------------> muestra las reglas de la tabla de


filtrado
$> iptables -S --> muestra las reglas de filtrado

$> iptables -L -n -t nat -t nat ---------------> muestra las reglas


del tabla NAT
$> iptables -S -t nat --> muestra las reglas de filtrado de la tabla NAT

$> systemctl stop firewalld (detiene el firewalld de CentOS y borra todas las
reglas)

$> iptables -S

Creando un firewall Bastion Host


##############################################################################
##########3
Instalamos el servicio iptables para reemplazar a firewalld
$> yum -y install iptables-services
$> systemctl enable iptables

Creando el script de firewall


##############################################################################
######

$> vim firewall-bastion


------------------------------------------------------------------------------
----
#!/bin/bash
# Firewall Bastion Aula Útil
# 2017

echo "limpiando todas las reglas, deshabilitando firewalld"


systemctl stop firewalld
systemctl disable firewalld
/usr/libexec/iptables/iptables.init stop

echo "Estableciendo la politica por defecto a DROP"


iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

echo "configurando INPUT y OUTPUT"


echo "dando acceso total al loopback"
# todo lo que entra y sale desde el loopback se acepta
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

################ Nuestro host como SERVIDOR


######################################################3
echo "permitiendo acceso al servidor SSH (protocolo tcp, puerto 22) desde
cualquier origen "
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j
ACCEPT

# ejemplo permitir SSH solo a la LAN


# iptables -A INPUT -i eth0 -p tcp -s 192.168.3.0/24 --dport 22 -m state
--state NEW,ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -o eth0 -p tcp -d 192.168.3.0/24 --sport 22 --m state
--state ESTABLISHED,RELATED -j ACCEPT

############### Nuestro host como cliente


#############################################################
echo "habilitando navegacion a internet desde nuestro host hacia los puertos
SSH,FTP,HTTP y HTTPS"
iptables -A OUTPUT -p tcp -m multiport --dports 20,21,22,80,443 -m state
--state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports 20,21,22,80,443 -m state
--state ESTABLISHED,RELATED -j ACCEPT

echo "habilitando las consultas DNS desde nuestro host"


iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j
ACCEPT
############### Reglas de Ping
#########################################################################
echo "permitiendo el ping desde la LAN a nuestro host"
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.3.0/24 -m
state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -d 192.168.3.0/24 -m state
--state ESTABLISHED,RELATED -j ACCEPT

echo "haciendo ping desde nuestro host a la cualquier destino"


iptables -A OUTPUT -p icmp --icmp-type echo-request -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m state --state
ESTABLISHED,RELATED -j ACCEPT

#Guardando permanente las reglas


/usr/libexec/iptables/iptables.init save

------------------------------------------------------------------------------
--------------------------

Dando permisos de ejecución y ejecutando el firewall


$> chmod 755 firewall-bastion
$> ./firewall-bastion
$> iptables -S

Reiniciando el firewall para verificar las reglas guardadas


$> systemctl restart iptables
$> iptables -S

Reiniciar Docker, para ver las reglas que genera docker


$> systemctl restart docker
$> iptables -S
$> iptables -t nat -S

Agregando nuevas reglas; ejemplo servidor y cliente iscsi

$> vim firewall-bastion


------------------------------------------------------------------------------
----
#!/bin/bash
# Firewall Bastion Aula Útil
# 2017

echo "limpiando todas las reglas, deshabilitando firewalld"


systemctl stop firewalld
systemctl disable firewalld
/usr/libexec/iptables/iptables.init stop

echo "Estableciendo la politica por defecto a DROP"


iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

echo "configurando INPUT y OUTPUT"


echo "dando acceso total al loopback"
# todo lo que entra y sale desde el loopback se acepta
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

################ Nuestro host como SERVIDOR


######################################################3
echo "permitiendo acceso al servidor SSH (protocolo tcp, puerto 22) desde
cualquier origen "
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j
ACCEPT

echo "permitiendo acceso al servidor iscsi (protocolo tcp, puerto 3260) desde
ip del cliente iscsi "
iptables -A INPUT -p tcp --dport 3260 -s 192.168.7.X -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3260 -d 192.168.7.X -m state --state
ESTABLISHED,RELATED -j ACCEPT

############### Nuestro host como cliente


#############################################################
echo "habilitando navegacion a internet desde nuestro host hacia los puertos
SSH,FTP,HTTP y HTTPS"
echo "permitir conectarnos a cualquier servido iscsi"
iptables -A OUTPUT -p tcp -m multiport --dports 20,21,22,80,443,3260 -m state
--state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports 20,21,22,80,443,3260 -m state
--state ESTABLISHED,RELATED -j ACCEPT

echo "habilitando las consultas DNS desde nuestro host"


iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j
ACCEPT

############### Reglas de Ping


#########################################################################
echo "permitiendo el ping desde la LAN a nuestro host"
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.3.0/24 -m
state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -d 192.168.3.0/24 -m state
--state ESTABLISHED,RELATED -j ACCEPT

echo "haciendo ping desde nuestro host a la cualquier destino"


iptables -A OUTPUT -p icmp --icmp-type echo-request -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m state --state
ESTABLISHED,RELATED -j ACCEPT

#Guardando permanente las reglas


/usr/libexec/iptables/iptables.init save
------------------------------------------------------------------------------
--------------------------

Ejecutar script de firewall


$> ./firewall-bastioon

Verificar reglas
$> iptables -S

SELINUX
------------------------------------------------------------------------------
--------
Selinux nos permite establecer restricciones de acceso a archivos procesos y
puertos
con el uso de contextos y boleanos

SELINUX utiliza dos modelos de seguridad:


MAC - Control de Acceso Mandatorio
RBAC - Control de Acesso Basado en Roles

Por Defecto Linux usa el modelo de seguridad DAC (Control de Acceso Discreto)
La principal ventaja de MAC es que maneja la seguridad en los objetos
(Archivos y Directorios) y sujetos (procesos del sistema)

Cuando un sujeto, tal como una aplicación, intenta acceder a un objeto tal
como
a un archivo, el servidor de aplicación de polÃticas verifica un caché de
vector
de acceso (AVC), donde se registran los permisos de objeto y del sujeto. Si no
se
puede tomar una decisión basado en los datos en el AVAC, la petición
continua al
servidor de seguridad, el cual busca el contexto de seguridad de la
aplicación y
del archivo en una matriz. Los permisos son entonces otorgados o negados,
con un mensaje de avc: denied detallado en /var/log/messages.
Los sujetos y objetos reciben su contexto de seguridad a partir de la polÃtica
instalada, que también proporciona información para llenar la matriz de
seguridad
del servidor.

Además de ejecutarse en un modo impositivo (Enforcing), SELinux puede


ejecutarse
en un modo permisivo (Permissive), donde el AVC es verificado y se registran
los
rechazos, pero SELinux no hace cumplir esta polÃtica.

Modo de Ejecución de SELINUX


------------------------------------------------------------------------------
--------
Permissive 0 (no ejecuta bloqueos, solo loguea en
/var/log/audit/audit.log)
Enforcing 1 (ejecuta bloqueos activamente)

Saber el modo de ejecución de SELINUX


$> getenforce
$> sestatus

Establecer SELINUX en modo permisivo


$> setenforce 0 ó
$> setenforce Permissive

Establecer SELINUX en modo reforzado


$> setenforce 1 ó
$> setenforce Enforcing

Tipo de Ejecución de Bloqueo


------------------------------------------------------------------------------
---------
strict ---> Todos los procesos se protegen activamente (requiere un mayor
control)
targeted ---> Sólo los procesos y archivos marcados son protegidos

Archivo general de configuración


---------------------------------------------------------------
$> vim /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted

Contextos en SELINUX
-----------------------------------------------------------------------
Los contextos se aplican a procesos y archivos; cada proceso tiene
un contexto y muchas veces los archivos tienen que coincidir
con los contextos definidos para un proceso
Los comandos ps, ls, cp, mkdir, etc soportan la opción -Z
que permite visualizar los contextos

Procesos y sus contextos


-----------------------------------------------------------------------
$> ps axZ (todos los procesos con sus contextos)

$> ps axZ | grep tty2

-------> usuario ------> dominio


| |
system_u:system_r:getty_t:s0 1859 tty2 Ss+ 0:00 /sbin/mingetty
/dev/tty2
| | |
| ----> rango de influencia
--------------------> proceso
| (s0 todos)
---> rol

* Deshabilitar Docker
$> systemctl stop docker
$> systemctl disable docker

Instalamos apache
--------------------------
$> yum -y install httpd
$> systemctl start httpd
$> systemctl enable httpd

$> ps -ZC httpd

-------> rol de sistema


|
unconfined_u:system_r:httpd_t:s0 4151 ? 00:00:00 httpd
unconfined_u:system_r:httpd_t:s0 4154 ? 00:00:00 httpd
| |
| ------------> dominio httpd_t
---> usuario no confinado

Archivos y sus contextos


-----------------------------------------------------------------------

$> ls -Z /home -------> dominio


|
drwx------. alumno alumno unconfined_u:object_r:user_home_dir_t:s0 alumno
drwx------. tuxito tuxito unconfined_u:object_r:user_home_dir_t:s0 tuxito

$> ls -Z /var/www
-----------> dominio
|
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons

Cambiando los contextos


------------------------------------------------------------------------------
----------
Instalaremos los paquetes policycoreutils y policycoreutils-python para
disponer de los
comandos restorecon y semanage

$> yum -y install policycoreutils policycoreutils-python

Vamos a hacer una prueba con el servidor web

$> cd

Verificamos el contexto del Document Root


$> ls -Zd /var/www/html

------> usuario
|
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
|
---------> dominio

Creamos un archivo dento del raiz web


$> touch /var/www/html/index.html

Verificamos el contexto del archivo creado; vemos que ha heredado el dominio


del directorio
contenedor; pero no el usuario

$> ls -Z /var/www/html/index.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0
/var/www/html/index.html

Creamos 2 archivos en el /tmp


$> touch /tmp/prueba1
$> touch /tmp/prueba2

Verificamos los contextos de los archivos creados


$> ls -lZ /tmp/prueba*
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/prueba1
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/prueba2

Ahora copiamos prueba1 y movemos prueba2 al directorio raiz web


$> cp /tmp/prueba1 /var/www/html
$> mv /tmp/prueba2 /var/www/html

Verificamos los contextos de los archivos


$> ls -lZ /var/www/html/prueba*

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0


/var/www/html/prueba1
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0
/var/www/html/prueba2

Vemos que en el caso del archivo movido, mantiene el dominio original.

Si intentamos descargar el archivo prueba2 nos denegará


$> wget http://localhost
$> wget http://localhost/prueba1
$> wget http://localhost/prueba2

Esto se debe a que los contextos (usuario,rol y dominio) deben ser iguales a
los del i
directorio contenedor

Si queremos cambiar en forma especÃfica el contexto de un archivo ejecutamos


chcon
$> chcon system_u:object_r:httpd_sys_content_t:s0 /var/www/html/prueba2

otra forma de cambiar los contextos


es restablecer todos los contextos; acorde a los contextos del directorio
padre
$> restorecon -RFvv /var/www/html/
restorecon reset /var/www/html/index.html context
unconfined_u:object_r:httpd_sys_content_t:s0-
>system_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/prueba2 context
unconfined_u:object_r:user_tmp_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/prueba1 context
unconfined_u:object_r:httpd_sys_content_t:s0-
>system_u:object_r:httpd_sys_content_t:s0

Intentamos descargar los archivos web y ya funciona

$> wget http://localhost


$> wget http://localhost/prueba1
$> wget http://localhost/prueba2

* Para saber todos los contextos marcados en archivos y directorios;


ejecutamos
$> semanage fcontext -l

* para saber los contextos de los directorios web


$> semanage fcontext -l | grep httpd

Definiendo un contexto determinado a un directorio


---------------------------------------------------------------------------
Imaginemos que queremos crear un directorio para un dominio virtual en apache
en una ruta diferente a los directorios web; entonces será necesario, definir
un contexto similar al que tiene el directorio web /var/www/html

Definimos el virtual host en apache

$> vim /etc/httpd/conf.d/vhosts.conf


<VirtualHost *:80>
ServerName www.server.com
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Options Indexes FollowSymLinks
DirectoryIndex index.html index.php
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName www.dominio1.com
DocumentRoot "/dominio1"
<Directory "/dominio1">
Options Indexes FollowSymLinks
DirectoryIndex index.html index.php
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
$> mkdir /dominio1
$> echo "hola mundo" > /dominio1/index.html

Agregamos www.dominio1.com al /etc/hosts (agregar al final)


$> vim /etc/hosts
192.168.3.X www.server.com
192.168.3.X www.dominio1.com

Reiniciamos
$> systemctl restart httpd

Accedemos a www.dominio1.com
$> wget www.dominio1.com

Verificamos los contextos del directorio y archivo creado

$> ls -Zd /dominio1


drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /dominio1

$> ls -Z /dominio1
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 /dominio1/index.html

Necesitamos que los contextos sean similares a los del drectorio /var/www/html
$> ls -Zd /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html

Modificamos el contexto del directorio /dominio1


$> semanage fcontext -a -t httpd_sys_content_t "/dominio1(/.*)?"
| |
| ------> tipo de contexto
|
-----> agregar

El contexto es httpd_sys_content_t que establece que el usuario:system_u y


dominio:httpd_sys_content_t

Restablecemos los contextos correctos para el servicio apache


$> restorecon -RFvv /dominio1/
restorecon reset /dominio1 context unconfined_u:object_r:default_t:s0-
>system_u:object_r:httpd_sys_content_t:s0
restorecon reset /dominio1/index.html context
unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0

Verificamos el contexto del directorio /dominio1

$> ls -Zd /dominio1


drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /dominio1/

$> ls -Z /dominio1
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html

Accedemos de nuevo a www.dominio1.com


$> wget www.dominio1.com
$> cat index.html

Boleanos de SELINUX
----------------------------
Los servicios tienen unos determinados boleanos asociados; algunos de estos
bienen deshabilitados; por eso podemos habilitarlos dependiendo como los
necesitemos

Lista los boleanos y su descripción


$> semanage boolean -l

Para listar todos los boleanos y sus flags de estado


$> getsebool -a
.
.
.
xguest_connect_network --> on
xguest_mount_media --> on
xguest_use_bluetooth --> on
xserver_object_manager --> off

$> getsebool httpd_enable_cgi


httpd_enable_cgi --> on

Lista el boleano httpd_enable_cgi y para que sirve


$> semanage boolean -l | grep httpd_enable_cgi

Deshabilitar los cgis en forma temporal


$> setsebool httpd_enable_cgi off

Deshabilitar los cgis en forma permanente


$> setsebool -P httpd_enable_cgi off

$> getsebool httpd_enable_cgi


httpd_enable_cgi --> off

Ej: Acabo de instalar php como módulo de Apache y subo un


script en php que envÃa correo desde un servidor smtp en otro
host

Visualizo los booleanos relacionados a httpd


$> semanage boolean -l| grep httpd | less

De ellos verifico que necesito habilitar 2 booleanos


httpd_can_network_connect
httpd_can_sendmail

Ejecuto entonces
$> setsebool -P httpd_can_network_connect on
$> setsebool -P httpd_can_sendmail on

y pruebo el script

Depuración de bloqueos y logs de errores de SELINUX


-----------------------------------------------------------
Para poder depurar los errores de SELinux usamos las utilidades
sethroubleshoot
$> yum install setroubleshoot-server setroubleshoot setroubleshoot-plugins
vamos a crear un archivo test.html
$> cd
$> touch test.html

Lo movemos al raiz web


$> mv test.html /var/www/html

Descargamos
$> wget http://localhost/test.html
--2012-01-05 14:15:17-- http://localhost/test.html
Resolviendo localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:80... conectado.
Petición HTTP enviada, esperando respuesta... 403 Forbidden
2012-01-05 14:15:17 ERROR 403: Forbidden.

Visualizamos los logs


---------------------------------------------------------
$> tail -f /var/log/audit/audit.log
type=AVC msg=audit(1325791061.177:642): avc: denied { getattr } for
pid=4161 comm="httpd" path="/var/www/html/test.html" dev=sda1 ino=793811
scontext=unconfined_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
type=SYSCALL msg=audit(1325791061.177:642): arch=c000003e syscall=6 success=no
exit=-13 a0=7ff0db1a4588 a1=7fffa1de5100 a2=7fffa1de5100 a3=1 items=0
ppid=4151 pid=4161 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48
sgid=48 fsgid=48 tty=(none) ses=20 comm="httpd" exe="/usr/sbin/httpd"
subj=unconfined_u:system_r:httpd_t:s0 key=(null)

analizamos los logs con sealert


$> sealert -a /var/log/audit/audit.log | less
/test.html

Si queremos hacerlo en modo gráfico (Requiere RHEL 6.2) bug 625468


$> sealert -b

Capitulo 17: Instalación de DNS Server Público


##############################################################################
##########

Configuración del dominio público


##############################################################################
##########
Los dominios se adquieren en un proveedor de Dominios (register)
godaddy.com : com, org, net ...
punto.pe : pe, com.pe, org.pe ...
freenom.com : tk, ml ... (dominios gratuitos por 1 año)

Registrar un dominio gratuito en freenom


==================================================================
Crear una cuenta en http://www.freenom.com (usar la cuenta google)
Ir a la derecha superior, click en registrarse
Loguearse con cuenta google, facebook, o ms

1.- Registrar un nuevo dominio


======================================================================
Service --> Register a New Domain ej: aulautil.tk
Selected y luego checkout
Period: 12 Months Free ---> Continue
LLENAR DATOS del Formulario
Dar checkc en: I have read and agree to the Terms & Conditions
Finalizar con Complete Order
Click here to go to client area

Comprobar Registro
---------------------------------------------------------
Services --> My Domains

Configurar los registros pegamento o nombres de host de los DNS server


======================================================================
Se deben registrar primer los nombres de hosts de los servidores DNS
asociados a la IP pública del VPS
Ej:
ns1.aulautil.tk ---> 149.56.218.X
ns2.aulautil.tk ---> 149.56.218.X

* Freenom
Services --> My Domains
click en la fila del dominio en el botón "Manage Domain"
Management Tools --> Register Glue Records
Register a NameServer Name
Namserver: NS1
IP: 149.56.218.201 Save Changes

Register a NameServer Name


Namserver: NS2
IP: 149.56.218.201 Save Changes

Click en Back

Configurar los DNS Server del dominio


======================================================================
Click en Management Tools --> Nameservers
Use custom Nameserver:
Nameserver 1: ns1.aulautil.tk
Nameserver 2: ns2.aulautil.tk Change Nameservers

Resolución de Nombre de Host y Dominios


##############################################################################
####################

Resolución de hosts local


----------------------------------------------------------------------

La resolución local se hace con el nombre de host


con el comando hostnamectl

y nombres de hosts en
/etc/hosts

Resolución de hosts en red


-----------------------------------------------------------------------
Usamos un servidor DNS.
Los servidores DNS puede estar desplegados en diferentes zonas

DNS WAN: Es el servidor DNS que resuelve con Ips públicas los nombres de
nuestros dominios
Ej: ns1.telmex.net.pe
ns1.tudominio.com

DNS DMZ: Es el servidor DNS que resuelve con Ips privadas los nombres de los
servidores de la DMZ
solo se usa en DMZ, no debe ser usado en la LAN

DNS LAN: Es el servidor DNS que resuelve con Ips privadas los nombres de los
servidores de la DMZ
asà como los nombres de los equipos de la LAN; no debe ser usado en
la DMZ

Registros de DNS
------------------------------------------------------------------------
A Zona de dominio (ej: www.dominio.com)
NS Name Server (Servidores DNS del dominio)
SOA Servidor DNS principal (Server of Authorization)
MX Servidores de correo (Mail Exchange)
TXT Información adicional del dominio (ej: SFP para hotwww)
CNAME Alias de una zona de dominio (ej: web --> www.dominio.com)
PTR Resolución inversa

Comprobación de registros DNS con dig


------------------------------------------------------------------------
Instalar dig
$> yum -y install bind-utils

Dig tiene las siguientes Secciones

QUESTION SECTION consulta que se está realizando


ANSWER SECTION respuesta (si la hubiera de la consulta)
AUTHORITY SECTION detalle de los servidores de autorización (SOA)
ADDITIONAL SECTION información adicional de zonas y otros

Ejercicios:

Registro A
-----------------------------------------------------------------------------
Verificar la zona de dominio www.sunat.gob.pe

$> dig www.sunat.gob.pe


;; QUESTION SECTION:
;www.sunat.gob.pe. IN A ------> consulta

;; ANSWER SECTION:
www.sunat.gob.pe. 5 IN A 190.102.150.200 ----->
respuesta

Registro NS
-----------------------------------------------------------------------------
Verificar los DNS Server de sunat.gob.pe
$> dig NS sunat.gob.pe
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sunat.gob.pe. IN NS

;; ANSWER SECTION:
sunat.gob.pe. 2257 IN NS ns2.telmex.net.pe.
sunat.gob.pe. 2257 IN NS ns1.telmex.net.pe.

Registro MX
-----------------------------------------------------------------------------
Verificar los servidores de correo de sunat.gob.pe
$> dig MX sunat.gob.pe
;; QUESTION SECTION:
;sunat.gob.pe. IN MX

;; ANSWER SECTION:
sunat.gob.pe. 6245 IN MX 10 mx1.sunat.gob.pe.
sunat.gob.pe. 6245 IN MX 10 mx2.sunat.gob.pe.
sunat.gob.pe. 6245 IN MX 10 mx4.sunat.gob.pe.
sunat.gob.pe. 6245 IN MX 10 mx5.sunat.gob.pe.
sunat.gob.pe. 6245 IN MX 20 mx3.sunat.gob.pe.
sunat.gob.pe. 6245 IN MX 20 mx6.sunat.gob.pe.

Ejemplo de Configuración de los Registros MX


-------------------------------------------------
Balanceo de Carga
------------------------
sunat.gob.pe. IN MX 10 ns.sunat.gob.pe.
sunat.gob.pe. IN MX 10 ns1.sunat.gob.pe.

Alta Disponibilidad
------------------------
sunat.gob.pe. IN MX 10 ns.sunat.gob.pe.
sunat. gob.pe. IN MX 20 ns1.sunat.gob.pe.

Registro PTR
------------------------------------------------------------------------------
--
El PTR verifica que una IP tenga un nombre de hosts, normalmente se aplica a
los servidores de correo

Primero verificamos cuales son los servidores de correo de sunat


$> dig MX sunat.gob.pe
sunat.gob.pe. 6245 IN MX 10 mx1.sunat.gob.pe.
..
..
..
Ahora preguntamos por el registro A de uno de los servidores de correo
$> dig mx.sunat.gob.pe
;; QUESTION SECTION:
;mx1.sunat.gob.pe. IN A

;; ANSWER SECTION:
mx1.sunat.gob.pe. 1310 IN A 181.65.173.25

Vemos que la IP de mx1.sunat.gob.pe es 181.65.173.25


pasamos ahora a preguntar por el PTR de ese IP
$> dig -x 181.65.173.25
;; QUESTION SECTION:
;25.173.65.181.in-addr.arpa. IN PTR

;; ANSWER SECTION:
25.173.65.181.in-addr.arpa. 3596 IN PTR mx1.sunat.gob.pe.

registro TXT (SPF)


-------------------------------------------------------------------
Verificar si hay registro SPF en el dominio sunat.gob.pe
$> dig TXT sunat.gob.pe
;; QUESTION SECTION:
;sunat.gob.pe. IN TXT

;; ANSWER SECTION:
sunat.gob.pe. 7199 IN TXT "v=spf1 mx
include:spf.masterbase.com ~all"

Para crear un registro SPF ir a


www.spfwizard.com

Verificar TODOS los registros de DNS del dominio sunat.gob.pe


$> dig ANY sunat.gob.pe

;; QUESTION SECTION:
;sunat.gob.pe. IN ANY

;; QUESTION SECTION:
;sunat.gob.pe. IN ANY

;; ANSWER SECTION:
sunat.gob.pe. 6926 IN TXT "v=spf1 mx
include:spf.masterbase.com ~all"
sunat.gob.pe. 5362 IN MX 20 mx6.sunat.gob.pe.
sunat.gob.pe. 5362 IN MX 10 mx1.sunat.gob.pe.
sunat.gob.pe. 5362 IN MX 10 mx2.sunat.gob.pe.
sunat.gob.pe. 5362 IN MX 10 mx4.sunat.gob.pe.
sunat.gob.pe. 5362 IN MX 10 mx5.sunat.gob.pe.
sunat.gob.pe. 5362 IN MX 20 mx3.sunat.gob.pe.
sunat.gob.pe. 1088 IN NS ns1.telmex.net.pe.
sunat.gob.pe. 1088 IN NS ns2.telmex.net.pe.

Verificar si hay zona de dominio configurado para el dominio raiz


sunat.gob.pe
$> dig sunat.gob.pe
;; QUESTION SECTION:
;sunat.gob.pe. IN A

;; AUTHORITY SECTION:
sunat.gob.pe. 1734 IN SOA ns1.telmex.net.pe.
dnsmaster.telmex.net.pe. 2014101302 5400 600 90000 7200

Vemos que no está configurado el dominio raÃz como zona A (mala práctica)

Verificación de todos los registros mediante transferencias de zonas


---------------------------------------------------------------------------
$> dig axfr @DNSSERVER DOMINIO
$> dig axfr @ns1.telmex.net.pe sunat.gob.pe

Configuración del Servidor DNS en modo enjaulado chroot


##############################################################################
##########
* Natear el puerto 53 UDP desde el endian hacia el servidor VPS CentOS

Instalación del Servidor DNS


$> yum -y install bind bind-chroot bind-utils

Para configurar el DNS interno seguimos los siguientes procedimientos


Para esto tenemos que:
- Copiar los archivos de dns al entorno chroot
- Generar la firma digital
- Copiar la firma digital al entorno chroot
- Configurar los parámetros de DNS y el dominio en el archivo principal de
configuración de bind
/var/named/chroot/etc/named.conf
- Configurar los registros de dns en el archivo
/var/named/chroot/var/named/dominio.com.zone
- Configurar la resolución inversa en el archivo
/var/named/chroot/var/named/114.56.149.in-addr.arpa.zone
- Reiniciar el servidor DNS
- Configurar el dns cliente el archivo
/etc/resolv.conf apuntado a nuestra propia ip
- Hacer consultas de nuestro dominio con dig

Copiar los archivos del DNS al entorno chroot


$> cd /var/named
$> for f in named.* data dynamic slaves; do mv $f chroot/var/named/; ln -s
/var/named/chroot/var/named/$f /var/named/; done

Generar la firma digital


$> rndc-confgen -a -c /etc/rndc.key
$> chown named:named /etc/rndc.key

Copiar la firma digital al entorno chroot


$> cd /etc
$> for f in named.* rndc.key; do mv $f /var/named/chroot/etc/; ln -s
/var/named/chroot/etc/$f /etc/; done
Nota
----------------------------------------------------------------------------
Si se falla en algùn procedimiento en la instalación desinstalar y volver a
instalar

****** ejecutar solo si hay error al instalar ************


$> yum erase bind bind-chroot bind-utils
$> rm -fR /var/named
$> rm -fR /etc/named*
$> rm -f /etc/rndc.key
$> yum -y install bind bind-chroot bind-utils
------------------------------------------------------------------------------

Configurar los parámetros de DNS y el dominio en el archivo principal de


configuración de bind
/var/named/chroot/etc/named.conf
$> vim /var/named/chroot/etc/named.conf
-----------------------------------------------------------------------
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
// Ips en la que el demonio named escuchará las peticiones
// 149.56.114.X es la Ip pública del servidor zimbra
listen-on port 53 { 192.168.3.X;};
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// este parametro permite establecer quienes pueden usar el servidor DNS
allow-query { localhost; any; };
// este parametro permite reenviar las consultar hacia el servidor DNS
publico;
// para aquellos dominios que no se resuelven en este servidor
forwarders { 8.8.8.8; };
forward first;
allow-transfer {"none";};
recursion no;

dnssec-enable no;
dnssec-validation no;
dnssec-lookaside auto;

/* Path to ISC DLV key */


bindkeys-file "/etc/named.iscdlv.key";
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

// Zona raiz por defecto


zone "." IN {
type hint;
file "named.ca";
};

// Zona para nuestro dominio


zone "aulautil.tk" {
type master;
file "/var/named/chroot/var/named/aulautil.tk.zone";
allow-update { none; };
};

include "/etc/named.rfc1912.zones";
-------------------------------------------------------------------------

Creando los archivo zone por los dominios configurados


$> cd /var/named/chroot/var/named

$> vim aulautil.tk.zone


------------------------------------------------------------------------------
-
$TTL 86400
; @ representa este servidor
@ IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

; registro IN Tipo Valor secundario Valor principal


; ---------------- ------ ---- ---------------- ------------------
; cuando no hay nada en primera columna es igual a aulautil.tk.
aulautil.tk. IN NS ns1.aulautil.tk.
aulautil.tk. IN NS ns2.aulautil.tk.
; www es formato SQDN (Short Qualify Domain Name)
ns1 IN A 149.56.114.X
ns2 IN A 149.56.114.X
mail IN A 149.56.114.X
; www.aulautil.tk. es formato FQDN (Full Qualify Domain Name)
www.aulautil.tk. IN A 149.56.114.X
; el dominio raiz como zona A
aulautil.tk. IN A 149.56.114.X
aulautil.tk. IN MX 10 mail.aulautil.tk.
------------------------------------------------------------------------

Reiniciar los servicios


$> systemctl start named
$> systemctl enable named
$> systemctl status named
Si salen errores en el servicio; verificar los logs
$> tail -f /var/log/messages
$> less /var/log/messages
G

Nota si sale errores de permisos o selinux


------------------------------------------------
$> chgrp -R named /var/named/chroot/var/named
$> restorecon -FRvv /var/named/chroot/var/named
--------------------------------------------------

Reglas de Firewall si se desea consultar el DNS desde otro equipo

* Instalar firewalld
$> yum -y install firewalld
$> systemctl enable firewalld
$> systemctl start firewalld

$> firewall-cmd --add-service dns --permanent


$> firewall-cmd --reload

verificar el firewall con


$> iptables -S | grep 53

Comprobación del DNS público


##############################################################################
#####

Comprobación del DNS (ejecutar desde la laptop)


$> dig NS aulautil.tk
$> dig MX aulautil.tk
$> dig mail.aulautil.tk
$> ping aulautil.tk

Capitulo 18: Servidor Web (Apache + MySQL + PHP), Wordpress, FTP, PHPMyAdmin
##############################################################################
##########
Instalacion de paquetes con Webtatic (php 5.6)
-----------------------------------------------------------------------
$> rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-
7.noarch.rpm
$> rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

$> yum -y install httpd mariadb-server


$> yum -y install php56w php-cli56w php56w-mysql php56w-gd php56w-mcrypt
php56w-xml php56w-soap php56w-mbstring

Habilitar firewalld y permitir acceso a http (80) y https (443)

$> systemctl stop docker


$> systemctl disable docker
$> systemctl disable iptables
$> systemctl enable firewalld
$> systemctl start firewalld
$> firewall-cmd --add-service=http --permanent
$> firewall-cmd --add-service=https --permanent
$> firewall-cmd --reload

Natear en el firewall perimetral (Endian) el puerto 80 y 443 hacia


la Ip del servidor web

Configuracion de Apache (VirtualHost)


----------------------------------------------------
Cuando se instala apache el DocumenRoot (/var/www/html)
atiende al dominio por defecto http://localhost
Si queremos asociar un dominio principal al servidor
web ej: www.aulautil.tk simplemente hay que resolverlo por DNS
Público

$> systemctl start httpd


$> systemctl enable httpd
$> echo "<h1>Hola Mundo</h1>" > /var/www/html/index.html
Entrar con el navegador a
http://149.56.218.X
ó
http://www.aulautil.tk

VirtualHost en Apache
################################################################
$> vim /etc/httpd/conf.d/vhosts.conf

-----------------------------------------------------------
<VirtualHost *:80>
ServerName aulautil.tk
ServerAlias www.aulautil.tk
DocumentRoot "/var/www/html"
DirectoryIndex index.html index.php
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log combined
</VirtualHost>

<VirtualHost *:80>
ServerName intranet.aulautil.tk
DocumentRoot "/var/www/intranet"
DirectoryIndex index.html index.php
<Directory "/var/www/intranet">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/httpd/intranet.aulautil.tk-error_log
CustomLog /var/log/httpd/intranet.aulautil.tk-access_log combined
</VirtualHost>
--------------------------------------------------------------------------

Crear registro intranet.aulautil.tk en su DNS público

$> vim /var/named/chroot/var/named/aulautil.tk.zone


------------------------------------------------------------------------------
---------
$TTL 86400
; @ representa este servidor
@ IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

; registro IN Tipo Valor secundario Valor principal


; ---------------- ------ ---- ---------------- ------------------
; cuando no hay nada en primera columna es igual a aulautil.tk.
aulautil.tk. IN NS ns1.aulautil.tk.
aulautil.tk. IN NS ns2.aulautil.tk.
; www es formato SQDN (Short Qualify Domain Name)
ns1 IN A 149.56.218.X
ns2 IN A 149.56.218.X
mail IN A 149.56.218.X
; www.aulautil.tk. es formato FQDN (Full Qualify Domain Name)
www.aulautil.tk. IN CNAME aulautil.tk.
intranet.aulautil.tk. IN A 149.56.218.X
; el dominio raiz como zona A
aulautil.tk. IN A 149.56.218.X
aulautil.tk. IN MX 10 mail.aulautil.tk.
------------------------------------------------------------------------------
-------------

$>systemctl restart named

Creando los directorios para la resolucion de los host virtuales


-------------------------------------------------------------
$> mkdir /var/www/intranet

Creando archivos indexadores


*-------------------------

$> echo "hola mundo desde aulautil.tk" > /var/www/html/index.html


$> echo "hola mundo desde intranet" > /var/www/intranet/index.php

Restaurando los contextos web de selinux


$> restorecon -RFvv /var/www

Reniciando servidor web y probando


----------------------------------------
$> systemctl restart httpd

Entrar con el navegador


--------------------------------
http://www.aulautil.tk
http://intranet.aulautil.tk

Proxy Reverso
################################################################

$> vim /etc/httpd/conf.d/vproxy.conf


---------------------------------------------------------------------
<VirtualHost *:80>
ServerName erp.aulautil.tk
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ServerAlias erp.aulautil.tk
ProxyRequests Off
ProxyPass / http://192.168.3.X:8080/
ProxyPassReverse / http://192.168.3.X:8080/
ErrorLog /var/log/httpd/erp-error.log
</VirtualHost>
<VirtualHost *:80>
ServerName www.tromercio.com
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ServerAlias www.tromercio.com
ProxyRequests Off
ProxyPass / http://elcomercio.pe/
ProxyPassReverse / http://elcomercio.pe/
ErrorLog /var/log/httpd/tromercio-error.log
</VirtualHost>
----------------------------------------------------------

* Instalación de tomcat
$> yum -y install java-1.7.0-openjdk
$> cd /opt
$> wget http://www-us.apache.org/dist/tomcat/tomcat-7/v7.0.79/bin/apache-
tomcat-7.0.79.tar.gz
$> tar -zxvf apache-tomcat-7.0.79.tar.gz
$> mv apache-tomcat-7.0.79 tomcat

Iniciar Tomcat
$> /opt/tomcat/bin/catalina.sh start

Editar el /etc/hosts de su laptop


$> vim /etc/hosts
.
.
149.56.218.X www.tromercio.com

Configurar el registro erp.aulautil.tk en su DNS público


#> vim /var/named/chroot/var/named/aulautil.tk.zone
erp.aulautil.tk. IN A 149.56.218.X

$> systemctl restart named


* Habilitar el boleano de apache para que pueda conectarse por red

$> setsebool -P httpd_can_network_connect on

$> systemctl restart httpd

Luego Probamos el proxy reverso Entrando con el navegador a


www.tromercio.com
erp.aulautil.tk

WORDPRESS CMS
##############################################################################
##########
Wordpress es el CMS más popular del mundo; un cuarto de webs en el mundo
estan hechos con
Wordpress; existen muchos templates para Wordpress en https://themeforest.net
y su
hermano no reconocido https://gfxnull.net :D

Proceso de Instalación
==============================================================================
=
Primero creamos una base de datos y un usuario para wordpress
-------------------------------------------------------------------
$> systemctl start mariadb
$> systemctl enable mariadb
$> mysql -u root -p

Poniendo una contraseña al usuario root


------------------------------------------
mysql> SET PASSWORD FOR root@localhost=password("Lolcito.123");
mysql> quit

$> mysql -u root -p

Crear base de datos para wordpress


-----------------------------------
mysql> CREATE DATABASE portal;

Crear usuario para wordpress y darle permiso a la base de datos portal


mysql> GRANT ALL on portal.* TO wptux@localhost IDENTIFIED BY "tuxito";

mysql> quit

Instalar wordpress
-------------------------------------------------------------------------
$> cd /var/www
$> wget https://pe.wordpress.org/wordpress-4.7.2-es_PE.tar.gz
$> tar -zxvf wordpress-4.7.2-es_PE.tar.gz
$> mv html html_old
$> mv wordpress html
$> restorecon -RFvv /var/www
$> cd html
$> cp wp-config-sample.php wp-config.php
$> vim wp-config.php
----------------------------------------------------------------------------
/** El nombre de la base de datos de WordPress */
23: define('DB_NAME', 'portal');

/** Nombre de usuario de la base de datos de MySQL */


define('DB_USER', 'wptux');

/** Contraseña del usuario de la base de datos de MySQL */


define('DB_PASSWORD', 'tuxito');

49:define('AUTH_KEY', '.AKzSr6A3JaDLSDN.#T1231');
define('SECURE_AUTH_KEY', '.AKzSr6A3JaDLSDN.#T1231');
define('LOGGED_IN_KEY', '.AKzSr6A3JaDLSDN.#T1231');
define('NONCE_KEY', '.AKzSr6A3JaDLSDN.#T1231');
define('AUTH_SALT', '.AKzSr6A3JaDLSDN.#T1231');
define('SECURE_AUTH_SALT', '.AKzSr6A3JaDLSDN.#T1231');
define('LOGGED_IN_SALT', '.AKzSr6A3JaDLSDN.#T1231');
define('NONCE_SALT', '.AKzSr6A3JaDLSDN.#T1231');
------------------------------------------------------------------------------

$> mkdir wp-content/uploads


$> chmod 777 -R wp-content/uploads
$> systemctl restart httpd

Acceder a
http://www.aulautil.tk

Titulo del sitio: Tienda Tux


Nombre de usario: tuxito
Clave: Lolcito.123
confirmar contraseña débil
correo electrónico: tucorreo@dominio.com

Continuar

Descargar un temita de wordpress desde dlwordpress.com


$> cd /var/www/html/wp-content/themes
$> wget -c http://thew.press/themes/corporate/Avada.zip
$> yum -y install unzip
$> unzip Avada.zip

Movemos la el theme
$> mv Avada Avadadw
$> mv Avadadw/Avada .

Instalar servidor ftp para las instalaciones (en el servidor, la máquina


virtual)
==============================================================================
===
$> yum -y install vsftpd
$> userdel -r tuxito
$> useradd -d /var/www tuxito
$> passwd tuxito
Lolcito.123
$> chown tuxito.tuxito -R /var/www
Configurar vsftpd
$> vim /etc/vsftpd/vsftpd.conf (agregar al final)
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=64000
pasv_max_port=64321

Habilitar boleanos en SELIX para usar chroot de usuarios


$> setsebool -P ftp_home_dir on
$> setsebool -P allow_ftpd_full_access=1

Reiniciar Vsftp
$> systemctl restart vsftpd
$> systemctl enable vsftpd

Instalar un tema por el panel de wordpress


==============================================================================
Acceder a http://aulautil.tk y loguearse
user: tuxito
pass: Lolcito.123

Ir a Apariencia --> Temas y


- darclick en boton activar en tema Avada
- luego click en Begin Install Plugins
- click en el check al lado de "Plugin" y seleccionar en el combo Install,
luego Aplicar

Nos pide credenciales para conectarse por FTP


Hostname: localhost
Nombre de usuario ftp: tuxito
Contraseña FTP: Lolcito.123
Proceder
Instalar todos los plugins que necesita el tema

Una vez instalado click en Return to Required Plugins


- click en el check al lado de "Plugin" y seleccionar en el combo Activate,
luego Aplicar
Repetir proceso de Activar plugins, si sale la página de Woocommerce click en
No Rigth Now

Instalar Slider Revolution


----------------------------------------------
$> cd /var/www/html/wp-content/plugins
$> wget -c http://thew.press/plugins/interface/revslider.zip
$> uzip revslider.zip
$> mv revslider revsliderdw
$> mv revsliderdw/revslider .

Habilitar Slider Revolution en los plugins

Instalar Demo data


==============================================================================
===============
Ir a AVADA --> demos, dar click en un demo
Habilitar htaccess
==============================================================================
===============
$> vim /var/www/html/.htaccess
----------------------------------------
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
----------------------------------------

Ir a Ajustes --> Enlaces Permanentes


Poner Nombre de Entrada

##############################################################################
###########

HTTPS con CentOS


---------------------------------------------------------------
Comprar Certificados en http://godaddy.com
o http://verisign.com

Certificado gratuito se puede obtener en https://letsencrypt.org

Enlace de configuracion HTTPS con CentOS


http://wiki.centos.org/HowTos/Https

Si quiero correr https con el certificado por defecto que viene en centos
$> yum -y install mod_ssl openssl
$> systemctl restart httpd

Abrir con firewalld el puerto 443


$> firewall-cmd --add-service=https --permanent
$> firewall-cmd --reload

Entrar a https://www.aulautil.tk

** Generar certificado comercial gratuito LetsEncrypt


##############################################################################
##################
$> yum install epel-release mod_ssl
$> yum install python-certbot-apache

Generar el certificado y asegurarse que los dominios son visibles en internet


$> rm -fR /etc/letsencrypt
$> systemctl stop httpd
$> certbot --standalone -d aulautil.tk,www.aulautil.tk -m linux@aulautil.tk
certonly
$> systemctl start httpd

$> vim /etc/httpd/conf.d/ssl.conf


100: SSLCertificateFile /etc/letsencrypt/live/aulautil.tk/cert.pem
107: SSLCertificateKeyFile /etc/letsencrypt/live/aulautil.tk/privkey.pem

Reiniciamos Apache
$> systemctl restart httpd

Administración de MySQL
##############################################################
Por consola
$> mysql -u root -p

Por web (Instalar PHPMyAdmin)


------------------------------
$> cd /var/www/html/
$> wget https://files.phpmyadmin.net/phpMyAdmin/4.4.15.8/phpMyAdmin-4.4.15.8-
all-languages.tar.gz
$> tar -zxvf phpMyAdmin-4.4.15.8-all-languages.tar.gz
$> mv phpMyAdmin-4.4.15.8-all-languages phpmyadmin
$> cd phpmyadmin
$> mv config.sample.inc.php config.inc.php
$> vim config.inc.php (Poner una clave cualquiera)
17:$cfg['blowfish_secret'] = 'ajsdjkasgdkjagsdgasd';

$> restorecon -FRvv /var/www/html

Entrar a http://www.aulautil.tk/phpmyadmin
usuario: root
clave: Lolcito.123

Backup Y restauración
------------------------------------

Generar Backup
--------------------------
Genearar un DUMP de todas las bases de datos
$> mysqldump -u root -p --all-databases > alldata.sql

Generar dump de una sola base datos


$> mysqldump -u root -p --database portal > portal.sql

Restaurar el Backup
-----------------------
Ej:
$> mysql -u root -p
mysql> DROP DATABASE portal;
mysql> quit

$> mysql -u root -p < portal.sql


Comprobar errores
$> mysqlcheck -u root -p --all-databases

Corregir errores ( ejemplo db portal tabla users);

$> mysql -u root -p


mysql > use portal;
mysql> REPAIR TABLE users;

Configuración y Tunning de BD
-----------------------------------
$> vim /etc/my.cnf (Archivo de configuración de MySQL)

Archivos de Ejemplo de configuración

$> vim /usr/share/mysql/my-small.cnf


$> vim /usr/share/mysql/my-medium.cnf
$> vim /usr/share/mysql/my-large.cnf
$> vim /usr/share/mysql/my-huge.cnf

$> systemctl restart mariadb

Parámetros de Tuning
-------------------------------------
https://www.percona.com/blog/2014/01/28/10-mysql-performance-tuning-settings-
after-installation/

Capitulo 18: Servidor Web (Apache + MySQL + PHP), Wordpress, FTP, PHPMyAdmin
##############################################################################
##########
Instalacion de paquetes con Webtatic (php 5.6)
-----------------------------------------------------------------------
$> rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-
7.noarch.rpm
$> rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

$> yum -y install httpd mariadb-server


$> yum -y install php56w php-cli56w php56w-mysql php56w-gd php56w-mcrypt
php56w-xml php56w-soap php56w-mbstring

Habilitar firewalld y permitir acceso a http (80) y https (443)

$> systemctl stop docker


$> systemctl disable docker
$> systemctl disable iptables
$> systemctl enable firewalld
$> systemctl start firewalld
$> firewall-cmd --add-service=http --permanent
$> firewall-cmd --add-service=https --permanent
$> firewall-cmd --reload
Natear en el firewall perimetral (Endian) el puerto 80 y 443 hacia
la Ip del servidor web

Configuracion de Apache (VirtualHost)


----------------------------------------------------
Cuando se instala apache el DocumenRoot (/var/www/html)
atiende al dominio por defecto http://localhost
Si queremos asociar un dominio principal al servidor
web ej: www.aulautil.tk simplemente hay que resolverlo por DNS
Público

$> systemctl start httpd


$> systemctl enable httpd
$> echo "<h1>Hola Mundo</h1>" > /var/www/html/index.html
Entrar con el navegador a
http://149.56.218.X
ó
http://www.aulautil.tk

VirtualHost en Apache
################################################################
$> vim /etc/httpd/conf.d/vhosts.conf

-----------------------------------------------------------
<VirtualHost *:80>
ServerName aulautil.tk
ServerAlias www.aulautil.tk
DocumentRoot "/var/www/html"
DirectoryIndex index.html index.php
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log combined
</VirtualHost>

<VirtualHost *:80>
ServerName intranet.aulautil.tk
DocumentRoot "/var/www/intranet"
DirectoryIndex index.html index.php
<Directory "/var/www/intranet">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/httpd/intranet.aulautil.tk-error_log
CustomLog /var/log/httpd/intranet.aulautil.tk-access_log combined
</VirtualHost>
--------------------------------------------------------------------------

Crear registro intranet.aulautil.tk en su DNS público


$> vim /var/named/chroot/var/named/aulautil.tk.zone
------------------------------------------------------------------------------
---------
$TTL 86400
; @ representa este servidor
@ IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

; registro IN Tipo Valor secundario Valor principal


; ---------------- ------ ---- ---------------- ------------------
; cuando no hay nada en primera columna es igual a aulautil.tk.
aulautil.tk. IN NS ns1.aulautil.tk.
aulautil.tk. IN NS ns2.aulautil.tk.
; www es formato SQDN (Short Qualify Domain Name)
ns1 IN A 149.56.218.X
ns2 IN A 149.56.218.X
mail IN A 149.56.218.X
; www.aulautil.tk. es formato FQDN (Full Qualify Domain Name)
www.aulautil.tk. IN CNAME aulautil.tk.
intranet.aulautil.tk. IN A 149.56.218.X
; el dominio raiz como zona A
aulautil.tk. IN A 149.56.218.X
aulautil.tk. IN MX 10 mail.aulautil.tk.
------------------------------------------------------------------------------
-------------

$>systemctl restart named

Creando los directorios para la resolucion de los host virtuales


-------------------------------------------------------------
$> mkdir /var/www/intranet

Creando archivos indexadores


*-------------------------

$> echo "hola mundo desde aulautil.tk" > /var/www/html/index.html


$> echo "hola mundo desde intranet" > /var/www/intranet/index.php

Restaurando los contextos web de selinux


$> restorecon -RFvv /var/www

Reniciando servidor web y probando


----------------------------------------
$> systemctl restart httpd

Entrar con el navegador


--------------------------------
http://www.aulautil.tk
http://intranet.aulautil.tk
Proxy Reverso
################################################################

$> vim /etc/httpd/conf.d/vproxy.conf


---------------------------------------------------------------------
<VirtualHost *:80>
ServerName erp.aulautil.tk
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ServerAlias erp.aulautil.tk
ProxyRequests Off
ProxyPass / http://192.168.3.X:8080/
ProxyPassReverse / http://192.168.3.X:8080/
ErrorLog /var/log/httpd/erp-error.log
</VirtualHost>
<VirtualHost *:80>
ServerName www.tromercio.com
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ServerAlias www.tromercio.com
ProxyRequests Off
ProxyPass / http://elcomercio.pe/
ProxyPassReverse / http://elcomercio.pe/
ErrorLog /var/log/httpd/tromercio-error.log
</VirtualHost>
----------------------------------------------------------

* Instalación de tomcat
$> yum -y install java-1.7.0-openjdk
$> cd /opt
$> wget http://www-us.apache.org/dist/tomcat/tomcat-7/v7.0.79/bin/apache-
tomcat-7.0.79.tar.gz
$> tar -zxvf apache-tomcat-7.0.79.tar.gz
$> mv apache-tomcat-7.0.79 tomcat

Iniciar Tomcat
$> /opt/tomcat/bin/catalina.sh start

Editar el /etc/hosts de su laptop


$> vim /etc/hosts
.
.
149.56.218.X www.tromercio.com

Configurar el registro erp.aulautil.tk en su DNS público


#> vim /var/named/chroot/var/named/aulautil.tk.zone
erp.aulautil.tk. IN A 149.56.218.X

$> systemctl restart named

* Habilitar el boleano de apache para que pueda conectarse por red


$> setsebool -P httpd_can_network_connect on

$> systemctl restart httpd

Luego Probamos el proxy reverso Entrando con el navegador a


www.tromercio.com
erp.aulautil.tk

WORDPRESS CMS
##############################################################################
##########
Wordpress es el CMS más popular del mundo; un cuarto de webs en el mundo
estan hechos con
Wordpress; existen muchos templates para Wordpress en https://themeforest.net
y su
hermano no reconocido https://gfxnull.net :D

Proceso de Instalación
==============================================================================
=
Primero creamos una base de datos y un usuario para wordpress
-------------------------------------------------------------------
$> systemctl start mariadb
$> systemctl enable mariadb
$> mysql -u root -p

Poniendo una contraseña al usuario root


------------------------------------------
mysql> SET PASSWORD FOR root@localhost=password("Lolcito.123");
mysql> quit

$> mysql -u root -p

Crear base de datos para wordpress


-----------------------------------
mysql> CREATE DATABASE portal;

Crear usuario para wordpress y darle permiso a la base de datos portal


mysql> GRANT ALL on portal.* TO wptux@localhost IDENTIFIED BY "tuxito";

mysql> quit

Instalar wordpress
-------------------------------------------------------------------------
$> cd /var/www
$> wget https://pe.wordpress.org/wordpress-4.7.2-es_PE.tar.gz
$> tar -zxvf wordpress-4.7.2-es_PE.tar.gz
$> mv html html_old
$> mv wordpress html
$> restorecon -RFvv /var/www
$> cd html
$> cp wp-config-sample.php wp-config.php
$> vim wp-config.php
----------------------------------------------------------------------------
/** El nombre de la base de datos de WordPress */
23: define('DB_NAME', 'portal');
/** Nombre de usuario de la base de datos de MySQL */
define('DB_USER', 'wptux');

/** Contraseña del usuario de la base de datos de MySQL */


define('DB_PASSWORD', 'tuxito');

49:define('AUTH_KEY', '.AKzSr6A3JaDLSDN.#T1231');
define('SECURE_AUTH_KEY', '.AKzSr6A3JaDLSDN.#T1231');
define('LOGGED_IN_KEY', '.AKzSr6A3JaDLSDN.#T1231');
define('NONCE_KEY', '.AKzSr6A3JaDLSDN.#T1231');
define('AUTH_SALT', '.AKzSr6A3JaDLSDN.#T1231');
define('SECURE_AUTH_SALT', '.AKzSr6A3JaDLSDN.#T1231');
define('LOGGED_IN_SALT', '.AKzSr6A3JaDLSDN.#T1231');
define('NONCE_SALT', '.AKzSr6A3JaDLSDN.#T1231');
------------------------------------------------------------------------------

$> mkdir wp-content/uploads


$> chmod 777 -R wp-content/uploads
$> systemctl restart httpd

Acceder a
http://www.aulautil.tk

Titulo del sitio: Tienda Tux


Nombre de usario: tuxito
Clave: Lolcito.123
confirmar contraseña débil
correo electrónico: tucorreo@dominio.com

Continuar

Descargar un temita de wordpress desde dlwordpress.com


$> cd /var/www/html/wp-content/themes
$> wget -c http://thew.press/themes/corporate/Avada.zip
$> yum -y install unzip
$> unzip Avada.zip

Movemos la el theme
$> mv Avada Avadadw
$> mv Avadadw/Avada .

Instalar servidor ftp para las instalaciones (en el servidor, la máquina


virtual)
==============================================================================
===
$> yum -y install vsftpd
$> userdel -r tuxito
$> useradd -d /var/www tuxito
$> passwd tuxito
Lolcito.123
$> chown tuxito.tuxito -R /var/www

Configurar vsftpd
$> vim /etc/vsftpd/vsftpd.conf (agregar al final)
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=64000
pasv_max_port=64321

Habilitar boleanos en SELIX para usar chroot de usuarios


$> setsebool -P ftp_home_dir on
$> setsebool -P allow_ftpd_full_access=1

Reiniciar Vsftp
$> systemctl restart vsftpd
$> systemctl enable vsftpd

Instalar un tema por el panel de wordpress


==============================================================================
Acceder a http://aulautil.tk y loguearse
user: tuxito
pass: Lolcito.123

Ir a Apariencia --> Temas y


- darclick en boton activar en tema Avada
- luego click en Begin Install Plugins
- click en el check al lado de "Plugin" y seleccionar en el combo Install,
luego Aplicar

Nos pide credenciales para conectarse por FTP


Hostname: localhost
Nombre de usuario ftp: tuxito
Contraseña FTP: Lolcito.123
Proceder
Instalar todos los plugins que necesita el tema

Una vez instalado click en Return to Required Plugins


- click en el check al lado de "Plugin" y seleccionar en el combo Activate,
luego Aplicar
Repetir proceso de Activar plugins, si sale la página de Woocommerce click en
No Rigth Now

Instalar Slider Revolution


----------------------------------------------
$> cd /var/www/html/wp-content/plugins
$> wget -c http://thew.press/plugins/interface/revslider.zip
$> uzip revslider.zip
$> mv revslider revsliderdw
$> mv revsliderdw/revslider .

Habilitar Slider Revolution en los plugins

Instalar Demo data


==============================================================================
===============
Ir a AVADA --> demos, dar click en un demo

Habilitar htaccess
==============================================================================
===============
$> vim /var/www/html/.htaccess
----------------------------------------
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
----------------------------------------

Ir a Ajustes --> Enlaces Permanentes


Poner Nombre de Entrada

##############################################################################
###########

HTTPS con CentOS


---------------------------------------------------------------
Comprar Certificados en http://godaddy.com
o http://verisign.com

Certificado gratuito se puede obtener en https://letsencrypt.org

Enlace de configuracion HTTPS con CentOS


http://wiki.centos.org/HowTos/Https

Si quiero correr https con el certificado por defecto que viene en centos
$> yum -y install mod_ssl openssl
$> systemctl restart httpd

Abrir con firewalld el puerto 443


$> firewall-cmd --add-service=https --permanent
$> firewall-cmd --reload

Entrar a https://www.aulautil.tk

** Generar certificado comercial gratuito LetsEncrypt


##############################################################################
##################
$> yum install epel-release mod_ssl
$> yum install python-certbot-apache

Generar el certificado y asegurarse que los dominios son visibles en internet


$> rm -fR /etc/letsencrypt
$> systemctl stop httpd
$> certbot --standalone -d aulautil.tk,www.aulautil.tk -m linux@aulautil.tk
certonly
$> systemctl start httpd
$> vim /etc/httpd/conf.d/ssl.conf
100: SSLCertificateFile /etc/letsencrypt/live/aulautil.tk/cert.pem
107: SSLCertificateKeyFile /etc/letsencrypt/live/aulautil.tk/privkey.pem

Reiniciamos Apache
$> systemctl restart httpd

Administración de MySQL
##############################################################
Por consola
$> mysql -u root -p

Por web (Instalar PHPMyAdmin)


------------------------------
$> cd /var/www/html/
$> wget https://files.phpmyadmin.net/phpMyAdmin/4.4.15.8/phpMyAdmin-4.4.15.8-
all-languages.tar.gz
$> tar -zxvf phpMyAdmin-4.4.15.8-all-languages.tar.gz
$> mv phpMyAdmin-4.4.15.8-all-languages phpmyadmin
$> cd phpmyadmin
$> mv config.sample.inc.php config.inc.php
$> vim config.inc.php (Poner una clave cualquiera)
17:$cfg['blowfish_secret'] = 'ajsdjkasgdkjagsdgasd';

$> restorecon -FRvv /var/www/html

Entrar a http://www.aulautil.tk/phpmyadmin
usuario: root
clave: Lolcito.123

Backup Y restauración
------------------------------------

Generar Backup
--------------------------
Genearar un DUMP de todas las bases de datos
$> mysqldump -u root -p --all-databases > alldata.sql

Generar dump de una sola base datos


$> mysqldump -u root -p --database portal > portal.sql

Restaurar el Backup
-----------------------
Ej:
$> mysql -u root -p
mysql> DROP DATABASE portal;
mysql> quit

$> mysql -u root -p < portal.sql

Comprobar errores
$> mysqlcheck -u root -p --all-databases
Corregir errores ( ejemplo db portal tabla users);

$> mysql -u root -p


mysql > use portal;
mysql> REPAIR TABLE users;

Configuración y Tunning de BD
-----------------------------------
$> vim /etc/my.cnf (Archivo de configuración de MySQL)

Archivos de Ejemplo de configuración

$> vim /usr/share/mysql/my-small.cnf


$> vim /usr/share/mysql/my-medium.cnf
$> vim /usr/share/mysql/my-large.cnf
$> vim /usr/share/mysql/my-huge.cnf

$> systemctl restart mariadb

Parámetros de Tuning
-------------------------------------
https://www.percona.com/blog/2014/01/28/10-mysql-performance-tuning-settings-
after-installation/

Capitulo 19: Instalación de Zimbra 8.6 en CentOS 7


##############################################################################
#####################
Primero configurar el hostname y el /etc/hosts
$> hostnamectl set-hostname mail.aulautil.tk

(agregar en las dos primeras lÃneas)


$> vim /etc/hosts
127.0.0.1 localhost localhost.localdomain
192.168.3.X mail.aulautil.tk mail

$> exit
Volver a loguearse

Comprobraciones previas a la Instalación


*************************************************************
1.- Verificar el nombre del host y dominio
$> hostnamectl

Verificar la Ip del Host


$> ifconfig
ó
$> ip addr show

Verificar los nombres del host en /etc/hosts


$> cat /etc/hosts

Instalación de DNS Server DNSMASQ


##############################################################################
##########################
Instalar un DNS local
$> yum -y install dnsmasq

Editar el MX del dominio


$> vim /etc/dnsmasq.d/mail.aulautil.tk.conf
mx-host=aulautil.tk,mail.aulautil.tk,10

Editar el localhost para que dnsmasq solo escuche en 127.0.0.1 y reenvie las
consultas a google
$> vim /etc/dnsmasq.d/localhost.conf
listen-address=127.0.0.1
port=53
server=8.8.8.8
bind-interfaces

Configurar como dns 127.0.0.1


$> vim /etc/sysconfig/network-scripts/ifcfg-ens18
DNS1=127.0.0.1

$> systemctl restart network


$> systemctl restart dnsmasq
$> systemctl enable dnsmasq

Comprobacion
==============================================================================
===============
$> yum -y install bind-utils

$> dig MX aulautil.tk


$> dig mail.aulautil.tk

Instalación de Zimbra 8.6


==============================================================================
====================

instalar dependencias
$> yum install -y perl perl-core nmap sudo libidn gmp libaio libstdc++ unzip
sysstat sqlite

Deshabilitar postfix
$> systemctl stop postfix
$> systemctl disable postfix

Detener apache
$> systemctl stop httpd

Descarga de Zimbra Collaboration Open Source


##############################################################################
####
$> yum -y install wget
Opensource Edition
------------------------------------------------------------------------------
------------
Ir a la paǵina http://www.zimbra.com/downloads/zimbra-collaboration-open-
source
Y descargar la versión 8.6.0

$> wget -c https://files.zimbra.com/downloads/8.6.0_GA/zcs-


8.6.0_GA_1153.RHEL7_64.20141215151110.tgz

Descomprimir los instaladores


##############################################################################
###########
Descomprimir el instalador de zimbra

OpenSource Edition
--------------------------------------------------------------
$> tar -zxvf zcs-8.6.0_GA_1153.RHEL7_64.20141215151110.tgz
$> cd zcs-8.6.0_GA_1153.RHEL7_64.20141215151110

Instalar zimbra
##############################################################################
###########
$> ./install.sh (RHEL 7)

Do you agree with the terms of the software license agreement? [N] Y

Install zimbra-ldap [Y] Y

Install zimbra-logger [Y] Y

Install zimbra-mta [Y] Y

Install zimbra-dnscache [Y] N

Install zimbra-snmp [Y] Y

Install zimbra-store [Y] Y

Install zimbra-apache [Y] Y

Install zimbra-spell [Y] Y

Install zimbra-memcached [N] Y

Install zimbra-proxy [N] Y

Install zimbra-archiving [N] Y (Network Edition)

The system will be modified. Continue? [N] Y

Change domain name? [Yes] Yes


Create domain: [mail.aulautil.tk] aulautil.tk

--------------------------- Opciones del Menu 1 -------------------------


Address unconfigured (**) items (? - help) 1

Select, or 'r' for previous menu [r] 4


Password for ldap admin user (min 6 characters): [TVwckVm4Y] AulaUtil1.
Select, or 'r' for previous menu [r] 6
Enter the number for the local timezone: [23] 11

Select, or 'r' for previous menu [r] r

-------------------------- Opciones del Menu 2 --------------------------


Address unconfigured (**) items (? - help) 2

elect, or 'r' for previous menu [r] 4

Password for ldap root user (min 6 characters): [TVwckVm4Y] AulaUtil1.

Select, or 'r' for previous menu [r] 5

Password for ldap replication user (min 6 characters): [TVwckVm4Y] AulaUtil1.

Select, or 'r' for previous menu [r] 6

Password for ldap Postfix user (min 6 characters): [TVwckVm4Y] AulaUtil1.

Select, or 'r' for previous menu [r] 7

Password for ldap Amavis user (min 6 characters): [TVwckVm4Y] AulaUtil1.

Select, or 'r' for previous menu [r] 8

Password for ldap Nginx user (min 6 characters): [TVwckVm4Y] AulaUtil1.

Select, or 'r' for previous menu [r] 9

Password for ldap BES user (min 6 characters): [TVwckVm4Y] AulaUtil1.

Select, or 'r' for previous menu [r]

--------------------------- Opciones del menu 6 ------------------------

Address unconfigured (**) items (? - help) 6

Select, or 'r' for previous menu [r] 4

Password for admin@aulautil.tk (min 6 characters): [gpLZfFUr] AulaUtil1.

Select, or 'r' for previous menu [r] r

---------------------------- Finalizamos la instalacion


-----------------------
Select from menu, or press 'a' to apply config (? - help) a
Save configuration data to a file? [Yes] Yes
Save config in file: [/opt/zimbra/config.14717] Enter
Saving config in /opt/zimbra/config.14717...done.
The system will be modified - continue? [No] Yes
Notify Zimbra of your installation? [Yes] No
Configuration complete - press return to exit Enter
################################## REINSTALAR Si la instalacion fallo
##########################
Desinstalar Zimbra
$> su -
$> cd zcs-8.6.0_GA_1153.RHEL7_64.20141215151110
$> ./install.sh -u
$> rm -fR /opt/zimbra

Volver a instalar
$> ./install.sh --platform-override
##############################################################################
##################

Permitir el acceso a los puertos del zimbra


==============================================================================
====================
$> yum -y install firewalld
$> systemctl start firewalld
$> systemctl enable firewalld

Habilitar los puertos


TCP
-----
22
443
25
110
143
993
995
465
7071

$> firewall-cmd --add-service https --permanent


$> firewall-cmd --add-service smtp --permanent
$> firewall-cmd --add-service imaps --permanent
$> firewall-cmd --add-service pop3s --permanent
$> firewall-cmd --add-port 110/tcp --permanent
$> firewall-cmd --add-port 143/tcp --permanent
$> firewall-cmd --add-port 465/tcp --permanent
$> firewall-cmd --add-port 7071/tcp --permanent

$> firewall-cmd --reload

UDP
----
53

$> firewall-cmd --add-service dns --permanent


$> firewall-cmd --reload

Verificar los puertos abiertos


$> iptables -S

En el firewall perimetral Endian natear los puertos de zimbra


25, 443, 7071, 143

Acceder al zimbra instalado con el navegador


------------------------------------------

PANEL DE ADMINISTRACION
https://mail.aulautil.tk:7071

usuario: admin
clave: AulaUtil1.

WEBMAIL
https://mail.aulautil.tk

usuario: admin
clave: AulaUtil1.

Hacer pruebas de envÃo y recepción y ver los logs


$> tail -f /var/log/zimbra.log

Upgrade de Zimbra
##############################################################################
######
El upgrade se tiene que hacer con cuidado con un backup previo, porque puede
fallar

Verificar la version de zimbra actal


--------------------------------------------------------------------
$> su - zimbra
$> zmcontrol -v
$> exit

Vamos a Instalar la versión 8.7.0 (Estable Ultima version)


En su trabajo
$> wget http://files2.zimbra.com/downloads/8.7.0_GA/zcs-
8.7.0_GA_3042.RHEL7_64.20160828192005.tgz
$> tar -zxvf zcs-8.7.0_GA_3042.RHEL7_64.20160828192005.tgz
$> cd zcs-8.7.0_GA_3042.RHEL7_64.20160828192005
$> ./install.sh --platform-override
Do you agree with the terms of the software license agreement? [N] Y
Do you want to verify message store database integrity? [Y] Y

Do you wish to upgrade? [Y] Y

Install zimbra repo [Y] Y


Install zimbra-dnscache [N] N

The system will be modified. Continue? [N] Y

Notify Zimbra of your installation? [Yes] No

Configuration complete - press return to exit

Capitulo 20: Monitoreo de Red con Nagios


################################################################
Instalar Epel
$> yum -y install epel-release

Deshabilitar selinux
$> setenforce 0

- Instalar nagios y el MTA local


$> yum -y install nagios nagios-plugins* postfix

Configurar Nagios
$> vim /etc/nagios/nagios.cfg
34:cfg_file=/etc/nagios/objects/services.cfg
cfg_file=/etc/nagios/objects/hosts.cfg
cfg_file=/etc/nagios/objects/windows.cfg

$> vim /etc/nagios/objects/contacts.cfg


30:define contact{
contact_name nagiosadmin ; Short name
use generic-contact ;
alias Nagios Admin ; Full name of user
email tucorreo@tudominio.com ;
}

$> vim /etc/nagios/objects/hosts.cfg


-----------------------------------------------------------
define host{
use generic-host
host_name firewall.aulautil.local
alias Gateway Router
address 192.168.122.254
check_command check-host-alive
max_check_attempts 20
notification_interval 240
notification_period 24x7
notification_options d,u,r
contacts nagiosadmin
}

define host{
use generic-host
host_name mail.aulautil.com
alias servidor web smtp
address 192.168.122.2
max_check_attempts 20
contacts nagiosadmin
}

define host{
use generic-host
host_name adsserver.aulautil.local
alias servidor web smtp
address 192.168.122.10
max_check_attempts 20
contacts nagiosadmin
}
-----------------------------------------------------------
$> vim /etc/nagios/objects/services.cfg
-------------------------------------------------
define service{
use generic-service
host_name mail.aulautil.com
service_description HTTP
check_command check_http
}
define service{
use generic-service
host_name mail.aulautil.com
service_description SMTP
check_command check_smtp
}
-------------------------------------------------

$> vim /etc/nagios/objects/windows.cfg


25:define host{
use windows-server ; Inherit default values from a template
host_name winserver ; The name we're giving to this host
alias My Windows Server ; A longer name associated with the host
address 192.168.122.100 ; IP address of the host
}

Instalar el NSClient en el servidor Windows desde


http://www.nsclient.org/download/

Crear usuario del nagios


$> htpasswd -c /etc/nagios/passwd nagiosadmin
clave: alumno

Verificar errores en la configuración de nagios


$> nagios -v /etc/nagios/nagios.cfg

Iniciar el Servidor Wen para ver el panel de reportes de


Nagios
$> systemctl restart httpd

Iniciar Nagios
$> systemctl start nagios
$> systemctl enable nagios

Deshabilitar SELINUX
$> setenforce 0

Detener el firewall
$> /usr/libexec/iptables/iptables.init stop

Dar permisos a Apache


$> chown nagios.apache -R /var/log/nagios

Acceder a Nagios
http://192.168.122.2/nagios
user:nagiosadmin
pass:alumno
CapÃtulo 21: Sistema de Prevención de Intrusos (IPS)
###################################################################

Descargar Security Onion de http://sourceforge.net/projects/security-onion/


$> wget http://iweb.dl.sourceforge.net/project/security-
onion/12.04.5.3/securityonion-12.04.5.3-20150825.iso

Accedemos al VPS virtual con 2 GB de RAM y 32GB de disco


Iniciamos el VPS con el iso de security onion.

Instalar Security Onion


###########################################################################
Dar click al Ãcono Install Security Onion 12.04
Idioma español
Tipo de Instalación: Borrar Disco e Instalar Security Onion
Zona Horaria: Lima
Teclado: Español
Su nombre:) tuxito
nombre de equipo: ids
nombre de usuario: tuxito
contraseña: Lolcito.123

Una vez que termina pide reiniciar


Apagar el VPS y poner como tarjeta de video Vmware compatible

Reiniciar servidor VPS


Loguearse como
usuario: tuxito
clave: Lolcito.123

Configuración del IP en modo bridge (2 tarjetas)


##############################################################################
######
$> /etc/init.d/networking stop
$> vim /etc/network/interfaces
----------------------------------------------------
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto eth1
iface eth1 inet manual

auto br0
iface br0 inet static
address 192.168.20.150
netmask 255.255.255.0
gateway 192.168.20.1
bridge_ports eth0 eth1
bridge_stp off
bridge_fd 0
bridge_maxwait 0
-----------------------------------------------------

$> /etc/init.d/networking start

Configuración del IP en modo Gateway (1 tarjetas)


##############################################################################
######
Ponerle una IP a security onion y esa IP configurarlo como gateway de los
servidores
en DMZ

EJ:
Endian --> 192.168.3.201
VPS Linux --> 192.168.3.101 mask: 24 gw: 192.168.3.151
IPS --> 192.168.3.151 mask: 24 gw: 192.168.3.201

En el firewall Endian, dar salida libre al IPS en


Firewall--->Trafico de salida

Verificar si hay internet en el IPS


$> ping 192.168.3.201 (puerta de enlace)
$> ping 8.8.8.8
$> ping www.google.com

Deshabilitar el firewall
$> sudo su -
$> ufw disable

Desintalar ufw
$> apt-get remove --purge ufw
$> reboot

Configurar Security Onion


##########################################################################

Previamente crear una cuenta de snort


Entrar a www.snort.org
Crear una cuenta gratuita y copiar el onikcode solicitado

Dar click al Ãcono setup


Welcome ... Yes, Continue
Would do you like .. No, nor right Now
Advanced Setup
Standalone
Usuario a loguearse: idsadmin
Correo para el snorby: tucorreo@dominio.com
contraseña: tuxito
Data a ser guardada por sqguil 30
Days of data repair 7
Which IDS Engine... Snort
Which IDS Ruleset... Snort VRT Ruleset only and set a VRT Policy
Snort VRT Oinkcode Pegar el oinkcode de tu cuenta
VRT Policy Security
PFRIng module 4096
Do you enable IDS Engine? Yes, enable ..
CPU Cores 1
Enable Bro Yes
Enbale file Extraction Yes enable file extraction
CPU cores 1
Yes enable http_agent
No Disable Argus
No Disable Prads
Yes enable full packet capture
pcap files 150
No, use default scatter
pcap ring buffer 64
percent of purging old logs 90
No, disable salt
No, disable ELSA
Yes, proced with the changes

Configurar el firewall Endian


#######################################################################3
Natear en el Endian hacia la IP del Security Onion

Configurar firewall iptables en Security Onion


#######################################################################
$> ssh tuxito@149.56.218.X
$> sudo su -

Deshabilitar OSSEC
$> /etc/init.d/ossec-hids-server stop
$> update-rc.d ossec-hids-server disable

$> vim firewall.sh


192.168.3.X --> ip de security onion
192.168.3.Y --> ip de servidor Linux
------------------------------------------------------------------
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
echo NAT de destino
iptables -t nat -A PREROUTING -p tcp -d 192.168.3.X --dport 80 -j DNAT --to
192.168.3.Y
iptables -t nat -A PREROUTING -p tcp -d 192.168.3.X --dport 443 -j DNAT --to
192.168.3.Y
iptables -t nat -A PREROUTING -p tcp -d 192.168.3.X --dport 25 -j DNAT --to
192.168.3.Y
iptables -t nat -A PREROUTING -p tcp -d 192.168.3.X --dport 143 -j DNAT --to
192.168.3.Y
iptables -t nat -A PREROUTING -p tcp -d 192.168.3.X --dport 7071 -j DNAT --to
192.168.3.Y
iptables -t nat -A PREROUTING -p udp -d 192.168.3.X --dport 53 -j DNAT --to
192.168.3.Y

echo NAT fuente


iptables -t nat -A POSTROUTING -s 192.168.3.Y -j SNAT --to 192.168.3.X
---------------------------------------------------------------------------
Ejecutar el firewall
$> chmod 755 firewall.sh
$> ./firewall.sh

Para ver que el tráfico está pasando por Security Onion


$> tcpdump |grep http

En la laptop local instalar nikto (En la laptop)


$> apt-get install nikto

Simular un ataque
$> nikto -h www.tudominio.tk
$> nikto -h intranet.tudominio.tk

Entrar al snorby para verificar los ataques


(Natear en el endian el puerto 444 hacia el security Onion)
https://149.56.218.X:444
user: tucorreo@dominio.com
pass: tuxito

FIREWALL BASTION

#!/bin/bash
# Firewall Bastion Aula Útil
# https://aulautil.com
# 2016

echo "limpiando todas las reglas, deshabilitando firewalld"


systemctl stop firewalld
systemctl disable firewalld
/usr/libexec/iptables/iptables.init stop

echo "Estableciendo la politica por defecto a DROP"


iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

echo "configurando INPUT y OUTPUT"


echo "dando acceso total al loopback"
# todo lo que entra y sale desde el loopback se acepta
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

################ Nuestro host como SERVIDOR


######################################################3
echo "permitiendo acceso al servidor SSH (protocolo tcp, puerto 22) desde
cualquier origen "
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j
ACCEPT

############### Nuestro host como cliente


#############################################################
echo "habilitando navegacion a internet desde nuestro host hacia los puertos
SSH,FTP,HTTP, HTTPS, SMTP, POP, IMAP"
iptables -A OUTPUT -p tcp -m multiport --dports
20,21,22,80,443,8080,389,25,110,143,993,995,465,111 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports
20,21,22,80,443,8080,389,25,110,143,993,995,465,111 -m state --state
ESTABLISHED,RELATED -j ACCEPT

echo "habilitando navegacion a internet desde nuestro host hacia los puertos
NFS"
iptables -A OUTPUT -p tcp -m multiport --dports 662,875,892,2049,32803,20048
-m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports 662,875,892,2049,32803,20048 -m
state --state ESTABLISHED,RELATED -j ACCEPT

echo "habilitando las consultas DNS y acceso NFS desde nuestro host"
iptables -A OUTPUT -p udp -m multiport --dports
53,111,662,875,892,2049,32769,20048 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A INPUT -p udp -m multiport --sports
53,111,662,875,892,2049,32769,20048 -m state --state ESTABLISHED,RELATED -j
ACCEPT

echo "permitiendo a nuestro host conectarse a servidores ISCSI"


iptables -A OUTPUT -p tcp --dport 3260 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --sport 3260 -m state --state ESTABLISHED,RELATED -j
ACCEPT

echo "permitiendo a nuestro host conectarse a servidores LDAP"


iptables -A OUTPUT -p tcp --dport 389 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A INPUT -p tcp --sport 389 -m state --state ESTABLISHED,RELATED -j
ACCEPT

############### Reglas de Ping


#########################################################################
echo "permitiendo el ping desde la LAN a nuestro host"
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.122.0/24 -m
state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -d 192.168.122.0/24 -m
state --state ESTABLISHED,RELATED -j ACCEPT

echo "haciendo ping desde nuestro host a la cualquier destino"


iptables -A OUTPUT -p icmp --icmp-type echo-request -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m state --state
ESTABLISHED,RELATED -j ACCEPT

#Guardando permanente las reglas


/usr/libexec/iptables/iptables.init sabe
firewall-sucursal-vpn

#!/bin/bash
# Firewall hecho por Tuxito
# https://aulautil.com es cool
# 2016

echo "limpiando todas las reglas, deshabilitando firewalld"


systemctl stop firewalld
systemctl disable firewalld
/usr/libexec/iptables/iptables.init stop

echo limpiando reglas de firewall


iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
iptables -F
iptables -X

echo "Estableciendo la politica por defecto a DROP"


iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

echo "configurando INPUT y OUTPUT"


echo "dando acceso total al loopback"
# todo lo que entra y sale desde el loopback se acepta
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

################ Nuestro host como SERVIDOR


######################################################3
echo "permitiendo acceso al servidor SSH (protocolo tcp, puerto 22) desde
cualquier origen "
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j
ACCEPT

echo "permitiendo acceso al servidor VPN Sucursal"


iptables -A INPUT -p udp --dport 1194 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A OUTPUT -p udp --sport 1194 -m state --state ESTABLISHED,RELATED -j
ACCEPT

################ Nuestro host como Cliente


######################################################3
echo "habilitando navegacion a internet del propio firewall puertos
SSH,FTP,HTTP y HTTPS (opcional)"
iptables -A OUTPUT -p tcp -m multiport --dports 20,21,22,80,443 -m state
--state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports 20,21,22,80,443 -m state
--state ESTABLISHED,RELATED -j ACCEPT

echo "habilitando las consultas DNS"


iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED
-j ACCEPT
iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j
ACCEPT

echo "Habilitando tráfico libre desde el firewall hacia la LAN"


iptables -A OUTPUT -d 192.168.122.0/24 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.122.0/24 -m state --state ESTABLISHED,RELATED -j
ACCEPT

echo "permitiendo el ping desde cualquier origen a nuestro firewall"


iptables -A INPUT -p icmp --icmp-type echo-request -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -m state --state
ESTABLISHED,RELATED -j ACCEPT

echo "haciendo ping desde el firewall a la INTERNET"


iptables -A OUTPUT -p icmp --icmp-type echo-request -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m state --state
ESTABLISHED,RELATED -j ACCEPT

######################## TRAFICO FASTIDIOSO DE LAN A WAN


###########################
echo "trafico de LAN2WAN (control de lusers) acceso desde la LAN hacia la
internet"
echo "Haciendo que la LAN salga a internet con la 'IP Publica' por el wifi"
iptables -t nat -A POSTROUTING -o wlo1 -s 192.168.122.0/24 -j MASQUERADE

echo "dando salida libre al servidor proxy"


iptables -A FORWARD -p tcp -s 192.168.122.11 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.122.11 -m state --state
ESTABLISHED,RELATED -j ACCEPT

echo "Dando salida de DNS al Active Directory"


iptables -A FORWARD -p udp -s 192.168.122.10 --dport 53 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p udp -d 192.168.122.10 --sport 53 -m state --state
ESTABLISHED,RELATED -j ACCEPT

echo "reglas para tráfico VPN"


##############################################################################
###########
echo "habilitando la conexion hacia la VPN central"
iptables -A OUTPUT -p udp -m multiport --dports 1194,1195 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp -m multiport --sports 1194,1195 -m state --state
ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i tun0 -d 192.168.122.0/24 -j ACCEPT


iptables -A FORWARD -o tun0 -s 192.168.122.0/24 -j ACCEPT

#Guardando permanente las reglas


/usr/libexec/iptables/iptables.init save
# en Ubuntu guardar en /etc/rc.local

INSTALL FAIL2BAN

#!/bin/bash
# Script de instalación de fail2ban
# creado por Clever Flores para Aula Útil
# clever@aulautil.com
# clever@cloudperu.pe
# Licencia GPL v2
# Copyleft 2016

REDLOCAL=192.168.3.0/24
MAILADMIN=tuxito@tudominio.tk

function installFail2Ban {
echo instalando fail2ban
yum -y install epel-release
yum -y install fail2ban
echo "[DEFAULT]
ignoreip = 127.0.0.1 $REDLOCAL
bantime = 600
findtime = 600
maxretry = 3
backend = auto
# Default action to take: ban only
action = iptables[name=%(__name__)s, port=%(port)s]

[ssh-iptables]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
action = iptables-allports[name=SSH-iptables]
sendmail[name=SSH, dest=$MAILADMIN]
maxretry = 3

[zimbra-account]
enabled = true
filter = zimbra
action = iptables-allports[name=Zimbra-account]
sendmail[name=FAIL2Ban, dest=$MAILADMIN]
logpath = /opt/zimbra/log/mailbox.log
bantime = 600
maxretry = 5

[zimbra-audit]
enabled = true
filter = zimbra
action = iptables-allports[name=Zimbra-audit]
sendmail[name=Zimbra-audit, dest=$MAILADMIN]
logpath = /opt/zimbra/log/audit.log
bantime = 600
maxretry = 5

[zimbra-recipient]
enabled = true
filter = zimbra
action = iptables-allports[name=Zimbra-recipient]
sendmail[name=Zimbra-recipient, dest=$MAILADMIN]
logpath = /var/log/zimbra.log
#findtime = 604800
bantime = 172800
maxretry = 5

[postfix]
enabled = true
filter = postfix
action = iptables-multiport[name=Postfix, port=smtp, protocol=tcp]
sendmail[name=Postfix, dest=$MAILADMIN]
logpath = /var/log/zimbra.log
bantime = -1
maxretry = 5

[sasl-iptables]
enabled = false
filter = sasl
backend = polling
action = iptables[name=sasl, port=smtp, protocol=tcp]
sendmail-whois[name=sasl, dest=$MAILADMIN]
logpath = /var/log/zimbra.log

[zimbra-webmail]
enabled = true
filter = zimbra
action = iptables[name=Zimbra-webmail, port=https, protocol=tcp]
iptables[name=Zimbra-webmail, port=http, protocol=tcp]
sendmail[name=Zimbra-webmail, dest=$MAILADMIN]
logpath = /opt/zimbra/log/audit.log
bantime = -1
maxretry = 5" > /etc/fail2ban/jail.conf

echo '[Definition]
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values: TEXT
#
failregex = \[ip=<HOST>;\] account - authentication failed for .* \(no such
account\)$
\[ip=<HOST>;\] security - cmd=Auth; .* error=authentication failed
for .*, invalid password;$
;oip=<HOST>;.* security - cmd=Auth; .* protocol=soap;
error=authentication failed for .* invalid password;$
\[oip=<HOST>;.* SoapEngine - handler exception: authentication
failed for .*, account not found$
WARN .*;ip=<HOST>;ua=ZimbraWebClient .* security -
cmd=AdminAuth; .* error=authentication failed for .*;$
NOQUEUE: reject: RCPT from .*\[<HOST>\]: 550 5.1.1 .*: Recipient
address rejected:
# .*\[ip=<HOST>;\] .* - authentication failed for .* \(invalid password\)
#
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =' > /etc/fail2ban/filter.d/zimbra.conf

echo '# Fail2Ban configuration file


#
# Author: Giorgio Salluzzo
#

[Definition]
failregex = WARN [.*] [name=.*;ip=;ua=.*;] security – cmd=Auth; account=.*;
protocol=.*; error=.*, invalid password;
ignoreregex =' > /etc/fail2ban/filter.d/zimbra-webmail.conf

echo '# Fail2Ban configuration file


#
# Author: Cyril Jaquier
#
#

[INCLUDES]

before = sendmail-common.conf

[Definition]

# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionban = printf %%b "Subject: [Fail2Ban] <name>: banned <ip> from `uname
-n`
Date: `LC_ALL=C date +"%%a, %%d %%h %%Y %%T %%z"`
From: <sendername> <<sender>>
To: <dest>\n
Hi,\n
The IP <ip> has just been banned by Fail2Ban after
<failures> attempts against <name>.\n
Regards,\n
Fail2Ban" | /opt/zimbra/postfix/sbin/sendmail -f <sender> <dest>

[Init]

# Default name of the chain


#
name = default' > /etc/fail2ban/action.d/sendmail.conf
systemctl restart fail2ban
systemctl enable fail2ban
}

installFail2Ban

Potrebbero piacerti anche