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

Linux/Unix/FreeBSD May 27th, 2008

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.

Tags: , , ,

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

Internet, Linux/Unix/FreeBSD, Web May 26th, 2008

# 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

Tags: , ,

Configuración básica de SSHD con FreeBSD 7.x

Linux/Unix/FreeBSD May 26th, 2008

# vi /etc/ssh/sshd_config
Port 22
Protocol 2
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 2m
PermitRootLogin no
Subsystem    sftp    /usr/libexec/sftp-server
# /etc/rc.d/sshd restart

Tags: ,

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

Linux/Unix/FreeBSD May 26th, 2008

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.

Tags: , ,

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

Linux/Unix/FreeBSD, Personal May 20th, 2008

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.

Tags: , ,

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

Linux/Unix/FreeBSD May 13th, 2008

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:

Tags: ,

Autenticación local y conexiones de red de PostgreSQL 8.2 en FreeBSD 7

Bases de datos, Linux/Unix/FreeBSD May 13th, 2008

Autenticación local.

Por defecto PostgreSQL permite que las conexiones al motor de bases de datos que se realizan de manera local se hagan sin autenticación, lo cual es poco recomendable. Este comportamiento puede modificarse siguiendo los pasos dispuestos a continuación.

# vi /usr/local/pgsql/data/pg_hba.conf

Modificamos el método pasándolo de trust a md5 para los orígenes de conexión que nos interese asegurar. El siguiente es el nuevo contenido del archivo tomando en cuenta las modificaciones realizadas para activar el soporte de SSL.

local      all    all                      md5
hostssl    all    all    127.0.0.1/32      md5
hostssl    all    all    ::1/128           md5

Habilitar el acceso a las bases de datos a través de TCP/IP.

Nuevamente, por defecto PostgreSQL no permite la realización de conexiones cuya petición provenga de un equipo externo, es decir, diferente de localhost. Para habilitar esto se deberán seguir los pasos a continuación.

Es posible autorizar las conexiones desde orígenes externos nombrados, es decir, especificar con precisión desde cuales direcciones IP se habilitarán las conexiones remotas enunciándolas separadas por espacio en la variable listen_address (reemplazando el asterisco = todos).

# vi /usr/local/pgsql/data/postgres.conf
listen_addresses='*'

Debe tenerse en cuenta que además de permitir las conexiones desde una dirección IP específica (o varias), es necesario especificar el tipo de autenticación para ese equipo/red como se realizó en la sección anterior para localhost. Para permitir conexiones entrantes con soporte para SSL (hostssl), a cualquier base de datos (primer all), de cualquier usuario (segundo all) desde cualquier equipo de la red 192.168.1.x (192.168.0.0/24) utilizando contraseñas encriptadas con MD5 se deberá realizar el siguiente procedimiento.

# vi /usr/local/pgsql/data/postgres.conf
hostssl all all 192.168.1.0/24 md5

Para ajustar una mayor granularidad en la seguridad de conexión se deberán personalizar estos valores a sus requerimientos individuales.

Es necesario reiniciar el servicio para que se tomen en cuenta las modificaciones a la configuración recién realizadas.

Enlaces:

Tags: ,

Soporte SSL para las conexiones de PostgreSQL 8.2 en FreeBSD 7

Bases de datos, Linux/Unix/FreeBSD May 13th, 2008

PostgreSQL trae inmerso por defecto el soporte nativo para encriptar el transporte de la información utilizando SSL. A continuación se describe el procedimiento necesario para activarlo en un servidor FreeBSD.

Activa el uso de SSL para las conexiones del motor de bases de datos.

# vi /usr/local/pgsql/data/postgresql.conf
ssl = on

Detiene el servicio del motor de bases de datos.

# /usr/local/etc/rc.d/postgresql stop

Crea el certificado SSL.

# cd /usr/local/pgsql/data/

En este paso se deben tener en cuenta dos aspectos. El primero de ellos es la clave PEM que se utilizará mas adelante y el segundo es que el Common Name deberá corresponder con nombre FQDN del servidor.

# openssl req -new -text -out server.req
Enter PEM pass phrase: MiClavePEM
Verifying - Enter PEM pass phrase: MiClavePEM
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
# openssl rsa -in privkey.pem -out server.key
Enter pass phrase for privkey.pem: MiClavePEM
# rm privkey.pem

Se crean la llave privada y el certificado del servidor.

# openssl req -x509 -in server.req -text -key server.key -out server.crt
# chmod og-rwx server.key
# chown pgsql:pgsql server.*

Se reinicia el servidor para comprobar los cambios realizados.

# reboot

Por defecto las conexiones locales (con 127.0.0.1) se realizan sin encriptación. Siguiendo los pasos dispuestos a continuación es posible modificar este comportamiento y obligar a que este tráfico se encripte.

# vi /usr/local/pgsql/data/pg_hba.conf
local      all    all                      trust
hostssl    all    all    127.0.0.1/32      trust
hostssl    all    all    ::1/128           trust

Enlaces:

Tags: ,

Instalación de PostgreSQL 8.2 en FreeBSD 7

Linux/Unix/FreeBSD May 13th, 2008

Obtiene los paquetes necesarios de Internet, los compila e instala.

# cd /usr/ports/databases/postgresql82-server
# make config
NLS
PAM
# make install clean

Establece el directorio de datos inicial.

# su -l pgsql -c "initdb --locale=es_ES"

Se inicia manualmente el motor de base de datos para verificar que todo esté funcionando correctamente.

# su pgsql -c "postmaster -i -D /usr/local/pgsql/data"

Habilita el inicio automático del motor de base de datos al inicio del servidor.

# vi /etc/rc.conf
postgresql_enable="YES"

Se modifica la contraseña del usuario administrador (pgsql). Modifique la cadena rootpassword por el valor que considere apropiado.

# su - pgsql
# /usr/local/bin/psql template1
template1=# ALTER USER pgsql WITH ENCRYPTED PASSWORD 'rootpassword';
template1=# \q

Enlaces:

Tags: ,

Mover el repositorio de archivos de MySQL 5.x en FreeBSD 7

Bases de datos, Linux/Unix/FreeBSD May 13th, 2008

La instalación ubica por defecto al repositorio de archivos del motor de base de datos en /var/db/mysql. Esta ubicación no es necesariamente la idónea, para nuestro caso no disponemos del espacio suficiente en esa partición y es por eso que es necesario moverla.

Los ajustes siguientes son los necesarios para transladar el repositorio de archivos de MySQL a /home/datos_mysql.

# /usr/local/etc/rc.d/mysql-server stop
# mv /var/db/mysql /home/datos_mysql
# vi /etc/rc.conf
mysql_dbdir=”/home/datos_mysql”

Tags: ,