# servidor-web.txt by loop || http://foc.neoartis.org # Ultima actualizacion: 17/02/03 Explicacion de los pasos a seguir para instalar un servidor web (apache) con varios servicios adicionales: ssl, imagemagick, gd, imap, mysql, perl, php, horde y alguno de sus modulos... Si no deseas instalar todos los servicios, pues olvidate del apartado de compilacion de los programas que no quieras. Asimismo, deberas modificar los parametros del php y del apache reflejando los cambios que hagas (basicamente quitar las referencias a los programas/opciones que no instales). Informacion adicional/detallada de compilaciones/configuraciones en la pagina oficial de cada programa, sus links y la seccion Documentos de mi pagina web: http://foc.neoartis.org. Se supone que tenemos bajadas todas las fuentes de los programas en un mismo directorio, por ejemplo /usr/local/src, y estan descomprimidas. Nos situamos en ese directorio, y que empiece la fiesta... ;) ******************** * Instalar openssl * ******************** # cd openssl-version # config # make clean # make # make test # make install ************************ * Instalar ImageMagick * ************************ # cd ../ImageMagick-version # configure # make # make install *************** * Instalar GD * *************** # cd ../gd-version # configure --prefix=/usr/local/gd # make # make install ***************** * Instalar imap * ***************** - SIN SSL # cd ../imap-version # pico Makefile -> comentar linea EXTRADRIVERS=mbox y poner SSLTYPE=none # make slx # cp imapd/imapd /usr/sbin # cp ipopd/ipop3d /usr/sbin Incluir ambos servicios en el /etc/services: - imap 143/tcp - pop 110/tcp Activar imapd e ipop3d en el /etc/inetd.conf: - pop3 stream tcp nowait.100 root /usr/sbin/ipop3d ipop3d - imap2 stream tcp nowait.100 root /usr/sbin/imapd imapd # killall -HUP inetd - CON SSL # cd ../imap-version # pico Makefile -> comentar linea EXTRADRIVERS=mbox y poner SSLTYPE=nopwd # make slx # cp imapd/imapd /usr/sbin # cp ipopd/ipop3d /usr/sbin # cp c-client/c-client.a /usr/local/lib/libc-client.a # cp c-client/rfc822.h c-client/mail.h c-client/linkage.h /usr/local/include Incluir ambos servicios en el /etc/services: - imaps 993/tcp - pop3s 995/tcp Modificar el /etc/inetd.conf para activar ambos servicios: - pop3s stream tcp nowait.100 root /usr/sbin/ipop3d ipop3d - imaps stream tcp nowait.100 root /usr/sbin/imapd imapd # killall -HUP inetd Generamos nuestra clave privada PEM, que es la misma que la RSA, pero con otro formato. # openssl rsa -outform PEM -in www.dominio.org.key -out www.dominio.org.pem Generamos nuestra clave publica PEM. Para que esto funcione tienes que haber comprado/firmado tu propio certificado CRT. # cd /usr/local/ssl/certs [o donde este] # cat www.dominio.org.pem www.dominio.org.crt > imapd.pem # chmod 0400 imapd.pem # ln -s /usr/local/ssl/certs/imapd.pem ipop3d.pem [o donde este] ****************** * Instalar MySQL * ****************** # cd mysql-version # configure --prefix=/usr/local/mysql # make # make install # scripts/mysql_install_db Teniendo un usuario y un grupo 'mysql': # chown -R root /usr/local/mysql # chown -R mysql /usr/local/mysql/var # chgrp -R mysql /usr/local/mysql # cp support-files/my-medium.cnf /etc/my.cnf # /usr/local/mysql/bin/safe_mysqld --user=mysql & # mysqladmin -u root password 'nuevo-password' Para optimizar el servicio, se aconseja lanzar el servidor de la siguiente forma: # /usr/local/mysql/bin/safe_mysqld --user=mysql --set-variable=max_connections=300 \ --set-variable=wait_timeout=600 --set-variable=interactive_timeout=600 & ******************** * Instalar mod_ssl * ******************** # cd ../mod_ssl-version # configure --with-apache=../apache_version --with-ssl=../openssl-version \ --prefix=/usr/local/apache **************** * Instalar php * **************** # cd ../php-version # configure --with-mysql=/usr/local/mysql --with-apache=../apache_version \ --with-openssl=../openssl-version --with-imap=../imap-version \ --with-imap-ssl=../openssl-version --with-gettext=/usr/share/gettext \ --enable-track-vars --with-xml NOTA: a partir de la version 4.3.0 debes poner todos los PATHs al SSL apuntando a /usr/local/ssl (o el directorio donde hayas instalado las SSL). Si quieres incluir el soporte GD incluido en el PHP 4.3.x, aņade: --with-gd --with-jpeg-dir=/usr/lib --with-zlib-dir=/usr/include Si quieres incluir soporte para el GD instalado por ti, aņade: --with-gd=/usr/local/gd --with-jpeg-dir=/usr/lib --with-zlib-dir=/usr/include Si quieres incluir soporte para sockets, aņade: --enable-sockets # make # make install # cp php.ini-recommended /usr/local/lib/php.ini # pico /usr/local/lib/php.ini -> disable_functions = phpinfo -> session.save_path = /tmp/php_sessions -> upload_tmp_dir = /tmp/php_upload Recuerda activar/desactivar aquellas opciones del php.ini que necesites, segun como trabajes con el PHP (p.e.: register_globals = On, etc). # mkdir -p /tmp/php_sessions # chown nobody.nobody /tmp/php_sessions # chmod 0300 /tmp/php_sessions # mkdir -p /tmp/php_upload # chown nobody.nobody /tmp/php_upload # chmod 0700 /tmp/php_upload * PHP COMO CGI (OPCIONAL) NOTA: a partir de la version 4.3.0 se compilara lo siguiente por defecto, siendo pues opcional solo en versiones anteriores a esta. " If you don't specify building any other SAPI "make install" will install the CGI SAPI binary in {PREFIX}/bin/php. If you want to install CLI SAPI in that location use "make install-cli" after "make install" or add --disable-cgi to your configure options. " Si queremos usar el PHP como CGI (al estilo perl, bash, etc.) podemos seguir los siguientes pasos: # configure --with-mysql=/usr/local/mysql \ --with-openssl=../openssl-version \ --with-gettext=/usr/share/gettext --enable-discard-path # make El siguiente paso hara varios test, y podras ver los resultados, asegurandote asi si te va a funcionar el binario 'php' antes de usarlo, para no llevarte disgustos: # make test Por ultimo, copia el binario resultante 'php' a donde quieras, por ejemplo: # cp php /usr/local/bin ********************* * Instalar mod_perl * ********************* # cd ../mod_perl-version Si quieres compilar los modulos necesarios para funcionar con virtual hosts y ssl: # perl Makefile.PL USE_APACI=1 EVERYTHING=1 APACHE_SRC=../apache_version/src \ SSL_BASE=../openssl-version APACHE_PREFIX=/usr/local/apache \ APACI_ARGS=--enable-module=so,--enable-module=ssl,--enable-module=vhost_alias,--activate-module=src/modules/php4/libphp4.a,--enable-module=php4,--enable-shared=ssl,--enable-shared=vhost_alias,--server-uid=nobody,--server-gid=nobody O, si quieres compilar todos los modulos que vienen con el apache: # perl Makefile.PL USE_APACI=1 EVERYTHING=1 APACHE_SRC=../apache_version/src \ SSL_BASE=../openssl-version APACHE_PREFIX=/usr/local/apache \ APACI_ARGS=--enable-module=all,--enable-shared=max,--activate-module=src/modules/php4/libphp4.a,--enable-module=php4,--server-uid=nobody,--server-gid=nobody NOTA: en el caso de compilar todos los modulos, leete las notas en el apartado "Instalar apache". A continuacion nos preguntara: Configure mod_perl with ../apache_version/src ? [y] Shall I build httpd in ../apache_version/src for you? [y] OPCION 1: mod_perl se encargara de compilar e instalar apache. -------- Respondemos "y" a ambas preguntas: asi activamos todo respecto al modulo mod_perl, y le pasamos las opciones del configure del apache, para que sea el quien se ocupe de compilarlo. Lo cual significa que ignoraremos el apartado "Instalar apache" de este documento. # make test && make install OPCION 2: mod_perl no compilara apache, lo haremos nosotros despues. -------- Si queremos compilar el apache por nuestro lado, respondemos "n" a ambas preguntas, y quitamos las opciones SSL_BASE y APACI_ARGS de la linea del "perl Makefile.PL ..." # make install Aqui no podemos aplicar el "make test" ya que no tendremos el binario del apache compilado para hacer los tests. Despues de instalar el mod_perl, seguimos con la compilacion del apache, indicada en este mismo documento en el apartado "Instalar apache". En ambos casos, deberemos luego configurar el mod_perl en el apache. Si has elegido la opcion 1, puedes editarlo ya, porque estara instalado el apache. Si has elegido la opcion 2, tendras que editar el httpd.conf despues de instalar el apache. # pico /usr/local/apache/conf/httpd.conf -> Introducir lo siguiente: Alias /perl/ /usr/local/apache/perl/ PerlModule Apache::Registry SetHandler perl-script PerlHandler Apache::Registry Options ExecCGI PerlSendHeader On allow from all # mkdir -p /usr/local/apache/perl # chown root.nobody /usr/local/apache/perl # chmod 0750 /usr/local/apache/perl ******************* * Instalar apache * ******************* ATENCION: este paso SOLO se realizara si hemos elegido la Opcion 2 en la instalacion del mod_perl o si no hemos instalado el mod_perl. # cd ../apache-version # SSL_BASE=../openssl-version Si quieres compilar los modulos necesarios para funcionar con virtual hosts y ssl: # configure --prefix=/usr/local/apache --enable-module=so --enable-module=ssl \ --enable-module=vhost_alias --activate-module=src/modules/php4/libphp4.a \ --enable-module=php4 --enable-shared=ssl --enable-shared=vhost_alias \ --server-uid=nobody --server-gid=nobody O, si quieres compilar todos los modulos que vienen con el apache: # configure --prefix=/usr/local/apache --enable-module=all --enable-shared=max \ --activate-module=src/modules/php4/libphp4.a --enable-module=php4 \ --server-uid=nobody --server-gid=nobody NOTA: si no tienes las librerias Berkeley-DB 1.x, 2.x or 3.x, te dara un error, el cual se arregla instalandolas o, si no quieres usarlas, deshabilitando la compilacion del modulo auth_db: "--disable-module=auth_db". # make # make certificate TYPE=custom O, si ya tienes un certificado hecho: # make certificate TYPE=existing CRT=/path/to/your.crt KEY=/path/to/your.key # make install Revisar la configuracion del apache (httpd.conf) poniendo las opciones pertinentes, dependiendo de las opciones que hayamos definido antes y del gusto de cada cual... Si has elegido compilar todos los modulos que vienen con el fuente del apache, recuerda comentar los que no quieras usar, o securizarlos... ;P * Como evitar tener que escribir la passphrase del apache al (re)inicio Por razones de seguridad, se solicita la passphrase cada vez que se inicia o reinicia el apache en modo SSL, que esta encriptada en el archivo de la clave RSA privada. La passphrase es necesaria para leer dicho archivo. Cuando estes seguro de que tu servidor esta lo suficientemente securizado, sigue estos pasos: # cd /usr/local/apache/conf/ssl.key # cp server.key server.key-orig # openssl rsa -in server.key-orig -out server.key # chown root.root server.key # chmod 0400 server.key Ahora el archivo server.key contiene una copia desencriptada de la clave, por lo tanto asegurate de que esten los permisos correctamente puestos. De lo contrario, cualquiera podria impersonalizarte en la red. ******************** * Instalar webmail * ******************** # cd .. # mv horde-version /usr/local/apache/htdocs/horde # mv imp-version /usr/local/apache/htdocs/horde/imp # mv turba-version /usr/local/apache/htdocs/horde/turba # chown root.root -R /usr/local/apache/htdocs/horde Para instalar el horde, seguimos los pasos de su documentacion: # pico /usr/local/apache/htdocs/horde/docs/INSTALL Para instalar el IMP, seguimos los pasos de su documentacion: # pico /usr/local/apache/htdocs/horde/imp/docs/INSTALL Para instalar el Turba, seguimos los pasos de su documentacion: # pico /usr/local/apache/htdocs/horde/turba/docs/INSTALL Basicamente se trata de copiar los ficheros *.php.dist a *.php en el subdirectorio 'config' del horde y de cada uno de sus modulos. En ellos tenemos muchisimas opciones para tocar, lo cual quiere decir que te tomes tu tiempo. :D Tambien dependera de si estas montando un webmail aislado o si es para un servidor con virtual hosts... Toda la documentacion la podras encontrar en los README, INSTALL, etc. del codigo fuente. En las mailing lists (http://www.horde.org) encontraras mas informacion y ayuda. En el subdirectorio 'scripts' del horde, encontraras un shellscript llamado 'set_perms.sh'. Es recomendable que lo uses. Asimismo, deniega el acceso mediante las directivas del apache a los subdirectorios de cada modulo a los cuales no debe acceder nadie: config, lib, templates, locale. * Enlaces interesantes para el tema de virtual hosts: - http://marc.theaimsgroup.com/?l=imp&m=101840009610074&w=2 - http://marc.theaimsgroup.com/?l=imp&m=101195869916272&w=2 * Cambio de password del usuario de mail con el horde: - http://netwinsite.com/poppassd/ # gcc poppassd.c -o poppassd Si esto falla con un error en la funcion chkPass, usar lo siguiente: # gcc poppassd.c -o poppassd -lcrypt # cp poppassd /usr/local/bin Incluir el servicio siguiente en el /etc/services: - poppassd 106/tcp Modificar el /etc/inetd.conf para activar el servicio: - poppassd stream tcp nowait.100 root /usr/local/bin/poppassd poppassd # killall -HUP inetd Incluir monitorizacion de los errores en el /etc/syslog.conf: - local2.err /var/log/poppassd.log # /etc/rc.d/rc.syslogd restart Una vez tengamos dicho servicio activado, instalamos el modulo passwd del horde, siguiendo las instrucciones que incluye. # EOF - loop