Kein Zugriff auf den Apache-Webserver über eine externe IP-Adresse möglich

Ich versuche, über die externe IP-Adresse eine Verbindung zu meinem neu installierten Apache-Webserver herzustellen. Die Verbindung über 127.0.0.1 ist in Ordnung, es ist nur ein Problem, wenn Sie die externe IP-Adresse verwenden.

Mein Betriebssystem ist Ubuntu 13.10. Ich verwende Apache 2.4 und lausche auf Port 80.

Ich habe auf meinem Router eine Weiterleitung eingerichtet und diese über den Dienst unter überprüfthttp://canyouseeme.org/ wo Port 80 als offen angezeigt wird. Ich kann mit meiner externen IP-Adresse und der Angabe von Port 80 eine Verbindung über Telnet herstellen und habe auch das Kontrollkästchen aktivierthttp://downforeveryoneorjustme.com/ Wo steht, dass meine Seite online ist?

Wenn es hilft habe ich auch versucht das alles mit anderen Ports nur zu testen.

Mein ufw ist nicht aktiv, ich habe jedoch eine Zeile in meinen iptables, die ich im Rahmen meiner Bemühungen um eine Lösung hinzugefügt habe. Diese lautet:

  26  1557 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http

Ich habe meine Apache-Konfigurationsdateien unten angegeben, falls dies hilfreich ist.

apache2.conf:
# This is the main Apache server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See http://httpd.apache.org/docs/2.4/ for detailed information about
# the directives and /usr/share/doc/apache2/README.Debian about Debian specific
# hints.
#
#
# Summary of how the Apache 2 configuration works in Debian:
# The Apache 2 web server configuration in Debian is quite different to
# upstream's suggested way to configure the web server. This is because Debian's
# default Apache2 installation attempts to make adding and removing modules,
# virtual hosts, and extra configuration directives as flexible as possible, in
# order to make automating the changes and administering the server as easy as
# possible.

# It is split into several files forming the configuration hierarchy outlined
# below, all located in the /etc/apache2/ directory:
#
#    /etc/apache2/
#    |-- apache2.conf
#    |    `--  ports.conf
#    |-- mods-enabled
#    |    |-- *.load
#    |    `-- *.conf
#    |-- conf-enabled
#    |    `-- *.conf
#     `-- sites-enabled
#         `-- *.conf
#
#
# * apache2.conf is the main configuration file (this file). It puts the pieces
#   together by including all remaining configuration files when starting up the
#   web server.
#
# * ports.conf is always included from the main configuration file. It is
#   supposed to determine listening ports for incoming connections which can be
#   customized anytime.
#
# * Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/
#   directories contain particular configuration snippets which manage modules,
#   global configuration fragments, or virtual host configurations,
#   respectively.
#
#   They are activated by symlinking available configuration files from their
#   respective *-available/ counterparts. These should be managed by using our
#   helpers a2enmod/a2dismod, a2ensite/a2dissite and a2enconf/a2disconf. See
#   their respective man pages for detailed information.
#
# * The binary is called apache2. Due to the use of environment variables, in
#   the default configuration, apache2 needs to be started/stopped with
#   /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not
#   work with the default configuration.


# Global configuration
ServerName localhost

#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# NOTE!  If you intend to place this on an NFS (or otherwise network)
# mounted filesystem then please read the Mutex documentation (available
# at <URL:http://httpd.apache.org/docs/2.4/mod/core.html#mutex>);
# you will save yourself a lot of trouble.
#
# Do NOT add a slash at the end of the directory path.
#
#ServerRoot "/etc/apache2"

#
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
#
Mutex file:${APACHE_LOCK_DIR} default

#
# PidFile: The file in which the server should record its process
# identification number when it starts.
# This needs to be set in /etc/apache2/envvars
#
PidFile ${APACHE_PID_FILE}

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 5


# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

#
# HostnameLookups: Log the names of clients or just their IP addresses
# e.g., www.apache.org (on) or 204.62.129.132 (off).
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on, since enabling it means that
# each client request will result in AT LEAST one lookup request to the
# nameserver.
#
HostnameLookups Off

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog ${APACHE_LOG_DIR}/error.log

#
# LogLevel: Control the number of messages logged to the error_log.
# Available values: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the log level for particular modules, e.g.
# "LogLevel info ssl:warn"
#
LogLevel warn

# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# Include list of ports to listen on
 Include ports.conf


# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>

<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>

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

#<Directory /srv/>
#    Options Indexes FollowSymLinks
#    AllowOverride None
#    Require all granted
#</Directory>




# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride
# directive.
#
AccessFileName .htaccess

#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>


#
# The following directives define some format nicknames for use with
# a CustomLog directive.
#
# These deviate from the Common Log Format definitions in that they use %O
# (the actual bytes sent including headers) instead of %b (the size of the
# requested file), because the latter makes it impossible to detect partial
# requests.
#
# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.
# Use mod_remoteip instead.
#
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

# Include of directories ignores editors' and dpkg's backup files,
# see README.Debian for details.

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

ports.conf

# 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

Listen 0.0.0.0:80

<IfModule ssl_module>
Listen 443
</IfModule>

<IfModule mod_gnutls.c>
Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

sites-enabled / 000-default.conf

<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName localhost

ServerAdmin webmaster@localhost
DocumentRoot /var/www

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

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

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Wenn jemand mir helfen könnte, indem er mich in die richtige Richtung weist, würde das wirklich helfen.

(Bitte beachten Sie, ich habe jetzt den Abhörport auf 8000 geändert.)

sudo netstat -napW | grep apache
tcp6       0      0 :::8000                 :::*                    LISTEN      1118/apache2

In Bezug auf Telnet (Telnet xxx.xxx.xxx.xxx 8000) verhält es sich jetzt anders, da es keine Verbindung mehr herstellt. Es wird nur versucht, eine Verbindung herzustellen, und dann tritt eine Zeitüberschreitung auf. Down for everyone sagt auch nicht mehr, dass es aufwärts geht, obwohl mein Port 8000 auf canyouseeme.org als offen angezeigt wird.

In meinen Zugriffsprotokollen werden nur die Verbindungen angezeigt, die lokal hergestellt werden. Ich glaube nicht, dass das Fehlerprotokoll irgendetwas anzeigt, aber es gibt Einträge, und da ich ein Anfänger bin, gehe ich nur ungern davon aus, dass ich die letzten Einträge unten eingefügt habe.

normal operations
[Fri Dec 27 22:20:05.672859 2013] [core:notice] [pid 19548:tid 139673813047168] AH00094: Command line: '/usr/sbin/apache2'
[Fri Dec 27 22:49:55.262428 2013] [mpm_event:notice] [pid 19548:tid 139673813047168] AH00491: caught SIGTERM, shutting down
[Sat Dec 28 09:16:57.693712 2013] [mpm_event:notice] [pid 1118:tid 140053653940096] AH00489: Apache/2.4.6 (Ubuntu) configured -- resuming normal operations
[Sat Dec 28 09:16:57.705967 2013] [core:notice] [pid 1118:tid 140053653940096] AH00094: Command line: '/usr/sbin/apache2'

Ich weiß auch nicht, ob dies relevant ist, aber ich habe gerade einen nmap-Scan von Port 8000 auf meiner externen IP-Adresse durchgeführt und es wird als gefiltert angezeigt. Hier ist das Ergebnis:

PORT     STATE    SERVICE  VERSION
8000/tcp filtered http-alt

Ein bisschen mehr Informationen ...

Ich vermute, es kann nicht direkt ein Problem mit Apache sein! Ich habe gerade versucht, Netcat Listening auf demselben Port einzurichten, auf dem es eine kleine HTML-Datei bereitstellen würde, wenn eine Verbindung hergestellt wird und dasselbe geschieht. Netcat bedient die Datei über 127.0.0.1 und 192.168.1.2 (meine lokale IP-Adresse), aber nicht über die externe IP-Adresse? Folgendes habe ich verwendet:

while true; do nc -l 192.168.1.2 -p 8000 ,-q 1 < test.html; done

Ich habe es auch versucht mit:

while true; do nc -l 0.0.0.0 -p 8000 -q 1 < test.html; done

Aber ohne Erfolg.

***** Yay! Es funktioniert *****

Es war eine Kombination von Dingen, obwohl ich eine immer noch nicht verstehe.

Das Hauptproblem hierbei war die Tatsache, dass ich eine Art Idiot sein musste, da ich keine Ahnung hatte, dass Sie keine Verbindung zu Ihrer externen IP-Adresse von Ihrem LAN aus herstellen konnten, ohne Net Loopback zu verwenden. Wie sich herausstellt, unterstützt mein Router dies nicht. Ich hatte zuvor darüber gelesen und habe versucht, dies durch die Verwendung externer Dienste (Downforeveryone, etc.) zum Testen rückgängig zu machen.

Die bizarre Sache, die ich nicht bekomme (was meiner Meinung nach auch komplizierter ist), ist, dass ich aus irgendeinem Grund nicht auf 8000 portieren kann? Wenn ich das tue, funktioniert es nicht.

Gegenwärtig lauscht Apache immer noch auf Port 8000, und mein Router leitet Anfragen von Port 80 an Port 8000 weiter. Wenn ich jedoch den Port des Routers auf 8000 ändere, sodass er von 8000 auf 8000 weitergeleitet wird, funktioniert er nicht.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage