]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/initscripts/init.d/firewall
firewall: Allow blocking access to GREEN from GREEN.
[people/teissler/ipfire-2.x.git] / src / initscripts / init.d / firewall
index dd678893738ff22b4ecba6ab886910ef01aeb598..7a18502bfa728743bc951fef3ccbce84389a57f4 100644 (file)
@@ -107,7 +107,6 @@ iptables_init() {
        # Block OpenVPN transfer networks
        iptables -N OVPNBLOCK
        iptables -A INPUT   -i tun+ -j OVPNBLOCK
-       iptables -A OUTPUT  -o tun+ -j OVPNBLOCK
        iptables -A FORWARD -i tun+ -j OVPNBLOCK
        iptables -A FORWARD -o tun+ -j OVPNBLOCK
 
@@ -121,10 +120,10 @@ iptables_init() {
        iptables -N IPTVFORWARD
        iptables -A FORWARD -j IPTVFORWARD
 
-       # filtering from GUI
-       iptables -N GUIINPUT
-       iptables -A INPUT -j GUIINPUT
-       iptables -A GUIINPUT -p icmp --icmp-type 8 -j ACCEPT
+       # Allow to ping the firewall.
+       iptables -N ICMPINPUT
+       iptables -A INPUT -j ICMPINPUT
+       iptables -A ICMPINPUT -p icmp --icmp-type 8 -j ACCEPT
 
        # Accept everything on loopback
        iptables -N LOOPBACK
@@ -144,6 +143,31 @@ iptables_init() {
                iptables -A ${i} -j CONNTRACK
        done
 
+       # Allow DHCP
+       iptables -N DHCPINPUT
+       iptables -A DHCPINPUT -p udp --sport 68 --dport 67 -j ACCEPT
+       iptables -A DHCPINPUT -p tcp --sport 68 --dport 67 -j ACCEPT
+
+       iptables -N DHCPOUTPUT
+       iptables -A DHCPOUTPUT -p udp --sport 67 --dport 68 -j ACCEPT
+       iptables -A DHCPOUTPUT -p tcp --sport 67 --dport 68 -j ACCEPT
+
+       # Allow DHCP on GREEN
+       iptables -N DHCPGREENINPUT
+       iptables -N DHCPGREENOUTPUT
+       if [ -n "${GREEN_DEV}" ]; then
+               iptables -A INPUT  -i "${GREEN_DEV}" -j DHCPGREENINPUT
+               iptables -A OUTPUT -o "${GREEN_DEV}" -j DHCPGREENOUTPUT
+       fi
+
+       # allow DHCP on BLUE to be turned on/off
+       iptables -N DHCPBLUEINPUT
+       iptables -N DHCPBLUEOUTPUT
+       if [ -n "${BLUE_DEV}" ]; then
+               iptables -A INPUT  -i "${BLUE_DEV}" -j DHCPBLUEINPUT
+               iptables -A OUTPUT -o "${BLUE_DEV}" -j DHCPBLUEOUTPUT
+       fi
+
        # trafic from ipsecX/TUN/TAP interfaces, before "-i GREEN_DEV" accept everything
        iptables -N IPSECINPUT
        iptables -N IPSECFORWARD
@@ -155,12 +179,11 @@ iptables_init() {
        iptables -t nat -A POSTROUTING -j IPSECNAT
 
        # localhost and ethernet.
-       iptables -A INPUT   -i $GREEN_DEV  -m conntrack --ctstate NEW -j ACCEPT ! -p icmp
-       
-       # allow DHCP on BLUE to be turned on/off
-       iptables -N DHCPBLUEINPUT 
-       iptables -A INPUT -j DHCPBLUEINPUT
-       
+       # Always allow accessing the web GUI from GREEN.
+       iptables -N GUIINPUT
+       iptables -A INPUT -j GUIINPUT
+       iptables -A GUIINPUT -i "${GREEN_DEV}" -p tcp --dport 444 -j ACCEPT
+
        # WIRELESS chains
        iptables -N WIRELESSINPUT
        iptables -A INPUT -m conntrack --ctstate NEW -j WIRELESSINPUT
@@ -189,14 +212,6 @@ iptables_init() {
        iptables -t nat -N NAT_SOURCE
        iptables -t nat -A POSTROUTING -j NAT_SOURCE
 
-       # RED chain, used for the red interface
-       iptables -N REDINPUT
-       iptables -A INPUT -j REDINPUT
-       iptables -N REDFORWARD
-       iptables -A FORWARD -j REDFORWARD
-       iptables -t nat -N REDNAT
-       iptables -t nat -A POSTROUTING -j REDNAT
-
        # Custom prerouting chains (for transparent proxy)
        iptables -t nat -N SQUID
        iptables -t nat -A PREROUTING -j SQUID
@@ -204,6 +219,26 @@ iptables_init() {
        # DNAT rules
        iptables -t nat -N NAT_DESTINATION
        iptables -t nat -A PREROUTING -j NAT_DESTINATION
+       iptables -t nat -A OUTPUT -j NAT_DESTINATION
+
+       iptables -t mangle -N NAT_DESTINATION
+       iptables -t mangle -A PREROUTING -j NAT_DESTINATION
+
+       iptables -t nat -N NAT_DESTINATION_FIX
+       iptables -t nat -A POSTROUTING -j NAT_DESTINATION_FIX
+
+       iptables -t nat -A NAT_DESTINATION_FIX \
+               -m mark --mark 1 -j SNAT --to-source "${GREEN_ADDRESS}"
+
+       if [ -n "${BLUE_ADDRESS}" ]; then
+               iptables -t nat -A NAT_DESTINATION_FIX \
+                       -m mark --mark 2 -j SNAT --to-source "${BLUE_ADDRESS}"
+       fi
+
+       if [ -n "${ORANGE_ADDRESS}" ]; then
+               iptables -t nat -A NAT_DESTINATION_FIX \
+                       -m mark --mark 3 -j SNAT --to-source "${ORANGE_ADDRESS}"
+       fi
 
        # upnp chain for our upnp daemon
        iptables -t nat -N UPNPFW
@@ -211,6 +246,28 @@ iptables_init() {
        iptables -N UPNPFW
        iptables -A FORWARD -m conntrack --ctstate NEW -j UPNPFW
 
+       # RED chain, used for the red interface
+       iptables -N REDINPUT
+       iptables -A INPUT -j REDINPUT
+       iptables -N REDFORWARD
+       iptables -A FORWARD -j REDFORWARD
+       iptables -t nat -N REDNAT
+       iptables -t nat -A POSTROUTING -j REDNAT
+
+       # Filter logging of incoming broadcasts.
+       iptables -N BROADCAST_FILTER
+       iptables -A INPUT -j BROADCAST_FILTER
+
+       iptables -A BROADCAST_FILTER -i "${GREEN_DEV}" -d "${GREEN_BROADCAST}" -j DROP
+
+       if [ -n "${BLUE_DEV}" -a -n "${BLUE_BROADCAST}" ]; then
+               iptables -A BROADCAST_FILTER -i "${BLUE_DEV}" -d "${BLUE_BROADCAST}" -j DROP
+       fi
+
+       if [ -n "${ORANGE_DEV}" -a -n "${ORANGE_BROADCAST}" ]; then
+               iptables -A BROADCAST_FILTER -i "${ORANGE_DEV}" -d "${ORANGE_BROADCAST}" -j DROP
+       fi
+
        # Apply OpenVPN firewall rules
        /usr/local/bin/openvpnctrl --firewall-rules
 
@@ -278,7 +335,10 @@ iptables_red() {
 
                # Outgoing masquerading (don't masqerade IPSEC (mark 50))
                iptables -t nat -A REDNAT -m mark --mark 50 -o $IFACE -j RETURN
-               iptables -t nat -A REDNAT -o $IFACE -j MASQUERADE
+
+               if [ "$IFACE" != "$GREEN_DEV" ]; then
+                       iptables -t nat -A REDNAT -o $IFACE -j MASQUERADE
+               fi
 
        fi