Servidor web casero con Apache, Php y Mysql en debian

debianjh2

Este howto es para todos aquellos que quieran servir páginas web desde su casa, ya sea publicando directamente en el servidor o instalando
algún portal en php como wordpress o joomla.

El primer paso es dar de alta un dominio de segundo nivel en www.dyndns.com o alguna página similar. Hay que tener en cuenta que las ip’s asignadas a los usuarios caseros suelen ser
dinámicas, por lo que deberemos estar pendientes de que la ip que damos de alta en dyndns sea la correcta, y si nos la cambia nuestro ISP, deberemos cambiarla en dyndns.

Con el nombre de dominio que hemos obtenido en dyndns (en el presente ejemplo server1.example.com), procedemos a nombrar nuestra debian, respecto a nuestra ip externa (la que no es 127.0.0.1).

$ nano /etc/hosts

127.0.0.1
localhost.localdomain
localhost

192.168.0.100   server1.example.com     server1

 

# The following lines are desirable for IPv6
capable hosts

::1     ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

ff02::3 ip6-allhosts

$ nano /etc/hostname

server1

$ /bin/hostname -F /etc/hostname

$ shutdown -r now

Cuando conectamos un ordenador directamente a Internet le exponemos a muy diversos peligros. El primero es el de todos los puertos abiertos, es decir, multitud de caminos por los que un hacker puede hacerse con el control de nuestra máquina. En mi caso, tengo un firewall externo, la airport extreme. Si no es vuestro caso, os recomiendo instalar iptables.

El siguiente consejo es cambiar la configuración del servidor ssh, si os es necesario acceder a la shell desde fuera de casa. Si no es así cerrar el puerto 22. Para tener un servidor ssh medianamente seguro, lo mejor es desactivar el acceso del root y darle permisos a un usuario para ejecutar sus tareas. Primero configuraremos sudo al modo ubuntu, y después editaremos la configuración de ssh.

Instalar sudo

$ apt-get install sudo

dar permisos de root a un usuario

Si no le tenemos creado, lo creamos

$ adduser user1

le damos permisos de root desde sudo

$ visudo

añadimos la línea

user1
ALL=(ALL) ALL

Asegurar ssh.

Vamos a cambiar el puerto por defecto de ssh, desactivar el acceso del root y establecer los usuarios que podrán acceder.

$ nano /etc/ssh/sshd_config

– Buscamos

Port 22 – y lo cambiamos por un numero diferente (12345) para ponerselo más difícil a los hackers

– Cambiamos:

PermitRootLogin no

X11Forwarding no

UsePAM no

– y añadimos estas líneas al final:

UseDNS no

AllowUsers user1

Para reiniciar ssh

            $ /etc/init.d/ssh reload

Salimos e iniciamos una sesión ssh con el nuevo usuario

* desde OSX o Linux:

ssh -p 12345 user1@123.45.6.78

* Desde Windows:

putty user1@123.45.6.78 1234

Si deseais configurar postfix como servidor de correo, visitar el enlace: http://www.howtoforge.com/perfect_setup_debian_etch_p5  ejecutando antes desde ssh “$ sudo su”
para actuar como root.

Instalar apache con php5

            $ sudo apt-get install apache2 php5 libapache2-mod-php5 php5-common php5-dev php5-mysql php5-tidy php5-xmlrpc php5-xsl php5-cgi php5-mcrypt php5-curl php5-gd php5-memcache php5-mhash php5-pspell php5-snmp libmagick9-dev php5-cli

Y testeamos php generando un archivo de prueba

$ nano /var/www/test.php

con el contenido

<?php phpinfo()?>

            Visitamos con el navegador http://midominio/test.php

Solucionar problemas con imagick:

sudo aptitude -y install make php-pear

sudo pecl install imagick

(y presionamos <ENTER> )

Ajustamos php.ini:

$ sudo nano /etc/php5/cgi/php.ini

Aumentamos la memoria para WordPress :

Buscamos la línea:

memory_limit = 16M y la cambiamos a  memory_limit = 48M

Y al final del archivo añadimos la siguiente línea:

extension=imagick.so

Instalar MySQL y asegurarlo

            $ sudo apt-get install mysql-server mysql-client php5-mysql libmysqlclient15-dev

Para asegurarlo

$ mysql_secure_installation

Instalar phpmyadmin

$  sudo apt-get install phpmyadmin

 Editamos el
archivo de configuración de apache

$ sudo nano /etc/apache2/apache2.conf

Y añadimos la siguiente línea

Include /etc/phpmyadmin/apache.conf

Reiniciamos apache

$ sudo /etc/init.d/apache2 restart

Ahora deberíamos ver la página de
phpmyadmin en http://midominio/phpmyadmin

Introducimos root y password_root

Instalar webmin

Descargar la ulrima version para
debian desde www.webmin.com

 $ wget http://heanet.dl.sourceforge.net/sourceforge/webadmin/webmin_1.430_all.deb

instalamos programas necesarios

$ apt-get install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl libmd5-perl

instalamos webmin

$ dpkg –i webmin_1.430_all.deb

Podemos acceder a webmin desde
https://midominio/webmin:10000/

Instalar vsftp con autenticación ssl y enjaulado de usuarios.

$ sudo apt-get install vsftpd

Sacamos copia de seguridad del archivo de configuración

$ sudo cp /etc/vsftpd.conf
/etc/vsftpd.conf.original

Editamos /etc/vsftpd.conf y
cambiamos las siguientes líneas

# No anonymous login

anonymous_enable=NO

# Let local users login . If you connect from the internet
with local users, you should enable TLS/SSL/FTPS

local_enable=YES

# Write permissions

write_enable=YES

# formazos el formato ascii en subidas ybajadas

ascii_upload_enable=YES

ascii_download_enable=YES

# 1. All users are jailed by default:

chroot_local_user=YES

chroot_list_enable=NO

ssl_enable=YES

allow_anon_ssl=NO

force_local_data_ssl=YES

force_local_logins_ssl=YES

ssl_tlsv1=YES

ssl_sslv2=YES

ssl_sslv3=YES

# Filezilla uses port 21 if you don’t set any port

# in Servertype «FTPES – FTP over explicit
TLS/SSL»

# Port 990 is the default used for FTPS protocol.

# Uncomment it if you want/have to use port 990.

#listen_port=990

# Show
hidden files and the «.» and «..» folders.

# Useful
to not write over hidden files:

force_dot_files=YES

 

# Hide the
info about the owner (user and group) of the files.

hide_ids=YES

 

#
Connection limit for each IP:

max_per_ip=2

 

# Maximum
number of clients:

max_clients=20

Aplicamos la nueva configuración

            $ sudo /etc/init.d/vsftpd restart

 

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.