Quantcast
Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Ubuntu / Debian Server Sicherheit

Registriert
11. Juni 2010
Beiträge
4.080
Reaktionspunkte
2.847
Punkte
373
Hallo Zusammen,

da ich immer wieder PNs bzgl. meiner HowTo´s erhalte zu diversen Security Themen, habe ich mich dazu entschlossen eine Security Baseline als HowTo bereitzustellen.

Dieses HowTo soll Richtungsweisend zu dem Ziel führen, dass Ihr eure Homeserver, VPS, Rootserver absichern könnt. Vorallem dann, wenn Apache2 als Webserver zum Einsatz kommt.

Die Baseline umfasst die folgenden Punkte:
+ SSH Basic Security
+ Firewall
+ Schutz vor Missbrauch der Shared Services
+ Apache2 Security
+ DDoS Schutz
+ Rootkits
+ Intrusion Detection
+ Verhindern von IP Spoofing
+ Fail2Ban

++SSH BASIC SECURITY++
Das erste was ich persönlich nach einer Neuinstallation mache, ist es den SSH Port zu ändern.
Das können wir ganz einfach machen in dem wir folgendes tun, nachdem wir uns per SSH eingelogt haben auf dem Server:

Code:
sudo nano /etc/ssh/sshd_config
Anschließend bei Port einen anderen eintragen. Für dieses HowTo nutzen wir den Port 1337.
Das ist auch in der Firewall Konfiguration zu beachten!
Anschließend könnt Ihr die Datei mit STRG+O speichern und schließen. Nun noch den Dienst neustarten:
Code:
sudo systemctl reload ssh
oder
service sshd restart

Die offene Verbindung bleibt zwar noch aktiv, aber es bietet sich an anschließend per Putty ein e neue Verbindung zum neuen Port 1337 aufzubauen.

++FIREWALL++
Zur Einrichtung sollte mein HowTo genutzt werden. Alle weiteren Infos in meinem besagten HowTo
In diesem Fall handelt es sich um ein erweitertes Script für Zugriff auf Port 80 und 443 für SSL.

Code:
#!/bin/bash
sleep 5
iptables=`which iptables`
iptablesv6=`which ip6tables`
#User Definition mit Zugriffen auf spezielle Services
user="user.dyndns.org,deinedyn.homedns.com"

# wenn iptables nicht installiert abbrechen
test -f $iptables || exit 0

case "$1" in
start)
echo "Starte Firewall..."
# alle Regeln löschen
$iptables -t nat -F
$iptables -t filter -F
$iptables -X
#$iptablesv6 -t nat -F
$iptablesv6 -t filter -F
$iptablesv6 -X
$iptables -P INPUT DROP
$iptables -P FORWARD DROP
$iptablesv6 -P FORWARD DROP
$iptables -A INPUT -i lo -j ACCEPT
$iptables -A OUTPUT -o lo -j ACCEPT
$iptablesv6 -A INPUT -i lo -j ACCEPT
$iptablesv6 -A OUTPUT -o lo -j ACCEPT
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptablesv6 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#$iptablesv6 -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -P OUTPUT ACCEPT
$iptablesv6 -P OUTPUT ACCEPT

#Wenn euer Server per Ping erreichbar sein soll, dann bitte entsprechend die IP ändern und die # entfernen!
#Standardmäßig ist der Server nicht anpingbar!
#$iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -d 10.20.30.40 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$iptables -A OUTPUT -p icmp --icmp-type 0 -s 10.20.30.40 -d 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#SSH Zugriff
#SSH Zugriff für ALLE Standardmäßig aktiv
$iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 1337 -j ACCEPT
#ODER:
#Zugriff haben nur Clients die für spezielle Services in der Variable user hinterlegt sind (Vorher bitte die # vor der nächsten Zeile entfernen und obrigen Zugriff für Alle deaktivieren!)
#$iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED --source $user -p tcp --dport 22 -j ACCEPT

#Apache2 Webserver
$iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 80 -j ACCEPT
$iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 443 -j ACCEPT

#Oscam Webif Zugriff nicht beschränkt (Port ggf. anpassen!)
$iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 8888 -j ACCEPT

#Oscam Webif Zugriff beschränkt (Port ggf. anpassen!)
$iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED --source $user -p tcp --dport 8888 -j ACCEPT

#CS378x Share (Camd3 TCP) (Port ggf. anpassen und zum aktivieren des Zugriffs # entfernen!)
#$iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 33399 -j ACCEPT

#CCcam Share (Port ggf. anpassen und zum aktivieren des Zugriffs # entfernen!)
#$iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 22444 -j ACCEPT

#CS357x Share (Camd3 UDP) (Port ggf. anpassen und zum aktivieren des Zugriffs # entfernen!)
#$iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -p udp --dport 11002 -j ACCEPT

#Block APNIC LACNIC
#Hinweis: Blockiert Asien, Südamerika, Mittelamerika, beschränkt Russland bzw. Osteuropa!
APNIC=(
       "1.0.0.0/8"
       "14.0.0.0/8"
       "27.0.0.0/8"
       "36.0.0.0/8"
       "39.0.0.0/8"
       "42.0.0.0/8"
       "49.0.0.0/8"
       "58.0.0.0/8"
       "59.0.0.0/8"
       "60.0.0.0/8"
       "61.0.0.0/8"
       "101.0.0.0/8"
       "103.0.0.0/8"
       "106.0.0.0/8"
       "110.0.0.0/8"
       "111.0.0.0/8"
       "112.0.0.0/8"
       "113.0.0.0/8"
       "114.0.0.0/8"
       "115.0.0.0/8"
       "116.0.0.0/8"
       "117.0.0.0/8"
       "118.0.0.0/8"
       "119.0.0.0/8"
       "120.0.0.0/8"
       "121.0.0.0/8"
       "122.0.0.0/8"
       "123.0.0.0/8"
       "124.0.0.0/8"
       "125.0.0.0/8"
       "126.0.0.0/8"
       "175.0.0.0/8"
       "180.0.0.0/8"
       "182.0.0.0/8"
       "183.0.0.0/8"
       "202.0.0.0/8"
       "203.0.0.0/8"
       "210.0.0.0/8"
       "211.0.0.0/8"
       "218.0.0.0/8"
       "219.0.0.0/8"
       "220.0.0.0/8"
       "221.0.0.0/8"
       "222.0.0.0/8"
       "223.0.0.0/8"
       "43.0.0.0/8"
       "133.0.0.0/8"
       "150.0.0.0/8"
       "153.0.0.0/8"
       "163.0.0.0/8"
       "171.0.0.0/8"
       "177.0.0.0/8"
       "179.0.0.0/8"
       "181.0.0.0/8"
       "186.0.0.0/8"
       "187.0.0.0/8"
       "189.0.0.0/8"
       "190.0.0.0/8"
       "200.0.0.0/8"
       "201.0.0.0/8"
       )
for blockapnic in ${APNIC[*]}
do
       $iptables -A INPUT --source $blockapnic -j DROP
done

#$iptables -N LOGGING
#$iptables -A INPUT -j LOGGING
#$iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
#$iptables -A LOGGING -j DROP
#$iptables -A LOGGING -j REJECT

#$iptables -A INPUT -i eth0 -j REJECT
;;
stop)
echo "Stoppe Firewall..."
$iptables -t nat -F
$iptables -t filter -F
$iptables -X
$iptables -P INPUT ACCEPT
$iptables -P OUTPUT ACCEPT
$iptables -P FORWARD ACCEPT
$iptablesv6 -t nat -F
$iptablesv6 -t filter -F
$iptablesv6 -X
$iptablesv6 -P INPUT ACCEPT
$iptablesv6 -P OUTPUT ACCEPT
$iptablesv6 -P FORWARD ACCEPT
;;
restart|reload|force-reload)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/firewall (start|stop)"
exit 1
#;;
esac
exit 0

++SHARED SERVICES++
Die Shared Services können genutzt werden, um laufende Dienste anzugreifen.
Um das zu verhindern, bearbeiten wir die /etc/fstab:
Code:
sudo nano /etc/fstab

Anschließend fügen wir folgende Zeile hinzu:
Code:
tmpfs     /run/shm     tmpfs     defaults,noexec,nosuid     0     0

++APACHE2 SECURITY++
Ich möchte mich nicht lang mit Zertifikaten hierbei aufhalten, daher verweise ich auf meine Letsencrypt HowTo´s!
HowTo - Gültige SSL Zertifikate mit Letsencrypt
HowTo - Einsetzen von SSL Zertifikaten mit Apache2

Zuerst deaktivieren wir SSLv3, welches Unsicher ist und Hochriskant!
Code:
sudo nano /etc/apache2/mods-available/ssl.conf
Suchen diesen Eintrag: SSLProtocol all -SSLv3 und ändern den Eintrag wie folgt:
Code:
SSLProtocol all -SSLv2 -SSLv3
Anschließend speichern und Apache2 neustarten
Code:
systemctl restart apache2
oder
service apache2 restart
Sofern Ihr die Apache Module PHP5 oder PHP7.0 installiert habt, müsst Ihr das php.ini File bearbeiten.
Code:
sudo nano /etc/php5/apache2/php.ini
Und diese Zeilen hinzufügen bzw. anpassen
Code:
disable_functions = exec,system,shell_exec,passthru
register_globals = Off
expose_php = Off
display_errors = Off
track_errors = Off
html_errors = Off
magic_quotes_gpc = Off
mail.add_x_header = Off
session.name = NEWSESSID
Anschließend
Code:
systemctl restart apache2
oder
service apache2 restart
Apache2 neigt wie soviele Applikationen für Linux dazu, heraus zu posaunen was es ist.
Sprich es tauchen DNS Namen und Versionen bei Fehlermeldungen auf. Um dieses zu verhindern, machen wir den Apache2 quasi Taubstumm und Blind nach außen.

Code:
sudo nano /etc/apache2/conf-available/security.conf
Hinzufügen bzw. editieren der folgenden Zeilen:
Code:
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Header unset ETag
Header always unset X-Powered-By
FileETag None

Jetzt erweitern wir unseren Apache2 Webserver um eine Web Application Firewall, kurz WAF.
Letztendlich unterbindet es SQL Injection, Cross Site Scripting, Trojaner, Falsche User Agents, Hijacking von aktiven Session und viele Exploits.

Code:
sudo apt-get install libapache2-modsecurity
mv /etc/modsecurity/modsecurity.conf{-recommended,}
systemctl reload apache2
Das Audit Log findet Ihr hier: /var/log/apache2/modsec_audit.log
Nun muss Modsecurity noch konfiguriert werden:
Code:
sudo nano /etc/modsecurity/modsecurity.conf
Diese Zeile suchen: SecRuleEngine DetectionOnly und DetectionOnly auf On abändern, damit die SecRuleEngine aktiv ist.

Anschließend den Eintrag SecResponseBodyAccess suchen und auf Off ändern.
Abschließend den Apache2 neustarten.

Zu guter letzt fehlt noch OWASP, welches ModSecurity um ein Core Rule Set erweitert (CSR) und damit die Fähigkeiten zum verhindern und erkennen von Angriffen erweitert.

Code:
sudo rm -rf /usr/share/modsecurity-crs
sudo apt-get install -y git
cd /opt
sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/share/modsecurity-crs
sudo cp /usr/share/modsecurity-crs/modsecurity_crs_10_setup.conf.example /usr/share/modsecurity-crs/modsecurity_crs_10_setup.conf
cd /usr/share/modsecurity-crs
sudo ln -s ../modsecurity_crs_10_setup.conf activated_rules/modsecurity_crs_10_setup.conf
sudo for f in `ls base_rules`; do sudo ln -s ../base_rules/$f activated_rules/$f; done
cd /etc/modsecurity
sudo cp modsecurity.conf-recommended modsecurity.conf
sudo nano /etc/apache2/mods-available/security2.conf
Hier müsst Ihr folgendes setzen:
Code:
<IfModule security2_module>
        # Default Debian dir for modsecurity's persistent data
        SecDataDir /var/cache/modsecurity

        # Include all the *.conf files in /etc/modsecurity.
        # Keeping your local configuration in that directory
        # will allow for an easy upgrade of THIS file and
        # make your life easier
        IncludeOptional /etc/modsecurity/*.conf
        IncludeOptional /usr/share/modsecurity-crs/activated_rules/*.conf
</IfModule>
Abschließend Apache2 restarten

++SCHUTZ VOR DDoS++
Es gibt keinen 100%igen Schutz vor einem DDoS, ich spreche da aus Erfahrung.
Aber wir können vorbeugen, indem wir ModEvasive auf unserem Webserver installieren.
Code:
sudo apt-get install libapache2-mod-evasive
sudo apachectl -M | grep evasive
Wenn ModEvasive aktiv ist, bekommtz Ihr diese Ausgabe:
Code:
evasive20_module (shared)
Nun müssen wir ModEvasive noch anpassen...
Code:
sudo nano /etc/apache2/mods-enabled/evasive.conf
Wir entfernen die # an den folgenden Zeilen:
Code:
DOSHashTableSize    3097
DOSPageCount        2
DOSSiteCount        50
DOSPageInterval     1
DOSSiteInterval     1
DOSBlockingPeriod   10 
DOSEmailNotify      mail@yourdomain.com
DOSLogDir           "/var/log/apache2/"
Anschließend den Apache2 neustarten.

++ROOTKITS++
Man sollte seinen Server regelmäßig nach Rootkits scannen und diese dann auch beseitigen, bevor ein Schaden angerichtet wird.
Code:
sudo apt-get install rkhunter chkrootkit
sudo chkrootkit
sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check

++INTRUSION DETECTION (IPS)++
PSAD erkennt versuchte und aktive Einbrüche in euer System durch die Überwachung der Logfiles, insbesondere der IPTABLES Rules.
Code:
sudo apt-get install psad
sudo nano/etc/psad/psad.conf
Tragt dort euere Emailadresse ein und aktiviert ENABLE_AUTO_IDS und ENABLE_AUTO_IDS_EMAILS

++VERHINDERN VON IP-SPOOFING++

So verhindert Ihr das versenden von gefälschten IP-Adressen
Code:
sudo nano /etc/host.conf
Hinzufügen bzw. bearbeiten:
Code:
order bind,hosts
nospoof on

++FAIL2BAN / DENYHOSTs++
Mit DenyHosts blockiert Angriffe auf SSH.
Code:
sudo apt-get install denyhosts
sudo nano /etc/denyhosts.conf
Die denyhosts.conf entsprechend eurer Anforderung anpassen:
Code:
ADMIN_EMAIL = root@localhost #Oder halt eure Emailadresse
SMTP_HOST = localhost
SMTP_PORT = 25
#SMTP_USERNAME=foo
#SMTP_PASSWORD=bar
SMTP_FROM = DenyHosts nobody@localhost
#SYSLOG_REPORT=YES

Fail2Ban überwacht unter anderen die Logs von SSH, Apache, Courier, FTP und einiger mehr.
Es bietet sich hier in jedem Fall an SSH zu überwachen, ggf. auch FTP und Port 80 und 443 für den Apache, falls dort Anmeldungen erforderlich sind.

Ich persönliche nutze den Fail2Ban nur für SSH, da ich SSL Zugriffe sowieso logge.
Code:
sudo apt-get install fail2ban
sudo nano /etc/fail2ban/jail.conf
Hier setzt Ihr die Knast Konfiguration für SSH fest...
Code:
[sshd]

enabled  = true
port     =  1337 #oder eben euer Port
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
Durch hinzufügen von destemail = root@localhost könnt Ihr euch Systemmails zukommen lassen, falls eine Verbindung im Knast gelandet ist. Es sind maximal 3 Versuche möglich!

WICHTIG:
Ihr könnt euch gern eigene Configs für den Jail anlegen, aber nutzt das NIEMALS für OScam.
Nach drei Anmeldungen ist dann Feierabend für die Client Verbindungen!

So...das war mein Wort zum Dienstag, happy absichern!
 
Zurück
Oben