{"id":918,"date":"2020-05-17T17:13:37","date_gmt":"2020-05-17T15:13:37","guid":{"rendered":"https:\/\/blog.tiraquelibras.com\/?p=918"},"modified":"2020-05-21T12:28:17","modified_gmt":"2020-05-21T10:28:17","slug":"bloqueo-web-por-pais-origen-en-apache-y-debian-9","status":"publish","type":"post","link":"https:\/\/blog.tiraquelibras.com\/?p=918","title":{"rendered":"Bloqueo web por pa\u00eds origen con MaxMind, en Apache y Debian 9"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_76 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Tabla de contenidos<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a0e584f19018\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a0e584f19018\"  aria-label=\"Alternar\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Introduccion\"  rel=\"nofollow\" target=\"_blank\">Introducci\u00f3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Componentes\"  rel=\"nofollow\" target=\"_blank\">Componentes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Instalacion\"  rel=\"nofollow\" target=\"_blank\">Instalaci\u00f3n<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Libreria_mod_geoip\"  rel=\"nofollow\" target=\"_blank\">Librer\u00eda mod_geoip<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Configuracion_de_Apache\"  rel=\"nofollow\" target=\"_blank\">Configuraci\u00f3n de Apache<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Confirmar_la_instalacion\"  rel=\"nofollow\" target=\"_blank\">Confirmar la instalaci\u00f3n<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Bloqueo\"  rel=\"nofollow\" target=\"_blank\">Bloqueo<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#En_configuracion_del_VirtualHost\"  rel=\"nofollow\" target=\"_blank\">En configuraci\u00f3n del VirtualHost<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Permitir_pais_origen_y_denegar_el_resto\"  rel=\"nofollow\" target=\"_blank\">Permitir pa\u00eds origen y denegar el resto<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Denegar_pais_origen_y_permitir_el_resto\"  rel=\"nofollow\" target=\"_blank\">Denegar pa\u00eds origen y permitir el resto<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Reiniciar_servidor_web\"  rel=\"nofollow\" target=\"_blank\">Reiniciar servidor web<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Confirmar_el_bloqueo\"  rel=\"nofollow\" target=\"_blank\">Confirmar el bloqueo<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#En_archivo_htaccess\"  rel=\"nofollow\" target=\"_blank\">En archivo .htaccess<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Configuracion_de_htaccess\"  rel=\"nofollow\" target=\"_blank\">Configuraci\u00f3n de .htaccess<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-15 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Permitir_pais_origen_y_denegar_el_resto-2\"  rel=\"nofollow\" target=\"_blank\">Permitir pa\u00eds origen y denegar el resto<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Denegar_pais_origen_y_permitir_el_resto-2\"  rel=\"nofollow\" target=\"_blank\">Denegar pa\u00eds origen y permitir el resto<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Reiniciar_servidor_web-2\"  rel=\"nofollow\" target=\"_blank\">Reiniciar servidor web<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Confirmar_el_bloqueo-2\"  rel=\"nofollow\" target=\"_blank\">Confirmar el bloqueo<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Actualizar_la_base_de_datos\"  rel=\"nofollow\" target=\"_blank\">Actualizar la base de datos<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Pasos_necesarios\"  rel=\"nofollow\" target=\"_blank\">Pasos necesarios<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Archivo_final_con_Docker\"  rel=\"nofollow\" target=\"_blank\">Archivo final con Docker<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Automatizar_actualizacion_de_la_base_de_datos\"  rel=\"nofollow\" target=\"_blank\">Automatizar actualizaci\u00f3n de la base de datos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Programacion_de_la_descarga_en_el_Cron\"  rel=\"nofollow\" target=\"_blank\">Programaci\u00f3n de la descarga en el Cron<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Cambiar_configuracion_de_Apache\"  rel=\"nofollow\" target=\"_blank\">Cambiar configuraci\u00f3n de Apache<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-25 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Conclusion\"  rel=\"nofollow\" target=\"_blank\">Conclusi\u00f3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-26 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\/#Enlaces_de_interes\"  rel=\"nofollow\" target=\"_blank\">Enlaces de inter\u00e9s<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Introduccion\"><\/span>Introducci\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>En esta entrada vamos a aprender como denegar accesos a nuestra p\u00e1gina Web en un servidor <em>Apache<\/em>, filtrando por el pa\u00eds origen desde donde se est\u00e1 realizando la conexi\u00f3n.<\/p>\n\n\n\n<p>Podemos encontrarnos situaciones en las que solemos recibir ataques de login por fuerza bruta, de <em>MySQL Injection<\/em>, por ejemplo, o que simplemente tienes una aplicaci\u00f3n que solo vas a servir a direcciones IP nacionales. En todos estos casos filtrar por pa\u00eds origen nos puede ser de gran utilidad.<\/p>\n\n\n\n<p>Vamos al l\u00edo!!!<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Componentes\"><\/span>Componentes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>El escenario en donde aplicaremos este procedimiento consta de los siguientes componentes:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Servidor web <strong>Apache2<\/strong> instalado en <strong>Debian 9<\/strong>.<\/li><li>M\u00f3dulo <strong>libapache2-mod-geoip<\/strong>.<\/li><li>Base de datos <strong>GeoIP.dat<\/strong>.<\/li><li>Bloqueo en el archivo de configuraci\u00f3n del dominio o en archivo <strong>.htaccess<\/strong>.<\/li><\/ul>\n\n\n\n<p>La base de datos se obtiene al instalar el m\u00f3dulo de <em>Apache<\/em>, pero en mi caso est\u00e1 bastante desfasada. Veremos como obtenerla a partir de las bases de datos gratuitas de <strong><em><a href=\"https:\/\/www.maxmind.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external external_icon\"><span class=\"has-inline-color has-pale-cyan-blue-color\">MaxMind<\/span><\/a><\/em><\/strong>.<\/p>\n\n\n\n<p>Se supone que ya tenemos un servidor Web, por lo que esta entrada solo se centra en el bloqueo del acceso y no en el despliegue del servidor.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Instalacion\"><\/span>Instalaci\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Para realizar la instalaci\u00f3n seguiremos los siguientes pasos:<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Libreria_mod_geoip\"><\/span>Librer\u00eda mod_geoip<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Primero instalamos la librer\u00eda necesaria para realizar el bloqueo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">apt-get install libapache2-mod-geoip<\/code><\/pre>\n\n\n\n<p>No har\u00eda falta habilitar el m\u00f3dulo, aunque podemos comprobarlo con el siguiente comando y nos dir\u00e1 si ya lo est\u00e1 o no:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">a2enmod geoip<\/code><\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Configuracion_de_Apache\"><\/span>Configuraci\u00f3n de Apache<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Edita el siguiente archivo con tu editor favorito:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">nano \/etc\/apache2\/mods-available\/geoip.conf<\/code><\/pre>\n\n\n\n<p>Descomentamos las siguientes l\u00edneas, en donde indicamos que se active la geolocalizaci\u00f3n y se consulte el archivo con la informaci\u00f3n de los paises:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"apacheconf\" class=\"language-apacheconf\">&lt;IfModule mod_geoip.c>\n  GeoIPEnable On\n  GeoIPDBFile \/usr\/share\/GeoIP\/GeoIP.dat\n&lt;\/IfModule><\/code><\/pre>\n\n\n\n<p>Como coment\u00e9 en la secci\u00f3n anterior, esta base de datos <em>GeoIP.dat<\/em> est\u00e1 algo desfasada, ya que en mi instalaci\u00f3n data del <em>12 de Mayo del 2017<\/em>.<\/p>\n\n\n\n<p>Reiniciamos el servidor Web:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">\/etc\/init.d\/apache2 restart<\/code><\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Confirmar_la_instalacion\"><\/span>Confirmar la instalaci\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Ahora confirmamos que la instalaci\u00f3n funciona. Imaginemos que tenemos nuestro dominio <strong><em>https:\/\/www.tiraquelibras.com<\/em><\/strong> instalado en un <em>VirtualHost<\/em> y cuyo <em>DocumentRoot<\/em> o directorio en donde se encuentra la Web es <em>\/var\/www\/html\/www.tiraquelibras.com\/<\/em>.<\/p>\n\n\n\n<p>Creamos el archivo <strong><em>geoip.php<\/em><\/strong> en el directorio del dominio. Usa tu editor favorito para ello:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">nano \/var\/www\/html\/www.tiraquelibras.com\/geoip.php<\/code><\/pre>\n\n\n\n<p>El archivo contiene el siguiente c\u00f3digo, que ya se lo cutre que es pero nos vale para saber si funciona y obtener la IP origen y el c\u00f3digo del pa\u00eds:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">&lt;html>\n  &lt;head>\n    &lt;title>mod_geoip&lt;\/title>\n  &lt;\/head>\n  &lt;body>\n    &lt;?php\n      echo \"IP del origen: \".$_SERVER['REMOTE_ADDR'].\"&lt;br>\";\n      echo \"C\u00f3digo del continente: \".$_SERVER[\"GEOIP_CONTINENT_CODE\"].\"&lt;br>\";\n      echo \"C\u00f3digo del pa\u00eds: \".$_SERVER[\"GEOIP_COUNTRY_CODE\"].\"&lt;br>\";\n      echo \"Nombre del pa\u00eds: \".$_SERVER[\"GEOIP_COUNTRY_NAME\"].\"&lt;br>\";\n    ?>\n  &lt;\/body>\n&lt;\/html><\/code><\/pre>\n\n\n\n<p>El resultado ser\u00eda el siguiente al acceder a la URL <a href=\"https:\/\/www.tiraquelibras.com\/geoip.php\" target=\"_blank\" rel=\"noreferrer noopener\"><strong><span class=\"has-inline-color has-pale-cyan-blue-color\">https:\/\/www.tiraquelibras.com\/geoip.php<\/span><\/strong><\/a>:<\/p>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/1.jpg\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"212\" height=\"164\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/1.jpg\" alt=\"\" class=\"wp-image-921\"\/><\/a><\/figure><\/div>\n\n\n\n<p>Podemos ver como se indica la IP orgien, el c\u00f3digo del pa\u00eds, en este caso <strong>ES<\/strong>, el cual usaremos para indicar a qui\u00e9n bloquearemos en el acceso a nuestra Web.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Bloqueo\"><\/span>Bloqueo<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Podemos aplicar el bloqueo del pa\u00eds origen en dos puntos distintos:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Dentro del archivo de configuraci\u00f3n del dominio o del <strong>VirtualHost<\/strong> si lo tuvi\u00e9ramos configurado, en la configuraci\u00f3n del servidor Web.<\/li><li>En el archivo <strong>.htaccess<\/strong>, ubicado en el directorio de la Web a proteger.<\/li><\/ul>\n\n\n\n<p>Ambas tendr\u00e1n el mismo efecto.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"En_configuracion_del_VirtualHost\"><\/span>En configuraci\u00f3n del VirtualHost<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Si aplicamos el bloqueo dentro del archivo de configuraci\u00f3n del dominio o del <em>VirtualHost<\/em> debemos indicarlo en la secci\u00f3n en donde se especifica el directorio que aloja la p\u00e1gina Web a proteger, tal y como se muestra a continuaci\u00f3n. Por ejemplo, en nuestro caso ser\u00eda dentro del archivo de <em>Apache<\/em> <em>\/etc\/apache2\/sites-available\/www.tiraquelibras.com-le-ssl.conf<\/em>, pero tu debes indicar el que corresponda a tu dominio.<\/p>\n\n\n\n<p>En funci\u00f3n de si queremos permitir o bloquear por pa\u00eds origen:<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Permitir_pais_origen_y_denegar_el_resto\"><\/span>Permitir pa\u00eds origen y denegar el resto<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"apacheconf\" class=\"language-apacheconf\">&lt;VirtualHost *:...\n\n    &lt;Directory \/var\/www\/html\/www.tiraquelibras.com>\n        # Only allow specific countries\n        GeoIPEnable On\n        SetEnvIf GEOIP_COUNTRY_CODE ES AllowCountry\n        Deny from all\n        Allow from env=AllowCountry\n\n    &lt;\/Directory>\n\n...\n&lt;\/VirtualHost><\/code><\/pre>\n\n\n\n<p>Puedes indicar m\u00e1s de un pa\u00eds creando una l\u00ednea independiente por cada uno de ellos.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Denegar_pais_origen_y_permitir_el_resto\"><\/span>Denegar pa\u00eds origen y permitir el resto<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Tambi\u00e9n podr\u00edamos indicar el pa\u00eds a bloquear en lugar del permitido, por ejemplo para bloquear \u00fanicamente China. En este caso no es necesario indicar que se permita al resto con la opci\u00f3n <em>Allow from \u2026<\/em>, ya que de lo contrario no se aplicar\u00eda el bloqueo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"apacheconf\" class=\"language-apacheconf\">&lt;VirtualHost *:...\n\n    &lt;Directory \/var\/www\/html\/www.tiraquelibras.com>\n        # Only allow specific countries\n        GeoIPEnable On\n        SetEnvIf GEOIP_COUNTRY_CODE CH DenyCountry\n        Deny from env=DenyCountry\n    &lt;\/Directory>\n\n...\n&lt;\/VirtualHost><\/code><\/pre>\n\n\n\n<p>Puedes indicar m\u00e1s de un pa\u00eds creando una l\u00ednea independiente por cada uno de ellos.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Reiniciar_servidor_web\"><\/span>Reiniciar servidor web<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Ante cualquier cambio en la configuraci\u00f3n recuerda reiniciar el servidor Web:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">\/etc\/init.d\/apache2 reload<\/code><\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Confirmar_el_bloqueo\"><\/span>Confirmar el bloqueo<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>En este caso permitir\u00edamos \u00fanicamente las IPs con origen Espa\u00f1a <strong>ES<\/strong> rechazando el resto, como se indic\u00f3 en el ejemplo anterior.<\/p>\n\n\n\n<p>Si navegamos desde una IP ubicada en otro pa\u00eds no deber\u00edamos de poder navegar. Para realizar esta prueba puedes consultar la siguiente publicaci\u00f3n para hacer uso de un <a rel=\"noreferrer noopener nofollow\" href=\"https:\/\/blog.tiraquelibras.com\/?p=866\" target=\"_blank\" class=\"external external_icon\"><strong><span class=\"has-inline-color has-pale-cyan-blue-color\">Proxy an\u00f3nimo de la red Tor usando una Raspberry y Docker<\/span><\/strong><\/a>.<\/p>\n\n\n\n<p>En este caso haremos uso de una IP ubicada en China, y por tanto no se permitir\u00e1 el acceso a nuestra URL protegida:<\/p>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/2.png\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"254\" height=\"154\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/2.png\" alt=\"\" class=\"wp-image-924\"\/><\/a><\/figure><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">IP               -  176.10.99.200\nContCode         -  EU\nContinent        -  Europe\nCounCode         -  CH\nCountry          -  Switzerland\n\nPowered by https:\/\/www.tiraquelibras.com\/blog<\/code><\/pre>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/3.png\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"544\" height=\"170\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/3.png\" alt=\"\" class=\"wp-image-925\"\/><\/a><\/figure><\/div>\n\n\n\n<p>Sin embargo, desde una IP espa\u00f1ola s\u00ed estar\u00e1 permitido el acceso:<\/p>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/4.png\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"372\" height=\"167\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/4.png\" alt=\"\" class=\"wp-image-926\"\/><\/a><\/figure><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">IP               -  85.152.18.44\nContCode         -  EU\nContinent        -  Europe\nCounCode         -  ES\nCountry          -  Spain\n\nPowered by https:\/\/www.tiraquelibras.com\/blog<\/code><\/pre>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/5.png\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"357\" height=\"150\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/5.png\" alt=\"\" class=\"wp-image-927\"\/><\/a><\/figure><\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"En_archivo_htaccess\"><\/span>En archivo .htaccess<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Configuracion_de_htaccess\"><\/span>Configuraci\u00f3n de .htaccess<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Dentro de la configuraci\u00f3n de nuestro dominio configuramos el uso del archivo <em>.htaccess<\/em> en el directorio en donde se encuentre la p\u00e1gina Web o <em>DocumentRoot<\/em>, en nuestro caso <em>\/etc\/apache2\/sites-available\/www.tiraquelibras.com-le-ssl.conf<\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"apacheconf\" class=\"language-apacheconf\">...\n&lt;Directory \/var\/www\/html\/www.tiraquelibras.com>\n        # Enable .htaccess\n        Options Indexes FollowSymLinks\n        AllowOverride All\n        Require all granted\n&lt;\/Directory>\n...<\/code><\/pre>\n\n\n\n<p>Y creamos el archivo <strong>.htaccess<\/strong> en nuestro directorio Web, en nuestro caso <em>\/var\/www\/html\/www.tiraquelibras.com\/.htaccess<\/em>, con el siguiente contenido en funci\u00f3n de si queremos permitir o bloquear por pa\u00eds origen:<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Permitir_pais_origen_y_denegar_el_resto-2\"><\/span>Permitir pa\u00eds origen y denegar el resto<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"apacheconf\" class=\"language-apacheconf\">GeoIPEnable On\n# Put countries to allow here\nSetEnvIf GEOIP_COUNTRY_CODE ES AllowCountry\n\nDeny from all\nAllow from env=AllowCountry<\/code><\/pre>\n\n\n\n<p>Puedes indicar m\u00e1s de un pa\u00eds creando una l\u00ednea independiente por cada uno de ellos.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Denegar_pais_origen_y_permitir_el_resto-2\"><\/span>Denegar pa\u00eds origen y permitir el resto<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"apacheconf\" class=\"language-apacheconf\">GeoIPEnable On\n# Put countries to allow here\nSetEnvIf GEOIP_COUNTRY_CODE US DenyCountry\n\nDeny from env=DenyCountry<\/code><\/pre>\n\n\n\n<p>Puedes indicar m\u00e1s de un pa\u00eds creando una l\u00ednea independiente por cada uno de ellos.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Reiniciar_servidor_web-2\"><\/span>Reiniciar servidor web<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Ante cualquier cambio en la configuraci\u00f3n recuerda reiniciar el servidor Web:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">\/etc\/init.d\/apache2 reload<\/code><\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Confirmar_el_bloqueo-2\"><\/span>Confirmar el bloqueo<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Para confirmar el bloqueo podemos realizar los mismos pasos que en el <span class=\"has-inline-color has-pale-cyan-blue-color\"><strong><a href=\"https:\/\/blog.tiraquelibras.com\/?p=918#Confirmar_el_bloqueo\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external external_icon\">apartado anterior<\/a><\/strong><\/span>.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Actualizar_la_base_de_datos\"><\/span>Actualizar la base de datos<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Para actualizar la base de datos que consulta <em>Apache<\/em> para relaizar la geolocalizaci\u00f3n podemos hacer uso de las bases de datos gratuitas de <a href=\"https:\/\/maxmind.com\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\"><strong><span class=\"has-inline-color has-pale-cyan-blue-color\">MaxMind<\/span><\/strong><\/a> en formato <strong>.CSV<\/strong>, y posteriormente con un contenedor de <strong>Docker<\/strong> transformaremos este archivo a formato <strong>.DAT<\/strong>.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Pasos_necesarios\"><\/span>Pasos necesarios<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Para poder descargarte las bases de datos de MaxMind y actualizar la base de datos que el servidor Web consultar\u00e1, debes seguir los siguientes pasos:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Debes crearte una cuenta en su p\u00e1gina web <a href=\"https:\/\/maxmind.com\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external external_icon\"><strong><span class=\"has-inline-color has-pale-cyan-blue-color\">MaxMind<\/span><\/strong><\/a>.<\/li><li>Una vez accedas al portal debes ir a la secci\u00f3n <strong>Services -&gt; My Licence Key<\/strong> y crear una nueva <strong>Key<\/strong> que llamaremos <strong><em>Apache2<\/em><\/strong>. Recuerda copiarla y guardarla ya que solo se muestra una vez y no se puede recuperar:<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/6-1.png\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"240\" height=\"100\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/6-1.png\" alt=\"\" class=\"wp-image-933\"\/><\/a><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/7-1.png\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"261\" height=\"68\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/7-1.png\" alt=\"\" class=\"wp-image-934\"\/><\/a><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/8-1.png\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"308\" height=\"235\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/8-1.png\" alt=\"\" class=\"wp-image-935\"\/><\/a><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/9-1.png\" class=\"external\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" width=\"706\" height=\"90\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2020\/05\/9-1.png\" alt=\"\" class=\"wp-image-936\"\/><\/a><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>Una vez creada la Key procedemos a la descarga de la base de datos en formato <strong>.ZIP<\/strong> desde <strong><a href=\"https:\/\/dev.maxmind.com\/geoip\/geoip2\/geolite2\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external external_icon\"><span class=\"has-inline-color has-pale-cyan-blue-color\">la secci\u00f3n de MaxMind<\/span><\/a><\/strong><span class=\"has-inline-color has-pale-cyan-blue-color\">.<\/span><\/li><li>Con <em>Docker<\/em> obtenemos el archivo <strong>GeoIP.dat<\/strong> a partir del <strong>.CSV<\/strong> descargado seg\u00fan esta herramienta publicada en este enlace de <strong><a href=\"https:\/\/github.com\/sherpya\/geolite2legacy\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external external_icon\"><span class=\"has-inline-color has-pale-cyan-blue-color\">GitHub<\/span><\/a><\/strong>. Nosotros llamaremos al archivo final <strong>GeoIP-MaxMind.dat<\/strong>. A continuaci\u00f3n explicaremos como obtener la imagen y arrancar el <em>Container<\/em>.<\/li><li>Movemos o indicamos al servidor Web d\u00f3nde se encuentra el nuevo archivo.<\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Archivo_final_con_Docker\"><\/span>Archivo final con Docker<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Una vez tengamos descargado el archivo debemos transformarlo al formato que consulta el servidor Web, y para ello hay una herramienta que lo har\u00e1 por nosotros de manera muy sencilla.<\/p>\n\n\n\n<p>Pdemos descargar la herramienta publicada en la URL de <a href=\"https:\/\/github.com\/sherpya\/geolite2legacy\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\"><strong><span class=\"has-inline-color has-pale-cyan-blue-color\">GitHub<\/span><\/strong><\/a> de dos formas:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Descargando la herramienta con el comando <code>wget https:\/\/github.com\/sherpya\/geolite2legacy\/archive\/master.zip<\/code> y descomprimiendo el archivo descargado.<\/li><li>Clonando la herramienta con el comando <code>git clone https:\/\/github.com\/sherpya\/geolite2legacy.git<\/code>.<\/li><\/ul>\n\n\n\n<p>Una vez descargado podemos crear la imagen de <em>Docker<\/em> desde el archivo <em>Dockerfile<\/em> que viene incluido en el repositorio, usando el siguiente comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">docker build -t geolite2legacy .<\/code><\/pre>\n\n\n\n<p>La imagen resultante quedar\u00e1 creada y lista para ser utilizada, con el nombre <em>geolite2legacy<\/em> indicado en el comando anterior.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">docker image ls\nREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE\ngeolite2legacy      latest              761a7e8f1ba6        5 days ago          178MB<\/code><\/pre>\n\n\n\n<p>Si quisi\u00e9ramos ejecutar el comando de forma manual para obtener el archivo final, ejecutar\u00edamos el siguiente comando, utilizando el archivo <strong>.ZIP<\/strong> de <em>MaxMind<\/em> descargado y el nombre del archivo final, en nuestro caso <strong>GeoIP-MaxMind.dat<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">docker run -it -v $(pwd):\/src geolite2legacy:latest -i \/src\/GeoLite2-Country-CSV.zip -o \/src\/GeoIP-MaxMind.dat<\/code><\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Automatizar_actualizacion_de_la_base_de_datos\"><\/span>Automatizar actualizaci\u00f3n de la base de datos<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Todo esto lo podemos obtener en el siguiente script de <em>BASH<\/em>, que llamaremos <strong><em>updateMaxMindCSV.sh<\/em><\/strong>, pero recuerda indicar la <strong>Key<\/strong> de <em>MaxMind<\/em>, generada anteriormente, dentro del archivo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash\n\n### Variables\n\n# DB file path\ndb_path='dbs'\n\n# DB file name\n#country_file='GeoLite2-Country-Locations-en.csv'\n\n# DB file downloaded compresed\ncountry_file_gz='GeoLite2-Country.zip'\n\n# Max Mind Legacy file\nmaxMind_dat='GeoIP-MaxMind.dat'\n\n# Max Mind token\nmaxMind_token='INDICA_TU_TOKEN_AQUI'\n\n# URLs to download all databases (City, Country, ASN)\ncountry_url=\"https:\/\/download.maxmind.com\/app\/geoip_download?edition_id=GeoLite2-Country-CSV&amp;license_key=$maxMind_token&amp;suffix=zip\"\n\n# Apache2 GeoIP path\napache_path='\/usr\/share\/GeoIP\/'\n\n### Getting all files\n\n# Country\nwget -c $country_url -O $country_file_gz\nif [ $? != 0 ];then\n        echo \"Failed gettig $country_file_gz MaxMind database\"\n        exit 1\nfi\n\n\n### Getting MaxMind Legacy Database from .ZIP file donwloaded\ndocker run -v $(pwd):\/src geolite2legacy:latest -i \/src\/$country_file_gz -o \/src\/$maxMind_dat\n\n\n### Copy file to Apache2 GeoIP path\ncp $maxMind_dat $apache_path\n\n\n### Deleting all files downloaded\nrm -rf .\/$country_file_gz .\/$maxMind_dat\n\nexit 0<\/code><\/pre>\n\n\n\n<p>La \u00fanica diferencia con el comando manual de <em>Docker  <\/em>es que en el script debemos de quitar el modo interactivo (<em>-it<\/em>) para evitar errores con archivos no existentes, los cuales le pasamos al <em>Container<\/em> como argumentos.<\/p>\n\n\n\n<p>Le damos permisos de ejecuci\u00f3n al archivo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">chmod 744 updateMaxMindCSV.sh<\/code><\/pre>\n\n\n\n<p>Si lo ejecutamos tendremos la base de datos en formato <strong>.DAT<\/strong> descargada a la \u00faltima versi\u00f3n, y copiado al directorio en donde se encuenta el archivo <strong>GeoIP.dat<\/strong> original de Apache.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">.\/updateMaxMindCSV.sh<\/code><\/pre>\n\n\n\n<p>En el directorio por defecto tendr\u00edamos el nuevo archivo generado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">ls \/usr\/share\/GeoIP\/\nGeoIP.dat  GeoIP-MaxMind.dat  GeoIP-test.dat  GeoIPv6.dat<\/code><\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Programacion_de_la_descarga_en_el_Cron\"><\/span>Programaci\u00f3n de la descarga en el Cron<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Si lo dejamos configurado en el <strong>Cron<\/strong> para que se ejecute el script de actualizaci\u00f3n un d\u00eda a la semana, por ejemplo el mi\u00e9rcoles, lo tendr\u00edamos siempre actualizado con la \u00faltima versi\u00f3n publicada. Por ejemplo, para descargar y generar el archivo final en la madrugada de todos los mi\u00e9rcoles de la semana:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">crontab -e\n...\n02 19 * * 3 cd \/usr\/local\/scripts\/apacheGeoIp; .\/updateMaxMindCSV.sh<\/code><\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Cambiar_configuracion_de_Apache\"><\/span>Cambiar configuraci\u00f3n de Apache<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Ahora cambiamos la configuraci\u00f3n del servidor Web para que use esta base de datos, editando el archivo <em>\/etc\/apache2\/mods-available\/geoip.conf<\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"apacheconf\" class=\"language-apacheconf\">&lt;IfModule mod_geoip.c>\n  GeoIPEnable On\n  #GeoIPDBFile \/usr\/share\/GeoIP\/GeoIP.dat\n  GeoIPDBFile \/usr\/share\/GeoIP\/GeoIP-MaxMind.dat\n&lt;\/IfModule><\/code><\/pre>\n\n\n\n<p>Reiniciamos <strong>Apache<\/strong> y estar\u00eda funcionando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">service apache2 restart<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusi\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Bloquear las conexiones por pa\u00eds origen nos puede ayudar a mantener nuestar Web protegida ante accesos no deseados, o incluso evitar que nos dejen inaccesible siendo el objetivo de ataques.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Enlaces_de_interes\"><\/span>Enlaces de inter\u00e9s<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><a href=\"https:\/\/www.maxmind.com\/\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">MaxMind <\/a><a href=\"https:\/\/www.maxmind.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external external_icon\">oficial<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.maxmind.com\/en\/accounts\/150214\/geoip\/downloads\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external external_icon\">MaxMind bases de datos gratuitas disponibles<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/dev.maxmind.com\/geoip\/legacy\/codes\/iso3166\/\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">MaxMind c\u00f3digos de paises<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/sherpya\/geolite2legacy\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">Transformar archivo .CSV <\/a><a href=\"https:\/\/github.com\/sherpya\/geolite2legacy\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external external_icon\">a <\/a><a href=\"https:\/\/github.com\/sherpya\/geolite2legacy\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">.DAT<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.soylibre.com\/instalar-mod_geoip-apache2-debian-ubuntu\/\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">Apache instalaci\u00f3n m\u00f3dulo<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/coderwall.com\/p\/dqqz5q\/apache-block-specific-countries-using-mod_geoip\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external external_icon\">Apache configuraci\u00f3n de bloqueo en VirtualHost<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/obrienlabs.net\/use-geoip-htaccess-deny-countries-access-website\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external external_icon\">Apache configuraci\u00f3n de bloqueo en archivo .htaccess<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n En esta entrada vamos a aprender como denegar accesos a nuestra p\u00e1gina Web en un servidor Apache, filtrando por el pa\u00eds origen desde donde<span class=\"read-more-link\"><a class=\"read-more\" href=\"https:\/\/blog.tiraquelibras.com\/?p=918\">Read More<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":943,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,10],"tags":[109,108],"class_list":["post-918","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ciberseguridad","category-sistemas","tag-bloqueo","tag-seguridad-web"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts\/918","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=918"}],"version-history":[{"count":0,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts\/918\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/media\/943"}],"wp:attachment":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=918"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=918"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=918"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}