Mostrando entradas con la etiqueta Apache. Mostrar todas las entradas
Mostrando entradas con la etiqueta Apache. Mostrar todas las entradas

miércoles, 29 de mayo de 2019

Docker en Debian 9 Stretch



Docker:

Docker es un proyecto de código abierto con el cuál podemos crear contenedores.

Un contenedor es un prisma rectangular de gran tamaño que suelen utilizar los barcos para transportar mercaderías y suele tener dentro distintos tipos de productos. Docker vendría a ser como el transportador de esos containers, es decir el barco.

Llevado a la informática se utiliza para que aplicaciones de software puedan ejecutarse en cualquier máquina, independizandose del sistema operativo.

Es una especie de empaquetado de sofware que se puede llevar de un lado a otro.

Docker permite meter todo lo que se necesite para que una aplicación funcione y se ejecute correctamente.
Por ejemplo debe contener algo como: java, tomcat, nginx, la aplicación en si misma, librerias, binarios y todo lo que necesite para funcionar.

Si llevo ese contenedor a otro servidor donde esté docker instalado debería funcionar correctamente.


Docker Hub:

Es un repositorio donde los usuarios de docker y los partners crean, testean, guardan y distribuyen imagenes de contenedores.

Es un lugar de donde me puedo bajar contenedores ya armados y listos para usar. Por ejemplo un debian oficial, un linux customizado, un ubuntu con paquetes ya instalados, un webserver ya listo para usarse, etc.


Docker Files:

Se pueden crear imágenes a partir de un archivo llamado Dockerfile.


Instalando docker:
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian stretch stable"
apt-get update
apt-get install docker-ce 


Verificamos que Docker se este ejecutando:
/etc/init.d/docker status




Vemos todas las imágenes de debian en dockerhub:
docker search debian



Si quiero descargar una imagen utilizo el docker pull:
docker pull debian



Para ver las imagenes que tengo ya descargadas:
docker images



Ver contenedores ejecutando:

No tenemos contenedores corriendo, por ahora solo lo descargamos.

docker ps



Ejecutar un contenedor:

Utilizaremos la imagen de debian oficial que bajamos anteriormente con el comando pull:

Utilizaremos losbparámetros -t de tty y el -i de interactivo y le decimos que ejecute un bash. Vemos como nos cambió el prompt:

docker run -t -i debian /bin/bash



Instalamos paquetes en el container:

Hacemos un update de los repositorios e instalamos nginx, wget y vim.

root@1363037a2fad:/# apt-get update && apt-get -y install wget vim nginx



Tener en cuenta que puedo salir del contenedor con exit ó Ctrl+d pero dejará de ejecutarse el contenedor.

Si quisiera volver a tener el mismo container corriendo tendría que volver a instalar todo lo que instalé antes ya que no guarde los cambios en una imagen.

Para guardar esos cambios en una imagen primero debo salir sin matar el contenedor, para eso ejecutamos Ctrl+p+q y veremos que vuelve el prompt.



Si ahora ejecutamos el comando docker ps veremos que sigue corriendo ese container:

docker ps



Crear una imagen:

Ahora voy a guardar la imagen modificada, pero con otro nombre.

Primero obtenemos el ID del contenedor en ejecución (f5b9be35915d) con el comando "docker ps".

Guardaremos los cambios en una nueva imagen llamada nginx-debian:1.0. Esto lo hacemos con "docker commit [id-del-contenedor] [nombre-nueva-imagen] por ejemplo:

docker commit f5b9be35915d nginx-debian:1.0



Verificamos la creacion de la imagen:

root@debian:~# docker images



Salimos de un contenedor sin que quede en ejecución:

Primero verificamos que no hay contenedor corriendo:

docker ps

Verificamos que imagenes podemos usar para crear un contenedor:

docker images 

Iniciar un contenedor interactivo con la imagen que guardamos previamente llamada nginx-debian versión 1.0:

docker run -it nginx-debian:1.0

Salimos del contenedor con exit ó con Ctrl+d:

root@8c80b4f2c09e:/# exit

Verificamos que el contenedor no está corriendo:

docker ps



Si quiero borrar una imagen hacemos lo siguiente:

Vemos las imágenes disponibles:

docker images

Eliminamos la imagen nginx-debian v1.0:

docker rmi -f nginx-debian:1.0

Volvemos a ver que fue eliminada:

docker images




Creando una imagen con Dockerfile:

Creamos la carpeta y archivo Cockerfile y lo editamos:
mkdir -p /var/Dockerfile/nginx
vi /var/Dockerfile/nginx/Dockerfile

Dentro ponemos lo siguiente, este archivo debería utilizar un contenedor debian, indica que Hernan es el que la mantiene, actualiza los repo, instala en nginx lo expone en el puerto 8888 e inicia el demonio del nginx:
FROM debian
MAINTAINER HERNAN
RUN apt-get update && apt-get install -y nginx && apt clean
EXPOSE 8888
RUN /etc/init.d/nginx start

Ejecutamos el build posicionandonos donde está el docker file:
cd /var/Dockerfile/nginx/
docker build . 



Verificamos las imagenes:

root@debian:~# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
debian-apache                        latest              af0593cb85eb        59 seconds ago      225MB
debian                               latest              8d31923452f8        3 weeks ago         101MB

Vemos que no hay nada corriendo, ejecutamos la imagen debian-apache y verificamos que ahora corre:

root@debian:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

root@debian:~#
root@debian:~# docker run -p 8181:80 debian-apache-bis /usr/sbin/apache2ctl -D FOREGROUND
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message



Si ingresamos a la ip del docker, no la del contenedor, deberíamos ingresar al puerto 8181 y nos reenviaría al apache 80 del contenedor:

http://debian:8181/


Matamos el contenedor que habia quedado corriendo:

root@debian:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED                                                          STATUS              PORTS                          NAMES
68c121179ab3        debian-apache-bis   "/usr/sbin/apache2ct…"   12 minutes ago                                                   Up 12 minutes       81/tcp, 0.0.0.0:8181->80/tcp   vigorous_benz
root@debian:~# docker kill 68c121179ab3

sábado, 24 de junio de 2017

Instalar Tomcat 8 en Debian Jessie

Instalamos tomcat8:

root@linux:~# apt-get update
root@linux:~# apt-get install tomcat8


Vemos que escucha el puerto 8080:


root@linux:~# netstat -ano |grep 8080
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      off (0.00/0/0)


Nos conectamos con un navegador web a:

http://192.168.1.100:8080/





Instalamos documentación, ejemplos y administración:

root@linux:~# apt-get install tomcat8-docs tomcat8-examples tomcat8-admin


Editamos el xml para permisos de usuarios:

root@linux:~# vi /etc/tomcat8/tomcat-users.xml

    tomcat
" password="mi_password" roles="manager-gui,admin-gui,manager-script" />


Reiniciamos el servicio del tomcat:

root@linux:~# /etc/init.d/tomcat8 restart
[ ok ] Restarting tomcat8 (via systemctl): tomcat8.service.


Ingresamos al manager con el usuario que creamos, donde indicamos la ip del server:

http://192.168.1.100:8080/manager/html


O ingresamos al host con el mismo usuario:

http://192.168.1.100:8080/host-manager/html


Ejemplos para ver el código y ejecutar:

http://192.168.1.100:8080/examples/




Si quiero hacer deploy de un war desde la url:

http://192.168.1.100:8080/manager/text/deploy?path=/Ejemplirigillo&war=file:/usr/share/tomcat8-docs/docs/appdev/sample/Ejemplirigillo.war


Para undeploy desde la url:

http://192.168.1.100:8080/manager/text/deploy?path=/Ejemplirigillo


Si queremos ejecutar comandos desde la CLI para listar las Applicaciones:

root@linux:~# curl http://tomcat:mi_password@192.168.1.100:8080/manager/text/list
OK - Listed applications for virtual host localhost
/:running:0:ROOT
/manager:running:16:/usr/share/tomcat8-admin/manager
/docs:running:0:/usr/share/tomcat8-docs/docs
/examples:running:0:/usr/share/tomcat8-examples/examples
/host-manager:running:0:/usr/share/tomcat8-admin/host-manager


Para hacer deploy de un WAR desde la CLI:

root@linux:~# curl --upload-file /usr/share/tomcat8-docs/docs/appdev/sample/Ejemplirigillo.war "http://tomcat:mi_password@192.168.1.100:8080/manager/text/deploy?path=/Ejemplirigilllo"
OK - Deployed application at context path /Ejemplirigilllo


Vemos que quedó deployado la Aplicación llamada: Ejemplirigillo:

root@linux:~# curl http://tomcat:mi_password@192.168.1.100:8080/manager/text/list
OK - Listed applications for virtual host localhost
/Ejemplirigilllo:running:0:Ejemplirigilllo
/:running:0:ROOT
/manager:running:8:/usr/share/tomcat8-admin/manager
/docs:running:0:/usr/share/tomcat8-docs/docs
/examples:running:0:/usr/share/tomcat8-examples/examples
/host-manager:running:0:/usr/share/tomcat8-admin/host-manager



sábado, 4 de marzo de 2017

Pishing de un Sitio Web

Voy a mostrar lo fácil que es falsificar un sitio web para que tengan cuidado cuando nos pasan un link el cuál pide usuario y contraseña.

Empezamos explicando que es el pishing: 

Phishing o suplantación de identidad es un término informático que denomina un modelo de abuso informático y que se comete mediante el uso de un tipo de ingeniería social, caracterizado por intentar adquirir información confidencial de forma fraudulenta (como puede ser una contraseña, información detallada sobre tarjetas de crédito u otra información bancaria). El cibercriminal, conocido como phisher, se hace pasar por una persona o empresa de confianza en una aparente comunicación oficial electrónica, por lo común un correo electrónico, o algún sistema de mensajería instantánea o incluso utilizando también llamadas telefónicas.1 FUENTE: https://es.wikipedia.org/wiki/Phishing

Este instructivo fue realizado en un laboratorio, no se recomienda hacerlo fuera de este ámbito ya que en varios países es ilegal y está penado por la ley.

Mostraremos como falsificar el sitio de facebook, obviamente que es aplicable a cualquier otra web.
Fue realizado con Kali Linux virtualizado con Virtual Box.

1) Verificamos la ip del kali (equipo en el cual haremos la falsificación), ejecutamos ifconfig. En este caso obtenemos la ip: 192.168.1.43:



2) Utilizamos la herramienta setoolkit, cuando nos muestar el siguiente mensaje damos ENTER:


3) Seleccionamos la primer opción presionando 1, es: Ataque de ingeniería social:


4) Web site Attack Vector eligiendo esta vez la opción: 2


5) Ahora la opción: 3


6) Clomanos el sitio con la opción: 2


7) Vemos que nos pide que ingresemos la dirección ip del servidor donde clonaremos el sitio, la ip la obtuvimos al principio y es la: 192.168.1.43


 8) Ahora nos pide que ingresemos la url del sitio web que queremos clonar, en este caso es: http://www.facebook.com y luego nos indica que el servidor web apache no está iniciado, damos Y para iniciarlo:


9) Nos que en la ruta: /var/www/html descargará el sitio clonado:


10) Vamos tocando 99 y enter la cantidad de veces que indique para salir del setoolkit:


11) Supuestamente nos pasan esta url para robarnos el usuario y contraseña. Nos logueamos pensando que es facebook si no prestamos atención en la barra de direccion:


12) No hizo absolutamente nada, como que no lo tomó correctamente y nos redirecciona al verdadero sitio de facebook:


13) Vamos a la ruta donde descargó la web clonada y nos habrá generado un archivo llamdao: harvester_fecha_y_hora.txt donde veremos el usuario y contraseña.

En mi caso el usuario que ingresé fue: pongo_mi_user@yahoo.com y la clave fue: MiClave. La vemos correctamente dentro de dicho archivo:



Obviamente que es para gente novata, ya que en la url no aparece, pero también es muy simple cambiar la ip por www.facebook.com haciendo tecnicas de "DNS Spoofing" y/o "Envenenamientos ARP".

miércoles, 27 de julio de 2016

Autenticar PHP con Active Directory

Verificamos si tiene el módulo instalado, ejecutamos el comando y debe devolver ldap:
root@linux:~# php -m|grep ldap
ldap

También podemos crear un archivo infophp.php con lo siguiente:
root@linux:/var/www/html# vi phpinfo.php
phpinfo();
?>

Y deberíamos ver la solapa ldap:


Si no está instalado lo instalamos con el siguiente comando:
root@linux:~# apt-get install php5-ldap


Luego editamos con el vi un file.php e ingresamos lo siguiente:




Cambiar estas lineas:
$servidor_LDAP = "nombre_servidor";
$servidor_dominio = "nombre_dominio_servidor.com";
$ldap_dn = "dc=nombre_dominio_servidor,dc=com";
$usuario_LDAP = "usuario_servidor";
$contrasena_LDAP = "contraseña_usuario";

Por esto:
$servidor_LDAP = "192.168.0.1";     //=> ip del servidor de Active Directory (LDAP)
$servidor_dominio = "mi.dominio.local"; //=> dominio completo
$ldap_dn = "dc=mi,dc=dominio,dc=local"; //=> DN
$usuario_LDAP = "mi_usuario"; //=> usuario del dominio
$contrasena_LDAP = "mi_contraseña"; //=> password del usuario

Si el usuario y la contraseña es correcta debemos obtener algo como:

  Validar en servidor LDAP desde PHP

  Conectando con servidor LDAP desde PHP...
  Conectado correctamente al servidor LDAP 192.168.0.1

  Comprobando usuario y contraseña en Servidor LDAP
  Autenticación en servidor LDAP desde Apache y PHP correcta.


Si el usuario y contraseña es incorrecta saldrá por pantalla lo siguiente:

  Validar en servidor LDAP desde PHP

  Conectando con servidor LDAP desde PHP...
  Conectado correctamente al servidor LDAP 192.168.0.1

  Comprobando usuario y contraseña en Servidor LDAP

  No se ha podido autenticar con el servidor LDAP: 192.168.0.1, verifique el usuario y la contraseña introducidos


FUENTE: http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=494

viernes, 1 de julio de 2016

Ocultar versión de Apache y PHP en Debian 8 (Jessie)

Cuando ponemos mal una ruta en el apache, nos suele devolver la versión que está corriendo, esto no es del todo seguro, ya que puede facilitarle la tarea a los que intentan atacar el server:




Para ocultarlo vamos a editar el security de Apache, comentando todos los ServerTokens que aparezcan, sólo dejamos el de ProductOnly y el ServerSignature en Off como se muestra en rojo abajo:

vi /etc/apache2/conf-enabled/security.conf

 #ServerTokens Minimal
 #ServerTokens OS
 #ServerTokens Full
 ServerTokens ProductOnly
 ServerSignature Off
 #ServerSignature On


Luego editamos el php.ini cambiando el On por el Off:

vim /etc/php5/apache2/php.ini

#expose_php = On
expose_php = Off 


Reiniciamos el apache:

/etc/init.d/apache2 restart


Vemos que ahora no aparece más la versión que aparecía antes:



jueves, 30 de junio de 2016

Permitir phpmyadmin en un rango de red en Debian 8 (Jessie)


Editamos la config del apache:

root@miServer:/# vi /etc/phpmyadmin/apache.conf

Agregamos en rojo lo siguiente en el lugar indicado:

# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin


    AllowOverride All  <==== Agregar esto acá
    Options FollowSymLinks
    DirectoryIndex index.php

   
       
            AddType application/x-httpd-php .php
       
       
            SetHandler application/x-httpd-php
       


Creamos el .htacces en la siguiente ruta:

root@miServer:/# vi /usr/share/phpmyadmin/.htaccess

Y agregamos lo siguiente:

deny from all
allow from 127.0.0.1
allow from 192.168.1.0/255.255.255.0    <== Denegamos todo menos esta red 


Reiniciamos el apache:

root@miServer:/# /etc/init.d/apache2 reload


Y vemos que accediendo al sitio nos aparece lo siguiente: