Dudas con Apache2 y Debian 6.0

Iniciado por PeGaSs0, 3 Febrero 2015, 18:40 PM

0 Miembros y 1 Visitante están viendo este tema.

PeGaSs0

Buenas tardes, soy nuevo en este foro y en el mundo de linux en el que me estoy metiendo poco a poco jeje. Me gustaría pedir vuestra ayuda si fuera posible ya que tengo que hacer un proyecto con Apache2 y la verdad no sé por donde meterle mano. Os planteo el caso y ya me decís si podéis echarme un cable, vale? Algunos puntos los tengo "mas o menos" claros pero agradecería toda la ayuda que fuese posible.

** Se configurarán dos host virtuales con los dominios public.seas-linux.es y restricted.seas-linux.es escuchando en el puerto 80.

Host1: public.seas-linux.es   

Configuración:
Directorio raíz: /var/www/public/
Listado de contenidos permitido.
Accesible para cualquier máquina.

Directorio: /var/www/public/tmp/
Listado de contenidos permitido.
Accesible sólo desde la subred del alumno.
Escuchará también en el puerto 443.

Host2: restricted.seas-linux.es

Configuración:
Directorio raíz: /home/<usuario>/
Listado de contenidos permitido.
Accesible solo para los usuarios:
User: admin.
Password: admin.
User: <usuario>.
Password: 1234.
Esta configuración deberá llevarse a cabo sin utilizar el archivo .htaccess.

Gracias por vuestro tiempo.

Un saludo para todos.

engel lex

has intentado algo de aquí -> https://www.google.com/search?q=apache2+configurar+hosts+virtuales ?

recuerda.. .el foro es para resolver problemas puntuales y especificos...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MinusFour

No estoy muy seguro de la estructura de apache debajo de Debian-Squeeze. Si es la misma estructura que Debian 7 entonces los vhosts se incluyen en los directorios:


/etc/apache2/sites-available/
/etc/apache2/sites-enabled/


De ahi es cuestion de configurar las directivas que necesitas...

Código (apache) [Seleccionar]

<VirtualHost *:80 *:443>
#Match a conexiones por puerto 80 y 443.
SeverName dominio.com
#Match a peticiones a dominio.com

DocumentRoot /var/www
# Directorio Raiz
Options +Indexes
# Habilitar listado de directorios. -Indexes para deshabilitar.

<Directory /var/tmp/>
#Reglas especificas para el directorio /var/tmp
</Directory>
</VirtualHost>


Y para la autentificacion:

https://httpd.apache.org/docs/2.2/howto/auth.html

Las directivas las puedes poner dentro de <Directory></Directory> en lugar de hacer un .htaccess dentro de cada carpeta.

PeGaSs0

Muchas gracias por vuestras rápidas respuestas, seguiré investigando, por lo que veo también tengo que crear un fichero aposta con la directiva para ssl y 443, y otra para el puerto 80, verdad? Las configuraciones las estaba haciendo el httpd.conf pero según me dices parece que es mejor hacerlas en /etc/apache2/sites-available/ y /etc/apache2/sites-enabled/. Estoy modificando el archivo ports.conf que al parecer es necesario para todo esto, el httpd.conf lo descartaré. Las rutas creo que las estaba poniendo mal ya que las hacía a través de /etc/apache2/var.... y lo correcto sería desde la raíz / . Ya os contaré donde termina todo este caos jeje.

Un saludo para todos ;)

PeGaSs0

#4
Buenas a todos, pues nada, aquí sigo con esto que la verdad me trae de cabeza. Os comento mas o menos lo que voy haciendo y agradecería que orientarais un poco porque la verdad estoy muy perdido.

1. En el archivo ports.conf tengo lo siguiente, no sé si lo tengo bien o mal:

Código (apache) [Seleccionar]
If you just change the port or add more ports here, you will likely also

# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80


<IfModule mod_ssl.c>
   # If you add NameVirtualHost *:443 here, you will also have to change
   # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
   # to <VirtualHost *:443>
   # Server Name Indication for SSL named virtual hosts is currently not
   # supported by MSIE on Windows XP.
   Listen 443
</IfModule>


Ya no sé si tengo que poner lo del NameVirtualHost en mod_ssl.c ya que en teoría el ejercicio te dice que solo una carpeta escucha por el puerto 443, se supone que la carpeta raíz "/var/www/public/" es la que escucha el 80 y la tmp la 80 y el 443, y claro, se debe usar NameVirtualHost dentro de este host virtual? Supongo que no al no tratarse de dos host virtuales diferentes sino de dos carpetas dentro del mismo host virtual, ese es uno de los líos que tengo y no se los ficheros que crear.

2. Los he declarado en mi servidor DNS que hice en una de las prácticas en las zonas directa e inversa con su correspondiente dirección IP ( me recomendaron que la escribiera numéricamente, osease en mi caso 10.0.2.15 ) .

3. A cada directorio le he metido un index.html, no hace falta pero creí conveniente ponerlo para ver más claridad en el funcionamiento, pero veo que al ponerlos igual no entiendo como funciona apache2 y lo que me pide el ejercicio que en teoría son directorios sin mas.

4. En un primer momento me había creado 3 ficheros a partir del default y supongo que del default-ssl para el ejercicio en sites-available ( public443  public80443tmp restricted80) , pretendía hacer un fichero solo para ssl y la carpeta tmp, otro para la unión dentro del mismo host virtual leyendo los puertos 80 y 443 como me pusisteis en la captura anterior pero no sé si esto se puede hacer y si apache lee dos puertos a la vez, de que manera creéis que tengo que separar los ficheros, mas bien, cuantos tendría que crear y de que manera.

5- En teoría todo tendría que ser así: 1 puerto, 1 host, 1 fichero pero es que hay dos host virtuales que leen por el puerto 80 y luego tenemos la famosa carpeta /tmp que ya no sé lo que hacer con ella...

Por último os mostraré una de las pruebas que estaba haciendo con uno de los fichero pero que igual tengo que cambiarlo:

NameVirtualHost *:80  ( Supongo que esto sobra porque apache2 me da un warning aunque no estoy seguro... )
Código (apache) [Seleccionar]
<VirtualHost *:80 *:443> ( Se puede usar apache2 así ? )
       ServerAdmin webmaster@localhost
       ServerName public.seas-linux.es
       ServerAlias www.public.seas-linux.es
       DocumentRoot "/var/www/public/"
       <Directory "/var/www/public/>
               Options +Indexes
               Order allow,deny
               allow from all
       </Directory>
       <Directory "/var/www/public/tmp/"> ( Podría poner puerto aquí o algo especial?
               Options +Indexes
               Order allow,deny
               allow from 10.0.2.0/24
       </Directory>
       ErrorLog ${APACHE_LOG_DIR}/error.log

       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn

       CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


Cualquier ayuda será bienvenida, estoy muy perdido. Gracias por vuestro tiempo.

Un saludo.

Mod: Usa las etiquetas correspondientes para codigo.

MinusFour

#5
Como te he hecho resaltar en tu edit, tienes ciertos errores con la configuración (no cierras comillas en el primer directory). Si es necesario que tengas dentro de tu ifModule:

Código (apache) [Seleccionar]

NameVirtualHost *:443


Si tienes Apache 2.4 no es necesario que hagas esto. La syntaxis de VirtualHost es correcta:


Syntax: <VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>

Fuente: http://httpd.apache.org/docs/2.2/mod/core.html#virtualhost

Si necesitas permisos diferentes para cada puerto quizas puedas tener dos entradas de VirtualHost (no lo he probado). La primera para tu puerto 80 y la segunda para tu puerto 443. En el segundo configuras el directorio public para que haga deny from all y en el primer virtualHost lo configuras con las reglas que tienes ahora.

Tus configuraciones de VirtualHost pueden estar en un solo archivo.

Edit: Confusión entre carpetas.

el-brujo

#6
Menudo lío xD

En la documentación de Apache lo tienes todo bien explicado

Los vhosts pueden estar basados en nombre (based-name) o en ip (ip-based).

Me explico, si tu máquina tiene una sola ip, pues deberas hacer vhosts basados en nombre, y si tienes varias ips pues puedes elegir.


Código (apache) [Seleccionar]

Listen *:80
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /var/www/public/
ServerName public.seas-linux.es
#listado de  conetnidos permitido
<Directory " /var/www/public/">
       Options Indexes
#queda mas chulo
       IndexOptions NameWidth=* FancyIndexing FoldersFirst SuppressLastModified SuppressDescription VersionSort
       AllowOverride None
       Order allow,deny
       Allow from all
<Directory "/var/www/public/tmp/">
       Options Indexes
#queda mas chulo
       AllowOverride None
       Order allow,deny
       Deny from all
       Allow from 10.0.2.0/24
</Directory>
</VirtualHost>

# ssl 443
<IfModule mod_ssl.c>
   Include conf/ssl.conf
</IfModule>


Fichero ssl.conf

Código (apache) [Seleccionar]
Listen 443
NameVirtualHost *:443

<VirtualHost *:443>
DocumentRoot "/var/www/public/tmp/"
ServerName public.seas-linux.es:443

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on
#   Server Certificate:
SSLCertificateFile /usr/local/apache2/conf/foro.elhacker.net.crt
#   Server Private Key:
SSLCertificateKeyFile /usr/local/apache2/conf/foro.elhacker.net.key
SSLCertificateChainFile /usr/local/apache2/conf/gd_bundle.crt
#   SSL Cipher Suite:
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
</VirtualHost>  

<VirtualHost *:80>
# Directorio raíz: /home/<usuario>/
#
# UserDir: The name of the directory that is appended onto a user's home
# directory if a ~user request is received.
#
UserDir ./
UserDir disabled root
ServerName restricted.seas-linux.es
<Directory /home/*/>
       Options Indexes
       AllowOverride None
       Order allow,deny
       Allow from all
   AuthUserFile /home/admin/htpasswd
   AuthType Basic
   AuthName "Registringido"
   require valid-user
</Directory>

</VirtualHost>


PeGaSs0

#7
Buenas tardes chicos, gracias a todos por vuestras respuestas, la verdad me han ayudado bastante a seguir con este proyecto, os comento lo que tengo hasta ahora, tengo dos ficheros creados pero no puedo activarlos con a2ensite, os mando el contenido y haber si podéis guiarme a ver los errores, posiblemente el contenido que tenga alguno de los ficheros no debe estar ahí, no se pueden llamar así los ficheros o no sé. Otra cosa que me gustaría saber que por más que lo leo no entiendo es el significado de SSLCertificateChainFile, los otros dos parámetros si que los he puesto como podréis observar en las configuraciones que os mostraré ahora. La parte de UserDir ./ no le veo claro el funcionamiento pero supongo que es para restringir el acceso a la carpeta root del sistema, pero en este caso concreto no se que es lo que haría. Al intentar habilitar ssl.conf me sale el siguiente error que tendré que intentar corregir:
Enabling site ssl.conf.
Run '/etc/init.d/apache2 reload' to activate new configuration!
root@debian-seas:/etc/apache2/sites-available# /etc/init.d/apache2 reload
[Tue Feb 10 18:10:04 2015] [error] (EAI 2)Name or service not known: Could not resolve host name *443 -- ignoring!
Syntax error on line 29 of /etc/apache2/sites-enabled/ssl.conf:
Invalid command 'UserDir', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
failed!

Contenido de los ficheros:

public+ssl.conf

 GNU nano 2.2.4                   Fichero: public+ssl.conf                                                

Código (apache) [Seleccionar]
Listen 80
NameVirtualHost *:80
<VirtualHost *:80>
       ServerAdmin webmaster@seas-linux.es
       ServerName public.seas-linux.es
       ServerAlias www.public.seas-linux.es
       DocumentRoot "/var/www/public/"
       <Directory "/var/www/public/">
       Options Indexes
       IndexOptions NameWidth=* FancyIndexing FoldersFirst SuppressLastModified SuppressDescription Versi$
       AllowOverride None
       Order allow,deny
       Allow from all
       <Directory "/var/www/public/tmp/">
       Options Indexes
       AllowOverride None
       Order allow,deny
       Deny from all
       Allow from 10.0.2.0/24
       </Directory>
       ErrorLog ${APACHE_LOG_DIR}/error.log

       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn

       CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

# Conexion SSL 443
<IfModule mod_ssl.c>
       Include "/etc/apache2/sites-available/ssl.conf"
</IfModule>



ssl.conf

Código (apache) [Seleccionar]
<IfModule mod_ssl.c>
Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
       ServerAdmin webmaster@seas-linux.es
       ServerName public.seas-linux.es:443
       ServerAlias www.public.seas-linux.es:443
       DocumentRoot "/var/www/public/tmp/"

       ErrorLog ${APACHE_LOG_DIR}/error.log

       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn
       CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined

#Aqui indicamos que será un canal cifrado y los certificados que antes creamos, aquí los ubicamos
SSLEngine on
SSLCertificateFile "/etc/ssl/certs/publico.pem"
SSLCertificateKeyFile "/etc/ssl/private/privado.pem"
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
</VirtualHost>

<VirtualHost *:80>
UserDir ./
UserDir disabled root
ServerAdmin webmaster@seas-linux.es
ServerName restricted.seas-linux.es
ServerAlias www.restricted.seas-linux.es
DocumentRoot "/home/alumno/"
<Directory "/home/alumno/">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName "Acceso Restringido a este recurso"
AuthUserFile "/usr/local/apache2/etc/.htpasswd"
Require valid-user
Require user admin alumno
</Directory>
</VirtualHost>
</IfModule>



Ya me vais comentando, seguiré intentando pelearme más con esto, de antemano gracias a todos por vuestra ayuda.

Un saludo!

Mod: Por ultima vez, usa las etiquetas [ code][/ code]

MinusFour

¿Parece ser que no tienes el modulo userdir? ¿o no lo tienes activado?

Código (bash) [Seleccionar]

sudo a2enmod userdir


Y en cuanto a:

[Tue Feb 10 18:10:04 2015] [error] (EAI 2)Name or service not known: Could not resolve host name *443 -- ignoring!


En alguno de tus sitios debes tener:

Código (apache) [Seleccionar]

<VirtualHost *443>


Que esta mal.

PeGaSs0

Buenas de nuevo, en efecto era el modulo que no lo tenia instalado y he encontrado el error del *443, ahora me encuentro con este error:

(98)Address already in use: make_sock: could not bind to address [::]:443
Action 'start' failed.

A que creéis que es debido? Puede ser algo relacionado con ipv6?

Y no para de salirme el siguiente error relacionado con NameVirtualHost, igual es que no lo tengo que utilizar ya que en los ficheros que pongo el NameVirtualHost no hago referencia dentro de ellos a dos hosts virtuales, realmente solo a uno, puede ser esto cierto?

[Tue Feb 10 19:07:50 2015] [warn] NameVirtualHost *:443 has no VirtualHosts
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[Tue Feb 10 19:07:51 2015] [warn] NameVirtualHost *:443 has no VirtualHosts
(98)Address already in use: make_sock: could not bind to address [::]:443
Action 'start' failed.
The Apache error log may have more information.
failed!


Esto me está desesperando demasiado, veremos como acaba esto.

Un saludo.