web-dev-qa-db-fra.com

Erreur 403 interdite lors de la tentative d'accès au serveur Web Apache 2.4.7 dans un navigateur

Lorsque j'accède au serveur Web Apache à l'aide de localhost à partir du même PC serveur Web, la page par défaut d'Apache2 Ubuntu s'affiche.

Mais lorsque j'accède au serveur Web Apache à l'aide de 192.168.0.2, il génère une erreur 403 Forbidden (Forbidden. Vous n'êtes pas autorisé à accéder à/sur ce serveur).

Détails du serveur Web

  • Ubuntu 14.04 LTS
  • Apache version 2.4.7

Commandes de propriété

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

Dans le fichier etc/Apache2/Apache2.conf

ServerName 192.168.0.2

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

Dans le fichier etc/Apache2/port.conf

NameVirtualHost *:80
Listen *:80

Hôte virtuel pour un site web

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

Quels paramètres dois-je faire à quel endroit? S'il vous plaît aider ...

8
K Ahir

1. Vous devriez configurez votre fichier/etc/hosts comme ça:

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...

test-site est le deuxième "hôte local". Et my-hostname est le "nom d'hôte système" défini dans /etc/hostname.


2. Vous devez définir et activer un hôte virtuel (VH):

Il existe un HTTP VH par défaut. Il est placé dans /etc/Apache2/sites-available/. Le nom de fichier est 000-default.conf. Vous devez l'éditer (vous pouvez le renommer si vous le souhaitez ou créer d'autres fichiers .conf basés sur celui-ci), puis vous devez l'activer.

Vous pouvez l'activer manuellement en créant un "lien symbolique léger":

Sudo ln -s /etc/Apache2/sites-available/000-default.conf /etc/Apache2/sites-enabled/

Ou vous pouvez utiliser l'outil Apache2 appelé a2ensite , qui produisent le même résultat:

Sudo a2ensite 000-default.conf

Supposons qu'il y a 3 hôtes virtuels , SSL activé et un domaine privé enregistré (SOS.info pour un exemple):

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

Et un qui est créé pour les besoins de ce sujet:

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

Le contenu des 2 premiers VHs est:

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

<VirtualHost *:80>    
    ServerName SOS.info
    ServerAlias www.SOS.info
    ServerAdmin [email protected]

    # 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>

Celui-ci redirige toutes les requêtes HTTP vers 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 [email protected]

        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>

C'est le HTTPS VH.

Le contenu de ces deux fichiers peut être publié dans un seul fichier, mais dans ce cas, leur gestion (a2ensite/a2dissite) sera plus difficile.


Le troisième hôte virtuel est celui créé pour nos besoins :

$ 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. Avec cette configuration, vous devriez accéder à:

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

Sur l'exemple principal, vous devriez accéder et :

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

Essayez d'ouvrir le site dans le navigateur Web ou essayez simplement (dans le terminal) avec les commandes suivantes:

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

Bien sûr, vous devez avoir quelques pages index.html dans leur racine de document :)



Je laisserai les prochaines notes en raison du pédantisme :)


4. Vous devez avoir correctement configuré `/ etc/Apache2/Apache2.conf`.

Ii est une bonne idée de passer un peu de temps pour améliorer la sécurité de votre serveur. Ces manuels concernent la configuration de la sécurité: 1st et 2nd . Ici vous pouvez obtenir un certificat SSL gratuit. Ces sites vous aideront à vérifier vos progrès: 1er et 2ème .

Selon les manuels de sécurité ci-dessus /etc/Apache2/Apache2.conf le fichier doit ressembler à ceci:

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. Configurez le pare-feu.

Pour autoriser/refuser l'accès externe à votre serveur Web, vous pouvez utiliser UFW (Pare-feu simple):

Sudo ufw allow http
Sudo ufw allow https

Pour autoriser uniquement l'utilisation du protocole tcp:

Sudo ufw allow http/tcp
Sudo ufw allow https/tcp

Vous pouvez utiliser et le numéro de port directement:

Sudo ufw allow 80/tcp
Sudo ufw allow 443/tcp

Juste au cas où vous pouvez recharger la "table de règles":

Sudo ufw reload

Vous pouvez utiliser l'interface graphique de UFW, appelée gufw.

Sudo apt update
Sudo apt install gufw
gufw &

Choisissez le profil Office. Il définira: Status:ON, Incoming:Deny et Outgoing:Allow et ajoutera vos règles.


6. Si vous avez un routeur, n'oubliez pas de transférer certains ports:

Si vous avez un routeur et que vous voulez que votre serveur Web soit accessible depuis Internet , n’oubliez pas d’ajouter du transfert de port. Quelque chose comme this .

6
pa4080

Veuillez modifier la propriété du répertoire dans lequel vous servez vos fichiers à l'aide de la commande:

Sudo chown -R www-data:www:data <directory_where_you_serve_files_from>
2
Shady Programmer

Je suis censé vous lier à cette réponse où a résolu mon problème.

Tout d'abord, ajoutez des autorisations au dossier:

Sudo chmod -R 775 /var/www

Ajoutez ensuite ce texte:

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

À la fin de ce fichier:

/etc/Apache2/sites-available/000-default.conf
0
Amir Forsati