Tag: Apache


Impedir el acceso a los ‘bots’ a un sitio web

October 14th, 2009 — 1:26pm

Introducción.

Los bots de los motores de búsqueda son las aplicaciones que contínuamente están revisando los sitios web y sus enlaces para indexar sus páginas.  Esto es bueno porque es precisamente lo que permite funcionar a los buscadores web y mantener su información actualizada, sin embargo también es malo para quienes mantienen los sitios si estos acceden con demasiada frecuencia y utilizan demasiados recursos del servidor, además también es posible que se desee mantener información oculta a los ojos de estos motores de búsqueda.

Para hacer esto se les indica o se les niega el acceso a nuestro sitio a estas aplicaciones.

Procedimiento.

Utilizando el archivo robots.txt.

  • Este archivo se debe ubicar en la raíz del sitio web.
  • Es una indicación amable a los bots para que cumplan lo que allí se especifica.
  • Es posible que bots malintencionados hagan caso omiso de estas indicaciones.

Impedir el acceso a todo el sitio a todos los bots.

# Go away
User-agent: *
Disallow: /

Impedir el acceso a la carpeta /blog del sitio al bot de Google.

# Don’t index my blog
User-Agent: Googlebot
Disallow: /blog/

Desde el archivo .htaccess.

  • Las modificaciones se realizan en el archivo .htaccess del sitio web.
  • Estas políticas son mas restrictivas y no pueden ser obviadas por los bots.
  • Debe concerse con precisión la red de la cual proviene el bot ya que se impedirá su acceso por parte del servidor de páginas.
  • Es posible que existan otros clientes válidos que intenten acceder desde las ubicaciones especificadas, por ello la dirección especificada deberá ser lo mas precisa posible.

Impedir el acceso al bot de Google.

Limit GET HEAD POST
order allow,deny
deny from 66.249
allow from all

VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

Comment » | Software, Web

Problemas con mod_security

June 9th, 2009 — 12:46pm

Introducción.

Mod_security es una herramienta extremadamente útil que actúa como un firewall para los sitios web permitiendo filtrar de manera muy flexible la forma como los usuarios acceden a las aplicaciones web, evitando por ejemplo vulnerabilidades conocidas o accesos inválidos.  Mas información.

Su flexibilidad la convierte también en algo un tanto compleja de entender, como todo en la vida tendré que sacar un tiempo para estudiarla y entender en serio como se implementan sus reglas.

Descripción del problema.

En la vida práctica algunas veces las restricciones por defecto que por seguridad el módulo impone interfieren con el correcto funcionamiento de la aplicación web y es cuando suceden mis problemas.  Me sucedió alguna vez con un sitio basado en CodeIgniter y ahora con una instalación de Piwik.

El acceso al script de generación de estadísticas funcionaba correctamente cuando este era accedido directamente.

http://www.server.com/piwik/piwik.php

Sin embargo fallaba por extrañas razones cuando era accedido con parámetros GET tal y como se debe hacer cuando se instala en un sitio web para que lleve las estadísticas de acceso a sus páginas.

http://www.server.com/piwik/piwik.php?url=http%3A%2F%2Fwww.server.com%2Fsite%2F&action_name=Main&idsite=1&res=1280×1024&h=10&m=55&s=25&fla=1&dir=0&realp=0&pdf=1&wma=1&java=0&cookie=1&title=Main%20|%20My%20Site&urlref=

Si se invocaba directamente se producía un error 503 (Service Temporarily Unavailable) y en las aplicaciones que lo tuvieran instalado para el control de sus estadísticas aparecía como una imagen al final de su contenido (en lugar de un cuadrado transparente).

El problema era que mod_security estaba impidiendo el acceso normal al sitio debido a alguna de sus reglas.

Descripción de la solución.

Sin tener profundos conocimientos en la creación y manipulación de las reglas de mod_security la idea no era modificarlas sino evitar que se aplicara el filtro sobre la aplicación web afectada.

Una primera solución fue desactivar por completo a mod_security para esa aplicación específica.  Para hacer esto es necesario crear un archivo .htaccess en el directorio raíz de la aplicación con el siguiente contenido.

SecFilterEngine Off
SecFilterScanPOST Off

Esto soluciona el problema sin embargo también elimina las ventajas de seguridad que trae consigo el módulo.  Una segunda opción sería entonces evitar que el filtro se aplique al archivo específico que está teniendo el problema con el filtro.  Para hacer esto el contenido del archivo .htaccess debe ser el siguiente.

SetEnvIfNoCase Request_URI ^/piwik/piwik\.php$ MODSEC_ENABLE=Off

Donde se especifica la ubicación exacta (relativa o absoluta) del archivo con problemas.

Enlaces.

VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

Comment » | Software, Web

Instalación de Apache, PHP y MySQL en Linux Debian 5

April 20th, 2009 — 9:07am

El método rápido.

La instalación de estos paquetes se puede realizar de dos maneras.  Utilizando Tasksel, que yo he llamado el método rápido, o instalando -casi- individualmente los paquetes que se deseen.  En mi opinión personal prefiero el segundo método ya que controlo directamente que se está instalando en el servidor.

Tasksel es una herramientas de Debian que se incluye en la mayoría de las distribuciones hijas (como Ubuntu) y permite instalar en bloque muchos paquetes según agrupaciones predefinidas, entre ellas la instalacion de un LAMP Server.

Instalación de Apache.

Instalación del servidor HTTP.

# apt-get install apache2

# apt-get install wwwconfig-common

Modificar la ubicación del DOCUMENT_ROOT.

Por defecto el árbol de directorios que se publica a través del servidor web se ubica en /var/www, si se desea modificar esta ubicación es necesario realizar los siguientes pasos.

Crear el directorio donde se almacenarán los documentos web.

# mkdir -p /home/www/public

Modificar la configuración de Apache para incluír a este nuevo directorio.

# vi /etc/apache2/sites-enabled/000-default

Reemplazar las ocurrencias de /var/www por la ruta deseada, es decir, los valores de DocumentRoot y su correspondiente Directory.

DocumentRoot /home/www/public/
# …
<Directory /home/www/public/>
# …

Reiniciar el servicio para tener en cuenta los cambios recién realizados.

# /etc/init.d/apache2 restart

Instalación de PHP.

Instalación de lenguaje de programación y varios de sus módulos.

# apt-get install php5 php5-cli php5-gd php5-mcrypt php5-curl php5-imagick php5-mhash php5-sqlite php5-xsl

Instalación del módulo dinámico (DSO) de Apache.

# apt-get install libapache2-mod-php5

Instalación de MySQL.

Instalación del motor de base de datos.

# apt-get install mysql-server

Instalación del modulo de PHP asociado a este motor de base de datos.

# apt-get install php5-mysql

Instalación de PHPMyAdmin para la administración de la base de datos a través de web.

# apt-get install phpmyadmin

El acceso se realiza a través de la URL http://localhost/phpmyadmin/.

VN:F [1.8.4_1055]
Rating: +1 (from 3 votes)

2 comments » | Desarrollo de software, Linux/Solaris/BSD, Web

Moviendo a mi blog de subdominio

March 30th, 2009 — 4:31pm

Por ninguna razón aparente, hoy cambié mi blog de dominio.  Hasta esta mañana era http://jorgeivanmeza.com/blog/, ahora es http://blog.jorgeivanmeza.com/.

El procedimiento no fue interesante, simplemente creé el nuevo subdominio y copié los archivos con un cp -rf, sin embargo si me interesa documentar el pequeño cambio que tuve que hacer para conservar la ruta anterior y no romper enlaces antiguos al sitio, especialmente el del RSS.

Es necesario indicarle a Apache que la ubicación antigua ha sido movida a la nueva ubicación.  Para esto agregué la siguiente instrucción al archivo .htaccess ubicado en el directorio raíz correspondiente con el URL http://jorgeivanmeza.com/.

redirect 301 /blog/ http://blog.jorgeivanmeza.com/

El formato de la instrucción redirect es el siguiente.

  • Movido permanentemente: 301.
  • Ubicación antigua: /blog/.
  • Nueva ubicación: http://blog.jorgeivanmeza.com/.

Gracias a esto mis feeds se pueden consultar tanto desde el nuevo sitio: http://blog.jorgeivanmeza.com/feed/ como desde el anterior: http://jorgeivanmeza.com/blog/feed/.

Enlaces.

VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

Comment » | Software, Web

Instalación de Apache, MySQL y PHP en Linux Ubuntu

February 15th, 2009 — 6:08pm

Estos son los pasos que se siguieron para instalar los paquetes de [L]AMP: Apache, MySQL y PHP en mi equipo de desarrollo ahora que estoy estrenando Ubuntu Intrepid (8.10) -nuevamente-.

Apache.

$ sudo apt-get install apache2 libapache-mod-suphp

MySQL.

$ sudo apt-get install mysql-admin mysql-client mysql-navigator mysql-server phpmyadmin

PHP.

$ sudo apt-get install php5 php5-cli php5-dbg php5-gd php5-interbase php5-mcrypt php5-mysql php5-sqlite php5-suhosin php5-xdebug php-soap

VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

3 comments » | Desarrollo de software, Linux/Solaris/BSD, Web

Instalación de Python 2.5.x y mod_python 3.x en FreeBSD 7.x

May 27th, 2008 — 2:27pm

Instalación del intérprete de Python.

# cd /usr/ports/lang/python

# make install clean
    THREADS
    UCS4
    PYMALLOC
    IPV6
# python -V
    Python 2.5.2

Instalación de mod_python.

# cd /usr/ports/lang/mod_python3
# make install clean

Configuración de Apache con mod_python.

# vi /usr/local/etc/apache22/httpd.conf
    LoadModule python_module libexec/apache22/mod_python.so
    PythonOption mod_python.mutex_directory "/tmp"
    PythonOption mod_python.mutex_locks 8
    <Directory "/home/web">
        AddHandler mod_python .py
        PythonHandler pythontest
        PythonDebug On
    </Directory>

Recuérdese que el DOCUMENT_ROOT del servidor es “/home/web“.

A continuación se creará el siguiente archivo ubicado en /home/web/pythontest.py para verificar el funcionamiento del módulo.

# vi /home/web/pythontest.py
from mod_python import apache

import datetime

def handler(req):
    today = datetime.date.today()
    req.content_type = "text/plain"
    req.write("Hello, today is " + str(today.day) + "/" + str(today.month) + "/" + str(today.year) + ".")
    return apache.OK

Si se consulta el sitio http://webserver.mydomain.com/pythontest.py deberá obtenerse una respuesta similar a la mostrada a continuación.

    Hello, today is 27/5/2008.

Si se intenta ejecutar cualquier otro programa .py ubicado en el mismo directorio (/home/web) se obtendrá siempre la misma respuesta ya que en la configuración de Apache se especificó que ese archivo (pythontest.py) sería quien manipulase los archivos Python en ese directorio. Para permitir el acceso de otros programas desde la misma ubicación se deberán utilizar manipuladores (handlers) especiales como mod_python.Publisher, mpservlets o Vampire.

Enalces.

VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

Comment » | Linux/Solaris/BSD

Instalación de mod_security 2.1.7_1 en FreeBSD 7.x

May 26th, 2008 — 10:51pm
# cd /usr/ports/www/mod_security2
# make install clean
# vi /usr/local/etc/apache22/httpd.conf
LoadFile /usr/local/lib/libxml2.so
LoadModule mod_security2    libexec/apache22/mod_security2.so

<IfModule security2_module>
    SecRuleEngine On
</IfModule>
# /usr/local/etc/rc.d/apache22 restart

Nota: la instalación con la versión 2.1.3 no se pudo realizar ya que el Makefile no realizaba correctamente el enlace con libxml2 y fallaban las reglas que requerían procesamiento de XML. Se recomienda actualizar a una versión superior.

El siguiente paso consiste en configurar las reglas de seguridad que apliquen a su negocio. Para esto edite apropiadamente los siguientes archivos bajo la ruta /usr/local/etc/apache22/Includes.

  • mod_security2.conf
  • no-accf.conf
  • mod_security2/ (directorio de reglas)

Enlaces

VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

Comment » | Internet, Linux/Solaris/BSD, Web

Configurando Apache 2.2.x/PHP 5.2.x con FastCGI mod_fcgid en FreeBSD 7.x

May 26th, 2008 — 5:10pm

Descargar compilar e instalar el paquete mod_fcgid y sus posibles dependencias.

# cd /usr/ports/www/mod_fcgid
# make install clean

Verificar que la instalación de PHP cuente con el soporte de FastCGI.

# /usr/local/bin/php-cgi -v

Configurar a Apache para que utilice el nuevo módulo de FCGI.

# vi /usr/local/etc/apache22/httpd.conf

Agregar al final del archivo httpd.conf.

LoadModule fcgid_module libexec/apache22/mod_fcgid.so

<IfModule mod_fcgid.c>
    AddHandler fcgid-script .fcgi
    FCGIWrapper /usr/local/bin/php-cgi .php
</IfModule>

Ubicar la sección del directorio del DOCUMENT_ROOT y complementarla con la nueva opción.

<Directory "/home/web">
    # ...
    Options ExecCGI
</Directory>

Reiniciar el servicio de Apache para que se tengan en cuenta los cambios realizados.

# /usr/local/etc/rc.d/apache22 restart

Consultar la salida de phpinfo() para verificar su correcto funcionamiento.

VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

Comment » | Linux/Solaris/BSD

Instalación de PHP 5.x CGI en FreeBSD 7

May 20th, 2008 — 11:37pm

Descargar, compilar e instalar la última versión de la distribución de PHP5. Remover los archivos binarios resultantes de la compilación después de instalar.

# cd /usr/ports/lang/php5

# make config
CLI
CGI
SUHOSIN
MULTIBYTE
IPV6
FASTCGI
PATHINFO
# make install clean

Compilar e instalar las extensiones de PHP que se consideren necesarias. El sistema de ports descargará e instalará cualquier paquete adicional que se requiera como dependencia de las extensiones elegidas.

# cd /usr/ports/lang/php5-extensions
# make config
BCMATH
BZ2
CALENDAR
CTYPE
CURL
DOM
EXIF
FILTER
FTP
GD
GETTEXT
HASH
ICONV
IMAP
JSON
LDAP
MBSTRING
MCRYPT
MHASH
MING
MSSQL
MYSQL
MYSQLI
NCURSES
ODBC
OPENSSL
PCRE
PDF
PDO
PDO_SQLITE
PGSQL
POSIX
READLINE
SESSION
SIMPLE_XML
SOAP
SOCKETS
SPL
SQLITE
TIDY
TOKENIZER
WDDX
XML
XMLREADER
XMLRPC
XMLWRITER
XSL
ZIP
ZLIB
# make install clean

Modificar el archivo de configuración de Apache (httpd.conf) para especificar como manejar los archivos con la extensión .php.

# vi /usr/local/etc/apache22/httpd.conf
<IfModule dir_module>
    DirectoryIndex index.php index.html index.htm
</IfModule>

Agregar al final de httpd.conf.

ScriptAlias /php-cgi "/usr/local/bin/php-cgi"
AddHandler php-handler .php
Action php-handler /php-cgi

<Location "/php-cgi">
    Options None
    Order allow,deny
    Allow from all
</Location>

Crear un archivo de configuración de PHP (php.ini) a partir de los archivos base incluídos en la distribución (dist para desarrolladores o recommended para ambientes en producción).

# cp /usr/local/etc/php.ini-recommended /usr/local/etc/php.ini

# vi /usr/local/etc/php.ini

(Quitar el comentario)

session.save_path = "/tmp"

Crear un archivo de prueba para verificar el funcionamiento del CGI de PHP recién instalado.

# vi /home/web/test.php
    <?php echo phpinfo (); ?>

Consultar la dirección del servidor (http://webserver.mydomain.com/test.php) con un navegador web. Si la instalación fue exitosa se deberá visualizar una página similar a la mostrada a continuación.

VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

1 comment » | Linux/Solaris/BSD, Personal

Configuración del módulo SSL en Apache 2.2.x en FreeBSD 7

May 13th, 2008 — 9:10pm

Se configura el inicio automático de Apache para que incluya el módulo de SSL.

# vi /etc/rc.conf
apache2_flags="-DSSL"

Se establecen las ubicaciones donde se creará el certificado SSL.

# cd /usr/local/etc/apache22
# mkdir ssl.key
# mkdir ssl.crt
# chmod 0700 ssl.key
# chmod 0700 ssl.crt

Se crea el certificado SSL del servidor. Se deberán tener en cuenta las recomendaciones mencionadas en el artículo de soporte SSL para PGSQL. En particular, se deberá reemplazar la contraseña (MyPassPhrase) por una propia y privada.

# openssl genrsa -des3 -out server.key 1024
Enter pass phrase for server.key: MyPassPhrase

Solicitud de firma del certificado: Certificate Signing Request (CSR).

# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key: MyPassPhrase
Verifying - Enter PEM pass phrase: MyPassPhrase

Country Name (2 letter code) [AU]: CO
State or Province Name (full name) [Some-State]: Caldas
Locality Name (eg, city) []: Manizales
Organization Name (eg, company) [Internet Widgits Pty Ltd]:  Personal Development
Organizational Unit Name (eg, section) []: Educacion
Common Name (eg, YOUR name) []: webserver.mydomain.com
Email Address []:jimezam@gmail.com
A challenge password []: Certificado&2008k
An optional company name []: Smiley World

Realización de la autofirma del certificado.

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Enter pass phrase for server.key: MyPassPhrase

Ubicación de los certificados en sus ubicaciones finales.

# rm server.csr
# mv server.key ssl.key
# mv server.crt ssl.crt
# chmod 0400 ssl.key/server.key
# chmod 0400 ssl.crt/server.crt

Configuración de Apache para activar el módulo de SSL.

# vi /usr/local/etc/apache22/extra/httpd-ssl.conf
<VirtualHost _default_:443>
    DocumentRoot "/home/web"
    ServerName webserver.mydomain.com:443
    ServerAdmin jimezam@gmail.com
    ErrorLog /var/log/ssl-error.log
    TransferLog /var/log/ssl-access.log
    SSLCertificateFile "/usr/local/etc/apache22/ssl.crt/server.crt"
    SSLCertificateKeyFile "/usr/local/etc/apache22/ssl.key/server.key"
</VirtualHost>
# vi /usr/local/etc/apache22/httpd.conf
Include etc/apache22/extra/httpd-ssl.conf

Reiniciar el servicio de Apache.

# /usr/local/etc/rc.d/apache22 restart
Enter pass phrase: MyPassPhrase

Realizar la verificación de su funcionamiento consultando las siguientes direcciones web.

  • http://webserver.mydomain.com
  • https://webserver.mydomain.com

Cada vez que se inicie el servicio, como en el paso anterior, se solicitará la clave asignada. Esta característica fue diseñada por razones de seguridad, es necesaria ya que la llave RSA privada del archivo server.key se encuentra encriptada con ella, sin embargo es posible removerla bajo consideración del administrador. Para remover esta capa de seguridad se deben ejecutar los pasos siguientes.

# cd /usr/local/etc/apache22/ssl.key
# cp server.key server.key.orig
# openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.orig: MyPassPhrase
# /usr/local/etc/rc.d/apache22 restart

Enlaces:

VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

Comment » | Linux/Solaris/BSD

Back to top