From 0737c5df82141c7085ac95846089acf0b1b1f9bc Mon Sep 17 00:00:00 2001 From: Tim Niemeyer Date: Mon, 14 Sep 2015 22:14:22 +0200 Subject: [PATCH] firewall: filter broadcasts This ebtables rules are based on the gluon work. Signed-off-by: Tim Niemeyer Reviewed-by: Tobias Klaus --- .../root_file_system/etc/firewall.user | 93 ++++++++++++++++++- 1 file changed, 90 insertions(+), 3 deletions(-) diff --git a/bsp/default/root_file_system/etc/firewall.user b/bsp/default/root_file_system/etc/firewall.user index c2eddfc0..1af101c5 100755 --- a/bsp/default/root_file_system/etc/firewall.user +++ b/bsp/default/root_file_system/etc/firewall.user @@ -1,14 +1,101 @@ #!/bin/sh -#solves MTU problem with bad ISP´s +#solves MTU problem with bad ISPs iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu # Wenn ein router direkt am Netz hängt, ist er auch ssh Angriffen ausgesetzt. -# Das wirkt bei kleinen Geräten wir ein DOS +# Das wirkt bei kleinen Geräten wie ein DOS WAN=$(uci get network.wan.ifname) iptables -A INPUT -i $WAN -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -i $WAN -j REJECT # Limit ssh to 3 new connections per 60 seconds /usr/sbin/ip6tables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name dropbear -/usr/sbin/ip6tables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 --rttl --name dropbear -j DROP \ No newline at end of file +/usr/sbin/ip6tables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 --rttl --name dropbear -j DROP + + +# Im folgenden ebtables rules, die unnötigen Broadcast-Overhead reduzieren sollen: + +######## CLEAN UP ############ +ebtables -F +ebtables -X + +######## IN_ONLY ############ +ebtables -N IN_ONLY -P RETURN + +# Daten aus dem BATMAN werden erlaubt +# Alles außer Daten von BATMAN werden DROP'ed +ebtables -A IN_ONLY -i ! bat0 --logical-in br-mesh -j DROP + +######## OUT_ONLY ############ +ebtables -N OUT_ONLY -P RETURN + +# Daten ins BATMAN werden erlaubt +# Alles außer Daten ins BATMAN werden DROP'ed +ebtables -A OUT_ONLY --logical-out br-mesh -o ! bat0 -j DROP + +######## MULTICAST_OUT ############ +ebtables -N MULTICAST_OUT -P DROP + +# Verbiete ARP Antworten an alle +ebtables -A MULTICAST_OUT -p ARP --arp-op Reply --arp-ip-src 0.0.0.0 -j DROP +# Verbiete ARP Requests an alle +ebtables -A MULTICAST_OUT -p ARP --arp-op Request --arp-ip-dst 0.0.0.0 -j DROP +# Erlaube alle anderen ARP's +ebtables -A MULTICAST_OUT -p ARP -j RETURN +# Erlaube DHCP Requests +ebtables -A MULTICAST_OUT -p IPv4 --ip-proto udp --ip-dport 67 -j RETURN +# Erlaube DHCPv6 Requests +ebtables -A MULTICAST_OUT -p IPv6 --ip6-proto udp --ip6-dport 547 -j RETURN +# Erlaube PING +ebtables -A MULTICAST_OUT -p IPv4 --ip-proto icmp -j RETURN +# Erlaube alles was nicht IP ?? ist " hop-by-hop " ?? +ebtables -A MULTICAST_OUT -p IPv6 --ip6-proto 0 -j RETURN +# Erlaube PINGv6 +ebtables -A MULTICAST_OUT -p IPv6 --ip6-proto ipv6-icmp -j RETURN +# Erlaube Organisation der Multicast Gruppen +ebtables -A MULTICAST_OUT -p IPv4 --ip-proto igmp -j RETURN + +######## INPUT ############ +ebtables -P INPUT ACCEPT + +# Erlaube nur DHCP Antworten von BATMAN -> KNOTEN +ebtables -A INPUT -p IPv4 --ip-proto udp --ip-dport 68 -j IN_ONLY +# Erlaube nur DHCPv6 Antworten von BATMAN -> KNOTEN +ebtables -A INPUT -p IPv6 --ip6-proto udp --ip6-dport 546 -j IN_ONLY +# Erlaube nur Router-Advertisment von BATMAN -> KNOTEN +ebtables -A INPUT -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type router-advertisement -j IN_ONLY +# Verbiete Router-Solicitation von BATMAN -> KNOTEN +ebtables -A INPUT -p IPv6 -i bat0 --ip6-proto ipv6-icmp --ip6-icmp-type router-solicitation -j DROP + +######## FORWARD ############ +ebtables -P FORWARD ACCEPT + +# Erlaube nur DHCP Request von CLIENT -> BATMAN +ebtables -A FORWARD -p IPv4 --ip-proto udp --ip-dport 67 -j OUT_ONLY +# Erlaube nur DHCP Antworten von BATMAN -> CLIENT +ebtables -A FORWARD -p IPv4 --ip-proto udp --ip-dport 68 -j IN_ONLY +# Erlaube nur DHCPv6 Request von CLIENT -> BATMAN +ebtables -A FORWARD -p IPv6 --ip6-proto udp --ip6-dport 547 -j OUT_ONLY +# Erlaube nur DHCPv6 Antworten von BATMAN -> CLIENT +ebtables -A FORWARD -p IPv6 --ip6-proto udp --ip6-dport 546 -j IN_ONLY +# Erlaube nur Router-Solicitation von CLIENT -> BATMAN +ebtables -A FORWARD -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type router-solicitation -j OUT_ONLY +# Erlaube nur Router-Advertisment von BATMAN -> CLIENT +ebtables -A FORWARD -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type router-advertisement -j IN_ONLY +# Regelt alles was an Multicast/Broadcast von CLIENT -> BATMAN geht bei MULTICAST_OUT +ebtables -A FORWARD -d Multicast --logical-out br-mesh -o bat0 -j MULTICAST_OUT + +######## OUTPUT ############ +ebtables -P OUTPUT ACCEPT + +# Erlaube nur DHCP Request von KNOTEN -> BATMAN +ebtables -A OUTPUT -p IPv4 --ip-proto udp --ip-dport 67 -j OUT_ONLY +# Erlaube nur DHCPv6 Request von KNOTEN -> BATMAN +ebtables -A OUTPUT -p IPv6 --ip6-proto udp --ip6-dport 547 -j OUT_ONLY +# Erlaube nur Router-Solicitation von KNOTEN -> BATMAN +ebtables -A OUTPUT -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type router-solicitation -j OUT_ONLY +# Verbiete Router-Advertisment von KNOTEN -> BATMAN +ebtables -A OUTPUT -p IPv6 -o bat0 --ip6-proto ipv6-icmp --ip6-icmp-type router-advertisement -j DROP +# Regelt alles was an Multicast/Broadcast von KNOTEN -> BATMAN geht bei MULTICAST_OUT +ebtables -A OUTPUT -d Multicast --logical-out br-mesh -o bat0 -j MULTICAST_OUT