# 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