Firewallscripts

Gemeinsam ins Internet mit Firewall und Proxy.
mclien
Beiträge: 2427
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: Firewallscripts

Beitrag von mclien » 22.06.2006 10:05:49

Hallo ein paar Fragen/ Anmerkungen zum Anfangspost:
k-pl hat geschrieben: Eine ausführlichere Anleitung befindet sich in der Tipp-Sektion.
Is weg :-(

Code: Alles auswählen

# ************
# * POLICIES *
# ************

iptables -P INPUT DROP

# *********
# * INPUT *
# *********

  # Soll nicht sein
  iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP
ist das nicht schon mit der drop policy erschlagen?

Code: Alles auswählen

  
  # Vom Internet: Darf nicht sein
  iptables -A INPUT -i $IFACE_EXT  -s 10.0.0.0/8 -j DROP
  iptables -A INPUT -i $IFACE_EXT  -s 172.16.0.0/12 -j DROP
  iptables -A INPUT -i $IFACE_EXT  -s 192.168.0.0/24 -j DROP
Macht das nicht auch die DROP police bei INPUT?

Code: Alles auswählen

# **********
# * OUTPUT *
# **********

  # Ins lokale Netzwerk: Alles erlauben
  iptables -A OUTPUT -o $IFACE_INT -j ACCEPT

  # Ans Loopback: Alles erlauben
  iptables -A OUTPUT -o $IFACE_LO -j ACCEPT

  # Ins Internet : Alles erlauben
  iptables -A OUTPUT -o $IFACE_EXT -j ACCEPT

Ist das nicht identisch mit:

Code: Alles auswählen

 
iptables -P OUTPUT ACCEPT 
?

_alex_
Beiträge: 89
Registriert: 05.09.2006 13:18:55
Kontaktdaten:

Beitrag von _alex_ » 11.09.2006 09:07:11

Hallo, ich verwende zur Zeit das Firewall von http://harry.homelinux.org

Leider bekomme ich beim Start des Scriptes folgende Fehlermeldungen:

Code: Alles auswählen

debian:~# . /etc/init.d/firewall start
Starte IP-Paketfilter
iptables v1.2.11: Unknown arg `--to-destination'
Try `iptables -h' or 'iptables --help' for more information.
Bad argument `80'
Try `iptables -h' or 'iptables --help' for more information.
Aktiviere IP-Routing
Hier findet ihr mein Firewall Script:
http://nopaste.debianforum.de/4102

danke schonmal für eure Hilfe.

gruß Alex

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Beitrag von DynaBlaster » 11.09.2006 09:30:38

Code: Alles auswählen

#
# NAT fuer HTTP
#
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination
--to-destination erwartet eine IP-Adresse und optional einen Port als Parameter - als z.b.

Code: Alles auswählen

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:80

nap
Beiträge: 31
Registriert: 01.02.2008 14:41:48

Re:

Beitrag von nap » 07.05.2008 23:22:59

Natas12 hat geschrieben:es ging mir nur darum, nicht mit "offener tür" durch die gegend zu fahren... ;o))
Ich muss dir leider sagen: Mit diesem "Script" aus praktisch-nutzlosen Regeln bist du absolut verwundbar, und praktisch alles kann nach aussen kommunizieren.

Nichts mit state NEW darf rein, wohl aber nach draussen? Was denn das für ne Logik?? Naja ... jeder muss sich sein Grab selbst schaufeln, viel Spass

pluvo

Re: Firewallscripts

Beitrag von pluvo » 07.05.2008 23:25:18

Immer diese Totengräber :mrgreen:
Beitrag von Natas12 am 09.11.2002, 19:04

nap
Beiträge: 31
Registriert: 01.02.2008 14:41:48

Re: Firewallscripts

Beitrag von nap » 07.05.2008 23:31:50

aha, und worin liegt nun die Begründung für deine von mir sinnübertragene und frei interpretierte Aussage

Code: Alles auswählen

If Thread.age > 2*365 { flame((autor)this.getlast()); }
?

Sind nachträgliche Anmerkungen, Korrekturen etc. hier nicht erlaubt? Is der Autor mittlerweile tot?

pluvo

Re: Firewallscripts

Beitrag von pluvo » 07.05.2008 23:47:29

nap hat geschrieben:Sind nachträgliche Anmerkungen, Korrekturen etc. hier nicht erlaubt? Is der Autor mittlerweile tot?
Ich wollte nur darauf hinweisen, dass das Zitat mehr als 5 Jahre alt ist. Sonst nichts :wink:
nap hat geschrieben:Ich muss dir leider sagen: Mit diesem "Script" aus praktisch-nutzlosen Regeln bist du absolut verwundbar, und praktisch alles kann nach aussen kommunizieren.

Nichts mit state NEW darf rein, wohl aber nach draussen? Was denn das für ne Logik?? Naja ... jeder muss sich sein Grab selbst schaufeln, viel Spass
Gut. Was ist daran schlecht?

mfg pluvo :)

nap
Beiträge: 31
Registriert: 01.02.2008 14:41:48

Re: Firewallscripts

Beitrag von nap » 08.05.2008 00:06:53

Naja, als Admin muss man _immer_ vom schlimmsten ausgehen, ergo ist nicht mit einer Viren/Malware-Freiheit der Clients zu rechnen, ergo darf nicht alles von drinnen nach draussen.

Zusätzlich dazu sollte man generell den paketstatus "INVALID" abfragen bzw. in alle Richtungen blocken, nicht zugeordnete und unbekannte Pakete haben in einem Netzwerk nix verloren und sind entweder Portscans, DoS oder Überbleibsel einer alten Verbindung des vorherigen IP-"Besitzers".

Also das Beispiel-"Script" würde ich niemandem empfehlen, es sei denn es bestehen Gelüste, den Rechner alsbald zu formatieren

pluvo

Re: Firewallscripts

Beitrag von pluvo » 08.05.2008 00:12:39

nap hat geschrieben:Naja, als Admin muss man _immer_ vom schlimmsten ausgehen, ergo ist nicht mit einer Viren/Malware-Freiheit der Clients zu rechnen, ergo darf nicht alles von drinnen nach draussen
Und wenn man einfach Port 80 benutzt? Das stößt man schnell an die Grenzen eines "einfachen" Paketfilters.

nap
Beiträge: 31
Registriert: 01.02.2008 14:41:48

Re: Firewallscripts

Beitrag von nap » 08.05.2008 00:15:06

Joar, für solche Sachen gibts dann ja aber HAVP, Squid oder gar die iptables-eigenen Funktionen wie zb. "--hex-string" etc.

Ein kleiner HAVP in Zusammenarbeit mit Squid ist nun wirklich nicht sooo schwer, mittels einer (massig im Internet auffindbaren) Anleitung geht das in maximal 2 Std, selbst für Anfänger

Chrissy
Beiträge: 1
Registriert: 05.05.2009 23:03:29

Re: Firewallscripts

Beitrag von Chrissy » 05.05.2009 23:06:50

Ist es denn nicht möglich, irgendwie einen Port 80 zu benutzen? Das wâre jetzt mal so mein erster gedanke. Aber vielleciht täusche ich mich ja auch ;-)

corny
Beiträge: 17
Registriert: 15.10.2007 13:25:45

Re: Firewallscripts

Beitrag von corny » 17.07.2009 14:29:26

Code: Alles auswählen

# Soll nicht sein
  iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP
Was macht das genau? Ich versteh den Sinn da net genau, kann man das net wegschmeißen?

Ich möchte jetzt auch noch was erlauben

Code: Alles auswählen

iptables -A INPUT -p tcp -s $IP_EXT --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp -s $IP_EXT --dport 80 -m state --state NEW -j ACCEPT
beisst sich das nicht mit der oberen Regel oder versteh ich die oben einfach falsch?

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: Firewallscripts

Beitrag von Danielx » 17.07.2009 16:39:01

corny hat geschrieben:Was macht das genau?
Neue Verbindungen ohne SYN-Paket werden verworfen, da es das nicht geben darf.
Wenn dies doch vorkommt, ist eine Manipulation wahrscheinlich (oder evtl. ein Fehler aufgetreten).
corny hat geschrieben:Ich versteh den Sinn da net genau, kann man das net wegschmeißen?
Beachte das "!".
corny hat geschrieben:beisst sich das nicht mit der oberen Regel oder versteh ich die oben einfach falsch?
Nein, da beißt sich nichts.

Gruß,
Daniel

Benutzeravatar
OliverDeisenroth
Beiträge: 499
Registriert: 27.07.2003 22:34:31
Wohnort: Schwalmstadt
Kontaktdaten:

Re: Firewallscripts

Beitrag von OliverDeisenroth » 17.10.2013 20:08:31

Mein aktuelles Firewallscript für meinem vServer, als Ergänzung zu fail2ban:

Anpassen braucht man eigentlich nichts...

Code: Alles auswählen

#!/bin/sh

#1 SYN-Flood begrenzen:
/sbin/iptables -A INPUT -p tcp --syn -m limit --limit 2/s --limit-burst 30 -j ACCEPT

#2 Ping-Flood begrenzen:
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

#3 Portscanner ausschalten:
/sbin/iptables -A INPUT -p tcp --tcp-flags ALL NONE -m limit --limit 1/h -j ACCEPT
/sbin/iptables -A INPUT -p tcp --tcp-flags ALL ALL -m limit --limit 1/h -j ACCEPT

#4 ungewoehnliche Flags verwerfen
/sbin/iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
Die SYN-Flood Zeile finde ich mitunter am Wichtigsten... maximal 30 Zugriffe innerhalb von 2 Sekunden. (Anti-DDoS)
Dies sind die Abenteuer des Betriebssystems Debian, das unterwegs ist, um in fremde Logdateien vorzustoßen, die noch nie ein Mensch vorher gesehen hat! 8)
Meine persönliche Homepage (läuft mit Ubuntu-Server)
...when apt is outdated, it is sometimes better to change the running system...!

debnuxer
Beiträge: 236
Registriert: 10.03.2012 12:12:21

Re: Firewallscripts

Beitrag von debnuxer » 19.10.2013 04:56:28

Was mir fehlt:

Eingehendes an Port 113 rejecten, das beschleunigt den Aufbau zu Servern, die eine Ident-Anfrage durchführen, z.B. einige Mailserver.

Code: Alles auswählen

/sbin/iptables -A INPUT -p tcp --syn --dport 113 -j REJECT --reject-with tcp-reset
Nach dem Loggen am Ende ausgehendes rejecten, damit lokale Anwendungen nicht in das Drop Timeout von der Default Policy laufen.

Code: Alles auswählen

/sbin/iptables -A OUTPUT -p tcp -j REJECT
/sbin/iptables -A OUTPUT -p udp -j REJECT
Eingehendes an Port 0 droppen, weil der nur für OS-Fingerprinting verwendet wird.

Code: Alles auswählen

/sbin/iptables -A INPUT -p tcp --dport 0 -j DROP
/sbin/iptables -A INPUT -p udp --dport 0 -j DROP
Das Leben ist wie ein überdimensionales Schachbrett.

wanne
Moderator
Beiträge: 7447
Registriert: 24.05.2010 12:39:42

Re:

Beitrag von wanne » 19.10.2013 09:21:30

pdreker hat geschrieben:Das Skript blockiert alles, was von aussen reinkommt, es sei denn, es wurde von innen explizit angefordert.

Tipps:
Phase1
:arrow: Eine Firewall aufbauen ist ein wenig wie Programmieren. Es gibt fast beliebig viele Wege ein Ziel zu erreichen, daher sagt auch jedes Tutorial was anders.
:arrow: Schau erst'mal in die iptables Doku (nicht Tutorial!) auf http://www.netfilter.org, und verstehe, was INPUT, FORWARD und OUTPUT bedeutet (Da gibts irgednwo so ein schönes kleines Diagramm).
:arrow: Versuche zu verstehen, was eine Chain im allgemeinen ist.
:arrow: Minimale Kenntnisse über TCP und IP wären auch noch hilfreich (Verbindungsaufbau).

Phase2
:arrow: Überlege Dir wo in Deinem Netz die Firewall steht, und wie dein Netz aufgebaut ist.
:arrow: Jetzt plane: was soll die Firewall machen? Was darf rein, was nicht?
:arrow: Mit der man-page in einem Fenster, und die Firewall im anderen: Schritt für Schritt die iptables Befehle zusammen bauen, und ausprobieren. (Aufschreiben!!!)

Konzept: Normalerweise macht man es (für @home!) folgendermassen:
:arrow: Vom Internet ins interne Netz: Es ist nichts erlaubt, ausser ich sage explizit, dass es doch OK ist.
:arrow: Vom internen Netz ins Internet: Es ist alles erlaubt, ausser ich sage explizit, dass es nicht erlaubt ist.
:arrow: Workstations sind durch das Masquerading schon nicht mehr erreichbar (also vor dem Internet geschützt), man muss also eigentlich nur den Router richtig abdichten.

Wenn Du das im Griff hast, kommt NAT. Damit kannst Du dann Ports von dem Router auf die WS weiterleiten, um z.B. P2P Dienste funktionsfähig (oder aktiv) zu machen.

Patrick
Ich weiß dass diese Firewalls üblich sind. Sinnvoll finde ich sie trotdem nicht. Im allgemeinen hat deren Verbreitung vor allem dazu geführt, dass wir jetzt ein paar wenige Großanbieter in den USA haben, über die mehr oder weniger der Vollständige Internetverkehr läuft. So haben schön alle Home PC ausschließlich ausgehende Verbindungen in die USA. Beispiele:
  • Skype hat dank seiner "Firewallfrundlicket" mehr oder weniger alle direkt Telefonie-Systeme (SIP in seiner ursprünglichen Form) verdrängt. Die NSA sagt danke dass sie jetzt schön von zuahse aus Videokonferenzen mithören kann.
  • Teamviewer hat hier in dt. VNC fast vollständig verdränt. BND freut sich über den Remotezugang.
  • GMail und Facebook haben netsend (OK, das war noch kaputter) und co ersetzt. Das hat zu einem ganzen Industriezweig der Personalisierten Werbung geführt.
Der sicherheitsgewinn?
Mal ernsthaft: Kann mir irgend jemand ein Szenario beschreiben, wo ein Paket in der Firewall hängenbleibt, das nem realistischen Linux Rechner schaden würde? (Und jetzt bitte nciht kommen mit wenn jemand eine Linux 1.X Kernel hat, dann ist er anfällig gegen dern Ping of death. Der und andere grundsätzlichen Probleme im Netzwerstack sind seit 15 Jahren tot. Und ein Fehler in iptables ist warscheinlciher. Propo DOS: Mit dem typischen established ist iptables immernoch mit anfällig gegen SYN-Floods. Wo ein Rechner ohne das Problem nicht hat. Deswegen würde ich wenn ehr einfach SYN blocken. Aber ich weiß: Sowas begegnet man heutzutage einfach mit nem zusätzlichen RAM-Riegel und gut ist.)
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
OliverDeisenroth
Beiträge: 499
Registriert: 27.07.2003 22:34:31
Wohnort: Schwalmstadt
Kontaktdaten:

Re: Firewallscripts

Beitrag von OliverDeisenroth » 20.10.2013 17:28:27

Vorheriges Script habe ich verworfen - jetzt läuft eine DROP-Policy als Standard auf meinem Server!

Das heißt, es werden nur die Pakete der Dienste rein-/rausgelassen,
die explizit im Script freigeschaltet wurden!


Sehr schöne Sache für Leute, die maximale Sicherheit auf ihrem Server wollen,
gegen Botnetze wohl auch sehr effizient... da die auch gerne mal auf andere Ports gehen... 8) 8)

Ist für den Dual-Betrieb mit fail2ban geeignet.. :wink:

ACCEPT als "Standard" ist eben zu löchrig - haben mir heute auch ein paar weise Leute im #ubuntu-offtopic Kanal im IRC bestätigt.

Code: Alles auswählen

#!/bin/bash

IPTABLES="/sbin/iptables"
FAIL2BAN="/etc/init.d/fail2ban"

# iptables Firewall-Script for my virtualServer
# Author: Oliver Deisenroth, Date: 20-10-2013
#
# This script can make your server much more secure,
# because it will only open ports for services you USE
# 
# General packet policy is DROP here,
# so be careful that you do not shut yourself out...
# TAKE CARE
#
# fail2ban is also supported and will
# be restarted at the end of the script,
# because the script DELETES all existing rules
# to clean up iptables before
#
# Services allowed:
# FTP (Port 21), SSH (Port 22), Mumur-Server(Mumble, Port 64738),
# HTTP, HTTPS, SMTP, IMAP, POP3
# DNS (Port 53), NTP, NNTP
# Webmin (Port 10000), Submission (Port 587)
#
# See Outgoing and Incoming Rules
#
# For every service you probably need an outgoing and
# incoming rule

# Take care:
# Loopback-Device RULE is ACCEPT by DEFAULT
# Drops SMB/CIFS
#
# And:
# It also drops SPOOFING-Packets
# and PORT scanners

# Modify it to your needs
# If you want logging, use REJECTLOG instead of REJECT at the end
# of the script

# Logging options.
#------------------------------------------------------------------------------
LOG="LOG --log-level debug --log-tcp-sequence --log-tcp-options"
LOG="$LOG --log-ip-options"

# Defaults for rate limiting
#------------------------------------------------------------------------------
RLIMIT="-m limit --limit 3/s --limit-burst 30"

# Default policies.
#------------------------------------------------------------------------------
 
# Drop everything by default.
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP
 
# Set the nat/mangle/raw tables' chains to ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
 
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT
 
# Cleanup.
#------------------------------------------------------------------------------
 
# Delete all
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
 
# Delete all
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
 
# Zero all packets and counters.
$IPTABLES -Z
$IPTABLES -t nat -Z
$IPTABLES -t mangle -Z


# Custom user-defined chains.
#------------------------------------------------------------------------------
 
# LOG packets, then ACCEPT.
$IPTABLES -N ACCEPTLOG
$IPTABLES -A ACCEPTLOG -j $LOG $RLIMIT --log-prefix "ACCEPT "
$IPTABLES -A ACCEPTLOG -j ACCEPT
 
# LOG packets, then DROP.
$IPTABLES -N DROPLOG
$IPTABLES -A DROPLOG -j $LOG $RLIMIT --log-prefix "DROP "
$IPTABLES -A DROPLOG -j DROP
 
# LOG packets, then REJECT.
# TCP packets are rejected with a TCP reset.
$IPTABLES -N REJECTLOG
$IPTABLES -A REJECTLOG -j $LOG $RLIMIT --log-prefix "REJECT "
$IPTABLES -A REJECTLOG -p tcp -j REJECT --reject-with tcp-reset
$IPTABLES -A REJECTLOG -j REJECT
 
# Only allows RELATED ICMP types
# (destination-unreachable, time-exceeded, and parameter-problem).
# TODO: Rate-limit this traffic?
# TODO: Allow fragmentation-needed?
# TODO: Test.
$IPTABLES -N RELATED_ICMP
$IPTABLES -A RELATED_ICMP -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A RELATED_ICMP -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A RELATED_ICMP -p icmp --icmp-type parameter-problem -j ACCEPT
$IPTABLES -A RELATED_ICMP -j DROPLOG
 
# Make It Even Harder To Multi-PING
$IPTABLES  -A INPUT -p icmp -m limit --limit 1/s --limit-burst 2 -j ACCEPT
$IPTABLES  -A INPUT -p icmp -m limit --limit 1/s --limit-burst 2 -j LOG --log-prefix PING-DROP:
$IPTABLES  -A INPUT -p icmp -j DROP
$IPTABLES  -A OUTPUT -p icmp -j ACCEPT
 
# Only allow the minimally required/recommended parts of ICMP. Block the rest.
#------------------------------------------------------------------------------

# First, drop all fragmented ICMP packets (almost always malicious).
$IPTABLES -A INPUT -p icmp --fragment -j DROPLOG
$IPTABLES -A OUTPUT -p icmp --fragment -j DROPLOG
$IPTABLES -A FORWARD -p icmp --fragment -j DROPLOG
 
# Allow all ESTABLISHED ICMP traffic.
$IPTABLES -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT $RLIMIT
$IPTABLES -A OUTPUT -p icmp -m state --state ESTABLISHED -j ACCEPT $RLIMIT
 
# Allow some parts of the RELATED ICMP traffic, block the rest.
$IPTABLES -A INPUT -p icmp -m state --state RELATED -j RELATED_ICMP $RLIMIT
$IPTABLES -A OUTPUT -p icmp -m state --state RELATED -j RELATED_ICMP $RLIMIT
 
# Allow incoming ICMP echo requests (ping), but only rate-limited.
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT $RLIMIT
 
# Allow outgoing ICMP echo requests (ping), but only rate-limited.
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT $RLIMIT
 
# Drop any other ICMP traffic.
$IPTABLES -A INPUT -p icmp -j DROPLOG
$IPTABLES -A OUTPUT -p icmp -j DROPLOG
$IPTABLES -A FORWARD -p icmp -j DROPLOG
 
# Selectively allow certain special types of traffic.
#------------------------------------------------------------------------------
 
# Allow loopback interface to do anything.
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
 
# Allow incoming connections related to existing allowed connections.
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Allow outgoing connections EXCEPT invalid
$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
 
# Miscellaneous.
#------------------------------------------------------------------------------
 
# We don't care about Milkosoft, Drop SMB/CIFS/etc..
$IPTABLES -A INPUT -p tcp -m multiport --dports 135,137,138,139,445,1433,1434 -j DROP
$IPTABLES -A INPUT -p udp -m multiport --dports 135,137,138,139,445,1433,1434 -j DROP
 
# Explicitly drop invalid incoming traffic
$IPTABLES -A INPUT -m state --state INVALID -j DROP
 
# Drop invalid outgoing traffic, too.
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP
 
# If we would use NAT, INVALID packets would pass - BLOCK them anyways
$IPTABLES -A FORWARD -m state --state INVALID -j DROP
 
# Disable PORT Scanners (stealth also)
$IPTABLES -A INPUT -m state --state NEW -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A INPUT -m state --state NEW -p tcp --tcp-flags ALL NONE -j DROP
 
# TODO: Some more anti-spoofing rules? For example:
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -N SYN_FLOOD
$IPTABLES -A INPUT -p tcp --syn -j SYN_FLOOD
$IPTABLES -A SYN_FLOOD -m limit --limit 2/s --limit-burst 6 -j RETURN
$IPTABLES -A SYN_FLOOD -j DROP

# Selectively allow certain outbound connections, block the rest.
#------------------------------------------------------------------------------
 
# Allow outgoing DNS requests. Few things will work without this.
$IPTABLES -A OUTPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
 
# Allow outgoing HTTP requests. Unencrypted, use with care.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
 
# Allow outgoing HTTPS requests.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

# Allow outgoing Mumble-Server requests.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 64738 -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW -p udp --dport 64738 -j ACCEPT

# Allow outgoing SMTP requests.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

# Allow outgoing SMTPS requests.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 465 -j ACCEPT
 
# Allow outgoing "submission" (RFC 2476) requests.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 587 -j ACCEPT
 
# Allow outgoing POP3S requests.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 995 -j ACCEPT
 
# Allow outgoing SSH requests.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT

# Allow outgoing Webmin requests.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 10000 -j ACCEPT
 
# Allow outgoing FTP requests. Unencrypted, use with care.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
 
# Allow outgoing NNTP requests. Unencrypted, use with care.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 119 -j ACCEPT
 
# Allow outgoing NTP requests. Unencrypted, use with care.
$IPTABLES -A OUTPUT -m state --state NEW -p udp --dport 123 -j ACCEPT

# Allow outgoing CVS requests. Unencrypted, use with care.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 2401 -j ACCEPT
 
# Allow outgoing MySQL requests. Unencrypted, use with care.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT
 
# Allow outgoing SVN requests. Unencrypted, use with care.
# $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 3690 -j ACCEPT


# Selectively allow certain inbound connections, block the rest.
#------------------------------------------------------------------------------
 
# Allow incoming DNS requests.
$IPTABLES -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
 
# Allow incoming HTTP requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
 
# Allow incoming HTTPS requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
 
# Allow incoming POP3 requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT
 
# Allow incoming IMAP4 requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
 
# Allow incoming POP3S requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 995 -j ACCEPT
 
# Allow incoming SMTP requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
 
# Allow incoming SSH requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
 
# Allow incoming FTP requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
 
# Allow incoming NNTP requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 119 -j ACCEPT
 
# Allow incoming MySQL requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT

# Allow incoming Webmin requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 10000 -j ACCEPT

# Allow incoming Mumble-Server Requests.
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport 64738 -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW -p udp --dport 64738 -j ACCEPT

# Allow incoming nc requests.
# $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 2030 -j ACCEPT
# $IPTABLES -A INPUT -m state --state NEW -p udp --dport 2030 -j ACCEPT
 
# Explicitly log and reject everything else.
#------------------------------------------------------------------------------
# Use REJECT instead of REJECTLOG if you don't need/want logging.
$IPTABLES -A INPUT -j REJECT
$IPTABLES -A OUTPUT -j REJECT
$IPTABLES -A FORWARD -j REJECT

$FAIL2BAN restart

# Exit gracefully.
#------------------------------------------------------------------------------
 
    exit 0

Dies sind die Abenteuer des Betriebssystems Debian, das unterwegs ist, um in fremde Logdateien vorzustoßen, die noch nie ein Mensch vorher gesehen hat! 8)
Meine persönliche Homepage (läuft mit Ubuntu-Server)
...when apt is outdated, it is sometimes better to change the running system...!

wanne
Moderator
Beiträge: 7447
Registriert: 24.05.2010 12:39:42

Re: Firewallscripts

Beitrag von wanne » 21.10.2013 23:32:18

Da ist die Regel die das typische Botnetz durchlässt:

Code: Alles auswählen

$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
bzw. auf dem Rückweg:

Code: Alles auswählen

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Typischerweise geht das nach Hause:
Großer Port -> 80
Und zum Spam versenden ddos ausführen:
Viele große ports -tcp-> 80
Großer Port -tcp-> 25

Im Übrigen sachen die man gar nciht unbedingt braucht: Warum muss ein Server ausgehende Verbindungen aufmachen können?
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
OliverDeisenroth
Beiträge: 499
Registriert: 27.07.2003 22:34:31
Wohnort: Schwalmstadt
Kontaktdaten:

Re: Firewallscripts

Beitrag von OliverDeisenroth » 22.10.2013 02:45:59

Hallo wanne,

erstmal danke für deine Antwort!

Aber eines erstmal vorweg:

Allwissend bin ich auch nicht, was iptables betrifft, also Ratschläge nehme ich schon gerne an, wenn man mir diese auch ausreichend erläutert! :THX:
(ich weiß, dass ich nichts weiß und das ist auch gut so)

Habe zwar kein Buch über iptables gelesen - dafür habe ich momentan zuviel um die Ohren, aber ich verwende Debian/Ubuntu schon intensivst seit rund 10 Jahren und habe haufenweise Online-Dokumentationen, Hackerforen und fertige Scripte zu iptables gelesen und analysiert...
Also mit den Grundlagen bin ich schon vertraut!

Zur Freischaltung meines Port 80 kann ich Dir mehr erzählen:

Da läuft ein Apache-Server, der ist gegen DDoS nochmals extra mit mod_evasive abgesichert (falls dir das etwas sagt) - ist getestet und ich werde über jeden Angriff via E-Mail informiert (Angriff ebenso schon getestet) :wink:

Das sieht dann so aus:

Code: Alles auswählen

Subject: HTTP BLACKLIST 127.0.0.1

mod_evasive HTTP Blacklisted 127.0.0.1
:P :P :P

Es ist also mein eigener Wille, dass eingehende und ausgehende Verbindungen dort erlaubt sind.

Zudem meldet mir fail2ban täglich rund 10 Angreifer über SSH - der Root-Zugang ist selbstverständlich gesperrt (aber es wird trotzdem versucht :mrgreen:). Macht mir halt Spaß, diese armseeligen SSH-Angreifer an blocklist.de zu melden... :wink:

Bild

Nun ja, erstmal zu deiner ersten Kritik, dazu habe ich das gefunden:

Code: Alles auswählen

# Eingehende Verbindungen erlauben, die sich auf bestehende Verbindungen
# beziehen. (Damit es nach dem Verbindungsrequest eines Clients auch weitergeht)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Also für mich ist diese Regel von Grund auf wichtig, damit die Firewall nicht dicht macht...
Das kann man auch überall nachlesen, wenn du Google mit dieser Zeile fütterst, wirst du darüber sogar auf UNI-Seiten fündig.
wanne hat geschrieben:Im Übrigen sachen die man gar nciht unbedingt braucht: Warum muss ein Server ausgehende Verbindungen aufmachen können?
Also wenn der Client einen Request schickt, dann muss der Server ja auch eine Antwort geben können (Outgoing) - genauso bei FTP.

Client >--------Anfrage------> Server

Client <--------Antwort-----< Server

PS: Hierzu habe ich sogar eine Quelle aus einem Buch, schau hier:

Apache Webserver 2: Installation, Konfiguration, Programmierung

Also ich kann mich nicht beklagen, klar, es gibt immer etwas zu bemängeln, aber die Perfektion wird man wohl nie erreichen!

Ich hatte vorher "SuSE" auf dem Server laufen mit Yast und so - das war die reinste Katastrophe...

Also ich bin jetzt zufrieden, wo ich Ubuntu-Server laufen habe und bin auch sehr sensibel, was die Sicherheit betrifft, deswegen sind zum Beispiel auch SQL-Injections auf mod_rewrite Basis komplett unterbunden (Cross-Side-Scripting ebenfalls etc.) - die Grundlagen dazu habe ich vom Hacker Joseph McCray von der DEF CON (Hackerveranstaltung in Las Vegas) sozusagen persönlich :wink:

Einen deiner Tipps habe ich jedoch umgesetzt:
SMTP (Port 25) deaktiviert - das ist über die Loopback Zeile sowieso schon gestattet, der MTA (sendmail) soll ja auch noch Mails an mich schicken dürfen, also sind die SMTP-Zeilen tatsächlich völlig unnötig! :wink:

Und dass MySQL von außen erreichbar sein soll - ist wohl auch Quatsch - loopback Basis reicht vollkommen!
Also diese Zeilen auch ausgeklammert... :wink:

PS:Und, ja, da auf dem Server läuft mein Privatblog, kein Ebay oder Amazon :P
Dies sind die Abenteuer des Betriebssystems Debian, das unterwegs ist, um in fremde Logdateien vorzustoßen, die noch nie ein Mensch vorher gesehen hat! 8)
Meine persönliche Homepage (läuft mit Ubuntu-Server)
...when apt is outdated, it is sometimes better to change the running system...!

Benutzeravatar
4A4B
Beiträge: 925
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Firewallscripts

Beitrag von 4A4B » 22.10.2013 08:36:44

Nach dieser Regel, in der du bez. OUTPUT auch --state NEW generell zulässt:

Code: Alles auswählen

# Allow outgoing connections EXCEPT invalid
$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
... sind die folgenden Einzel-Regeln bez. OUTPUT und --state NEW wohl überflüssig:

Code: Alles auswählen

# Selectively allow certain outbound connections, block the rest.
#------------------------------------------------------------------------------
 
# Allow outgoing DNS requests. Few things will work without this.
$IPTABLES -A OUTPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

# und so weiter...
Wenn du mit diesen Regeln nur einzelne Destination-Ports zulassen möchtest, solltest du in der genelleren Regel weiter oben das NEW rausnehmen
Also wenn der Client einen Request schickt, dann muss der Server ja auch eine Antwort geben können (Outgoing) - genauso bei FTP.

Client >--------Anfrage------> Server

Client <--------Antwort-----< Server
Das ist dann aber schon mit --state ESTABLISHED,RELATED abgedeckt?

Benutzeravatar
OliverDeisenroth
Beiträge: 499
Registriert: 27.07.2003 22:34:31
Wohnort: Schwalmstadt
Kontaktdaten:

Re: Firewallscripts

Beitrag von OliverDeisenroth » 22.10.2013 12:15:33

4A4B hat geschrieben: Wenn du mit diesen Regeln nur einzelne Destination-Ports zulassen möchtest, solltest du in der genelleren Regel weiter oben das NEW rausnehmen
Alles klar, da hast du wohl Recht, NEW habe ich jetzt rausgenommen und habe immer noch Zugriff! :THX:

Danke...

PS: Port 25 musste ich wieder öffnen - die Mails gingen nicht mehr raus und blieben im Queue stecken :wink:

Beweis, dass es funktioniert...
Dies sind die Abenteuer des Betriebssystems Debian, das unterwegs ist, um in fremde Logdateien vorzustoßen, die noch nie ein Mensch vorher gesehen hat! 8)
Meine persönliche Homepage (läuft mit Ubuntu-Server)
...when apt is outdated, it is sometimes better to change the running system...!

Benutzeravatar
OliverDeisenroth
Beiträge: 499
Registriert: 27.07.2003 22:34:31
Wohnort: Schwalmstadt
Kontaktdaten:

Re: Firewallscripts

Beitrag von OliverDeisenroth » 22.10.2013 14:21:35

4A4B hat geschrieben: Das ist dann aber schon mit --state ESTABLISHED,RELATED abgedeckt?
Nein, kann ich in der Praxis nicht bestätigen.

Ohne die explizite Portöffnung (Port 25) kamen bei mir keine Mails mehr an! (blieben alle im MTA stecken)
Dies sind die Abenteuer des Betriebssystems Debian, das unterwegs ist, um in fremde Logdateien vorzustoßen, die noch nie ein Mensch vorher gesehen hat! 8)
Meine persönliche Homepage (läuft mit Ubuntu-Server)
...when apt is outdated, it is sometimes better to change the running system...!

Benutzeravatar
4A4B
Beiträge: 925
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Firewallscripts

Beitrag von 4A4B » 22.10.2013 15:13:08

Oliver_D hat geschrieben:
4A4B hat geschrieben: Das ist dann aber schon mit --state ESTABLISHED,RELATED abgedeckt?
Nein, kann ich in der Praxis nicht bestätigen.

Ohne die explizite Portöffnung (Port 25) kamen bei mir keine Mails mehr an! (blieben alle im MTA stecken)
Das ist schon klar, dass du zum Mailversenden neue Verbindungen auf Destination-Port 25 aufmachen können musst :). Ich bezog mich in meiner Antwort aber auch nur auf dieses Zitat von dir:
Oliver_D hat geschrieben:
wanne hat geschrieben:Im Übrigen sachen die man gar nciht unbedingt braucht: Warum muss ein Server ausgehende Verbindungen aufmachen können?
Also wenn der Client einen Request schickt, dann muss der Server ja auch eine Antwort geben können (Outgoing) - genauso bei FTP.

Client >--------Anfrage------> Server

Client <--------Antwort-----< Server
Web- und FTP-Server nutzen hierbei eine Verbindung, die bereits ESTABLISHED ist, oder im Falle von FTP auch RELATED

Die folgende Regel wird nur für den Fall benötigt, dass der Server selbst HTTP-Anfragen an Webserver auf anderen Servern stellt (also in diesem Fall der Client ist):

Code: Alles auswählen

# Allow outgoing HTTP requests. Unencrypted, use with care.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
Wobei es solche Fälle durchaus geben kann.

Benutzeravatar
OliverDeisenroth
Beiträge: 499
Registriert: 27.07.2003 22:34:31
Wohnort: Schwalmstadt
Kontaktdaten:

Re: Firewallscripts

Beitrag von OliverDeisenroth » 22.10.2013 15:20:50

4A4B hat geschrieben: Die folgende Regel wird nur für den Fall benötigt, dass der Server selbst HTTP-Anfragen an Webserver auf anderen Servern stellt (also in diesem Fall der Client ist):

Code: Alles auswählen

# Allow outgoing HTTP requests. Unencrypted, use with care.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
Wobei es solche Fälle durchaus geben kann.
Jap, ich denke da zum Beispiel an die PHP-Funktion cURL - ich habe ja Joomla! laufen, und da wird eben auch mal eine Update-Überprüfung ausgehend gemacht... Deswegen habe ich ausgehende Verbindungen eben ja auch an :wink:

Vielen Dank nochmal.
Dies sind die Abenteuer des Betriebssystems Debian, das unterwegs ist, um in fremde Logdateien vorzustoßen, die noch nie ein Mensch vorher gesehen hat! 8)
Meine persönliche Homepage (läuft mit Ubuntu-Server)
...when apt is outdated, it is sometimes better to change the running system...!

Mululu
Beiträge: 35
Registriert: 08.10.2013 18:17:41

Re: Firewallscripts

Beitrag von Mululu » 15.06.2014 22:38:29

Grüße,

Ich habe meinen Server nun Standardmäßig abgesichert.
Nun bin ich bei IPTABLES angekommen. Doch ich tuh mich damit etwas schwer :/.

Kennt ihr vll. eine sehr gutes HowTo in dem IPTABLES gut erklärt ist?

Ich möchte kein Script von anderen nehmen denn dabei lerne ich nicht viel. Ich möchte IPTABLES verstehen und nicht nur benutzen.

Vielen Dank Leute ;)

Antworten