Verbotener 403-Fehler beim Versuch, im Browser auf den Apache 2.4.7-Webserver zuzugreifen


9

Wenn ich mit localhost von demselben Webserver-PC auf den Apache-Webserver zugreife , wird die Apache2 Ubuntu-Standardseite angezeigt.

Wenn ich jedoch mit 192.168.0.2 auf den Apache-Webserver zugreife , wird der Fehler 403 Verboten angezeigt (Verboten Sie haben keine Berechtigung, auf diesen Server zuzugreifen).

Webserver-Details

  • Ubuntu 14.04 LTS
  • Apache Version 2.4.7

Besitzbefehle

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

In der Datei etc / apache2 / apache2.conf

ServerName 192.168.0.2

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

In der Datei etc / apache2 / port.conf

NameVirtualHost *:80
Listen *:80

Virtueller Host für eine Website

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

Welche Einstellungen muss ich an welchem ​​Ort vornehmen? Bitte helfen Sie ...


Ich würde die ServerName 192.168.0.2Zeile wegwerfen, da die ServerName-Direktive den Namen www.server.com und nicht die IP-Nummer haben sollte. Ich denke, das könnte das Problem lösen. Für Servername sollten Sie den Namen des Servers eingeben, falls vorhanden. ServerName ermöglicht namenbasiertes virtuelles Hosting, wodurch mehr Websites auf derselben IP-Adresse gespeichert werden können.
niemand

@nobody, bereits aus der Datei entfernt, aber immer noch kein Erfolg.
K Ahir

Antworten:


7

1. Sie sollten Ihre / etc / hosts-Datei folgendermaßen konfigurieren :

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

Wo test-siteist der zweite "localhost". Und my-hostnameist der "System Hostname" definiert in /etc/hostname.


2. Sie sollten einen virtuellen Host (VH) definieren und aktivieren :

Es gibt eine Standard-HTTP-VH. Es ist in platziert /etc/apache2/sites-available/. Der Dateiname ist 000-default.conf. Sie müssen es bearbeiten (Sie können es umbenennen, wenn Sie möchten, oder andere .conf-Dateien erstellen, basierend darauf) und danach müssen Sie es aktivieren.

Sie können es manuell aktivieren, indem Sie einen "weichen, symbolischen Link" erstellen:

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

Oder Sie können das Apache2-Tool namens a2ensite verwenden , das dasselbe macht:

sudo a2ensite 000-default.conf

Nehmen wir an, es gibt 3 virtuelle Hosts , aktiviertes SSL und eine registrierte private Domain (z. B. SOS.info):

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

Und eine, die für die Zwecke dieses Themas erstellt wurde:

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

Der Inhalt der ersten 2 VHs ist:

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

Dieser leitet alle HTTP-Anforderungen an HTTPS um.

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

Dies ist die HTTPS VH.

Der Inhalt dieser beiden Dateien kann in einer Datei veröffentlicht werden. In diesem Fall ist die Verwaltung ( a2ensite/ a2dissite) jedoch schwieriger.


Der dritte virtuelle Host ist der, der für unsere Zwecke erstellt wurde :

$ 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. Mit dieser Konfiguration sollten Sie zugreifen auf:

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

Im Hauptbeispiel sollten Sie auf Folgendes zugreifen :

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

Versuchen Sie, die Site im Webbrowser zu öffnen, oder versuchen Sie es einfach (im Terminal) mit den nächsten Befehlen:

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

Natürlich müssen einige index.htmlSeiten in ihrem DocumentRoot enthalten sein :)



Ich werde die nächsten Notizen wegen Pedanterie hinterlassen :)


4. Sie müssen "/ etc / apache2 / apache2.conf" richtig konfiguriert haben.

Ii ist eine gute Idee, etwas Zeit zu investieren, um die Sicherheit Ihres Servers zu verbessern. In diesen Handbüchern geht es um die Sicherheitskonfiguration: 1. und 2 .. Hier erhalten Sie ein kostenloses SSL-Zertifikat. Diese Websites helfen Ihnen dabei, Ihren Fortschritt zu überprüfen: 1. und 2 ..

Gemäß den obigen Sicherheitshandbüchern /etc/apache2/apache2.confmuss die Datei wie folgt aussehen:

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. Richten Sie die Firewall ein.

Um externen Zugriff auf Ihren Webserver zuzulassen / zu verweigern, können Sie UFW (Uncomplicated Firewall) verwenden:

sudo ufw allow http
sudo ufw allow https

Um nur die tcpVerwendung des Protokolls zuzulassen :

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

Sie können und die Portnummer direkt verwenden:

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

Nur für den Fall, dass Sie die "Regeltabelle" neu laden können:

sudo ufw reload

Sie können die GUI-Oberfläche von UFW verwenden, die als gufw bezeichnet wird .

sudo apt update
sudo apt install gufw
gufw &

Wählen Sie das OfficeProfil. Es wird festgelegt: Status:ON, Incoming:Denyund Outgoing:Allowund Ihre Regeln hinzuzufügen.


6. Wenn Sie einen Router haben, vergessen Sie nicht, einige Ports weiterzuleiten:

Wenn Sie einen Router haben und möchten, dass Ihr Webserver über das Internet erreichbar ist , vergessen Sie nicht, eine Portweiterleitung hinzuzufügen. So etwas wie diese .


Die Datei 000-default.conf befindet sich bereits im Ordner / etc / apache2 / sites-enabled /. Sollte ich es trotzdem mit dem obigen Befehl aktivieren? Lass es mich wissen, bitte.
K Ahir

Wenn es bereits vorhanden ist, müssen Sie es nicht verwenden.
pa4080

Vielleicht finden Sie die Gründe für diesen Fehler in /var/log/apache2/error.log.
pa4080

Ich habe meinen Kommentar aktualisiert.
pa4080

Diese Fehlermeldung wird angezeigt ... [Fr 12 Aug 17: 18: 37.224182 2016] [mpm_prefork: Benachrichtigung] [pid 4335] AH00169: SIGTERM abgefangen, heruntergefahren [Fri Aug 12 17: 18: 40.679317 2016] [mpm_prefork: Benachrichtigung] [pid 4571] AH00163: Apache / 2.4.7 (Ubuntu) PHP / 5.5.9-1ubuntu4.19 konfiguriert - Wiederaufnahme des normalen Betriebs [Fr 12 Aug 17: 18: 40.679382 2016] [Kern: Hinweis] [pid 4571] AH00094 : Befehlszeile: '/ usr / sbin / apache2'
K Ahir

3

Bitte ändern Sie den Besitz des Verzeichnisses, in dem Sie Ihre Dateien bereitstellen, mithilfe des Befehls:

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

Es tut mir leid, dass ich in meiner Frage nicht erwähnt habe, aber ich habe bereits einer bestimmten Gruppe und einem bestimmten Benutzer für den Ordner / var / www den Besitz zugewiesen.
K Ahir

0

Ich soll Sie mit dieser Antwort verknüpfen, wo mein Problem gelöst wurde.

Fügen Sie dem Ordner zunächst Berechtigungen hinzu:

sudo chmod -R 775 /var/www

Dann fügen Sie diesen Text hinzu:

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

Bis zum Ende dieser Datei:

/etc/apache2/sites-available/000-default.conf
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.