# Linux-Server IP-Adresse 192.168.1.10
# Router (Default Gateway und DNS-Server) 192.168.1.1

# Standardverhalten (policy) der Chains: DROP (Pakete verwerfen)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Userdefinierte Chains
iptables -N mail
iptables -N ntp
iptables -N smtp
iptables -N ssc
iptables -N syn

#-------------------------------------------------------------------------------------------------
# Standardregel für "Stateful Packet Filtering": Alle Pakete etablierter Verbindungen sind erlaubt
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

# Neue eingehende Verbindungen vom lokalen Subnetz zu (auch) UDP-basierten Server-Diensten: NTP, Samba, SysLog, Counter-Strike
iptables -A INPUT -s 192.168.1.0/255.255.255.0 -d 192.168.1.10 -i eth0 -p udp -m state --state NEW -m multiport --dports ntp,netbios-ns,netbios-dgm,syslog,27015 -j ACCEPT 

# Neue eingehende UDP-Broadcast-Verbindungen vom lokalen Subnetz: Samba
iptables -A INPUT -s 192.168.1.0/255.255.255.0 -d 192.168.1.255 -i eth0 -p udp -m state --state NEW -m udp --sport 137:138 --dport 137:138 -j ACCEPT 

# Alle neuen eingehenden TCP-Verbindungen werden in der Chain "syn" erst einmal getestet (s.u.)
iptables -A INPUT -d 192.168.1.10 -i eth0 -p tcp -m state --state NEW -j syn 

# Neue eingehende Verbindungen vom lokalen Subnetz zu (auch) TCP-basierten Server-Diensten: POP3, IMAP, Samba, Squid, 
iptables -A INPUT -s 192.168.1.0/255.255.255.0 -d 192.168.1.10 -i eth0 -p tcp -m state --state NEW -m multiport --dports pop3,netbios-ssn,imap,microsoft-ds,squid,2370 -j ACCEPT 

# Neue eingehende Verbindungen zum SMTP-Port (Postfix) werden in der Chain "smtp" auf ihre Herkunft überprüft
iptables -A INPUT -d 192.168.1.10 -i eth0 -p tcp -m state --state NEW -m tcp --dport 25 -j smtp 

# Neue eingehende Verbindungen zum SSH-Port (sshd) werden in der Chain "ssc" auf ihre Herkunft überprüft, danach geloggt und erlaubt
iptables -A INPUT -d 192.168.1.10 -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j ssc 
iptables -A INPUT -d 192.168.1.10 -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j LOG 
iptables -A INPUT -d 192.168.1.10 -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 

# Neue eingehende Verbindungen zum HTTP-Port (apache) werden geloggt und erlaubt
iptables -A INPUT -d 192.168.1.10 -i eth0 -p tcp -m state --state NEW -m tcp --dport 80 -j LOG 
iptables -A INPUT -d 192.168.1.10 -i eth0 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT 

# Erlaubte eingehende UDP-Broadcasts des Counter-Strike Clients (LAN Game)
iptables -A INPUT -s 192.168.1.0/255.255.255.0 -d 255.255.255.255 -i eth0 -p udp -m state --state NEW -m udp --dport 27015:27024 -j ACCEPT 

# alle anderen eingehenden Broadcasts werden verworfen
iptables -A INPUT -d 255.255.255.255 -i eth0 -j DROP 

# alle eingehenden fragmentierten Pakete werden verworfen
iptables -A INPUT -i eth0 -f -j DROP 

# ICMP-Pakete des Typs "echo-request" werden verworfen (Ping)
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP 

# erlaubte eingehende Verbindungen über das loopback-device
iptables -A INPUT -s 192.168.1.10 -d 192.168.1.10 -i lo -m state --state NEW -j ACCEPT 
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -m state --state NEW -j ACCEPT 

# alle nicht erlaubten Pakete werden geloggt und dann durch die policy (s.o.) verworfen
iptables -A INPUT -j LOG 

#-------------------------------------------------------------------------------------------------
# Standardregel für "Stateful Packet Filtering": Alle Pakete etablierter Verbindungen sind erlaubt
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

# erlaubte ausgehende TCP-Verbindungen (Squid: ftp, http, https)
iptables -A OUTPUT -s 192.168.1.10 -o eth0 -p tcp -m state --state NEW -m multiport --dports ftp,http,https -m owner --uid-owner squid -j ACCEPT 

# erlaubte ausgehende HTTP-Verbindungen zum Router (ddclient)
iptables -A OUTPUT -s 192.168.1.10 -d 192.168.1.1 -o eth0 -p tcp -m state --state NEW -m tcp --dport 80 -m owner --uid-owner root -j ACCEPT 

# erlaubte ausgehende UDP-Broadcasts (Samba)
iptables -A OUTPUT -s 192.168.1.10 -d 192.168.1.0/255.255.255.0 -o eth0 -p udp -m state --state NEW -m udp --sport 137:138 -j ACCEPT 

# erlaubte ausgehende NTP-Verbindungen werden in der Chain "ntp" auf ihre Zieladresse hin überprüft und dann dort zugelassen (ntpd)
iptables -A OUTPUT -s 192.168.1.10 -o eth0 -p udp -m state --state NEW -m udp --sport 123 --dport 123 -m owner --uid-owner root -j ntp 

# erlaubte DNS-Requests zum Router
iptables -A OUTPUT -s 192.168.1.10 -d 192.168.1.1 -o eth0 -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT 

# erlaubte ausgehende HTTP-Verbindungen zum Webserver (indexer.pl/perlfect search)
iptables -A OUTPUT -s 192.168.1.10 -d 192.67.198.52 -o eth0 -p tcp -m state --state NEW -m tcp --dport 80 -m owner --uid-owner root -j ACCEPT 

# erlaubte ausgehende "email"-Verbindungen werden in der Chain "mail" auf ihre Zieladresse hin überprüft und dann dort zugelassen (fetchmail))
iptables -A OUTPUT -s 192.168.1.10 -o eth0 -p tcp -m state --state NEW -m multiport --dports pop3,imap -j mail 

# erlaubte ausgehende Verbindungen zu den razor2-Servern (spamassassin/razor-client)
iptables -A OUTPUT -s 192.168.1.10 -d 216.52.3.0/255.255.255.0 -o eth0 -p tcp -m state --state NEW -m tcp --dport 2703 -m owner --uid-owner filter -j ACCEPT 

# erlaubte ausgehende SMTP-Verbindungen zum Mailrelay (Postfix)
iptables -A OUTPUT -s 192.168.1.10 -d 194.25.134.0/255.255.255.0 -o eth0 -p tcp -m state --state NEW -m tcp --dport 25 -m owner --uid-owner postfix -j ACCEPT 

# hängengebliebene (TCP timeout) Verbindungen zum Squid werden verworfen
iptables -A OUTPUT -s 192.168.1.10 -d 192.168.1.0/255.255.255.0 -o eth0 -p tcp -m tcp --sport 3128 -j DROP 

# erlaubte ausgehende HTTP-Verbindungen zu den dyndns-Servern (ddclient)
iptables -A OUTPUT -s 192.168.1.10 -d 66.151.188.0/255.255.255.0 -o eth0 -p tcp -m state --state NEW -m tcp --dport 80 -m owner --uid-owner root -j ACCEPT 

# erlaubte ausgehende TCP-Verbindungen zu den WON-Servern (Counter-Strike)
iptables -A OUTPUT -s 192.168.1.10 -o eth0 -p tcp -m state --state NEW -m tcp --dport 7002 -m owner --uid-owner hl -j ACCEPT 

# erlaubte ausgehende UDP-Broadcasts (Counter-Strike)
iptables -A OUTPUT -s 192.168.1.10 -d 192.168.1.0/255.255.255.0 -o eth0 -p udp -m state --state NEW -m udp --sport 27015 -j ACCEPT 

# erlaubte ausgehende UDP-Verbindungen zu den speakeasy.net-Servern (Counter-Strike)
iptables -A OUTPUT -s 192.168.1.10 -o eth0 -p udp -m state --state NEW -m udp --dport 27012 -m owner --uid-owner hl -j ACCEPT 

# erlaubte ausgehende NBSession-Verbindungen zum lokalen Subnetz (Samba-Client)
iptables -A OUTPUT -s 192.168.1.10 -d 192.168.1.0/255.255.255.0 -o eth0 -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT 

# erlaubte ausgehende ICMP-Verbindungen des Typs "echo-request" (Ping)
iptables -A OUTPUT -s 192.168.1.10 -o eth0 -p icmp -m icmp --icmp-type 8 -m state --state NEW -j ACCEPT 

# erlaubte ausgehende Verbindungen über das loopback-device
iptables -A OUTPUT -s 192.168.1.10 -d 192.168.1.10 -o lo -m state --state NEW -j ACCEPT 
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -m state --state NEW -j ACCEPT 

# alle nicht erlaubten Pakete werden geloggt und dann durch die policy (s.o.) verworfen
iptables -A OUTPUT -j LOG 

#-------------------------------------------------------------------------------------------------
# Chain "mail": Erlaubte Zielhosts für POP3 und IMAP
iptables -A mail -d 130.149.4.18 -j ACCEPT 
iptables -A mail -d 192.67.198.79 -j ACCEPT 
iptables -A mail -d 192.67.198.2 -j ACCEPT 
iptables -A mail -d 192.67.198.62 -j ACCEPT 
iptables -A mail -d 194.25.134.32 -j ACCEPT 
iptables -A mail -d 194.25.134.33 -j ACCEPT 
iptables -A mail -d 194.25.134.88 -j ACCEPT 
iptables -A mail -d 194.25.134.89 -j ACCEPT 
iptables -A mail -d 194.25.134.90 -j ACCEPT 
iptables -A mail -d 194.25.134.91 -j ACCEPT 
iptables -A mail -d 194.25.134.96 -j ACCEPT 
iptables -A mail -d 194.25.134.97 -j ACCEPT 
iptables -A mail -d 194.25.134.24 -j ACCEPT 
iptables -A mail -d 194.25.134.25 -j ACCEPT 
iptables -A mail -d 194.25.134.26 -j ACCEPT 
iptables -A mail -d 194.25.134.27 -j ACCEPT 
iptables -A mail -j DROP 

#-------------------------------------------------------------------------------------------------
# Chain "ntp": Erlaubte Zielhosts für NTP
iptables -A ntp -d 195.145.119.188 -j ACCEPT 
iptables -A ntp -d 130.149.17.21 -j ACCEPT 
iptables -A ntp -d 130.149.17.8 -j ACCEPT 
iptables -A ntp -d 192.53.103.103 -j ACCEPT 
iptables -A ntp -d 192.53.103.104 -j ACCEPT 
iptables -A ntp -j DROP 

#-------------------------------------------------------------------------------------------------
# Chain "smtp": Erlaubte Quellhosts für SMTP
iptables -A smtp -s 192.67.198.82 -j ACCEPT 
iptables -A smtp -s 192.67.198.73 -j ACCEPT 
iptables -A smtp -s 192.67.198.72 -j ACCEPT 
iptables -A smtp -s 192.67.198.71 -j ACCEPT 
iptables -A smtp -s 192.67.198.83 -j ACCEPT 
iptables -A smtp -s 192.168.1.0/255.255.255.0 -j ACCEPT 
iptables -A smtp -s 194.25.134.16 -j ACCEPT 
iptables -A smtp -s 194.25.134.80 -j ACCEPT 
iptables -A smtp -s 194.25.134.17 -j ACCEPT 
iptables -A smtp -s 194.25.134.81 -j ACCEPT 
iptables -A smtp -s 194.25.134.18 -j ACCEPT 
iptables -A smtp -s 194.25.134.82 -j ACCEPT 
iptables -A smtp -s 194.25.134.19 -j ACCEPT 
iptables -A smtp -s 194.25.134.83 -j ACCEPT 
iptables -A smtp -s 194.25.134.20 -j ACCEPT 
iptables -A smtp -s 194.25.134.84 -j ACCEPT 
iptables -A smtp -s 194.25.134.21 -j ACCEPT 
iptables -A smtp -s 194.25.134.85 -j ACCEPT 
iptables -A smtp -s 130.149.4.15 -j ACCEPT 
iptables -A smtp -s 130.149.4.14 -j ACCEPT 
iptables -A smtp -s 193.28.100.151 -j ACCEPT 
iptables -A smtp -j LOG 
iptables -A smtp -j DROP 

#-------------------------------------------------------------------------------------------------
# Chain "ssc": Erlaubte Quellhosts für SSH
iptables -A ssc -s 192.168.1.0/255.255.255.0 -j RETURN 
iptables -A ssc -s 130.149.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 62.153.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 62.154.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 62.155.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 62.156.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 62.157.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 62.158.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 62.159.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 62.224.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 62.225.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 62.226.0.0/255.254.0.0 -j RETURN 
iptables -A ssc -s 80.128.0.0/255.224.0.0 -j RETURN 
iptables -A ssc -s 193.158.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 193.159.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 194.25.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 195.145.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 195.243.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 212.184.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 212.185.0.0/255.255.0.0 -j RETURN 
iptables -A ssc -s 217.0.0.0/255.248.0.0 -j RETURN 
iptables -A ssc -s 217.80.0.0/255.240.0.0 -j RETURN 
iptables -A ssc -s 217.224.0.0/255.224.0.0 -j RETURN 
iptables -A ssc -j DROP 

#-------------------------------------------------------------------------------------------------
# Chain "syn": SYN-Pakete mit nicht korrekten TCP-Flags und mehr als 15 pro Sekunde werden verworfen
iptables -A syn -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -j DROP 
iptables -A syn -m limit --limit 15/sec --limit-burst 25 -j RETURN 
iptables -A syn -j DROP