Να ένα IPv4 + IPv6 firewalling setup (από το ip6table-save, δυστυχώς). Έχω αφαιρέσει αρκετούς κανόνες που δεν έχουν σχέση με setups άλλων. Το ruleset δείχνει άκομψο γιατί το φτιάχνω με scripts (πολλά for loops) και η συντήρησή του δε γίνεται από command line.
Προφανώς ΔΕΝ προσφέρω
καμμία απολύτως εγγύηση για αυτό το ruleset. Υποθέστε ότι είναι ήδη compromised πριν το διαβάσετε και το καταλάβετε.
Η εφαρμογή κρίσης, γνώσης και κοινής λογικής είναι υποχρεωτικές. Αν θέλετε σοβαρό firewalling/security προσαρμοσμένο στις ανάγκες σας, είναι μέρος της δουλειάς μου. Μιλήστε μου.
Firewalling policy: τίποτα δεν επιτρέπεται προς τα μέσα εκτός μερικών ICMP πακέτων και ssh (22/tcp) από συγκεκριμένα τοπικά subnets (10.0.0.0/8, 192.168.0.0/16 και 172.16.0.0/16). Τα πάντα επιτρέπονται προς τα έξω. Χρησιμοποιείται stateful filtering.
Το IPv6 ruleset επιτρέπει echo (ping) προς το IPv6 IP address $MY_IPV6_IP. Πρέπει να κάνετε find replace το «$MY_IPV6_IP» με την πραγματική διεύθυνση του προσωπικού σας μηχανήματος (πχ 2001:666:42::deaf:cafe:babe/128). Για routers όλη αυτή η διαδικασία περιπλέκεται σημαντικά. Δείτε το RFC 4890 για ένα παράδειγμα.
Προσοχή: αυτό το ruleset πιθανότατα κλείνει χρήσιμες υπηρεσίες. Σίγουρα κλείνει το IPP (CUPS — printing), το CIFS/SMB/Netbios (Windows printing/sharing) και το Bonjour/Zeroconf/MDNS (multicast DNS) που πιθανότατα χρειάζονται σε σύγχρονα τοπικά δίκτυα.
1. IPv4 (iptables)
Κώδικας:
# Generated by iptables-save v1.4.8 on Thu Jan 27 22:23:19 2011
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Thu Jan 27 22:23:19 2011
# Generated by iptables-save v1.4.8 on Thu Jan 27 22:23:19 2011
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Thu Jan 27 22:23:19 2011
# Generated by iptables-save v1.4.8 on Thu Jan 27 22:23:19 2011
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:CHKICMP - [0:0]
:CHKICMP6 - [0:0]
:EGRESS - [0:0]
:INGRESS - [0:0]
-A INPUT -j INGRESS
-A INPUT -j LOG --log-prefix "default_policy(DROP):"
-A FORWARD -j INGRESS
-A FORWARD -j LOG --log-prefix "default_policy(DROP):"
-A CHKICMP -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A CHKICMP -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A CHKICMP -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A CHKICMP -p icmp -m icmp --icmp-type 30 -j ACCEPT
-A CHKICMP -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A CHKICMP -p icmp -j LOG --log-prefix "icmp(DROP):"
-A CHKICMP -p icmp -j DROP
-A INGRESS -i lo+ -j ACCEPT
-A INGRESS -p icmp -j CHKICMP
-A INGRESS -p tcp -m tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT
-A INGRESS -s 10.0.0.0/8 -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INGRESS -s 172.16.0.0/16 -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INGRESS -s 192.168.0.0/16 -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INGRESS -p tcp -m tcp --dport 22 -j LOG --log-prefix "ssh(DROP):"
-A INGRESS -p tcp -m tcp --dport 22 -j DROP
-A INGRESS -p icmp -j CHKICMP
-A INGRESS -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INGRESS -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INGRESS -m state --state INVALID -j LOG --log-prefix "fwerr_invalid(DROP):"
-A INGRESS -m state --state INVALID -j DROP
-A INGRESS -m state --state NEW -j LOG --log-prefix "fwerr_unprivileged(DROP):"
-A INGRESS -m state --state NEW -j DROP
-A INGRESS -j LOG --log-prefix "fwerr_attack(DROP):"
-A INGRESS -j DROP
COMMIT
# Completed on Thu Jan 27 22:23:19 2011
1. IPv6 (ip6tables)
Κώδικας:
# Generated by ip6tables-save v1.4.8 on Thu Jan 27 22:34:54 2011
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Thu Jan 27 22:34:54 2011
# Generated by ip6tables-save v1.4.8 on Thu Jan 27 22:34:54 2011
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:CHKICMP - [0:0]
:CHKICMP6 - [0:0]
:EGRESS - [0:0]
:INGRESS - [0:0]
-A INPUT -j INGRESS
-A INPUT -m rt --rt-type 0 -j LOG --log-prefix "ipv6_RH0(DROP)"
-A INPUT -m rt --rt-type 0 -j DROP
-A INPUT -j LOG --log-prefix "default_policy(DROP):"
-A FORWARD -j INGRESS
-A FORWARD -m rt --rt-type 0 -j LOG --log-prefix "ipv6_RH0(DROP)"
-A FORWARD -m rt --rt-type 0 -j DROP
-A FORWARD -j LOG --log-prefix "default_policy(DROP):"
-A OUTPUT -m rt --rt-type 0 -j LOG --log-prefix "ipv6_RH0(DROP)"
-A OUTPUT -m rt --rt-type 0 -j DROP
-A CHKICMP6 -s $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A CHKICMP6 -d $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A CHKICMP6 -s $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A CHKICMP6 -d $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A CHKICMP6 -d ff00::/8 -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j LOG --log-prefix "icmp6(DROP):"
-A CHKICMP6 -d ff00::/8 -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j DROP
-A CHKICMP6 -d $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A CHKICMP6 -s $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A CHKICMP6 -d $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A CHKICMP6 -s $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A CHKICMP6 -d $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 3/0 -j ACCEPT
-A CHKICMP6 -d $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 3/1 -j ACCEPT
-A CHKICMP6 -s $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 3/0 -j ACCEPT
-A CHKICMP6 -s $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 3/1 -j ACCEPT
-A CHKICMP6 -s $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 4/1 -j ACCEPT
-A CHKICMP6 -s $MY_IPV6_IP -p ipv6-icmp -m icmp6 --icmpv6-type 4/2 -j ACCEPT
-A CHKICMP6 -p ipv6-icmp -m icmp6 --icmpv6-type 4/0 -j ACCEPT
-A CHKICMP6 -p ipv6-icmp -j LOG --log-prefix "icmp6(DROP):"
-A CHKICMP6 -p ipv6-icmp -j DROP
-A INGRESS -i lo+ -j ACCEPT
-A INGRESS -p ipv6-icmp -j CHKICMP6
-A INGRESS -p tcp -m tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT
-A INGRESS -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INGRESS -p tcp -m tcp --dport 22 -j LOG --log-prefix "ssh(DROP):"
-A INGRESS -p tcp -m tcp --dport 22 -j DROP
-A INGRESS -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INGRESS -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INGRESS -m state --state INVALID -j LOG --log-prefix "fwerr_invalid(DROP):"
-A INGRESS -m state --state INVALID -j DROP
-A INGRESS -m state --state NEW -j LOG --log-prefix "fwerr_unprivileged(DROP):"
-A INGRESS -m state --state NEW -j DROP
-A INGRESS -j LOG --log-prefix "fwerr_attack(DROP):"
-A INGRESS -j DROP
COMMIT
# Completed on Thu Jan 27 22:37:31 2011