{"id":256,"date":"2018-11-04T13:41:55","date_gmt":"2018-11-04T12:41:55","guid":{"rendered":"https:\/\/www.pinguytaz.net\/?p=256"},"modified":"2019-10-08T22:12:53","modified_gmt":"2019-10-08T20:12:53","slug":"configura-e-instala-apache","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2018\/11\/04\/configura-e-instala-apache\/","title":{"rendered":"Configura e instala \u00abApache\u00bb"},"content":{"rendered":"\n<p><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2018\/10\/19\/alpine-linux-reduccion-de-linux\/\">Despu\u00e9s del hablar<\/a> de&nbsp;&nbsp;<a href=\"https:\/\/alpinelinux.org\/\">AlpineLinux<\/a> era este sistema operativo (GNU\/Linux) de tama\u00f1o reducido, me puse a generar mi laboratorio Virtual.<\/p>\n\n\n\n<p>Empezamos con la configuraci\u00f3n de un servidor web (<a href=\"https:\/\/www.apache.org\/\">Apache<\/a>) que se conectara a los servidores de BBDD (MariaDB\/MySQL y PostgreSQL). Nos basaremos para todo esto en una configuraci\u00f3n de red similar a la siguiente.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i1.wp.com\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/LAB.png?fit=504%2C359&amp;ssl=1\" alt=\"Esquema de red\" class=\"wp-image-289\" width=\"539\" height=\"384\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/LAB.png 504w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/LAB-300x214.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/LAB-152x108.png 152w\" sizes=\"auto, (max-width: 539px) 100vw, 539px\" \/><figcaption>Red laboratorio de Pentesting\/Desarrollo<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Servidor WEB (Apache + PHP)<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.apache.org\/\">Apache<\/a>&nbsp;es un servidor WEB realizado con un dise\u00f1o modular que nos permite a\u00f1adir funcionalidades como el interprete <a href=\"http:\/\/php.net\/\">PHP<\/a>.&nbsp; Instalaremos el servidor&nbsp; Apache junto a los m\u00f3dulos necesarios para poder usar <a href=\"http:\/\/php.net\/\">PHP<\/a>.<\/p>\n\n\n\n<p>As\u00ed tendremos nuestro servidor WEB para poder probar los desarrollos de nuestras p\u00e1ginas, instalar p\u00e1ginas para pruebas de pentesting, incluso poner este servidor en producci\u00f3n. Y esto solo en 1 GB de disco.<\/p>\n\n\n\n<p>Tenemos otros servidores WEB como IIS (lo descartamos al ser windows y no libre),&nbsp; nginx, lighttpd. El uso servidor Apache ha crecido desde su creaci\u00f3n con un peque\u00f1o bajos en los a\u00f1os 2.007-2.008 a favor de IIS que ha vuelto a revertirse.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instalando Apache<\/h2>\n\n\n\n<p>Hemos creado una maquina virtual, en nuestro <a href=\"https:\/\/www.virtualbox.org\/\">VirtualBox<\/a>,&nbsp; con&nbsp;<a href=\"https:\/\/alpinelinux.org\/\">AlpineLinux<\/a>&nbsp;con tres tarjetas de red:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Adaptador anfitri\u00f3n<\/strong> para llegar con el navegador de nuestro Host, que configuraremos con una IP fija.<\/li><li><strong>Red interna<\/strong>, que se conectara a los servidores de Bases de Datos que explicaremos en otro POST, se configurara tambien con una IP fija de nuestra red interna.<\/li><li><strong>NAT<\/strong> para conectar a internet y descargarnos los paquetes, luego la desconectaremos para estar aislados de internet salvo que deseemos publicar nuestro servidor.<\/li><\/ol>\n\n\n\n<p>Procedemos a instalar el servidor apache y el modulo de <a href=\"http:\/\/php.net\/\">PHP<\/a> que en nuestro caso sera la versi\u00f3n 7.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apk add apache2 apache2-utils php7-apache2<\/code><\/pre>\n\n\n\n<p>Una vez que tenemos instalado nuestro apache, podemos proceder a arrancar el servidor.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rc-service apache2 start\u00a0 \/\/ Inicia el servicio\n           O             \n\/etc\/init.d\/apache2 start \/\/ Igual, es el script de apache\n\nrc-update add apache2  \/\/ Se pone en los servicios a arrancar&lt;<\/code><\/pre>\n\n\n\n<p>Y con esto ya tenemos instalado nuestro servidor WEB, si no realizamos ning\u00fan cambio en la configuraci\u00f3n, pondremos nuestra pagina en el directorio \u00ab<em>\/var\/www\/localhost\/htdocs<\/em>\u00ab.<\/p>\n\n\n\n<p>Ahora solo tendremos que ir con nuestro navegador y solicitar la p\u00e1gina a la IP fija definida en el adaptador 1 \u00ab<em>http:\/\/&lt;nuestra IP&gt;<\/em>\u00bb y veremos que tenemos levantado el servidor. ParP escribiremos un fichero \u00ab<em>prueba.php<\/em>\u00ab<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nphpinfo();\n?><\/code><\/pre>\n\n\n\n<p>y solicitaremos la p\u00e1gina \u00ab<em>http:&lt;nuestraIP&gt;\/prueba.php<\/em>\u00ab<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"965\" height=\"230\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image.png\" alt=\"\" class=\"wp-image-272\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image.png 965w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-300x72.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-768x183.png 768w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-863x206.png 863w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-453x108.png 453w\" sizes=\"auto, (max-width: 965px) 100vw, 965px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Configurando Apache<\/h2>\n\n\n\n<p>Y ha llegado el momento de explicar algunas configuraciones que nos pueden interesar:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Host Virtuales<\/strong><\/li><li><strong>Ficheros .htaccess<\/strong><\/li><li><strong>Consejos de seguridad<\/strong><\/li><\/ol>\n\n\n\n<p>El fichero de configuraci\u00f3n los encontraremos en \u00ab<em>\/etc\/apache2\/httpd.conf<\/em>\u00bb en otras distribuciones se sustituye por \u00ab<em>\/etc\/apache2\/apache2.conf<\/em>\u00bb y para comprobar que la sintaxis de lo que modifiquemos es correcta podemos ejecutar.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>httpd -t   \/\/ Nos data OK si es correcta la sintexis.\napache2 -t \/\/ Para instalaciones realizadas por ejemplo en Debian.<\/code><\/pre>\n\n\n\n<p>Tambi\u00e9n tendremos un directorio donde estar\u00e1n los ficheros auxiliares de configuraci\u00f3n \u00ab<em>\/etc\/apache2\/conf.d<\/em>\u00bb y ficheros \u00ab<em>.htaccess<\/em>\u00bb en los directorios de nuestras p\u00e1ginas que permiten descentralizar ciertas configuraciones.<\/p>\n\n\n\n<p>Tenemos que configurar&nbsp;<em>AllowOverride<\/em> en la configuraci\u00f3n del directorio en para evitarlo o permitirlo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AccessFileName .htaccess  \/\/ Nombre del fichero de config. local\nAllowOverride None   \/\/ Deshabilita el uso de .htaccess\nAllowOverride All   \/\/ Se usa la configuraci\u00f3n de .htaccess<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.- Host Virtuales<\/h3>\n\n\n\n<p>Nos permite tener varios paginas, mejor dichos varios dominios, en el mismo servidor de forma que en nuestro fichero \u00ab\/etc\/hosts\u00bb de nuestro ordenador cliente definimos la IP de nuestro servidor WEB con los nombres de nuestras aplicaciones WEB y sera el propio apache el que nos lleve a la p\u00e1gina correspondiente sin tener cada una en un puerto diferente.<\/p>\n\n\n\n<p>Se podr\u00eda realizar tambi\u00e9n virtuales por IP, el servidor WEB tiene varias IPs, pero el ejemplo sera con dominios que es lo m\u00e1s normal.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Crearemos dos servidores virtuales: <em>sqli.lab<\/em> y <em>docker.lab<\/em> que tendr\u00e1n por ejemplo un proyecto de practicas de SQL-Inyection y la otra un interface WEB para la gesti\u00f3n del servidor docker.&nbsp;<\/p><\/blockquote>\n\n\n\n<p>Lo primero sera definir en el fichero \u00ab<em>\/etc\/hosts<\/em>\u00bb de los equipos que accedan al servidor web los dominios con la IP del servidor (en mi caso 192.168.56.20) ya que no son dominios p\u00fablicos sino locales a nuestra red.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>192.168.56.20   sqli.lab docker.lab<\/code><\/pre>\n\n\n\n<p>Y lo mismo en el fichero hosts de nuestro servidor WEB, para que apache lo resuelva.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Configuraci\u00f3n en httpd.conf<\/h4>\n\n\n\n<p>Nos aseguraremos que en el fichero \u00ab<em>\/etc\/apache2\/httpd.conf<\/em>\u00bb esta la directiva \u00ab<em>IncludeOptional \/etc\/apache2\/conf.d\/*.conf<\/em>\u00bb normalmente al final del fichero y que permitir\u00e1 leer configuraciones del directorio <em>conf.d<\/em><\/p>\n\n\n\n<p>Deberemos dar permisos al directorio ra\u00edz donde se alojaran las p\u00e1ginas cambiando del DocumentRoot, as\u00ed como&nbsp; &nbsp;los permisos de este.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"862\" height=\"312\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-6.png\" alt=\"\" class=\"wp-image-298\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-6.png 862w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-6-300x109.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-6-768x278.png 768w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-6-298x108.png 298w\" sizes=\"auto, (max-width: 862px) 100vw, 862px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Creamos ficheros VirtualHost (sqli.conf y docker.conf)<\/h4>\n\n\n\n<p>Crearemos un fichero para cada VirtualHost en el directorio \u00ab<em>conf.d<\/em>\u00ab,en estos ficheros tendremos los cambios que deseemos cambiar del principal \u00ab<em>httpd.conf<\/em>\u00bb teniendo en cada fichero las propias caracter\u00edsticas de cada uno de los virtuales.<\/p>\n\n\n\n<p>La configuraci\u00f3n de cada uno de los ficheros, cada una en sus fichero (<em>sqli.conf<\/em> y<em> docker.conf<\/em>) correspondiente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;VirtualHost *:80>   \/\/ Virtual escuchando por el puerto 80\n    DocumentRoot \"directorio de los ficheros\"\n    ServerName \"Nombre de dominio\" \/\/ Propietario apache:apache\n     ..\n&lt;\/VirtualHost><\/code><\/pre>\n\n\n\n<p>Creamos los directorios donde almacenaremos las paginas y pondremos el usuario y grupo con el que se ejecute el apache, en nuestro caso es \u00abapache\u00bb, esto se puede ver en el fichero <em>httpd.conf<\/em> en la directivas \u00ab<em>User<\/em> y <em>Group<\/em>\u00ab<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"736\" height=\"152\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-1.png\" alt=\"\" class=\"wp-image-282\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-1.png 736w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-1-300x62.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-1-480x99.png 480w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/figure>\n\n\n\n<p>Algunas de las configuraciones que podremos poner en <em>VirtualHost<\/em> y que sobrescribir\u00e1n a las definidas, si estan definidad, a las del fichero <em>http.conf<\/em>.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>DocumentRoot<\/strong> indica el directorio donde se alojan los ficheros (<em>OBLIGATORIO)<\/em><\/li><li><strong>&lt;Directory&gt; &#8230;. &lt;\/Directory&gt;<\/strong>&nbsp; Directivas de configuraci\u00f3n del directorio, aqui por ejemplo podremos permitir o no el uso del <em>.htaccess<\/em>.<\/li><li><strong>ServerName<\/strong> El dominio (OBLIGATORIO)<\/li><li><strong>Alias \/image\/ \/home\/apache\/imagenes<\/strong> Nos permite localizar las imagenes en un directorio com\u00fan y no en el propio del <em>VirtualHost<\/em>&nbsp;.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-8.png\" alt=\"\" class=\"wp-image-300\" width=\"250\" height=\"145\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-8.png 375w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-8-300x174.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-8-187x108.png 187w\" sizes=\"auto, (max-width: 250px) 100vw, 250px\" \/><\/figure><\/div>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-5.png\" alt=\"\" class=\"wp-image-286\" width=\"270\" height=\"113\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-5.png 396w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-5-300x126.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-5-258x108.png 258w\" sizes=\"auto, (max-width: 270px) 100vw, 270px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Con los fichero configurados reiniciamos el servidor<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rc-service apache restart<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.- Ficheros .htaccess<\/h3>\n\n\n\n<p>Se sit\u00faan en el directorio al que le queremos cambiar la configuraci\u00f3n por defecto, tanto de <em>httpd.conf<\/em> como el fichero que describe el <em>VirtualHost<\/em>, siempre que nos lo permita la directiva \u00ab<em>AllowOverride<\/em>\u00ab. Estos cambios no necesitan reiniciar el servidor.<\/p>\n\n\n\n<p>Un uso simple es cambiar la prioridad de la lectura de los ficheros index del directorio, normalmente esta en <em>index.html<\/em> pero al tener <a href=\"http:\/\/php.net\/\">PHP<\/a> nos puede interesar que sea <em>index.php.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DirectoryIndex index.php index.html<\/code><\/pre>\n\n\n\n<p>Otro uso t\u00edpico es solicitar autorizaci\u00f3n ya sea a un directorio o a un fichero. Estas autorizaciones pueden ser de IPs o en nuestro caso solicitaremos un usuario\/clave.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"491\" height=\"91\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-9.png\" alt=\"\" class=\"wp-image-303\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-9.png 491w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-9-300x56.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2018\/11\/image-9-480x89.png 480w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><\/figure>\n\n\n\n<p>Para definir los usuarios y las claves que se encontraran en el fichero <em>.htpasswd<\/em> usaremos la utilidad <em>htpasswd<\/em> que se encuentra en las utilidades de apache.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>htpasswd -c &lt;fichero> &lt;Usuario>  \/\/ crea fichero con usuario\nhtpasswd -mb &lt;fichero> &lt;usuario> &lt;clave> \/\/ A\u00f1ade un nuevo usuario<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.- Consejos de seguridad<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>El servidor deber\u00e1 ejecutarse con un usuario distinto a root, en&nbsp; nuestro caso como se vio antes es el usuario apache.<\/li><li>Precauci\u00f3n con poner enlaces a ficheros del sistema, por ejemplo a \/etc\/passwd, ya que podremos acceder a ellos desde la web si tenemos permiso de enlaces. (FollowSymLinks)<\/li><li>Reducir el baner de informaci\u00f3n que da el servidor seg\u00fan la directiva \u00ab<em>ServerTokens<\/em>\u00ab<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># ServerTokens Full\nServer: Apache\/2.4.34 (Unix) PHP\/7.2.10\n\n# ServerTokens OS\nServer: Apache\/2.4.34 (Unix)\n\n# ServerTokens Minimal\nServer: Apache\/2.4.34\n\n# ServerTokens Prod\nServer: Apache<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Evitar mostrar archivos de los directorios con la directiva \u00ab<em>Options -Indexes<\/em>\u00ab<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Despu\u00e9s del hablar de&nbsp;&nbsp;AlpineLinux era este sistema operativo (GNU\/Linux) de tama\u00f1o reducido, me puse a generar mi laboratorio Virtual. Empezamos con la configuraci\u00f3n de un servidor web (Apache) que se conectara a los servidores de BBDD (MariaDB\/MySQL y PostgreSQL). Nos basaremos para todo esto en una configuraci\u00f3n de red similar a la siguiente. Servidor WEB [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":453,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[68,75,7,76,64,18,73],"tags":[72,74],"class_list":["post-256","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-alpine","category-apache","category-linux","category-php","category-sistemas-operativos","category-virtualbox","category-web","tag-apache","tag-php"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=256"}],"version-history":[{"count":30,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/256\/revisions"}],"predecessor-version":[{"id":452,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/256\/revisions\/452"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media\/453"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=256"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}