Extend proper ICMP handling to IPv6.
[firewall] / icmp.m4
diff --git a/icmp.m4 b/icmp.m4
index d3a7507..460c838 100644 (file)
--- a/icmp.m4
+++ b/icmp.m4
@@ -30,16 +30,27 @@ clearchain check-icmp
 ## Ping needs inspecting on a host-by-host basis.
 for type in echo-request echo-reply; do
   run iptables -A check-icmp -p icmp --icmp-type $type -j RETURN
+  run ip6tables -A check-icmp -p icmpv6 --icmpv6-type $type -j RETURN
 done
 
-## Certainly don't allow ping to broadcast addresses.
-run iptables -A check-icmp -g forbidden \
-       -p icmp --icmp-type echo-request \
-       -m addrtype --dst-type BROADCAST
+## Certainly don't allow ping to broadcast or multicast addresses.
+case $forward in
+  1)
+    run iptables -A FORWARD -g forbidden \
+           -p icmp --icmp-type echo-request \
+           -m addrtype --dst-type BROADCAST
+    run iptables -A FORWARD -g forbidden \
+           -p icmp --icmp-type echo-request \
+           -d 224.0.0.0/8
+    run ip6tables -A FORWARD -g forbidden \
+           -p icmpv6 --icmpv6-type echo-request \
+           -d ff00::/16
+    ;;
+esac
 
 m4_divert(58)m4_dnl
 ## Other ICMP is basically benign, we claim.
-run iptables -A check-icmp -j ACCEPT
+run ip46tables -A check-icmp -j ACCEPT
 
 ## Done.
 for i in $inchains; do run ip46tables -A $i -p icmp -j check-icmp; done