====== Einrichten eines Syslog Servers ====== * Urspruenglicher Autor: Ramon Kukla * Urspruengliches Datum: 11.11.2011 Moeglicherweise ist ja Interesse an dem was ich die Tage eingerichtet habe. Es ging darum, dass ein Server installiert werden sollte, der Syslog Meldungen sammelt. Ich, als jemand der es gerne auch etwas sicherer hat, habe da auch an verschiedenen Stellen einiges "optimiert", um Zugriff durch Unbefugte zu erschweren. Da durchaus mit einer groesseren Menge von Logs zu rechnen ist (>20.000/h), wollte ich, dass alles gleich in eine Datenbank laueft. **Basisinstallation und SSH** Begonnen habe ich mit der Basisinstallation eines Ubuntu 10.04.3 LTS. Da SSH eines der Administrationszugaenge ist, lege ich da natuerlich Wert auf eine ordentliche Konfiguration. Also die /etc/sshd_config geoeffnet und dort folgendes angepasst (Erklaerungen fuege ich mal aus der [[http://www.openbsd.org/cgi-bin/man.cgi?query=sshd_config&sektion=5|man-Page]] hinzu). # The server disconnects after this time if the user has not successfully logged in. LoginGraceTime 60 # Specifies whether root can log in using ssh(1). PermitRootLogin no # Specifies the maximum number of concurrent unauthenticated connections to the SSH daemon. MaxStartups 3:50:10 # Wohl selbst erklaerend AllowUsers ramon Ergaenzend empfehle ich auch noch ''PasswordAuthentication no'' zu setzen. Voraussetzung dafuer ist allerdings, dass man fuer alle berechtigen Benutzer die Anmeldung via SSH-Keys eingerichtet hat. Des Weiteren kann man auch, bei Einsatz von mehreren Netzwerkkarten, den SSH-Daemon mit dem Schluesselwort ''ListenAddress'' an ein Interface binden. Leider hat das bei mir dazu gefuehrt, dass der Daemon nach dem Neustart des Servers nicht automatisch mit startete. Sehr seltsam. Davon, den Port von 22 auf einen anderen Port zu legen, halte ich persoenlich nichts. Ich betreue einige Server im privaten und beruflichen Umfeld. Wenn da jeder seinen eigenen Port verwenden wuerde, wuerde ich ja verrueckt werden :) Ausserdem sehe ich hier keinen wirklichen Gewinn an Sicherheit. Aber das ist natuerlich subjektiv. **Das Netzwerk** Um zumindest noch eine weitere Huerde einzubauen habe ich ueber ''/etc/hosts.deny'' und ''/etc/hosts.allow'' den Zugriff auf ssh etwas weiter reglementiert. root@server:/etc# cat /etc/hosts.deny # /etc/hosts.deny: list of hosts that are _not_ allowed to access the system. # See the manual pages hosts_access(5) and hosts_options(5). # # Example: ALL: some.host.name, .some.domain # ALL EXCEPT in.fingerd: other.host.name, .other.domain # sshd: ALL root@server:/etc# cat /etc/hosts.allow # /etc/hosts.allow: list of hosts that are allowed to access the system. # See the manual pages hosts_access(5) and hosts_options(5). # # Example: ALL: LOCAL @some_netgroup # ALL: .foobar.edu EXCEPT terminalserver.foobar.edu # sshd: 192.168.150.0/255.255.255.0 **Anmeldung an einem AD** Da die Maschine nicht nur von mir, sondern auch weiteren Anwendern genutzt werden soll, habe ich die Anbindung an ein AD konfiguriert. Das macht es, wenn man beispielsweise keinen Key hat, etwas leichter. Damit koennen sowohl bei der Anmeldung via SSH, aber auch beispielsweise beim sudo, einfach die Windows-Anmeldedaten verwendet werden. Die Einrichtung hierfuer geht relativ flockig von der Hand. Im Rahmen der Installation der Pakete ''krb5-user'', ''krb5-config'' und ''libpam-krb5'' werden die wichtigsten Dinge soweit vorbereitet. Sollte, wie bei mir, die Abfrage wegen der Domaindaten nicht kommen kann man die Konfiguration via ''dpkg-reconfigure krb5-config'' nachholen oder die Datei ''/etc/krb5.conf'' von Hand anpassen. Die wichtigen Teile sind hier in ''[[http://web.mit.edu/kerberos/krb5-1.5/krb5-1.5.4/doc/krb5-admin/libdefaults.html#libdefaults|libdefaults]]'' und ''[[http://web.mit.edu/kerberos/krb5-1.5/krb5-1.5.4/doc/krb5-admin/realms-_0028krb5_002econf_0029.html#realms-_0028krb5_002econf_0029|realms]]'' zu finden. [libdefaults] default_realm = Domaene [realms] Domaincontroller = { kdc = Domaincontroller } Als "Domaene" habe ich den Namen der DNS-Domaene eingetragen und bei Domaincontroller den voll qualifizierten Namen eines Domaincontrollers. Damit nun die Anmeldung via SSH auch mit Windows-Anmeldedaten funktioniert muss in der ''/etc/ssh/[[http://www.openbsd.org/cgi-bin/man.cgi?query=sshd_config|sshd_config]]'' nur noch was angepasst werden. # Kerberos options KerberosAuthentication yes KerberosOrLocalPasswd yes KerberosTicketCleanup yes Bitte nicht vergessen anschliessend dem SSH-Daemon die Konfigurationsaenderung mitzuteilen. Das kann sowohl via ''service ssh reload'', als auch via ''service ssh restart'' erfolgen. Es funktioniert auch noch ein albekanntes ''/etc/init.d/ssh restart'' bei Ubuntu. Das wird allerdings mit einer entsprechenden Meldung, dass das Script zu einem [[http://upstart.ubuntu.com/getting-started.html|Upstart Job]] konvertiert wurde, kommentiert. So, ob die Anmeldung mit AD-Credentials klappt kann man uebrigens auch wie folgt testen. root@server:~# kinit ramon@Domaene Password for ramon@Domaene: **** root@server:~# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: ramon@Domaene Valid starting Expires Service principal 11/10/11 10:28:51 11/10/11 20:27:43 krbtgt/Domaene@Domaene renew until 11/10/11 20:28:51 root@server:~# kdestroy **Der Webserver** Da soweit alles fertig ist, kann mit der Installation der eigentlichen Dienste begonnen werden. Aus den Paketquellen habe ich den [[http://httpd.apache.org/|Apache-Server]] und [[http://www.mysql.de/|MySQL]] installiert. Bei der Installation der zwei Dienste gibt es nichts besonderes zu beachten. Also einfach ein ''aptitude install apache2 mysql-client libapache2-mod-php5 php5-mysql'' und warten. Die beiden letztgenannten Pakete werden spaeter fuer LogAnalyzer benoetigt. Die Installation ist tatsaechlich relativ unkompliziert. Aber vorab noch schnell den rsyslog konfiguriert. **rsyslog** Im Standard ist das Paket rsyslog bereits installiert, so dass wir nur noch, fuer die Nutzung von MySQL, das Paket ''rsyslog-mysql'' nachinstallieren muessen. Hier wird dann auch gleich eine Konfigurationsdatei in ''/etc/rsyslog.d/'' erzeugt, die sich ''mysql.conf'' nennt. Im Rahmen der Paketinstallation kann die Konfiguration der Datenbank auch gleich erledigt werden. Nach Eingabe des Kennwortes fuer den Datenbankadministrator (root) kann ein Kennwort fuer den neuen Benutzer "rsyslog", der dann Rechte auf der neuen Datenbank "Syslog" haben wird, vergeben werden. Schaut man sich die ''mysql.conf'' anschliessend an, wird man etwas in der nachfolgenden Art finden. root@server:/etc/rsyslog.d# cat mysql.conf ### Configuration file for rsyslog-mysql ### Changes are preserved $ModLoad ommysql *.* :ommysql:localhost,Syslog,rsyslog,rsyslog Damit nun noch Logs angenommen werden muss noch die Datei /etc/rsyslog.conf angepasst werden. Fuer den Anfang reicht es aus, dass man die Module ''imudp'' und ''imtcp'' aktiviert, indem man in der genannten Konfiguration die entsprechenden Bereiche anpasst. # provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 Nach dem Uebernehmen der Konfiguration (''service rsyslog restart'') kann man auch sehen, dass nun auf dem Port 514 was lauscht. root@server:/etc# netstat -tulpen | grep 514 tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 0 36860 9598/rsyslogd tcp6 0 0 :::514 :::* LISTEN 0 36861 9598/rsyslogd udp 0 0 0.0.0.0:514 0.0.0.0:* 0 36856 9598/rsyslogd udp6 0 0 :::514 :::* 0 36857 9598/rsyslogd Die Profis unter uns nutzen natuerlich ''lsof'', was dann wie folgt ausschauen wuerde. root@server:/etc# lsof -i tcp:514 -i udp:514 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 677 syslog 3u IPv4 3327 0t0 UDP *:syslog rsyslogd 677 syslog 4u IPv6 3328 0t0 UDP *:syslog rsyslogd 677 syslog 5u IPv4 3331 0t0 TCP *:shell (LISTEN) rsyslogd 677 syslog 6u IPv6 3332 0t0 TCP *:shell (LISTEN) **LogAnalyzer** Da nun alles soweit konfiguriert ist kann der LogAnalyzer angegangen werden. Den gibt es nicht aus den Paketquellen, was aber nicht wild ist, da die Installation, wie oben schon angedeutet, nicht wirklich hart ist. Via ''wget'' wird sich das aktuelle Paket von der Herstellerseite [[http://loganalyzer.adiscon.com/downloads|herunter geladen]] und installiert. root@server:/# mkdir /var/www/loganalyzer root@server:~# wget http://download.adiscon.com/loganalyzer/loganalyzer-3.2.3.tar.gz Saving to: loganalyzer-3.2.3.tar.gz root@server:~# tar xzf loganalyzer-3.2.3.tar.gz root@server:~# cd loganalyzer-3.2.3 root@server:~/loganalyzer-3.2.3# cp -R src/* /var/www/loganalyzer/ root@server:~/loganalyzer-3.2.3# cp contrib/* /var/www/loganalyzer/ root@server:~/loganalyzer-3.2.3# cd /var/www/loganalyzer root@server:~/var/www/loganalyzer# chmod +x configure.sh secure.sh root@server:~/var/www/loganalyzer# ./configure.sh root@server:~/var/www/loganalyzer# cd .. root@server:~/var/www# chown -R www-data:www-data loganalyzer/ Soweit so... ja, fast fertig. Jetzt sollte man noch das php5-Module fuer Apache mit ''a2enmod php5'' aktivieren. Ist das geschehen kann man den LogAnalyzer konfigurieren. Dafuer verbindet man sich einfach per Webbrowser auf http://server/loganalyzer und geht die Punkte durch. Was habe ich noch gemacht? Ergaenzend hierzu habe ich fuer Apache SSL aktiviert und einen entsprechenden Redirect konfiguriert, so dass der Aufruf nur noch ueber http**s** moeglich ist. Ergaenzend habe ich noch ''AuthType Basic'' konfiguriert, so dass tatsaechlich nur berechtigte Benutzer auf die Seite zugreifen duerfen. Fuer eine "mal eben"-Installation ist das aus meiner Sicht schon mal recht solide. Es gibt noch ein paar Dinge, die ich verbessern kann. Fuer ssh ''PasswordAuthentication no'' setzen. Die Authentifizierung fuer Apache auch an das AD "koppeln". RELP ([[http://www.google.de/url?sa=t&rct=j&q=rsyslog%20relp&source=web&cd=1&ved=0CCkQFjAA&url=http%3A%2F%2Fwww.rsyslog.com%2Fdoc%2Fimrelp.html&ei=tuW7Tt6nIIeDOr3nxcII&usg=AFQjCNFd-dOxaBzwOTVtcm1-RrGfqoOPLA&cad=rja|Reliable Event Logging Protocol]]) aktivieren. Eigene Logs des Servers auf einem anderen Server ablegen, um im Falle eines Vorfalls keine modifizierten oder geloeschten Logs vorzufinden. Den Zugriff auf den Webserver ueber ''/etc/hosts.allow'' und ''/etc/hosts.deny ''weiter reglementieren. Da ich den Beitrag quasi aus dem Kopf erstellt habe hoffe ich, dass ich keine wichtigen Dinge vergessen habe. Wenn es Fragen, Anmerkungen oder Ergaenzungen gibt, einfach die Kommentare nutzen. [[adminstoriesartikel|Zurück zur Uebersicht]]