Linux Server Buch

online

PC-Selbstbauer(in)
Vor etwa einem Jahr hatte ich einen Root Server und ich wurde hier im Forum überzeugt das ich noch zu wenig wissen darin besaß. Doch nun möchte ich mich richtig hart dahinter klemmen um dann selber einen Root leiten zu können. Es ist mir relativ egal ab ich dafür sehr viel lesen muss den wenn ich was möchte muss ich auch was dafür tun. Könnt ihr mir ein gutes Buch empfehlen was am besten für Einsteiger gut ist?

Das Buch sollte von 2011 bzw. 2012 sein (aktuell)
Es sollte am besten mehr um Debian 6 gehen
Und es sollten wichtige Dinge wie z.B.: Server absichern vorhanden sein. Ich hoffe das ist nicht zu viel verlangt. Wäre euch sehr dankbar wenn ihr mir was empfehlen könntet.

Mfg
 
Ich rate dir, zunächst auf ein Buch zu verzichten und dir stattdessen eine VM aufzusetzen, in der du das alles mal durchspielen kannst, ohne ein Risiko einzugehen. Wenn du solche Dinge praktisch übst, bleiben die viel besser hängen, als wenn du irgendwelche Anleitungen abtippst und durcharbeitest.
Ich würde wie folgt an die Sache herangehen:
1) eine VM aufsetzen (beispielsweise mit VirtualBox)
2) Debian installieren
3) via SSH auf das System zugreifen (unter Windows ist Putty der Client der Wahl)
4) das System updaten
5) root-Login via SSH deaktivieren, am besten noch zusätzlich die passwortbasierte Anmeldung deaktivieren und keyfilebasierte Anmeldung einschalten (Vorsicht, dass du dich hier nicht selber aussperrst)
6) nicht benötigte Software deinstallieren und nicht benötigte Dienste zumindest abschalten

Was danach kommt, hängt letztendlich davon ab, was du mit dem Rootserver später anstellen möchtest. Generell sollte man sich, wenn man sich irgendwie mit der Absicherung eines Server auseinandersetzt, mit iptables beschäftigen (iptables ist ein Frontend für die netfilter-Firewall unter Linux). Wenn ich einen Server aufsetze, ist das Einbinden eines iptables-Skripts meist das erste, was ich mache. Danach kommen dann Geschichten wie Webserver, Mailserver, Logging und so weiter und so fort.
Wenn die Firewall läuft und nur benötigte Dienste laufen, ist deine Kiste schonmal ordentlich abgesichert, alles danach ist Feintuning (automatische Log-Analyse und gegebenenfalls Alarmierung per Mail (phpsyslog-ng zur Auswertung via Browser, zur Analyse bietet sich tenshi an), regelmäßige Überprüfung der Integrität des Systems (beispielsweise mit rkhunter, chkrootkit, aide).

Meine Erfahrung ist, dass man so gut wie alles, was man in einem Buch zur jeweiligen Materie findet, auch online nachlesen kann. Erst wenn man wirklich tiefer einsteigen will, sollte man in Erwägung ziehen, sich entsprechende Literatur zu besorgen - wenn das der Fall ist, kannst du ja nochmal hier nachfragen. Das gilt natürlich auch für sonstige Fragen, die du zweifelsohne beim Einrichten haben wirst, das Administrieren eines Servers ist schließlich keine triviale Angelegenheit.

MfG Jimini
 
Hey,

Also da stimme ich Jimini voll und ganz zu. Auf das Buch kannst du verzichten. Eine VM ist immer eine gute Idee... da kannst du nichts falsch machen.

Da du von Servern sprichst, schätze ich mal, dass du interessiert mit dem Umgang der Shell bist. Zuerst solltest du einmal versuchen mit Debian umzugehen. Das heißt wie verhält sich eine Console? Wie benutze ich sie?

Das heißt du wirst zuerst auf die Commands cd, ls, cat, apt-get, usw. stoßen. Auch mit dem Rechtesystem solltest du dich vertraut machen und vorallem der Aufbau des Systems. Wenn du einmal in das ganze Spiel reingekommen bist, kannst du dich in andere Themengebiete einarbeiten. (Bei roots die am Netz hängen solltest du dich auf jeden Fall mit iptables (Firewall) auseinandersetzten!)

Das Internet unterstützt dich dabei ganz gut.

Erst wenn du die Grundlagen beherrscht, würde ich dir empfehlen dich tiefer in die Materie vorzuarbeiten. Aber bis dahin finde ich Bücher überflüssig.

In einer VM ist die Login Variante per ssh-keys meiner Meinung Überflüssig. Aber für einen root am Netz auf jeden Fall zu Empfehlen. (Auch dazu findest du Anleitungen im Internet. Login per ssh-keys ist nicht anderes als eine Authentifizierung per key anstatt des normalen Passworts. Das heißt du erstellst für einen User einen key und übermittelst diesen Key als File. Diesen Key gut aufbewahren und niemals teilen!)

Mit freundlichen Grüßen,
Frezy

PS: Die Administration eines roots kostet Zeit! Also das Einrichten ist der kleinste Teil der Arbeit. Du ersparst dir eine Menge Zeit wenn du scripten/programmieren kannst!
 
Erstmal Danke für die Hilfe werde mir jetzt erstmal VirtualBox ziehen und Debian versuchen zu installieren. Und Scripten/programmieren kann ich leider nicht ist das sehr schwer oder geht das noch ? Und kann mir jemand vll. ein kleines Script zeigen das ich erstmal genau weiß wie so was aufgebaut ist?

Danke schon mal

Mfg
 
Erstmal Danke für die Hilfe werde mir jetzt erstmal VirtualBox ziehen und Debian versuchen zu installieren. Und Scripten/programmieren kann ich leider nicht ist das sehr schwer oder geht das noch ? Und kann mir jemand vll. ein kleines Script zeigen das ich erstmal genau weiß wie so was aufgebaut ist?
Danke schon mal
Mfg
Bashscripts sind eigentlich keine große Sache, da vor allem die Syntax sehr logisch und verständlich ist. Hier mal ein paar Beispiele:
Eins meiner ersten Scripts war das folgende:
Code:
#!/bin/bash
# Letzte Änderung: 2010-10-23

DATUM=`date +%Y-%m-%d`
# Wohin werden die Ausgaben geschrieben?
report="/var/scripts/report"

echo "########################################"         >  $report
echo "Status von `hostname` am $DATUM   "       >> $report
echo "########################################" >> $report

### allgemeine Infos
        echo "========================================" >> $report
        echo ":: Systemdaten"                           >> $report
        echo "========================================" >> $report
        echo ""                                         >> $report
        echo "Uptime: `uptime | cut -d , -f -2 | cut -d p -f 2-`"                               >> $report
        echo ""                                         >> $report
        echo "Externe IP: `ip addr show eth0 | grep 'inet ' | cut -d t -f2 | cut -d / -f1 | cut -b 2- | cut -d ' ' -f 1`"                               >> $report
        echo ""                                         >> $report
        echo "Mounts:"                                  >> $report
        df -h | grep /dev/sda                           >> $report
        df -h | grep tmpfs                              >> $report
#       echo ""                                         >> $report
#       echo "Temperatur der CPU: `sensors`"            >> $report      #lm_sensors momentan nicht eingerichtet!
        echo ""                                         >> $report
        echo "Temperatur der Festplatte: `hddtemp -n /dev/sda`°C"       >> $report
        echo ""                                         >> $report
        echo "Laufende Dienste:"                        >> $report
        rc-status -nc                                   >> $report
        echo ""                                         >> $report

# UPDATES?
        echo "========================================" >> $report
        echo ":: Neue Pakete"                           >> $report
        echo "========================================" >> $report
        echo ""                                         >> $report
        emerge --color n -puND world | grep ebuild      >> $report
        echo ""                                         >> $report

# VIRENSCAN
#       echo "========================================" >> $report
#       echo ":: CLAMAV"                                >> $report
#       echo "========================================" >> $report
#       echo ""                                         >> $report
#       freshclam                                       >> $report
#       clamscan -r --infected /* --exclude-dir=/dev --exclude-dir=/proc --exclude-dir=/sys             >> $report
#       echo ""                                         >> $report

# ROOTKIT-CHECK
        echo "========================================" >> $report
        echo ":: ROOTKIT-CHECK"                         >> $report
        echo "========================================" >> $report
        rkhunter -c -q --nocolors --summary --sk --lang de
        tail -n15 /var/log/rkhunter.log                 >> $report
        chkrootkit -n -q                                >> $report
        echo ""                                         >> $report

# GLSA-CHECK
        echo "========================================" >> $report
        echo ":: GLSA-CHECK"                            >> $report
        echo "========================================" >> $report
        echo ""                                         >> $report
        echo "Zutreffende GLSAs?"                       >> $report
        glsa-check -nt all                              >> $report
        echo ""                                         >> $report

# AIDE
        echo "========================================" >> $report
        echo ":: AIDE"                                  >> $report
        echo "========================================" >> $report
        aide                                            >> $report

# FAIL2BAN
        echo "========================================" >> $report
        echo ":: FAIL2BAN"                              >> $report
        echo "========================================" >> $report
        echo ""                                         >> $report
        fail2ban-client status ssh-iptables             >> $report
        echo ""                                         >> $report
        fail2ban-client status apache-badbots           >> $report
        echo ""                                         >> $report

# FEHLERMELDUNGEN
        echo "========================================" >> $report
        echo ":: SYSLOG"                                >> $report
        echo "========================================" >> $report
        echo "Fehler:"                                  >> $report
        cat /tmp/grep_err                               >> $report
        rm /tmp/grep_err
        echo ""                                         >> $report
        echo "Warnungen:"                               >> $report
        cat /tmp/grep_warn                              >> $report
        echo ""                                         >> $report
        rm /tmp/grep_warn

# IPTABLES
        echo "========================================" >> $report
        echo ":: IPTABLES-LOG"                          >> $report
        echo "Gespoofte Pakete"                         >> $report
        cat /tmp/grep_iptables_spoof                    >> $report
        echo "Gedroppter Forward-Traffic"               >> $report
        cat /tmp/grep_iptables_forward                  >> $report
        echo "Gedroppter Output:"                       >> $report
        cat /tmp/grep_iptables_output                   >> $report
        echo "Gedroppter Traffic an eth1:"              >> $report
        cat /tmp/grep_iptables_spoof                    >> $report
#       echo "Gedroppter Input"                         >> $report
#       cat /tmp/grep_iptables_input                    >> $report
        rm /tmp/grep_iptables
        echo ""                                         >> $report

# BACKUP
        echo "========================================" >> $report
        echo ":: BACKUP"                                >> $report
        echo "========================================" >> $report
        echo ""                                         >> $report
        rsync -av --delete --stats --exclude=/dev/* --exclude=/proc/* --exclude=/sys/* --exclude=/usr/portage/* --exclude=/var/run/* --exclude=/var/spool / backup@atlas:/home/share/backup/Aleph/incremental/ >> $report

echo "========================================"         >> $report
echo "Beenden der Cronjobs um `date +%H:%M:%S`"         >> $report
echo "========================================"         >> $report
cat $report | mail -s "[Aleph] Status" root
exit 0
Ein Backupscript, was jede Nacht auf dem Fileserver ausgeführt wird:
Code:
#!/bin/bash
DATUM=`date +%Y-%m-%d`

# Löschen alter Backups
for i in `find /home/backup/Aleph/ -maxdepth 1 -mtime +7 -print`; do rm -rf $i;done
for i in `find /home/backup/Atlas/ -maxdepth 1 -mtime +7 -print`; do rm -rf $i;done
for i in `find /home/backup/Profile/jimini/ -maxdepth 1 -mtime +7 -print`; do rm -rf $i;done
for i in `find /home/backup/Profile/laura/ -maxdepth 1 -mtime +7 -print`; do rm -rf $i;done

# Backup von Aleph
cd /home/backup/Aleph/ && tar -C /home/share/backup/tmp/ -czpf Aleph-$DATUM.tar.gzAleph

# Backup von Atlas
rsync -a --delete --exclude=/dev/* --exclude=/home/jimini/Profile/* --exclude=/home/laura/Profile/* --exclude=/home/share/* --exclude=/proc/* --exclude=/sys/* --exclude=/var/run/* --exclude=/tmp/* / /home/backup/tmp/Atlas/
cd /home/backup/Atlas/ && tar -C /home/backup/tmp/ -czpf Atlas-$DATUM.tar.gzAtlas

# Backup der Profile
rsync -a --delete /home/jimini/Profile/ /home/backup/tmp/Profile/jimini/
tar -Pczpf /home/backup/Profile/jimini/$DATUM.tar.gz /home/backup/tmp/Profile/jimini
rsync -a --delete /home/user/Profile/ /home/backup/tmp/Profile/user/
tar -Pczpf /home/backup/Profile/user/$DATUM.tar.gz /home/backup/tmp/Profile/user

# Backup von /home/share/public
rsync -a --delete /home/public/ /home/backup/public/
exit 0
Ein Script, das bei mir auf die Befehle "halt" und "reboot" reagiert und so verhindert, dass ich versehentlich die falsche Kiste herunterfahre bzw. neustarte:
Code:
#!/bin/bash
echo -e "\033[37mDen Rechner\033[1;31m `hostname`\033[37m wirklich herunterfahren?\033[0m (halt/reboot/n)"
read eingabe
case "$eingabe" in
        halt)   echo -e "\033[1;31m`hostname`\033[37m wird in 10 Sekunden neugestartet..."
                echo "(Abbruch mit Strg+C)"
                for i in 10 9 8 7 6 5 4 3 2 1 ; do
                echo -en "\033[1;31m$i\033[0m " && sleep 1
                done
                echo
                echo -e "\033[1;31m`hostname`\033[0m wird heruntergefahren."
                shutdown -h now;;
        reboot) echo -e "\033[1;31m`hostname`\033[37m wird in 10 Sekunden neugestartet..."
                echo "(Abbruch mit Strg+C)"
                for i in 10 9 8 7 6 5 4 3 2 1 ; do
                echo -en "\033[1;31m$i\033[0m " && sleep 1
                done
                echo
                echo -e "\033[1;31m`hostname`\033[0m wird neugestartet."
                shutdown -r now;;
        *) echo "Abbruch.";;
esac
exit 0
Das folgende Script sorgt auf meinem Rechner dafür, dass die Daten mittels rsync auf dem Fileserver gesichert werden:
Code:
#!/bin/bash
rsync -av --delete --stats --exclude=/dev/* --exclude=/home/jimini/.VirtualBox/* --exclude=/proc/* --exclude=/sys/* --exclude=/usr/portage/* --exclude=/var/run/* --exclude=/tmp/* --exclude=/mnt/cdrom/*  / root@atlas:/home/share/backup/Deimos/
exit 0
Man kann natürlich auch statt eines mehrzeiligen Scripts einen Einzeiler verwenden. Dieser hier prüft die Integrität eines Festplattenarrays:
Code:
if [ "$( sudo mdadm --detail /dev/md1 | grep "degraded" )" ]; then echo "1"; else echo "0"; fi
Man wird, wenn man Linux regelmäßig nutzt, irgendwann feststellen, dass sich bestimmte Dinge immer wieder wiederholen, wie beispielsweise das dritte Script zeigt. Es wäre unglaublich nervig, jedes Mal wieder von Hand den langen Befehl einzugeben - sowas gilt gerade für Serversysteme, bei denen die Administration nach der Einrichtung nur noch Routine ist. Die Kunst ist also gerade da, die Dinge, die unbeobachtet ausgeführt werden können, einfach zu automatisieren oder zumindest komfortabler zu machen. Ein Beispiel hierfür ist das erste Script: ich habe einfach Befehle hintereinander gereiht, um das nicht jeden Tag von Hand machen zu müssen, ich musste nur noch in den Posteingang schauen und hatte dort dann schon die wichtigsten Daten und Infos vorliegen. Irgendwann habe ich mir auch mal aus Spaß ein Script geschrieben, das die recht aufwändige Gentoo-Installation nahezu automatisierte.
Falls du also eine Scriptlösung suchst, wirst du zum einen sehr schnell bei Google fündig, zum anderen kannst du natürlich auch einfach hier nachfragen. Das gilt auch für iptables-Scripts, die für Einsteiger immer wieder problematisch sind.

MfG Jimini

Nachtrag: hier noch das iptables-Script von meinem Router:
Code:
#!/bin/sh                                                                                                                                                                                                                     
#
# Letztes Update: 2012-01-27    
#                                                                                                                                                                                       
############################################################################################                                                                
####                                                                                    ####
####                            Kernel-Optionen setzen                                  ####        
####                                                                                    ####
############################################################################################                                                                

### Antispoofing
echo "1" > /proc/sys/net/ipv4/conf/all/arp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter      

### martian packets loggen?   
echo "0" > /proc/sys/net/ipv4/conf/all/log_martians         

### ICMP Redirects verweigern     
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects

### Source Routing deaktivieren     
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route              

### ICMP Broadcast Echos ignorieren       
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts               

### Bogus ICMP-Errors ignorieren    
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses                 

### Forwarding aktivieren 
echo "1" > /proc/sys/net/ipv4/ip_forward      

#############################################################################################                                                              
#####                                                                                   ##### 
#####                           Generelle Einstellungen                                 #####         
#####                                                                                   ##### 
#############################################################################################                                                              

### Vorhandene Tabellen loeschen
iptables -F
iptables -t nat -F
iptables -t mangle -F

lan="eth1"
wan="eth0"
intern=10.0.0.0/24
clients=10.0.0.3-10.0.0.20
extip="`ip addr show eth0 | grep 'inet ' | cut -d t -f2 | cut -d / -f1 | cut -b 2- | cut -d ' ' -f 1`"

#############################################################################################
#####                                                                                   #####
#####                                  Filterregeln                                     #####
#####                                                                                   #####
#############################################################################################

### Default-Policy: alles droppen
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

### Default-Policy: alles natten, erst beim Filtern verwerfen
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT 

### Akzeptiere Verbindungsaufbauten aus dem LAN
iptables -A FORWARD -s $intern -i $lan -o $wan -j ACCEPT

### Akzeptiere lokalen Traffic
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

### Akzeptiere alle Pakete, die zu einer aufgebauten Verbindung gehoeren
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

### Alle Pakete bei der Weiterleitung nach aussen maskieren
iptables -t nat -A POSTROUTING -o $wan -j MASQUERADE

### CLAMAV
iptables -A OUTPUT -m owner --uid-owner 109 -p tcp --dport 80 -j ACCEPT

### DCC
iptables -A FORWARD -i $wan -p tcp -m multiport --dports 5000:5010 -m state --state NEW -j ACCEPT

### DDCLIENT
iptables -A OUTPUT -o $wan -p tcp --dport 80 -m owner --uid-owner 102 -m state --state NEW -j ACCEPT

### DHCP
iptables -A INPUT -i $lan -p udp --dport 67 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $wan -d 83.169.186.130 -p udp --dport 67 -m state --state NEW -j ACCEPT
iptables -A INPUT -i $wan -p udp --dport 68 -j REJECT
iptables -A OUTPUT -o $lan -d $intern -p udp --dport 68 -m state --state NEW -j ACCEPT

### DNS
iptables -A INPUT -i $lan -s $intern -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -d $intern,62.141.58.13,57.118.100.175,213.73.91.35 -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -d $intern,62.141.58.13,57.118.100.175,213.73.91.35 -p udp --dport 53 -j ACCEPT

### FTP
iptables -A OUTPUT -p tcp -d 130.133.110.66 --dport 21 -m state --state NEW -j ACCEPT

### HTTP
iptables -A FORWARD -i $wan -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i $wan -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80
iptables -A INPUT -p tcp --sport 80 -m state --state NEW -j REJECT
# REGEL FUER SQUID
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

### HTTPS
iptables -A FORWARD -i $wan -p tcp --dport 443 -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i $wan -p tcp --dport 443 -j DNAT --to-destination 10.0.0.2:443

### ICMP
iptables -A INPUT -p icmp -s $intern -m state --state NEW -j ACCEPT
iptables -A INPUT -p icmp ! -s $intern -j DROP
iptables -A OUTPUT -p icmp -j REJECT

### IMAP
iptables -A FORWARD -i $wan -p tcp --dport 993 -m state --state NEW -j ACCEPT
iptables -t nat -I PREROUTING -i $wan -p tcp --dport 993 -j DNAT --to-destination 10.0.0.2:993

### IRC
iptables -A FORWARD -i $wan -p tcp --dport 6667 -m state --state NEW -j ACCEPT
iptables -t nat -I PREROUTING -i $wan -p tcp --dport 6667 -j DNAT --to-destination 10.0.0.2:6667
iptables -A FORWARD -i $wan -p tcp --dport 6668 -m state --state NEW -j ACCEPT
iptables -t nat -I PREROUTING -i $wan -p tcp --dport 6668 -j DNAT --to-destination 10.0.0.2:6668

### JABBER
iptables -A FORWARD -i $wan -p tcp --dport 5222 -m state --state NEW -j ACCEPT
iptables -t nat -I PREROUTING -i $wan -p tcp --dport 5222 -j DNAT --to-destination 10.0.0.2:5222
iptables -A FORWARD -i $wan -p tcp --sport 5222 -m state --state NEW -j ACCEPT
iptables -t nat -I PREROUTING -i $wan -p tcp --sport 5222 -j DNAT --to-destination 10.0.0.2
iptables -A FORWARD -i $wan -p tcp --dport 5223 -m state --state NEW -j ACCEPT
iptables -t nat -I PREROUTING -i $wan -p tcp --dport 5223 -j DNAT --to-destination 10.0.0.2:5223
iptables -A FORWARD -i $wan -p tcp --dport 5269 -m state --state NEW -j ACCEPT
iptables -t nat -I PREROUTING -i $wan -p tcp --dport 5269 -j DNAT --to-destination 10.0.0.2:5269

### MPD
iptables -A INPUT -i $lan -s $intern -p tcp --dport 6600 -m state --state NEW -j ACCEPT
iptables -A INPUT -i !$wan -p tcp --dport 6600 -m state --state NEW -j ACCEPT

### MPDSCRIBBLE
iptables -A OUTPUT -p tcp --dport 80 -d 195.24.232.205 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -d 195.24.232.207 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -d 195.24.232.208 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -d 195.24.233.53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -d 195.24.233.57 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -d 195.24.233.58 -j ACCEPT

### NFS
iptables -A OUTPUT -p tcp -d 10.0.0.2 --dport 111 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp -d 10.0.0.2 --dport 111 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.0.2 --dport 2049 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp -d 10.0.0.2 --dport 2049 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.0.2 --dport 4000:4003 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp -d 10.0.0.2 --dport 4000:4003 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.0.2 --dport 4040 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp -d 10.0.0.2 --dport 4040 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.0.2 --dport 55407 -m state --state NEW -j ACCEPT

### NTP
iptables -A INPUT -s $intern -p udp --dport 123 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -d 134.76.249.201,134.76.249.102,134.76.10.46 -p udp --dport 123 -m state --state NEW -j ACCEPT

### RSYNC
iptables -A OUTPUT -o $lan -p tcp -d 10.0.0.2 --dport 873 -m state --state NEW -j ACCEPT

### SQUID
iptables -t nat -A PREROUTING -i $lan -s $intern -p tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -A INPUT -i $lan -s $intern -p tcp --dport 3128 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3128 -j ACCEPT

### SSH (von aussen Redirect auf 22)
iptables -t nat -A PREROUTING -s $intern -d 10.0.0.1 -p tcp --dport 22 -j DNAT --to 10.0.0.1:10101
iptables -t nat -A PREROUTING -s 134.76.18.15 -p tcp --dport 22 -j DNAT --to 10.0.0.1:10101
iptables -t nat -A PREROUTING -s 134.76.84.167 -p tcp --dport 22 -j DNAT --to 10.0.0.1:10101
iptables -A INPUT -p tcp --dport 10101 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -d $intern -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -i $wan ! -s $intern -p tcp --dport 22 -j REJECT
iptables -A INPUT -p tcp --dport 10101 -j ACCEPT

### SYSLOG-NG
iptables -A OUTPUT -o $lan -p tcp -d 10.0.0.2 --dport 514 -m state --state NEW -j ACCEPT

### UPTIME
iptables -A OUTPUT -p tcp -d 85.214.204.210 --dport 80 -m state --state NEW -j ACCEPT

### WHOIS
#iptables -A OUTPUT -p tcp --dport 43 -j ACCEPT

### ZABBIX
iptables -A INPUT -i $lan -s 10.0.0.2 -p tcp --dport 10050 -j ACCEPT
iptables -A OUTPUT -o $lan -d 10.0.0.2 -p tcp --dport 10051 -j ACCEPT

#############################################################################################
#####                                                                                   #####
#####                                   Logging                                         #####
#####                                                                                   #####
#############################################################################################

### gespoofte Pakete des LAN
iptables -A INPUT ! -i $lan -s $intern -j LOG --log-prefix "SPOOFING eth1: " --log-level=4
iptables -A FORWARD ! -i $lan -s $intern -j LOG --log-prefix "SPOOFING eth1: " --log-level=4

### gespoofter lokaler Traffic
iptables -A INPUT ! -i lo -s 127.0.0.1 -j LOG --log-prefix "SPOOFING lo: " --log-level=4
iptables -A FORWARD ! -i lo -s 127.0.0.1 -j LOG --log-prefix "SPOOFING lo: " --log-level=4

### gespoofter Traffic von aussen
iptables -A INPUT ! -i $wan ! -s $intern -j LOG --log-prefix "SPOOFING eth0: " --log-level=4
iptables -A FORWARD ! -i $wan ! -s $intern -j LOG --log-prefix "SPOOFING eth0: " --log-level=4

#############################################################################################
#####                                                                                   #####
#####                                   REJECTS                                         #####
#####                                                                                   #####
#############################################################################################

### SPOOFING-REJECTS
iptables -A INPUT ! -i $lan -s $intern -j REJECT
iptables -A FORWARD ! -i $lan -s $intern -j REJECT
iptables -A INPUT ! -i lo -s 127.0.0.1 -j REJECT
iptables -A FORWARD ! -i lo -s 127.0.0,1 -j REJECT
iptables -A INPUT ! -i $wan -s $extip -j REJECT
iptables -A FORWARD ! -i $wan -s $extip -j REJECT

### Alles andere schliesslich loggen und verwerfen
iptables -A FORWARD -j LOG --log-prefix "REJECTED_FORWARD: " --log-level=5
iptables -A FORWARD -j REJECT
iptables -A OUTPUT -j LOG --log-prefix "REJECTED_OUTPUT: " --log-level=5
iptables -A OUTPUT -j REJECT
iptables -A INPUT -j LOG --log-prefix "REJECTED_INPUT: " --log-level=5
iptables -A INPUT -j REJECT

#############################################################################################
#####                                                                                   #####
#####                                   Traffic Shaping                                 #####
#####                                                                                   #####
#############################################################################################

tc qdisc del dev $wan root

# maximaler Upstream
CEIL=6000

# Bandbreite im HTB-Tree aufteilen, nicht zugewiesener Traffic wird Class 15 zugewiesen
tc qdisc add dev $wan root handle 1: htb default 15

# Definieren des HTB-Trees
tc class add dev $wan parent 1: classid 1:1 htb rate ${CEIL}kbit ceil ${CEIL}kbit

# hoechste Prio fuer interaktiven Traffic (SSH, IRC und SYN-geflaggte Pakete, Traffic der Clients)
# (min 2000kbit garantiert, max $CEIL moeglich, minimale Verzoegerung)
tc class add dev $wan parent 1:1 classid 1:10 htb rate 2000kbit ceil ${CEIL}kbit prio 1

# Prio 2  - Traffic von / nach Atlas / Windows-VM, maximaler Durchsatz
# (min 80kbit garantiert, max $CEIL moeglich)
tc class add dev $wan parent 1:1 classid 1:11 htb rate 1000kbit ceil ${CEIL}kbit prio 2

tc qdisc add dev $wan parent 1:10 handle 120: sfq perturb 10
tc qdisc add dev $wan parent 1:11 handle 130: sfq perturb 10

# Klassifizieren des Traffics
tc filter add dev $wan parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10
tc filter add dev $wan parent 1:0 protocol ip prio 2 handle 2 fw classid 1:11

# Markieren des Traffics
# Prio 1: interaktiver Traffic, Traffic der Clients
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -p tcp --sport 22 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -p tcp --sport 22 -j RETURN
iptables -t mangle -A PREROUTING -p tcp --dport 10101 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -p tcp --dport 6667 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -p tcp --dport 6668 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -s 10.0.0.4 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -d 10.0.0.4 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -s 10.0.0.5 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -d 10.0.0.4 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -s 10.0.0.10 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -d 10.0.0.10 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -s 10.0.0.11 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -d 10.0.0.11 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -s 10.0.0.12 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -d 10.0.0.12 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -s 10.0.0.13 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -d 10.0.0.13 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -s 10.0.0.14 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -d 10.0.0.14 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -s 10.0.0.15 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -d 10.0.0.15 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -s 10.0.0.16 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -d 10.0.0.16 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x1

# Prio 2: Traffic von / zu Atlas / Windows-VM
iptables -t mangle -A PREROUTING -s 10.0.0.2 -j MARK --set-mark 0x2
iptables -t mangle -A PREROUTING -d 10.0.0.2 -j MARK --set-mark 0x2
iptables -t mangle -A PREROUTING -d 10.0.0.20 -j MARK --set-mark 0x2
iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x2

### Speichern der Regeln
/etc/init.d/iptables save > /dev/null 2>&1
 
Zuletzt bearbeitet:
Sieht ziemlich verwirrend bzw kompliziert aus! Aber man kann ja z.b.:auch ein Backup Befehl normal schreiben und dann in den rcon.daily Ordner kopieren oder?
 
Sieht ziemlich verwirrend bzw kompliziert aus! Aber man kann ja z.b.:auch ein Backup Befehl normal schreiben und dann in den rcon.daily Ordner kopieren oder?
Letztendlich sind es nur aneinander gereihte Befehle. Du kannst natürlich ebenso gut einen Befehl auch als Cronjob ausführen lassen, klar. Beim Sichern auf eine externe Platte ist ein Cronjob allerdings nicht sonderlich praktisch, da du dann beispielsweise immer sonntags um 16:00 die externe Platte an den Rechner hängen musst. Ein Script hingegen kannst du ja ausführen, wann du willst.

MfG Jimini
 
Zurück