Error 403 prohibido al intentar acceder al servidor web Apache 2.4.7 en el navegador


9

Cuando accedo al servidor web Apache usando localhost desde la misma PC del servidor web, muestra la página predeterminada Apache2 Ubuntu.

Pero cuando accedo al servidor web Apache usando 192.168.0.2 , aparece un error prohibido 403 (Prohibido No tiene permiso para acceder / en este servidor).

Detalles del servidor web

  • Ubuntu 14.04 LTS
  • Apache versión 2.4.7

Comandos de propiedad

www-data sudo adduser ftpuser www-data
sudo chown -R www-data:ftpuser /var/www
sudo chmod -R g+rwX /var/www

En etc / apache2 / apache2.conf archivo

ServerName 192.168.0.2

<Directory/>
    AllowOverride All
    Require all granted
</Directory>

En etc / apache2 / port.conf archivo

NameVirtualHost *:80
Listen *:80

Host virtual para un sitio web

<VirtualHost *:80>
    ServerName mysite
    DocumentRoot /var/www/mysite
    <Directory /var/www/mysite>
        Options None FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>    
</VirtualHost>

¿Qué ajustes debo hacer en qué lugar? Por favor ayuda...


Lanzaría una ServerName 192.168.0.2línea ya que la directiva ServerName debería tener el nombre como www.server.com y no el número de IP. Creo que esto podría resolver el problema. Para ServerName, debe ingresar el nombre del servidor si lo tiene. ServerName permite alojamiento virtual basado en nombres, lo que permite tener más sitios web en la misma IP.
nadie

@nobody, ya lo eliminé del archivo pero aún no fue un éxito.
K Ahir

Respuestas:


7

1. Debe configurar su archivo / etc / hosts así:

127.0.0.1   localhost
127.0.0.1   test-site
127.0.1.1   my-hostname
# The following lines are desirable for IPv6 capable hosts. etc...

¿Dónde test-siteestá el segundo "localhost". Y my-hostnamees el "nombre de host del sistema" definido en /etc/hostname.


2. Debe definir y habilitar un host virtual (VH):

Hay un HTTP VH predeterminado. Se coloca en /etc/apache2/sites-available/. El nombre del archivo es 000-default.conf. Debe editarlo (puede cambiarle el nombre, si lo desea, o crear algunos otros archivos .conf, en función de él) y luego debe habilitarlo.

Puede habilitarlo manualmente mediante la creación de un "enlace simbólico suave":

sudo ln -s /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-enabled/

O puede usar la herramienta Apache2 llamada a2ensite , que hace lo mismo:

sudo a2ensite 000-default.conf

Supongamos que tiene 3 hosts virtuales , SSL habilitado y dominio privado registrado (SOS.info, por ejemplo):

/etc/apache2/sites-available/http.SOS.info.conf
/etc/apache2/sites-available/https.SOS.info.conf

Y uno que se crea para los propósitos de este tema:

/etc/apache2/sites-available/http.test-site.conf

El contenido de First 2 VHs es:

$ cat /etc/apache2/sites-available/http.SOS.info.conf

<VirtualHost *:80>    
    ServerName SOS.info
    ServerAlias www.SOS.info
    ServerAdmin admin@SOS.info

    # Redirect Requests to SSL
    Redirect permanent "/" "https://SOS.info/"

    ErrorLog ${APACHE_LOG_DIR}/http.SOS.info.error.log
    CustomLog ${APACHE_LOG_DIR}/http.SOS.info.access.log combined       
</VirtualHost>

Éste redirige todas las solicitudes HTTP a HTTPS.

$ cat /etc/apache2/sites-available/https.SOS.info.conf

<IfModule mod_ssl.c>    
    <VirtualHost _default_:443>    
        ServerName SOS.info
        ServerAlias www.SOS.info
        ServerAdmin admin@SOS.info

        DocumentRoot /var/www/html  

        SSLEngine on    
        SSLCertificateFile /etc/ssl/certs/SOS.info.crt
        SSLCertificateKeyFile /etc/ssl/private/SOS.info.key
        SSLCertificateChainFile /etc/ssl/certs/SOS.info.root-bundle.crt
        #etc..
    </VirtualHost>    
</IfModule>

Este es el HTTPS VH.

El contenido de estos dos archivos se puede publicar en un solo archivo, pero en este caso su administración ( a2ensite/ a2dissite) será más difícil.


El tercer host virtual es el que se crea para nuestros propósitos :

$ cat /etc/apache2/sites-available/http.test-site.conf

<VirtualHost *:80>
    ServerName test-site
    ServerAlias test-site.SOS.info

    DocumentRoot /var/www/test-site
    DirectoryIndex index.html

    ErrorLog ${APACHE_LOG_DIR}/test-site.error.log
    CustomLog ${APACHE_LOG_DIR}/test-site.access.log combined

    <Directory /var/www/test-site>
        # Allow .htaccess 
        AllowOverride All
        Allow from All
    </Directory>    
</VirtualHost>

3. Con esta configuración debe acceder:

http://localhost     # pointed to the directory of the mine Domain 
https://localhost    # iin our case: /var/www/html (SOS.info), but you should get an error, because the SSL certificate

http://SOS.info      # which redirects to https://SOS.info
https://SOS.info     # you should have valid SSL certificate

http://www.SOS.info  # which is allied to http://SOS.info and redirects to https://SOS.info
https://www.SOS.info # which is allied to https://SOS.info

En el ejemplo principal, debe acceder y :

http://test-site           # pointed to the directory /var/www/test-site
http://test-site.SOS.info  # which is allied to http://test-site

Intente abrir el sitio en el navegador web o simplemente intente (en la terminal) con los siguientes comandos:

$ curl -L http://test-site/index.html
$ curl -L http://test-site.SOS.info/index.html

Por supuesto, debe tener algunas index.htmlpáginas en su DocumentRoot :)



Dejaré las siguientes notas por motivo de pedantería :)


4. Necesita configurar correctamente `/ etc / apache2 / apache2.conf`.

Es una buena idea pasar un tiempo para mejorar la seguridad de su servidor. Estos manuales tratan sobre la configuración de seguridad: primero y segundo . Aquí puede obtener un certificado SSL gratuito. Estos sitios lo ayudarán a verificar su progreso: primero y segundo .

De acuerdo con los manuales de seguridad anteriores, el /etc/apache2/apache2.confarchivo debe verse así:

Mutex file:${APACHE_LOCK_DIR} default

PidFile ${APACHE_PID_FILE}

Timeout 60

#KeepAlive Off
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

HostnameLookups Off

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn

IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

Include ports.conf

<Directory />
    Options None FollowSymLinks 
    AllowOverride None
    Require all denied
</Directory>

<Directory /var/www/>
    Options None FollowSymLinks 
    AllowOverride None
    Require all granted
</Directory>

AccessFileName .htaccess
<FilesMatch "^\.ht">
    Require all denied
</FilesMatch>

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf

# Hide Server type in the http error-pages 
ServerSignature Off
ServerTokens Prod

# Etag allows remote attackers to obtain sensitive information 
FileETag None

# Disable Trace HTTP Request
TraceEnable off

# Set cookie with HttpOnly and Secure flag.
# a2enmod headers
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

# Clickjacking Attack
Header always append X-Frame-Options SAMEORIGIN

# CX-XSS Protection
Header set X-XSS-Protection "1; mode=block"

# Disable HTTP 1.0 Protocol
RewriteEngine On
RewriteCond %{THE_REQUEST} !HTTP/1.1$
RewriteRule .* - [F]

# Change the server banner @ ModSecurity 
# Send full server signature so ModSecurity can alter it
ServerTokens Full
# Alter the web server signature sent by Apache
<IfModule security2_module>
    SecServerSignature "Apache 1.3.26"
</IfModule>
Header set Server "Apache 1.3.26"
Header unset X-Powered-By

# Hde TCP Timestamp
#   gksu gedit /etc/sysctl.conf
#   >> net.ipv4.tcp_timestamps = 0
# Test: sudo hping3 SOS.info -p 443 -S --tcp-timestamp -c 1

# Disable -SSLv2 -SSLv3 and weak Ciphers
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 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"

5. Configure el cortafuegos.

Para permitir / denegar el acceso externo a su servidor web, puede usar UFW (firewall sin complicaciones):

sudo ufw allow http
sudo ufw allow https

Para permitir solo el tcpuso del protocolo:

sudo ufw allow http/tcp
sudo ufw allow https/tcp

Puede usar y el número de puerto directamente:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

En caso de que pueda volver a cargar la "tabla de reglas":

sudo ufw reload

Puede usar la interfaz GUI de UFW, llamada gufw .

sudo apt update
sudo apt install gufw
gufw &

Elige el Officeperfil. En él se fijará: Status:ON, Incoming:Denyy Outgoing:Allowy añadir sus reglas.


6. Si tiene un enrutador, no olvide reenviar algunos puertos:

Si tiene un enrutador y desea que su servidor web sea accesible desde Internet , no olvide agregar un reenvío de puertos. Algo como esto .


El archivo 000-default.conf ya está en la carpeta / etc / apache2 / sites-enabled /. Entonces, ¿debería habilitarlo usando el comando anterior? Por favor hagamelo saber.
K Ahir

Si ya está allí, no necesita usarlos.
pa4080

Quizás encuentre las razones de este error en /var/log/apache2/error.log.
pa4080

He actualizado mi comentario.
pa4080

Recibiendo este mensaje de error ... [Vie 12 de agosto 17: 18: 37.224182 2016] [mpm_prefork: aviso] [pid 4335] AH00169: atrapado SIGTERM, cerrando [Vie 12 de agosto 17: 18: 40.679317 2016] [mpm_prefork: aviso] [pid 4571] AH00163: Apache / 2.4.7 (Ubuntu) PHP / 5.5.9-1ubuntu4.19 configurado - reanudando las operaciones normales [Vie 12 de agosto 17: 18: 40.679382 2016] [núcleo: aviso] [pid 4571] AH00094 : Línea de comando: '/ usr / sbin / apache2'
K Ahir el

3

Cambie la propiedad del directorio donde está sirviendo sus archivos usando el comando:

sudo chown -R www-data:www:data <directory_where_you_serve_files_from>

Lamento no mencionarlo en mi pregunta, pero ya he asignado la propiedad a un grupo y usuario específicos para la carpeta / var / www.
K Ahir

0

Se supone que debo vincularlo a esta respuesta donde resolvió mi problema.

En primer lugar, agregue permisos a la carpeta:

sudo chmod -R 775 /var/www

Luego agrega este texto:

<Directory /var/www/html>
  AllowOverride All
</Directory>

Al final de este archivo:

/etc/apache2/sites-available/000-default.conf
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.