• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

IPTABLES BEISPIELKONFIGURATION ROUTER, eth0 + eth1

A

Anonymous

Gast
so, ich denke mal folgende config dürfte für ein Routersystem mit 2 Netzwerkkarten recht sinnvoll sein, wenn jemand noch Ergänzungen hätte, bitte einfach sagen.
Es gilt in diesem Beispiel:
192.168.0.0/24 hat direkten Internetzugang über 192.168.0.1 als Gateway (Hardware-Router)

DNS Server REAL = 192.168.0.1 bei Subnet 255.255.255.0
Server WAN = 192.168.0.5 bei Subnet 255.255.255.0
Server LAN = 176.13.180.1 bei Subnet 255.255.0.0
Client LAN = 176.13.180.2 bei Subnet 255.255.0.0
DNS Server am Client = 176.13.180.1 bei Subnet 255.255.0.0
Gateway am Client = 176.13.180.1 bei Subnet 255.255.0.0


## Diese Firewall kann im Moment:
#1) Routen (192.168.0.0/24 > 176.13.180.0/24)
#2) zum Client hin filtern (CLIENT <--> INTERNET)
#3) Client maskieren (176.13.180.0/24 = 192.168.0.5)
#4) Groessere Sicherheitsluecken abdecken (--state-invalid zb.)
#5) Namen uebersetzen (bind9 muss installiert und gestartet sein!)

#es wird noch dazu kommen:
#1) Schutz des SERVER <--> INTERNET Netzes
#2) Content Filtering (Domainsperren etc...)
#3) erweitertes Content Filtering (Headeranalyse und -filterung)
#4) sichere Shell, sicheres FTP (strict chRoot)

## Basis-Config laden, alle Regeln loeschen
########################################################
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
#########################################################

##Default-Policies setzen
########################################################
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP #Und hier is Schluss mit lustig :))
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING DROP
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
##########################################################

##Client darf folgendes
#########################################################
#########################################################
iptables -A FORWARD -p tcp --dport 53 -s 176.13.180.1 -j ACCEPT
iptables -A FORWARD -p udp --dport 53 -s 176.13.180.1 -j ACCEPT
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp --dport 20 -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type 8 -j ACCEPT
#########################################################
#########################################################

##Dem Client die eigene IP geben
####################################################
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
####################################################

##Routing zwischen 2 Netzen erlauben
##################################################
iptables -A FORWARD -d 176.13.180.0/24 -j ACCEPT
##################################################

##kopierte, leicht geaenderte Sicherheitseinstellungen
#(harry@homelinux.org)
####################################################################
# FORWARD fuellen
iptables -A FORWARD -p tcp -m limit --limit 7200/h -j LOG --log-prefix "TCP "

iptables -A FORWARD -p udp -m limit --limit 7200/h -j LOG --log-prefix "UDP "
iptables -A FORWARD -p icmp -m limit --limit 7200/h -j LOG --log-prefix "ICMP "
iptables -A FORWARD -s 192.168.0.0/24 -j DROP
iptables -A FORWARD -m limit --limit 7200/h -j LOG --log-prefix "OTHER "


#Alle verworfenen Pakete protokollieren

iptables -A FORWARD -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "INPUT INVALID "
iptables -A OUTPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "OUTPUT INVALID "

# Korrupte Pakete zurueckweisen
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

# Stealth Scans etc. DROPpen
# Keine Flags gesetzt
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP

# SYN und FIN gesetzt
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# SYN und RST gleichzeitig gesetzt
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# FIN und RST gleichzeitig gesetzt
iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

# FIN ohne ACK
iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j DROP

# PSH ohne ACK
iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j DROP

# URG ohne ACK
iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j DROP

# Loopback-Netzwerk-Kommunikation zulassen
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


# Max. 500/Sekunde (5/Jiffie) senden
echo 5 > /proc/sys/net/ipv4/icmp_ratelimit

# Speicherallozierung und -timing fr IP-De/-Fragmentierung
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time

# TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# Maximal 3 Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1

# TCP-Pakete maximal 15x wiederholen
echo 15 > /proc/sys/net/ipv4/tcp_retries2
 
OP
A

Anonymous

Gast
rm -rf / schrieb:
##Dem Client die eigene IP geben (wichtig! NAMED muss laufen!)
####################################################
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
####################################################

Was hat der named mit masquerading zu tun?
 
OP
A

Anonymous

Gast
hat nix damit zu tun, nur für diese config im allgemeinen muss named laufen, ansonsten übersetzt er ja keine namen.
Hätte ich vielleicht ein stück weiter oben hinschreiben sollen.
 

rattle

Newbie
Eventuell noch:
# Maximum Segment Size (MSS) für das Forwarding an PMTU anpassen
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
 

Frankie777

Advanced Hacker
Hallo,
folgendes ist mir aufgefallen..
- kein INPUT Schutz des Routers
für FORWARD
- Wird ICMP der rply Typ 0 reingelassen?, ich bin mir jetzt nicht sicher ob das über RELATED vom Typ 8 funktioniert.
- DNS kann auch im Internet angesprochen werden, sollte auf lokalen DNS-Server gebunden werden
- DNS fehlt TCP 53

POSTROUTING ist nur DROP, kein ACCEPT?
 
OP
A

Anonymous

Gast
der Router muss auch nicht unbedingt geschützt werden, falls doch kann man ja einfach ein DROP als policy setzen, alle Forward-Regeln in eine neue Chain verknüpfen, und dann wiederum die INPUT-Chain mit dieser neuen verknüpfen. POSTROUTING wird auch nicht unbedingt gebraucht, es sei denn du willst irgendwelche SNATS oder DNATS ändern (dürfte nur bei Router-seitigem emule interessant sein, die Source-IP wird ja auf nem ganz anderen Device maskiert, und ist somit unabhängig von dieser Einstellung).
DNS läuft übrigens in den allermeissten Fällen auf UDP, TCP-DNS Anfragen sollten erstmal mit Vorsicht behandelt werden, das sind sehr oft Spybots u.ä...
ICMP-Typ 0 wird nicht durchgelassen, aber Typ 8, und der sorgt wunderbar dafür, dass Pings durchkommen, habs getestet. Destinatioen-Unreachable und ähnliche ICMP-Pakete sind meiner Meinung nach völlig unnötig und stellen nur eine Sicherheitslücke dar, so könnte man Ports scannen unter Umständen. Im insgesamtem werde ich evtl. demnächst eine verbesserte Version nachreichen, die dann Stateful Inspection und Packet-Inspection hat....Sobald ich mal mehr als eine Stunde Zeit hab :lol:
 

Frankie777

Advanced Hacker
DNS
deswegen ja das Forward auf die IP des internen DNS Servers beschränken.
TCP 53 für DNS entspricht den Regeln und das dropen kann mal Kopfschmerzen machen, es wird ab und zu gebraucht

TYP0 kommt dann durch weil es mit Typ 8 über related erlaubt ist. Ping heißt Typ 8 geht hin und ein ICMP Typ 0 kommt zurück, damit sollten dann über related auch die anderen Typen wie destn. noc reachable erlaubt sein???

Ich habe bei mir zu ICMP eine deatilerte Regel der einzelnen Typen und auch traceroute erlaubt, das braucht man ab und an mal..
 
OP
A

Anonymous

Gast
Frankie777 schrieb:
DNS
deswegen ja das Forward auf die src-IP des internen DNS Servers beschränken.
ui, danke dass du es sagst, fällt mir auch erst jetzt auf :shock:
 

Spelter

Newbie
Irgendwie vermiss noch noch so sachen wie einen egress/igress Filter, Cconntrack und ein paar /proc einstellungen und richtiges dnat :) Sachen wie den invalid Status braucht man nicht wenn man standardregeln erstellt, das is dann relativ easy zu handhaben. Wichtiger sind Regeln gegen verformte Packete (modprobe ipt_unclean bei Debian) und das nicht so einfach externe Server angesprochen werden können vom Router.

Hier mal mein Script, aber kein Anspruch auf vollständigkeit :D Leistet auf mein Router seit 2 Jahren gute Dienste. Wer noch ein paar Trafficshaper Regeln braucht, einfach sagen. Hoffe es kommen keine Fragen ;)

firewall.sh
Code:
#!/bin/bash
########################################################################################################################
#		Variablen
########################################################################################################################
IPTABLES=/usr/local/sbin/iptables
INTRANET=192.168.2.0/24
EXTDEV=ppp0
INTDEV=eth0
ICMP_INTERN=1
ICMP_EXTERN=1

INTPORTS_TCP=(
	21
	22
	80
)

INTPORTS_UDP=(
	53
)
INTERNET_TCP=(

)
INTERNET_UDP=(

)

SOFTWARE=(
	194.109.137.218
	141.76.2.4
	131.188.3.71
	128.101.80.133
	82.94.249.158
	204.152.191.37
	204.152.191.5
)

case "$1" in
start)
        echo "Firewall wird gestartet"
                echo ""
########################################################################################################################
#		Regeln
########################################################################################################################
echo "Regelwerke werden erstellt"

$IPTABLES -F
$IPTABLES -t filter -F INPUT
$IPTABLES -t filter -F FORWARD
$IPTABLES -t filter -F OUTPUT


$IPTABLES -X logdrop
$IPTABLES -N logdrop
$IPTABLES -A logdrop -j LOG --log-prefix "LOGDROP: "
$IPTABLES -A logdrop -j DROP

$IPTABLES -X webdrop
$IPTABLES -N webdrop
$IPTABLES -A webdrop -j LOG --log-prefix "WEBDROP: "
$IPTABLES -A webdrop -j DROP

$IPTABLES -X no-conns-from-ppp0
$IPTABLES -N no-conns-from-ppp0
$IPTABLES -A no-conns-from-ppp0 -i ppp0 -m limit -j LOG --log-prefix "Conntrack Alert -> ppp0: "
$IPTABLES -A no-conns-from-ppp0 -i ! ppp0 -m limit -j LOG --log-prefix "Conntrack Alert -> ppp0: "
$IPTABLES -A no-conns-from-ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A no-conns-from-ppp0 -m state --state NEW -i ! ppp0 -j ACCEPT
$IPTABLES -A no-conns-from-ppp0 -j DROP
$IPTABLES -A INPUT -j no-conns-from-ppp0
$IPTABLES -A FORWARD -j no-conns-from-ppp0

$IPTABLES -X xgress
$IPTABLES -N xgress
$IPTABLES -A xgress -j LOG --log-prefix "XGress hat zugeschlagen: "  --log-level notice
$IPTABLES -A xgress -j DROP

$IPTABLES -X software
$IPTABLES -N software
$IPTABLES -A software -j ACCEPT


#$IPTABLES -X iprange
#$IPTABLES -X iprange
#$IPTABLES -N iprange

$IPTABLES -X out_private
$IPTABLES -N out_private

$IPTABLES -X in_private
$IPTABLES -N in_private

########################################################################################################################
#		XGRESS
########################################################################################################################
echo "XGress Filter werden erstellt"
# Keine Internen Adressen rein lassen
$IPTABLES -F in_private
$IPTABLES -A in_private -j xgress -s 127.0.0.0/8
$IPTABLES -A in_private -j xgress -s 10.0.0.0/8
$IPTABLES -A in_private -j xgress -s 172.16.0.0/12
$IPTABLES -A in_private -j xgress -s 192.168.0.0/16
$IPTABLES -A in_private -j xgress -s 192.168.0.0/24
$IPTABLES -A in_private -j xgress -s 224.0.0.0/4
$IPTABLES -A in_private -j xgress -s 240.0.0.0/4

# Keine Internen Adressen raus lassen
$IPTABLES -F out_private
$IPTABLES -A out_private -j xgress -d 127.0.0.0/8
$IPTABLES -A out_private -j xgress -d 10.0.0.0/8
$IPTABLES -A out_private -j xgress -d 172.16.0.0/12
$IPTABLES -A out_private -j xgress -d 192.168.0.0/16
$IPTABLES -A out_private -j xgress -d 192.168.0.0/24
$IPTABLES -A out_private -j xgress -d 224.0.0.0/4
$IPTABLES -A out_private -j xgress -d 240.0.0.0/4

$IPTABLES -A INPUT -j in_private  -i $EXTDEV
$IPTABLES -A FORWARD -j in_private  -i $EXTDEV
$IPTABLES -A OUTPUT -j out_private -o $EXTDEV
$IPTABLES -A FORWARD -j out_private -o $EXTDEV

#Lasse vom localhost alles zu
$IPTABLES -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT

########################################################################################################################
#		Kernel Optionen (wegen der größe ausgelagert
########################################################################################################################
. ./fw.proc
echo "ICMP wird Konfiguriert"
########################################################################################################################
#		ICMP
########################################################################################################################
if [ "$ICMP_INTERN" = "1" ]; then
	$IPTABLES -t filter -A INPUT -i $INTDEV --proto icmp --icmp-type echo-request -s 192.168.2.0/24 -d 0/0 -j ACCEPT
	$IPTABLES -t filter -A INPUT -i $INTDEV --proto icmp --icmp-type echo-request -j ACCEPT
	$IPTABLES -t filter -A INPUT -i $INTDEV --proto icmp -j DROP 
else
	$IPTABLES -t filter -A INPUT -i $INTDEV --proto icmp -s 192.168.1.0/24 -d 0/0 -j DROP
	$IPTABLES -t filter -A INPUT -i $INTDEV --proto icmp -j DROP
fi
#--------------------------------------------------------------------------------------------------
if [ "$ICMP_EXTERN" = "1" ]; then
	$IPTABLES -t filter -A INPUT -i $EXTDEV --proto icmp --icmp-type echo-request -s 0/0 -d 0/0 -j ACCEPT
	$IPTABLES -t filter -A INPUT -i $EXTDEV --proto icmp --icmp-type echo-request -j ACCEPT
	$IPTABLES -t filter -A INPUT -i $EXTDEV --proto icmp -j DROP
else
        $IPTABLES -t filter -A INPUT -i $EXTDEV --proto icmp -s 0/0 -d 0/0 -j DROP
        $IPTABLES -t filter -A INPUT -i $EXTDEV --proto icmp -j DROP
fi
#--------------------------------------------------------------------------------------------------

########################################################################################################################
#		DDoS und NMAp Rules
########################################################################################################################

echo "Regeln gegen einen DDos und NMap werden geschrieben"
$IPTABLES -A INPUT --protocol tcp -i $EXTDEV --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A INPUT --protocol tcp -i $EXTDEV --tcp-flags ALL ALL -j DROP
$IPTABLES -A INPUT --protocol tcp -i $EXTDEV --tcp-flags ALL NONE -j DROP
$IPTABLES -A INPUT --protocol tcp -i $EXTDEV --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A INPUT --protocol tcp -i $EXTDEV --tcp-flags SYN,RST SYN,RST -j DROP 
$IPTABLES -A INPUT --protocol tcp -i $EXTDEV --tcp-flags SYN,FIN SYN,FIN -j DROP
#--------------------------------------------------------------------------------------------------
# Zulassen von maximalen Verbindungen auf den Rechner und unterbinden eines DOS oder PoD
#--------------------------------------------------------------------------------------------------
$IPTABLES -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
$IPTABLES -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT 
#--------------------------------------------------------------------------------------------------
# Zulassen von maximalen Verbindungen auf den Rechner und unterbinden eines DOS oder PoD
#--------------------------------------------------------------------------------------------------
$IPTABLES -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
$IPTABLES -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT 

########################################################################################################################
#		NAT
########################################################################################################################
echo "Nat wird konfiguriert"
$IPTABLES -A FORWARD -s $INTRANET -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -j logdrop

$IPTABLES -A INPUT -s $INTRANET -j ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -j logdrop

########################################################################################################################
#		dnat
########################################################################################################################
#echo "DNat Tabelle wird geladen"
#$IPTABLES -t nat -A PREROUTING -i $EXTDEV --protocol tcp --destination-port 8821 -j DNAT --to-dest 192.168.1.123:21
#$IPTABLES -t nat -A PREROUTING -i $EXTDEV --protocol tcp --destination-port 8821 -j DNAT --to 192.168.1.123:21


########################################################################################################################
#		LAN Open
########################################################################################################################
echo "LAN wird eingerichtet"

$IPTABLES -A INPUT -t filter -m state --state ESTABLISHED,RELATED -i $INTDEV --protocol tcp -s $INTRANET -d $INTRANET -j ACCEPT

for i in ${INTPORTS_TCP[*]}; do
	$IPTABLES -t filter -A INPUT -m state --state NEW -i $INTDEV --protocol tcp -s $INTRANET -d $INTRANET --destination-port $i -j ACCEPT
done

for i in ${INTPORTS_UDP[*]}; do
	$IPTABLES -t filter -A INPUT -m state -i $INTDEV --protocol udp -s $INTRANET -d $INTRANET --destination-port $i --state NEW -j ACCEPT
done

$IPTABLES -A INPUT -t filter -m state --state NEW -j logdrop



########################################################################################################################
#	Software update zulasen
########################################################################################################################
echo "Software Quellen werden freigeschalten"

$IPTABLES -A OUTPUT -t filter -m state --state NEW --protocol udp --destination-port 53 -j ACCEPT

for i in ${SOFTWARE[*]}; do
	$IPTABLES -A OUTPUT -j software -d $i --protocol tcp --destination-port 80 -m state --state NEW
	$IPTABLES -A OUTPUT -j software -d $i --protocol tcp --destination-port 21 -m state --state NEW
done

$IPTABLES -A OUTPUT -j software -d 192.53.103.103 --protocol udp --destination-port 123 -m state --state NEW
$IPTABLES -A OUTPUT -j software -d 192.53.103.104 --protocol udp --destination-port 123 -m state --state NEW

$IPTABLES -A OUTPUT -t filter -m state --state NEW -j webdrop


########################################################################################################################
#		Internet Open
########################################################################################################################
echo "Ports für das Internet werden geöffnet"
$IPTABLES -A INPUT -t filter -m state --state ESTABLISHED,RELATED -i $EXTDEV --protocol tcp -s 0/0 -d 0/0 -j ACCEPT
for i in ${INTERNET_TCP[*]}; do
	$IPTABLES -t filter -A INPUT -m state --state NEW -i $EXTDEV --protocol tcp -s 0/0 -d 0/0 --destination-port $i -j ACCEPT
done

for i in ${INTERNET_UDP[*]}; do
	$IPTABLES -t filter -A INPUT -m state --state NEW -i $EXTDEV --protocol udp -s 0/0 -d 0/0 --destination-port $i -j ACCEPT
done

#----------------------------------------------------------------------------------
    echo ""    
	echo "Firewall ist jetzt bereit"
;;
restart)
        $0 stop && $0 start
;;
off)
        $IPTABLES -F
;;
status)
        $IPTABLES -nvL
;;
*)
        echo ""
        echo "          Gültige Parameter: /etc/init.d/fw start|restart|off|status"
        echo ""
exit 1
;;
esac
exit 0

fw.proc
Code:
echo "Kerneleinstellungen werden geladen"
# IP Forwarding einschalten
	echo 1 > /proc/sys/net/ipv4/ip_forward
	echo 1 > /proc/sys/net/ipv4/ip_dynaddr

#--- ICMP Schutz ---------------------------------------#

# ICMP Echo-Broadcasts ignorieren
	echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null

# Ungültige ICMP-Antworten ignorieren
	echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null

# auf Broadcast-Pings nicht antworten
	echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# halt die Klappe bei komischen ICMP Nachrichten
	echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

#--- TCP Verbindungs Schutz ---------------------------------------#

# max Anzahl von nicht mehr verbunden Sockets die im Kernel verbleiben
	#echo 0 > /proc/sys/net/ipv4/tcp_max_orphans

# max Wiederholungen  fuer Verbindungen die ich geschlossen aber kein ACK bekommen habe
	#echo 15 > /proc/sys/net/ipv4/tcp_orphan_retries

# Zeit wie lange Sockets die geschlossen sind erhalten bleiben
	echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# max  Antworten auf ein TCP-SYN
	echo 3 > /proc/sys/net/ipv4/tcp_retries1

# max Wiederholungen  fuer bekannte Verbindungen bevor abgebrochen wird
	echo 15 > /proc/sys/net/ipv4/tcp_retries2

# Schutz vor SYN-flood
	echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null

# Setze Default-TTL auf 61 (Default fuer Linux ist 64) ->
# Betriebssystem-Version verstecken
	echo 61 > /proc/sys/net/ipv4/ip_default_ttl

# sende RST-Pakete wenn der Buffer voll ist
	echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow

# warte max. 30 secs auf ein FIN/ACK
	echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# unterbreche Verbindungsaufbau nach 3 SYN-Paketen
# Default ist 6
	echo 3 > /proc/sys/net/ipv4/tcp_syn_retries

# unterbreche Verbindungsaufbau nach 3 SYN/ACK-Paketen
# Default ist 6
	echo 3 > /proc/sys/net/ipv4/tcp_synack_retries

# Syncookie Aktivieren
	echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# aktiviere SYN Flood Protection
	echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Kicke den ganzen IP Spoofing Shit
# (Source-Validierung anschalten)
	echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
	echo 1 > /proc/sys/net/ipv4/conf/$EXTDEV/rp_filter

#--- Fragmentierung ---------------------------------------#

# max Speichergroesse fuer IP-Defragmentierung  (max 256kb min 192kb)
	echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
	echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh

# max Zeit in s wie lange IP Fragmente im Speicher bleiben
	echo 30 > /proc/sys/net/ipv4/ipfrag_time

#--- TCP Spoofing Schutz ---------------------------------------#

# Stop Source-Routing (Absender kann Route eines Packets nicht vorgeben)
	echo 0 > /proc/sys/net/ipv4/conf/$EXTDEV/accept_source_route

# Reverse-Path-Filter (Antwortpacket muss durch selbe Schnittstelle wie
# Senderpacket nur bei mehereren Schnittstellen notwendig)
	echo 2 > /proc/sys/net/ipv4/conf/$EXTDEV/rp_filter

# Stop Redirecting (Router kann mir keine anderer Route fuer ein Packet vorgeben)
	echo 0 > /proc/sys/net/ipv4/conf/$EXTDEV/accept_redirects

#--- ARP Schutz ------------------------------------------------#

# ARP Adressen werden nicht geaendert wenn ein existierender Eintrag juenger als
# Jiffie Wert ist  (100 jiffie = 1 Sekunde)
	echo 1000 > /proc/sys/net/ipv4/neigh/$EXTDEV/locktime

# Proxy-ARP ausschalten (Rechner liefert keine Hardwareadressen von anderen Rechner)
	echo 0 > /proc/sys/net/ipv4/conf/$EXTDEV/proxy_arp

#--- sonstiges -------------------------------------------------#

# Log Martians (Packete deren Route nicht ermittelt werden kann werden Protokolliert)
	echo 1 > /proc/sys/net/ipv4/conf/$EXTDEV/log_martians

# BOOTP-Relaying ausschalten
	echo 0 > /proc/sys/net/ipv4/conf/$EXTDEV/bootp_relay
 

Frankie777

Advanced Hacker
Hallo,
was mir aufgefallen ist:

bei Script stop wird nur filter geflusht, nicht aber nat und mangle. Ebenso habe ich setzen der default policy für die Chains nicht gefunden.

Und zumindest innerhalb des LANs sollte man nicht nur dropen, sondern auch r tcp-reset bzw. proto-unreachable nehmen.

Bei der Forward chain halte ich ein SYN pro Sekunde für ein bißchen wenig. Besser hier zu dem limit Befehl noch die Option burst nehmen, das macht die Filterung flexibler.
 
Oben