nginx - startet nicht + alternativer Port

Ich habe aktuell zwei Probleme mit nginx.
Beschäftige mich Stundenlang jetzt mit nginx und konnte alle Fehler bis auf die zwei nachfolgenden beheben.

1. ) nginx startet nicht beim booten
Wenn ich nginx per /etc/rc.d/nginx start starte, wird nginx(failed) ausgegeben. Starte ich es hingegen einfach per nginx, startet es.
Fehlermeldungen zu nginx werden nicht angezeigt, obwohl ich es in den Konfigurationsdateien aktiviert habe. Soll ich nginxin die rc.d\ verlinken?

2.) Ich habe nginx in der Konfigurationsdatei auf einen alternativen Port (9872) gesetzt. Funktioniert auch super! Jedoch muss ich im Browser logischerweisen den Port mitangeben (http://domain.com:9872). Ich habe in den Konfigurationsdateien nicht die Möglichkeit gefunden das ganze elegant zu lösen, so dass der Benutzer den Port nicht angeben braucht. Per Paketfilter möchte ich ungern die Daten hin und her leiten.
 
1. ) nginx startet nicht beim booten
Wenn ich nginx per /etc/rc.d/nginx start starte, wird nginx(failed) ausgegeben. Starte ich es hingegen einfach per nginx, startet es.
Fehlermeldungen zu nginx werden nicht angezeigt, obwohl ich es in den Konfigurationsdateien aktiviert habe. Soll ich nginxin die rc.d\ verlinken?
Fehlermeldungen von Init-Skripten landen evtl. auch in den Syslogs. Einfach 'nginx' in's Runlevel zu verlinken wird nicht funktionieren, da per sysvinit aufgerufene Runlevel-Skripte/Programme die Parameter 'start' und 'stop' verstehen müssen. Du könntest dir aber ein alternatives Init-Skript bauen:

Code:
#!/bin/bash

case "$1" in
start)
  echo "Starte Nginx..."
  /vollstandiger/pfad/zu/nginx
  echo "Nginx gestartet"
  ;;
stop)
  # Nginx bekommt bei einem Reboot oder Shutdown eh ein Signal 15 geschickt, woraufhin er normal runterfahren sollte
  ;;
esac

exit 0

2.) Ich habe nginx in der Konfigurationsdatei auf einen alternativen Port (9872) gesetzt. Funktioniert auch super! Jedoch muss ich im Browser logischerweisen den Port mitangeben (http://domain.com:9872). Ich habe in den Konfigurationsdateien nicht die Möglichkeit gefunden das ganze elegant zu lösen, so dass der Benutzer den Port nicht angeben braucht. Per Paketfilter möchte ich ungern die Daten hin und her leiten.
Wenn der Webserver auf einem alternativen Port läuft, dann tut man dies üblicherweise, weil auf Port 80 ein Tool läuft, das Anfragen bei Bedarf an den Webserver weiterreichen kann, also Programme wie Caching-Server, Loadbalancer, Cluster-Manager o.ä.. Sonst macht die Nutzung eines alternativen Ports keinen Sinn, vor allem, wenn man nicht will, dass der User den Port angeben muss. Da müsstest du dann nämlich einen Paketfilter vorsetzen, der Anfragen auf Port 80 an deinen alternativen Port weiterleitet. Anders geht es nicht. Der Webserver lauscht nunmal nur an den Ports, die du ihm angibst. Und der Browser fragt ohne Angabe eines Ports nunmal immer Port 80 (bzw. 443 bei HTTPS) an.
 
Danke!

Ich finde es durchaus sinnvoll, wenn der Webserver auf einem anderen Port läuft. Das reduziert die Angriffsfläche erheblich.
 
Danke!

Ich finde es durchaus sinnvoll, wenn der Webserver auf einem anderen Port läuft. Das reduziert die Angriffsfläche erheblich.

Die Angriffsfläche (z.B. die Anzahl der offenen Ports, ...) wird nicht reduziert, jedoch kannst du dich effektiver gegen automatische Angriffe zur Wehr setzen, da diese meist die Defaultports verwenden und dadurch leichter von normalen Nutzern unterschieden werden können. Die Defaultports werden jedoch auch von den Browsern eingesetzt, um die Angabe des Ports beim Zugriff auf den Host vermeiden zu können. http://www.hackerboard.de wird also (wegen http) implizit zu www.hackerboard.de:80 übersetzt. Gleiches gilt natürlich auch für ftp://www.hackerboard.de -> www.hackerboard.de:21.

Eine Portweiterleitung kannst du im simpelsten Falle auch mit dem Proxy Module einrichten. Hier macht das o.g. Ändern des Defaultports allerdings nur Sinn, wenn du Proxy noch um Funktionalitäten (z.B. modsecurity) erweiterst und nicht alles durch den Proxy schickst.
 
Zuletzt bearbeitet:
Automatisierte Skripte bzw Bots, je nachdem wie Sie programmiert sind, laufen ins leere. Die meisten Bots sind so programmiert, dass Sie auf Port 80 angreifen und nicht ermitteln auf welchem Port der Webserver läuft.

Jeder Administrator sieht das anders, aber wenn ich dadurch Angriffe erschwere oder nur einen Angriff abwehre, dann war es ein Gewinn für mich. Das Netz ist voll mit "Kindern", die uns das Leben mit Tools erschwrren.
 
Wenn du die Port-Angabe im Browser vermeiden willst, muss der Webserver sowieso irgendwie über Port 80 erreichbar sein. Ich würde dir empfehlen, pack auf Port 80 einen Varnish-Caching-Server, mit einer ganz einfachen Default-Konfiguration. Deinen Webserver legst du dann auf einen alternativen Port. So macht das Setup wenigstens Sinn, der User braucht keinen Port im Browser angeben und du hast ein paar Kontrollmöglichkeiten für deinen Traffic. Nebenher bekommst du gleich einen Caching-Layer für deinen Webserver, der etwas Last vom Server nimmt. Eine passende Varnish-Konfiguration könnte z.B. so aussehen.

Code:
# definiere host und port des webservers
backend default {
    .host = "127.0.0.1";
    .port = "81";
}

sub vcl_pipe {
    set bereq.http.connection = "close";
    return (pipe);
}

Und wenn du dir Sorgen um Bots machst, dann pack noch das folgende mit in die Varnish-Config:

Code:
sub vcl_recv {
    if (
      req.http.user-agent ~ "^Java"
      || req.http.user-agent ~ "^Jakarta"
      || req.http.user-agent ~ "IDBot"
      || req.http.user-agent ~ "id-search"
      || req.http.user-agent ~ "User-Agent"
      || req.http.user-agent ~ "compatible ;"
      || req.http.user-agent ~ "ConveraCrawler"
      || req.http.user-agent ~ "libwww"
      || req.http.user-agent ~ "lwp-trivial"
      || req.http.user-agent ~ "curl"
      || req.http.user-agent ~ "PHP/"
      || req.http.user-agent ~ "urllib"
      || req.http.user-agent ~ "GT:WWW"
      || req.http.user-agent ~ "Snoopy"
      || req.http.user-agent ~ "MFC_Tear_Sample"
      || req.http.user-agent ~ "HTTP::Lite"
      || req.http.user-agent ~ "PHPCrawl"
      || req.http.user-agent ~ "URI::Fetch"
      || req.http.user-agent ~ "Zend_Http_Client"
      || req.http.user-agent ~ "http client"
      || req.http.user-agent ~ "PECL::HTTP"
      || req.http.user-agent ~ "panscient.com"
      || req.http.user-agent ~ "IBM EVV"
      || req.http.user-agent ~ "Bork-edition"
      || req.http.user-agent ~ "Fetch API Request"
      || req.http.user-agent ~ "PleaseCrawl"
      || req.http.user-agent ~ "[A-Z][a-z]{3,} [a-z]{4,} [a-z]{4,}"
      || req.http.user-agent ~ "layeredtech.com"
      || req.http.user-agent ~ "WEP Search"
      || req.http.user-agent ~ "Wells Search II"
      || req.http.user-agent ~ "Missigua Locator"
      || req.http.user-agent ~ "ISC Systems iRc Search 2.1"
      || req.http.user-agent ~ "Microsoft URL Control"
      || req.http.user-agent ~ "Indy Library"
      || req.http.user-agent == "8484 Boston Project v 1.0"
      || req.http.user-agent == "Atomic_Email_Hunter/4.0"
      || req.http.user-agent == "atSpider/1.0"
      || req.http.user-agent == "autoemailspider"
      || req.http.user-agent == "China Local Browse 2.6"
      || req.http.user-agent == "ContactBot/0.2"
      || req.http.user-agent == "ContentSmartz"
      || req.http.user-agent == "DataCha0s/2.0"
      || req.http.user-agent == "DataCha0s/2.0"
      || req.http.user-agent == "DBrowse 1.4b"
      || req.http.user-agent == "DBrowse 1.4d"
      || req.http.user-agent == "Demo Bot DOT 16b"
      || req.http.user-agent == "Demo Bot Z 16b"
      || req.http.user-agent == "DSurf15a 01"
      || req.http.user-agent == "DSurf15a 71"
      || req.http.user-agent == "DSurf15a 81"
      || req.http.user-agent == "DSurf15a VA"
      || req.http.user-agent == "EBrowse 1.4b"
      || req.http.user-agent == "Educate Search VxB"
      || req.http.user-agent == "EmailSiphon"
      || req.http.user-agent == "EmailWolf 1.00"
      || req.http.user-agent == "ESurf15a 15"
      || req.http.user-agent == "ExtractorPro"
      || req.http.user-agent == "Franklin Locator 1.8"
      || req.http.user-agent == "FSurf15a 01"
      || req.http.user-agent == "Full Web Bot 0416B"
      || req.http.user-agent == "Full Web Bot 0516B"
      || req.http.user-agent == "Full Web Bot 2816B"
      || req.http.user-agent == "Guestbook Auto Submitter"
      || req.http.user-agent == "Industry Program 1.0.x"
      || req.http.user-agent == "ISC Systems iRc Search 2.1"
      || req.http.user-agent == "IUPUI Research Bot v 1.9a"
      || req.http.user-agent == "LARBIN-EXPERIMENTAL (efp@gmx.net)"
      || req.http.user-agent == "LetsCrawl.com/1.0 +http://letscrawl.com/"
      || req.http.user-agent == "Lincoln State Web Browser"
      || req.http.user-agent == "LMQueueBot/0.2"
      || req.http.user-agent == "LWP::Simple/5.803"
      || req.http.user-agent == "Mac Finder 1.0.xx"
      || req.http.user-agent == "MFC Foundation Class Library 4.0"
      || req.http.user-agent == "Microsoft URL Control - 6.00.8xxx"
      || req.http.user-agent == "Missauga Locate 1.0.0"
      || req.http.user-agent == "Missigua Locator 1.9"
      || req.http.user-agent == "Missouri College Browse"
      || req.http.user-agent == "Mizzu Labs 2.2"
      || req.http.user-agent == "Mo College 1.9"
      || req.http.user-agent == "Mozilla/4.0 (compatible; Advanced Email Extractor v2.xx)"
      || req.http.user-agent == "Mozilla/4.0 (compatible; Iplexx Spider/1.0 http://www.iplexx.at)"
      || req.http.user-agent == "Mozilla/4.0 efp@gmx.net"
      || req.http.user-agent == "Mozilla/5.0 (Version: xxxx Type:xx)"
      || req.http.user-agent == "MVAClient"
      || req.http.user-agent == "NameOfAgent (CMS Spider)"
      || req.http.user-agent == "NASA Search 1.0"
      || req.http.user-agent == "Nsauditor/1.x"
      || req.http.user-agent == "PBrowse 1.4b"
      || req.http.user-agent == "PEval 1.4b"
      || req.http.user-agent == "Poirot"
      || req.http.user-agent == "Port Huron Labs"
      || req.http.user-agent == "Production Bot 0116B"
      || req.http.user-agent == "Production Bot 2016B"
      || req.http.user-agent == "Production Bot DOT 3016B"
      || req.http.user-agent == "Program Shareware 1.0.2"
      || req.http.user-agent == "PSurf15a 11"
      || req.http.user-agent == "PSurf15a 51"
      || req.http.user-agent == "PSurf15a VA"
      || req.http.user-agent == "psycheclone"
      || req.http.user-agent == "RSurf15a 41"
      || req.http.user-agent == "RSurf15a 51"
      || req.http.user-agent == "RSurf15a 81"
      || req.http.user-agent == "searchbot admin@google.com"
      || req.http.user-agent == "ShablastBot 1.0"
      || req.http.user-agent == "snap.com beta crawler v0"
      || req.http.user-agent == "Snapbot/1.0"
      || req.http.user-agent == "sogou develop spider"
      || req.http.user-agent == "Sogou Orion spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
      || req.http.user-agent == "sogou spider"
      || req.http.user-agent == "Sogou web spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
      || req.http.user-agent == "sohu agent"
      || req.http.user-agent == "SSurf15a 11"
      || req.http.user-agent == "TSurf15a 11"
      || req.http.user-agent == "Under the Rainbow 2.2"
      || req.http.user-agent == "VadixBot"
      || req.http.user-agent == "WebVulnCrawl.blogspot.com/1.0 libwww-perl/5.803"
      || req.http.user-agent == "Wells Search II"
      || req.http.user-agent == "WEP Search 00"
    ) {
      error 403 "You are banned from this site.  Please contact via a different client configuration if you believe that this is a mistake.";
    }
}

Macht auf jeden Fall mehr Sinn als Portforwarding, denn das würde sowieso alles lediglich zum Webserver durchleiten, wodurch es für den Angreifer egal ist auf welchem Port der Server läuft. So aber kannst du Bots, die dir in den Access-Logs auffallen, explizit aussperren, so dass sie deinen Webserver nicht mehr belasten.
 
Zurück
Oben