ubuntuusers.de

apache: (99)Cannot assign requested address: make_sock: could not bind to address 192.168.1.33:80

Status: Gelöst | Ubuntu-Version: Ubuntu 11.04 (Natty Narwhal)
Antworten |

dotux23

Anmeldungsdatum:
27. August 2009

Beiträge: Zähle...

Hallo,

ich habe auf meinem Laptop einen apache2-webserver laufen für eine Wiki (ikiwiki) für meine Notizen. Wenn ich zu Hause bin, möchte ich, dass andere Rechner im lokalen Netz (mit bestimmten IP's) darauf zugreifen können, wenn ich im Büro bin, möchte ich, das ganze natürlich nicht im Firmennetzwerk zugänglich haben.

Als erste Lösung habe ich mir gedacht einfach in die ports.conf (/etc/apache2/ports.conf) folgende Zeilen einzutragen:

Listen 127.0.0.1:80
Listen 192.168.1.33:80

Dabei ist die zweite Adresse eine von einem anderen Rechner bei mir zu Hause im Netzwerk. Ich dachte, damit müsste nur dieser und localhost auf meinen apache zugreifen können.

Leider erhalte ich beim apache restart folgende Fehlermeldung:

(99)Cannot assign requested address: make_sock: could not bind to address 192.168.1.33:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.

und 192.168.1.33 kann auch nicht zugreifen.

Wenn ich stattdessen

Listen *:80

eintrage, haben alle Rechner im Netz Zugriff auf meinen apache.

Vielleicht hat ja jemand eine Idee, woran das liegen könnte.

dotux23

Blaimi

Avatar von Blaimi

Anmeldungsdatum:
9. Januar 2008

Beiträge: 943

Wohnort: 76185

nein, das ist so falsch. listen bedeutet in dem fall, dass du deine eigene ip-eintragen musst.

was du suchst ist

order deny,allow
allow from 192.168.1.33
deny from all

dotux23

(Themenstarter)

Anmeldungsdatum:
27. August 2009

Beiträge: 56

Blaimi schrieb:

nein, das ist so falsch. listen bedeutet in dem fall, dass du deine eigene ip-eintragen musst.

was du suchst ist

order deny,allow
allow from 192.168.1.33
deny from all

Also wenn ich

<Directory /var/www/>
 order deny,allow
 allow from 192.168.1.33
 deny from all
</Directory>

in meine httpd.conf eintrage, hat das gar keine Auswirkungen. Egal ob die Zeile mit allow 192... drin ist, oder auskommentiert, falls in der ports.conf

listen *:80

steht, hat der Rechner 192.168.1.33 in jedem Fall Zugriff, falls aber

listen 127.0.0.1:80

steht, hat er in beiden Fällen keinen Zugriff.

Blaimi

Avatar von Blaimi

Anmeldungsdatum:
9. Januar 2008

Beiträge: 943

Wohnort: 76185

klar.

die frage ist, wer hat zugriff, wenn listen *:80 und der allow/deny-eintrag vorhanden sind, nur die …33 und der eigene rechner, oder das ganze net

der eintrag listen beschreibt in der config, unter welcher ip sich der server angesprochen fühlt. d.h. der rechner fühlt sich bei 172.0.0.1:80 nur dann zuständig, wenn er über die adresse 172.0.0.1 auf port 80 angefragt wurde. wird der selbe rechner aber über 192.168.1.xx angesprochen, dann macht er nichts. dadurch, dass er aber nie ….33 hat (das hat ja der andere pc) fühlt er sich nie angesprochen.

die ip des rechners ist dann quasi das namensschild, das du in diesem netzwerk trägst (auf privaten veranstaltungen z.b. „max“, auf geschäftlichen „Herr Mustermann“ – so auch 172.0.0.1 und 192.168.1.xx).

den namen, den du bei listen einträgst, ist der name, auf den der server reagieren soll. so muss man dir beispielsweise beibrigen, dass du reagieren sollst, wenn dich jemand mit „Max“ oder „Herr Mustermann“ anspricht. Wennn dich aber jemand mit „Frau Meier“ anspricht, sollst du nicht reagieren. Du hast versucht deinem server beizubringen, dass er auf „Frau Meier“ (192.168.0.33) reagiert, und hast ihm gleichzeitig verboten sich bei anderen namen angesprochen zu fühlen. Das Problem an der Sache: Er heißt nicht so und das weiß auch jeder – wenn jemand was von frau meier will, gehen die dort hin, wo frau meier auf dem namensschild steht und sprechen diese person an. wer dich ansprechen darf, und wer nicht, das erfährst du aus dem allow/deny-eintrag. beispielsweise hat ein kleines kind dort order deny/allow, allow mama papa tante_irmgard, deny from all. das heißt soviel wie reagiere nur dann, wenn du von einer der 3 personen angesprochen wirst, ansonsten ignoriere alles, selbst wenn dich jemand mit dem richtigen namen anspricht.

ein *:80 verhält sich so, als ob es völlig egal ist, mit was für einem namen du angesprochen wirst, das kann max, herr mustermann, frau meier oder auch häftling 08/15 sein – hauptsache ist, es spricht jemand in deine richtung.

was du jetzt konfigurieren willst ist, dass du 1. auf den namen max (172.0.0.1) hörst, weil sich das so gehört. wobei die 172.0.0.1 ist auch weniger mit max sondern eher mit „ich“ zu vergleichen – man sollte sich von sich selbst immer angesprochen fühlen, wenn man mit sich selbst redet (selbst gollum erkennt das richtig, wenn er sein anderes ich anspricht).

außerdem willst du 2. dass dein server reagiert, wenn im privaten netzwerk angesprochen wird, das ist dann mit dem namen 192.168.1.xx – er muss also auch auf diesen namen hören.

und last but not least willst du, dass er nur dann reagiert, wenn er von einem bestimmten rechner angesprochen wird, also allow 192.168.1.33.

es kann sein, dass du bei allow auch noch deine 172.0.0.1 eintragen musst, sonst funktioniert der zugriff über http://localhost'' nicht mehr. lg
blaimi

Blaimi

Avatar von Blaimi

Anmeldungsdatum:
9. Januar 2008

Beiträge: 943

Wohnort: 76185

OT: auf die erklärungen der letzten tage bin ich richtig stolz 😀. Hatte hier schon was ähnliches.

dotux23

(Themenstarter)

Anmeldungsdatum:
27. August 2009

Beiträge: 56

Ok, danke, prinzipiell habe ich es denke ich jetzt verstanden.

Angenommen, ich möchte dass kein Rechner außer localhost Zugriff hat, dann müsste es doch der Eintrag:

<Directory /var/www/>
 order deny,allow
 allow from 127.0.0.1
 deny from all
</Directory>

tun. Aber das funktioniert nicht, es hat trotzdem das ganze Netz Zugriff.

Blaimi

Avatar von Blaimi

Anmeldungsdatum:
9. Januar 2008

Beiträge: 943

Wohnort: 76185

ich kenne deine restliche konfiguration nicht, eigentlich sollte es so aber passen (kann natürlich auch sein, dass ich da falsch liege). dieser eintrag gilt dann aber auch nur für das verzeichnis /var/www – nicht für alle anderen. wenn du z.b. phpmyadmin aus den ubuntu-paketquellen installiert hast, dann wird dort – wenn ich mich richtig erinnere – ein neuer eintrag angelegt. dieser muss dann aber nicht in der httpd.conf sein, sondern kann auch irgendwo im verzeichnis sites-enabled sein (zumindest war das früher mal so).

als alternative zu der umkonfiguration kannst du dir auch überlegen, verschiedene runlevel anzulegen und grub entsprechend zu konfigurieren. eines für privat und eines für die arbeit – im einen wird der apache gestartet, im anderen nicht. das macht aber nur dann sinn, wenn du den pc auch beim wechsel herunterfährst, geht dafür aber evtl. schneller zu konfigurieren, verbraucht auf der arbeit weniger ressourcen (was beim apache allerdings lächerlich ist) und du brauchst dir keine gedanken über apache-sicherheitslücken machen, der läuft ja eh nicht.

lg
blaimi

ps: hab grad nochmal gesucht und das hier gefunden. da steht das genauso …

Blaimi

Avatar von Blaimi

Anmeldungsdatum:
9. Januar 2008

Beiträge: 943

Wohnort: 76185

nochwas:

auf evtl. .htaccess dateien musst du auch achten. je nach konfiguration können die werte aus der httpd.conf (oder äquivalent) überschreiben

lg

dotux23

(Themenstarter)

Anmeldungsdatum:
27. August 2009

Beiträge: 56

Also wenn ich das richtig verstehe, müsste folgender Eintrag ans Ende der apache2.conf alle anderen Konfigurationen überschreiben und dafür sorgen, dass niemand Zugriff hat:

<Directory /var/www/>
	AllowOverride None
	Order Deny,Allow
	Deny from all
</Directory>

Tut es aber nicht.

dotux23

(Themenstarter)

Anmeldungsdatum:
27. August 2009

Beiträge: 56

Ok, jetzt funktioniert es, ich musste die allow und deny Einstellungen in der Datei /etc/apache2/sites-enabled/000-default vornehmen. Dort hat ubuntu irgendwie standardmäßig einen virtuallen host angelegt (kann mir jemand erklären, was das in diesem Fall soll), die Datei sieht nach meinen Änderungen so aus:

<VirtualHost *:80>
	ServerAdmin webmaster@localhost

	DocumentRoot /var/www
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews ExecCGI
		AllowOverride None
		Order deny,allow
		allow from localhost
		allow from 127.0.0.1
		allow from 192.168.1.33
		deny from all
	</Directory>

	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</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

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>
Antworten |