iptables firewall script Desaster

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
fulltilt
Beiträge: 1155
Registriert: 03.12.2006 20:10:57

iptables firewall script Desaster

Beitrag von fulltilt » 01.08.2018 12:54:43

Ich habe seit einiger Zeit nur UFW verwendet, möchte aber gerne ein spezielles Firewall Bashscript verwenden, irgendwie scheint das unter Debian 9 alles nicht mehr zu klappen ... hier wird alles komplett dicht gemacht wenn ich das Script starte, UFW hingegen funktioniert (soll aber weg).
z.B. diese beiden einfachen Scripts:
https://wiki.debianforum.de/Einfaches_Firewall-Script
https://www.linuxnorth.org/five_minute_firewall/

ich habe die Ports natürlich angepasst, iptables -L gibt auch alles richtig aus, aber trotz Freigabe der IN/OUT Ports wird alles von aussen abgeblockt.
iptables-persistent ist nicht installiert, ich möchte das Script selbst starten.
Hat jemand ein kleines Testscript was garantiert mit Debian 9 funktioniert?
Zuletzt geändert von fulltilt am 01.08.2018 13:43:41, insgesamt 1-mal geändert.
Debian: Testing
Desktop: KDE Plasma 5

hec_tech
Beiträge: 1093
Registriert: 28.06.2007 21:49:36
Wohnort: Wien
Kontaktdaten:

Re: iptables firewall script disaster

Beitrag von hec_tech » 01.08.2018 13:16:23

Die Reihenfolge ist aber schon richtig?

Benutzeravatar
fulltilt
Beiträge: 1155
Registriert: 03.12.2006 20:10:57

Re: iptables firewall script Desaster

Beitrag von fulltilt » 01.08.2018 13:28:31

ja, das scheint an den Parametern zu liegen hier ist -P OUTPUT explizit angegeben ...
dieses Script funktioniert:

Code: Alles auswählen

# Flush INPUT/OUTPUT/FORWARD chains
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

# Drop invalid packets
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

# Pass everything on loopback
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Accept incoming packets for established connections
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Accept incoming ICMP
iptables -A INPUT -p icmp -j ACCEPT

# Accept incoming SSH on eth0 interface
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

# Accept connections
iptables -P OUTPUT ACCEPT

# Drop everything else on INPUT/FORWARD
iptables -P INPUT   DROP
iptables -P FORWARD DROP
in beiden vorigen Scriptn was nicht funzt:
# Drop all other traffic
iptables -A INPUT -j DROP

beim obigen klappt es vermutlich weil der komplette Output akzeptiert wird:
iptables -P OUTPUT ACCEPT
# Drop everything else on INPUT/FORWARD
iptables -P INPUT DROP
iptables -P FORWARD DROP
Debian: Testing
Desktop: KDE Plasma 5

Benutzeravatar
fulltilt
Beiträge: 1155
Registriert: 03.12.2006 20:10:57

Re: iptables firewall script Desaster

Beitrag von fulltilt » 01.08.2018 17:14:01

hab das lange Zeit nicht mehr gemacht ;-)
Könnt ihr einmal drüberschauen ob das so OK ist?
ich habe alle wichtigen Rules vor die ACCEPTs gesetzt und auch die erlaubten freigegebenen IPs der Slaves und Zabbix Server ....

Code: Alles auswählen

#!/bin/sh
# Flush INPUT/OUTPUT/FORWARD chains
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

# Allow from IP addresses zabbix and other
iptables -A INPUT -s xxx.xxx.xxx.xx -j ACCEPT
iptables -A OUTPUT -d xxx.xxx.xxx.xx -j ACCEPT
# linode dns slaves
iptables -A INPUT -s xxx.xxx.xxx.xx -j ACCEPT
iptables -A OUTPUT -d xxx.xxx.xxx.xx -j ACCEPT
iptables -A INPUT -s xxx.xxx.xxx.xx -j ACCEPT
iptables -A OUTPUT -d xxx.xxx.xxx.xx -j ACCEPT

# Drop invalid packets
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

# Drop TCP packets that are new and are not SYN
iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

# Drop SYN packets with suspicious MSS value
iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP

# limit imcp ing to 1sec
iptables -D INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m udp -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t raw -I PREROUTING -m icmp -p icmp --icmp-type any -j NOTRACK

# Block packets with bogus TCP flags
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

# Block spoofed packets
iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP
iptables -t mangle -A PREROUTING -s 169.254.0.0/16 -j DROP
iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP
iptables -t mangle -A PREROUTING -s 192.0.2.0/24 -j DROP
iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP
iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP
iptables -t mangle -A PREROUTING -s 0.0.0.0/8 -j DROP
iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP
iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP

# Drop fragments in all chains
iptables -t mangle -A PREROUTING -f -j DROP

# Limit connections per source IP
iptables -A INPUT -p tcp -m connlimit --connlimit-above 111 -j REJECT --reject-with tcp-reset

# Limit RST packets
iptables -A INPUT -p tcp --tcp-flags RST RST -m limit --limit 2/s --limit-burst 2 -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP

# Limit new TCP connections per second per source IP
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP

# Chain for preventing ping flooding - up to 6 pings per second from a single
iptables -N ICMPFLOOD
iptables -A ICMPFLOOD -m recent --name ICMP --set --rsource
iptables -A ICMPFLOOD -m recent --name ICMP --update --seconds 1 --hitcount 6 --rsource --rttl -m limit --limit 1/sec --limit-burst 1 -j LOG --log-prefix "iptables[ICMP-flood]: "
iptables -A ICMPFLOOD -m recent --name ICMP --update --seconds 1 --hitcount 6 --rsource --rttl -j DROP
iptables -A ICMPFLOOD -j ACCEPT

# Drop all incoming malformed NULL packets
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# Drop syn-flood attack packets
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

# Drop incoming malformed XMAS packets
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

#Ratelimit DNS
iptables -A INPUT -p udp -m udp --dport 53 -m limit --limit 5/sec -j LOG --log-prefix "fw-dns " --log-level 7
iptables -A INPUT -p udp --dport 53 -m string --from 50 --algo bm --hex-string '|0000FF0001|' -m recent --set --name dnsanyquery --mask 255.255.255.0
iptables -A INPUT -p udp --dport 53 -m string --from 50 --algo bm --hex-string '|0000FF0001|' -m recent --name dnsanyquery --rcheck --seconds 1 --hitcount 1 -j DROP --mask 255.255.255.0
iptables -I INPUT -i eth0 -p udp --dport 53 -m hashlimit --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-above 100/s --hashlimit-burst 100 --hashlimit-name=bad -j DROP

# SYNPROXY
iptables -t raw -D PREROUTING -p tcp -m tcp --syn -j CT --notrack
iptables -D INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

# Pass everything on loopback
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Accept incoming packets for established connections
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#Ratelimit SSH
iptables -A INPUT -i eth0 -p tcp --dport 2225 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
iptables -A INPUT -i eth0 -p tcp --dport 2225 -m state --state NEW -m recent --set
iptables -A INPUT -i eth0 -p tcp --dport 2225 -m state --state NEW -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -j ACCEPT

# Allow icmp ping limit 2
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 1/second --limit-burst 2 -j ACCEPT

# Allow INPUT ports
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 2225 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8081 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8082 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 10050 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 10051 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 10000 -j ACCEPT

# slowloris
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 --connlimit-mask 20 -j DROP
iptables -I INPUT -p tcp --dport 443 -m connlimit --connlimit-above 50 --connlimit-mask 20 -j DROP
iptables -I INPUT -p tcp --dport 8081 -m connlimit --connlimit-above 50 --connlimit-mask 20 -j DROP
iptables -I INPUT -p tcp --dport 8082 -m connlimit --connlimit-above 50 --connlimit-mask 20 -j DROP

# Stealth Scans
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

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

# SYN und RST
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# FIN und RST
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

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

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

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

# Stop smurf attacks
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -j DROP

# Drop excessive RST packets to avoid smurf attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT

# SynFlood
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

# PortScan
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

# Accept connections
iptables -P OUTPUT ACCEPT

# Drop everything else on INPUT/FORWARD
iptables -P INPUT   DROP
iptables -P FORWARD DROP

# print the activated rules to the console when script is completed
iptables -nL
Debian: Testing
Desktop: KDE Plasma 5

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: iptables firewall script Desaster

Beitrag von eggy » 02.08.2018 00:27:09

Ohne jetzt das Ganze gelesen zu haben...
Du hast was mit "-D", sieht für mich komisch aus, Absicht?

Benutzeravatar
fulltilt
Beiträge: 1155
Registriert: 03.12.2006 20:10:57

Re: iptables firewall script Desaster

Beitrag von fulltilt » 02.08.2018 06:48:42

ja, das gehört zu einer Limitierung von IMCP pings auf max. 1 ping pro Sekunde, funktioniert auch wie es soll
ping -i 0.1 xxx.xxx.xxx.xx
Debian: Testing
Desktop: KDE Plasma 5

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: iptables firewall script Desaster

Beitrag von eggy » 02.08.2018 10:11:46

Du löschst da was, was es nicht gibt.

Antworten