{"id":457,"date":"2014-10-25T09:42:26","date_gmt":"2014-10-25T09:42:26","guid":{"rendered":"http:\/\/www.intelli.ch\/?p=457"},"modified":"2019-01-03T10:13:15","modified_gmt":"2019-01-03T10:13:15","slug":"ubuntu-server-absichern","status":"publish","type":"post","link":"https:\/\/www.dev-metal.ch\/?p=457","title":{"rendered":"Ubuntu Server absichern"},"content":{"rendered":"<p>Jeder der einen Linux-Server betreibt, sollte sich ernsthaft mit dem Thema Sicherheit auseinandersetzen. Einen tollen Artikel zu diesem Thema habe ich <a href=\"http:\/\/www.andrewault.net\/2010\/05\/17\/securing-an-ubuntu-server\/\" target=\"_blank\">hier<\/a> gefunden.<!--more--><\/p>\n<h1>SSH<\/h1>\n<h2>SSH root-login verhindern<\/h2>\n<p>Root-Login \u00fcber SSH ist in Ubuntu normalerweise bereits deaktiviert. Es lohnt sich aber sicher, dies zu \u00fcberpr\u00fcfen. Auf meinen Servern gibt es keinen Grund sich als root \u00fcber SSH einlogen zu k\u00f6nnen. Deswegen deaktiviere ich dies grunds\u00e4tzlich:<\/p>\n<pre class=\"lang:sh decode:true\">sudo vi \/etc\/ssh\/sshd_config<\/pre>\n<pre class=\"lang:sh decode:true\">PermitRootLogin no<\/pre>\n<pre class=\"lang:sh decode:true\">sudo service ssh restart<\/pre>\n<h2>Root-Login mit RSA-Key<\/h2>\n<p>Falls doch ein Root-Login ben\u00f6tigt w\u00fcrde, ist es empfehlenswert diesen statt mit einem Passwort mit einem RSA-Key abzusichern:<\/p>\n<pre class=\"lang:sh decode:true\">sudo vi \/etc\/ssh\/sshd_config<\/pre>\n<pre class=\"lang:sh decode:true\">PermitRootLogin without-password<\/pre>\n<pre class=\"lang:sh decode:true \">sudo service ssh restart<\/pre>\n<p>Anschliessend muss noch ein Key erstellt werden: <a href=\"http:\/\/go2linux.garron.me\/ssh-login-using-no-password\" target=\"_blank\">http:\/\/go2linux.garron.me\/ssh-login-using-no-password<\/a><\/p>\n<h2>Verweise<\/h2>\n<ul>\n<li><a href=\"http:\/\/www.andrewault.net\/2010\/05\/17\/securing-an-ubuntu-server\/\" target=\"_blank\">http:\/\/www.andrewault.net\/2010\/05\/17\/securing-an-ubuntu-server\/<\/a><\/li>\n<li><a href=\"http:\/\/go2linux.garron.me\/secure-root-account-ssh-without-password\" target=\"_blank\">http:\/\/go2linux.garron.me\/secure-root-account-ssh-without-password<\/a><\/li>\n<li><a href=\"http:\/\/go2linux.garron.me\/ssh-login-using-no-password\" target=\"_blank\">http:\/\/go2linux.garron.me\/ssh-login-using-no-password<\/a><\/li>\n<\/ul>\n<h1>Denyhosts<\/h1>\n<p>Es ist beeindruckend, wieviele Login-Versuche (Attacken) \/var\/log\/auth.log auf meinen Servern aufweist. Denyhost erm\u00f6glicht es diese Attacken etwas einzud\u00e4mmen, indem es<\/p>\n<pre class=\"lang:sh decode:true \">\/var\/log\/auth.log<\/pre>\n<p>scant und mehrfach fehlgeschlagene Logins analysiert. Die IP-Adressen, welche die Fehlerhaften Logins produziert haben, werden in \/etc\/hosts.deny eingetragen.<\/p>\n<h2>Installation<\/h2>\n<p>Die Installation erfolgt sehr einfach.<\/p>\n<div id=\"highlighter_613595\">\n<div>\n<div>\n<pre class=\"lang:sh decode:true\">sudo apt-get install denyhosts<\/pre>\n<p>Das war&#8217;s auch schon. Denyhost arbeitet nun bereits und tr\u00e4gt IP-Adressen in \/etc\/hosts.deny ein:<\/p>\n<pre class=\"lang:sh decode:true\">sudo less \/etc\/hosts.deny\r\n<\/pre>\n<p>Hinweis:<br \/>\nBitte pr\u00fcft bei der ersten Installation ob nicht zuf\u00e4lligerweise eure eigene IP in hosts.deny eingetragen wurde. Bei einer nachtr\u00e4glichen Installation kann es sein, dass aufgrund fr\u00fcher fehlgeschlagene Logins (welche z.B. bei Testlogins entstehen) eure eigene IP in hosts.deny eingetragen wird.<\/p>\n<p>Dies kann verhindert werden, indem die eigenen IP-Adressen in die whitelist eingef\u00fcgt werden:<\/p>\n<pre class=\"\">sudo vi \/etc\/hosts.allow<\/pre>\n<pre class=\"\">sshd: x.x.x.x<\/pre>\n<h2>Konfiguration<\/h2>\n<p>Denyhost erstellt sich seine eigenen Auswertungen und speichert diese unter<\/p>\n<pre class=\"lang:sh decode:true \">\/var\/lib\/denyhosts<\/pre>\n<p>ab. Basierend auf diesen Daten legt denyhost die Eintr\u00e4ge in<\/p>\n<pre class=\"lang:sh decode:true\">\/etc\/hosts.deny<\/pre>\n<p>fest.<\/p>\n<p>Das Config-File befindet sich auf Ubuntu unter<\/p>\n<pre class=\"lang:sh decode:true\">\/etc\/denyhosts.conf<\/pre>\n<h2>Verweise<\/h2>\n<div>\n<ul>\n<li><a href=\"http:\/\/denyhosts.sourceforge.net\/\">http:\/\/denyhosts.sourceforge.net\/<\/a><\/li>\n<\/ul>\n<h1>Fail2Ban<\/h1>\n<p>Ab Ubuntu 14.04 gibt es denyhosts offenbar nicht mehr \u00fcber den Package-Manager:<br \/>\n<a href=\"http:\/\/askubuntu.com\/questions\/433924\/package-denyhosts-in-ubuntu-trusty-tahr-is-deleted-temporary-or-forever\" target=\"_blank\">http:\/\/askubuntu.com\/questions\/433924\/package-denyhosts-in-ubuntu-trusty-tahr-is-deleted-temporary-or-forever<\/a><br \/>\nEs wird nun Fail2Ban empfohlen.<\/p>\n<p>Siehe:<\/p>\n<ul>\n<li><a href=\"http:\/\/devget.net\/tutorials\/securing-an-ubuntu-14-04-server-with-fail2ban\/\" target=\"_blank\">http:\/\/devget.net\/tutorials\/securing-an-ubuntu-14-04-server-with-fail2ban\/<\/a><\/li>\n<li><a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-protect-ssh-with-fail2ban-on-ubuntu-12-04\" target=\"_blank\">https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-protect-ssh-with-fail2ban-on-ubuntu-12-04<\/a><\/li>\n<\/ul>\n<h1>Logwatch<\/h1>\n<p>Logs sind eine tolle Sache und erm\u00f6glichen die Nachvollziehbarkeit von Vorkommnissen auf den Servern. Das bedingt jedoch, dass man die Logs auch anschaut. Logwatch erm\u00f6glicht die einfache Analyse von Logs. Die Logs k\u00f6nnen auch regelm\u00e4ssig an Administratoren versendet werden. Sepiell f\u00fcr Internet-Root-Server ist dies zu empfehlen:<\/p>\n<h2>Installation<\/h2>\n<pre class=\"lang:sh decode:true\">sudo apt-get install logwatch<\/pre>\n<p>Mit der Installation von Logwatch werden weitere ben\u00f6tigte Dienste wie Postfix installiert. Bei der Installation von Postfix wird nachgefragt, welche Art von E-Mail Server installiert werden soll. Da auf meinen Servern keine Mail empfangen, sonder nur welche versendet werden sollen (durch Scripte) installiere ich ein &#8222;Satelitten System&#8220;. Siehe hierzu auch: <a href=\"http:\/\/wiki.ubuntuusers.de\/Postfix#Grundkonfiguration\" target=\"_blank\">http:\/\/wiki.ubuntuusers.de\/Postfix#Grundkonfiguration<\/a>.<\/p>\n<p>Den SMTP-Relay-Server lasse ich leer.<\/p>\n<p>Achtung: Es ist wichtig, dass der hostname korrekt gesetzt ist (z.B. servername.domain.ch):<\/p>\n<pre class=\"lang:sh decode:true\">hostname -f<\/pre>\n<p>Dieser Hostname muss auch in der Postfix-Config (myhostname = servername.domain.ch) korrekt gesetzt sein:<\/p>\n<pre class=\"lang:sh decode:true \">sudo vi \/etc\/postfix\/main.cf<\/pre>\n<p>Nun sollte logwatch bereits funktionieren. Logs anschauen:<\/p>\n<pre class=\"lang:sh decode:true\">sudo logwatch | less<\/pre>\n<h2>Konfiguration<\/h2>\n<p>Die Basiskonfiguration sieht ein cache-Verzeichins \/var\/cache\/logwatch vor. Dieses wird aber durch die Paket-Installation nicht angelegt. Das m\u00fcssen wir manuell machen:<\/p>\n<pre class=\"lang:sh decode:true\">sudo mkdir \/var\/cache\/logwatch<\/pre>\n<p>Die Konfiguration sollte nicht im Installations-Verzeichnis (\/usr\/share\/logwatch) vorgenommen werden. Deswegen kopieren wird die default-config nach \/etc\/logwatch:<\/p>\n<pre class=\"lang:sh decode:true\">sudo cp \/usr\/share\/logwatch\/default.conf\/logwatch.conf \/etc\/logwatch\/conf\/<\/pre>\n<p>Nun k\u00f6nnen wir die Konfiguration durchf\u00fchren um beispielsweise die Mail-Adresse zu konfigurieren:<\/p>\n<pre class=\"lang:sh decode:true\">sudo vi \/etc\/logwatch\/conf\/logwatch.conf<\/pre>\n<h2>Tomcat<\/h2>\n<p>Wenn man tomcat, so wie ich, manuell installiert, kann man mit wenigen Konfig-Anpassungen Logwatch dazu \u00fcberreden auch den Tomcat-Service zu loggen:<\/p>\n<h3>Logfile<\/h3>\n<pre class=\"lang:sh decode:true\">vi \/etc\/logwatch\/conf\/logfiles\/tomcat.conf<\/pre>\n<p>Folgende Zeile hinzuf\u00fcgen<\/p>\n<pre class=\"lang:sh decode:true\">LogFile = &lt;pfad&gt;\/catalina.out\r\n<\/pre>\n<h3>Services<\/h3>\n<pre class=\"lang:sh decode:true\">vi \/etc\/logwatch\/conf\/services\/tomcat.conf\r\n<\/pre>\n<p>Folgende Zeilen hinzuf\u00fcgen<\/p>\n<pre class=\"lang:sh decode:true\">Title = \"Tomcat\"\r\nLogFile = tomcat<\/pre>\n<h3>Scripts<\/h3>\n<p>Das Script stammt von <a href=\"https:\/\/github.com\/vintikjeny\/logwatch\" target=\"_blank\">https:\/\/github.com\/vintikjeny\/logwatch<\/a><\/p>\n<pre class=\"lang:sh decode:true \">vi \/etc\/logwatch\/scripts\/services\/tomcat<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"lang:perl decode:true\">#!\/usr\/bin\/perl\r\n# Detail level\r\n$Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 5;\r\n# total number of errors in log file\r\nmy $Total_err = 0;\r\n# hash with only unique errors, where KEY - error message, VALUE - number of errors of this type\r\nmy %unique_err = ();\r\n# default value of error message\r\nmy $Message = \"\";\r\n# total number of unique errors\r\nmy $Unique_err_num;\r\n# main loop\r\nwhile (defined($line = &lt;STDIN&gt;)) {\r\n# use tomcat7 date regex to define start of new message (or end of previous)\r\nif ($line =~ \/^(.*\\s+[1-31]+.*(:+[0-9]+[0-9]+){2}\\s+(AM|PM)+)\/) {\r\n# if previous collected message - is Error message\r\nif ($Message =~ \/^(ERROR:|SEVERE:)\/) {\r\n# if it is a new message, then add this message to hash\r\nif (!exists $unique_err{$Message}) {\r\n$unique_err{$Message} = 0;\r\n}\r\n# increment messages counters\r\n$unique_err{ $Message } = $unique_err{$Message}+1;\r\n$Total_err++;\r\n}\r\n# clear variable from previous message\r\n$Message = \"\";\r\n# Ignorable strings (java stacktrace)\r\n} elsif($line =~ \/^(.+(at+\\s+)|(.*Hint:)|(.*Position:))|((\\s+more)$)\/) {\r\nnext;\r\n} else {\r\n# construct nessesary strings to message\r\n$Message = $Message.$line;\r\n}\r\n}\r\n# if log detail level is NOT LOW\r\nif ($Detail != 0) {\r\n# Print every error in file\r\nwhile ( my ($key, $value) = each(%unique_err) ) {\r\nchomp $key;\r\nprint \"Message: $key\\nCount: $value\\n\";\r\nprint \"-------------------------------\\n\";\r\n}\r\n}\r\n# get total number of unique errors in file\r\n$Unique_err_num = scalar keys %unique_err;\r\n# Print total result\r\nprint \"Unique errors: $Unique_err_num\\n\";\r\nprint \"Total num of Errors: $Total_err\\n\";<\/pre>\n<h2>Testen<\/h2>\n<p>Logwatch Auswertung erstellen und eine Mail versenden<\/p>\n<pre class=\"lang:sh decode:true\">sudo logwatch --output mail<\/pre>\n<p>Wenn kein Mail ankommt, lohnt sich ein Blick in das Log von Postfix<\/p>\n<pre class=\"lang:sh decode:true\">tail -n 1000 \/var\/log\/mail.log<\/pre>\n<h2>Verweise<\/h2>\n<ul>\n<li><a href=\"https:\/\/help.ubuntu.com\/community\/Logwatch\" target=\"_blank\">https:\/\/help.ubuntu.com\/community\/Logwatch<\/a><\/li>\n<li><a href=\"http:\/\/www.stellarcore.net\/logwatch\/tabs\/docs\/HOWTO-Customize-LogWatch.html\" target=\"_blank\">http:\/\/www.stellarcore.net\/logwatch\/tabs\/docs\/HOWTO-Customize-LogWatch.html<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/vintikjeny\/logwatch\" target=\"_blank\">https:\/\/github.com\/vintikjeny\/logwatch<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Jeder der einen Linux-Server betreibt, sollte sich ernsthaft mit dem Thema Sicherheit auseinandersetzen. Einen tollen Artikel zu diesem Thema habe ich hier gefunden.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[35,1],"tags":[15,16,18],"class_list":["post-457","post","type-post","status-publish","format-standard","hentry","category-java","category-ubuntu","tag-java","tag-linux-tools","tag-ssh"],"modified_by":"ralph","_links":{"self":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=457"}],"version-history":[{"count":24,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/457\/revisions"}],"predecessor-version":[{"id":623,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/457\/revisions\/623"}],"wp:attachment":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}