#################################################################
#  alles sperren                                                #
#################################################################

-P INPUT   DROP
-P OUTPUT  DROP
-P FORWARD DROP

#################################################################
#  alle Regellisten loeschen                                    #
#################################################################

-F
-t nat -F
-X

#################################################################
#  eigene Regellisten neu anlegen                               #
#################################################################

#Forward
-N inet_to_lan
-N inet_to_lan_tcp
-N inet_to_lan_udp
-N inet_to_lan_icmp

-N lan_to_inet
-N lan_to_inet_tcp
-N lan_to_inet_udp
-N lan_to_inet_icmp

#Input

-N lan_in_fw
-N lan_in_fw_tcp
-N lan_in_fw_udp
-N lan_in_fw_icmp

-N inet_in_fw
-N inet_in_fw_tcp
-N inet_in_fw_udp
-N inet_in_fw_icmp

#Output

-N fw_out_inet
-N fw_out_inet_tcp
-N fw_out_inet_udp
-N fw_out_inet_icmp 

-N fw_out_lan
-N fw_out_lan_tcp
-N fw_out_lan_udp
-N fw_out_lan_icmp

#Speziell
-N drop_xmas_null

#################################################################
#  loopback erlauben                                            #
#################################################################

-A INPUT  -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

#################################################################
#  MTU probleme beheben                                         #
#    (beim Masqueraden werden die Packete fragmentiert)          #
#################################################################
-A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


#################################################################
#  XMAS(ALLE Lampen an (TCPFlags)) und NULL Pakete verwerfen                               #
#################################################################

-A INPUT   -p tcp --tcp-flags ALL ALL  -j drop_xmas_null
-A FORWARD -p tcp --tcp-flags ALL ALL  -j drop_xmas_null
-A INPUT   -p tcp --tcp-flags ALL NONE -j drop_xmas_null
-A FORWARD -p tcp --tcp-flags ALL NONE -j drop_xmas_null

-A drop_xmas_null -m limit -j LOG --log-prefix \"DROP XMAS or NULL PACKET: \"
-A drop_xmas_null -j DROP

#################################################################
#  von INPUT abzweigen                                          #
#################################################################

#-A INPUT -i $DEV_LAN  -s $NET_LAN  -d $IP_FIREWALL -j ACCEPT
#-A INPUT -i $DEV_LAN  -s $NET_LAN  -d $NET_LAN -j ACCEPT
-A INPUT -i $DEV_LAN  -s $NET_LAN -j ACCEPT

-A INPUT -i $DEV_LAN  -p udp --dport 67 -j ACCEPT

#-A INPUT -i $DEV_LAN  -s $NET_LAN  -d $IP_FIREWALL -j lan_in_fw
#    -A lan_in_fw   -p tcp  -j lan_in_fw_tcp
#    -A lan_in_fw   -p udp  -j lan_in_fw_udp
#    -A lan_in_fw   -p icmp -j lan_in_fw_icmp
#    -A lan_in_fw   -m limit --limit 6/m -j LOG --log-prefix \"DROP PACKET: lan_in_fw \"
#    -A lan_in_fw   -j DROP
   
-A INPUT -i $DEV_INET -s $NET_INET -j inet_in_fw
    -A inet_in_fw  -p tcp  -j inet_in_fw_tcp
    -A inet_in_fw  -p udp  -j inet_in_fw_udp
    -A inet_in_fw  -p icmp -j inet_in_fw_icmp
    -A inet_in_fw  -m limit --limit 6/m -j LOG --log-prefix \"DROP PACKET: inet_in_fw \"
    -A inet_in_fw  -j DROP
    
-A INPUT -m limit --limit 6/m -j LOG --log-prefix \"DROP PACKET: INPUT \"

#################################################################
#  von OUTPUT abzweigen                                         #
#################################################################

#-A OUTPUT -o $DEV_LAN  -s $IP_FIREWALL -d $NET_LAN  -j ACCEPT
-A OUTPUT -o $DEV_LAN  -d $NET_LAN  -j ACCEPT

#-A OUTPUT -o $DEV_LAN  -s $IP_FIREWALL -d $NET_LAN  -j fw_out_lan
#    -A fw_out_lan  -p tcp  -j fw_out_lan_tcp
#    -A fw_out_lan  -p udp  -j fw_out_lan_udp
#    -A fw_out_lan  -p icmp -j fw_out_lan_icmp
#    -A fw_out_lan  -m limit --limit 2/s -j LOG --log-prefix \"DROP PACKET: fw_out_lan \"
#    -A fw_out_lan  -j DROP
       
-A OUTPUT -o $DEV_INET -d $NET_INET -j fw_out_inet
    -A fw_out_inet -p tcp  -j fw_out_inet_tcp
    -A fw_out_inet -p udp  -j fw_out_inet_udp
    -A fw_out_inet -p icmp -j fw_out_inet_icmp
    -A fw_out_inet -m limit --limit 6/m -j LOG --log-prefix \"DROP PACKET: fw_out_inet \"
    -A fw_out_inet -j DROP
    
-A OUTPUT -m limit --limit 6/m -j LOG --log-prefix \"DROP PACKET: OUTPUT  \"

#################################################################
#  von FORWARD abzweigen                                        #
#################################################################


-A FORWARD -i $DEV_INET -o $DEV_LAN  -s $NET_INET -d $NET_LAN  -j inet_to_lan
    -A inet_to_lan -p tcp  -j inet_to_lan_tcp
    -A inet_to_lan -p udp  -j inet_to_lan_udp
    -A inet_to_lan -p icmp -j inet_to_lan_icmp
    -A inet_to_lan -m limit --limit 1/s -j LOG --log-prefix \"DROP PACKET: inet_to_lan \"
    -A inet_to_lan -j DROP
      
-A FORWARD -i $DEV_LAN  -o $DEV_INET -s $NET_LAN  -d $NET_INET -j lan_to_inet
    -A lan_to_inet -p tcp  -j lan_to_inet_tcp
    -A lan_to_inet -p udp  -j lan_to_inet_udp
    -A lan_to_inet -p icmp -j lan_to_inet_icmp
    -A lan_to_inet -m limit --limit 1/s -j LOG --log-prefix \"DROP PACKET: lan_to_inet \"
    -A lan_to_inet -j DROP
   
-A FORWARD -m limit --limit 6/m -j LOG --log-prefix \"DROP PACKET: FORWARD \"
    
#################################################################
#  Blacklist bearbeiten                                         #
#################################################################

-A inet_in_fw_tcp -s $BLACKLIST -j DROP

#################################################################
#  Masquading am DEV_INET                                       #
#################################################################

-t nat -A POSTROUTING -o $DEV_INET -j MASQUERADE

#################################################################
#  allg. DNAT (Destination Network Address Translation)         #
#################################################################

-t nat -A PREROUTING -i $DEV_INET -p tcp --dport http -j DNAT --to $IP_WEBSERV

#################################################################
#  ping erlauben                                                #
#################################################################
 
-A lan_in_fw_icmp   -m limit --limit 5/s -j ACCEPT
-A inet_in_fw_icmp  -m limit --limit 5/s -j ACCEPT

-A fw_out_lan_icmp  -m limit --limit 5/s -j ACCEPT
-A fw_out_inet_icmp -m limit --limit 5/s -j ACCEPT

-A inet_to_lan_icmp -m limit --limit 5/s -j ACCEPT
-A lan_to_inet_icmp -m limit --limit 5/s -j ACCEPT

#################################################################
#  domain                                                       #
#################################################################

#UDP 
    #FW kann ins INET fragen
    -A fw_out_inet_udp -p udp --sport 1024:  --dport domain -j ACCEPT
    -A inet_in_fw_udp  -p udp --sport domain --dport 1024:  -j ACCEPT
    
    #aus dem LAN kann man die FW fragen
    -A lan_in_fw_udp   -p udp --sport 1024:  --dport domain -j ACCEPT
    -A fw_out_lan_udp  -p udp --sport domain --dport 1024:  -j ACCEPT
    
#TCP 
    #FW kann ins INET fragen
    -A fw_out_inet_tcp -p tcp --sport 1024:  --dport domain -m state --state NEW,ESTABLISHED -j ACCEPT
    -A inet_in_fw_tcp  -p tcp --sport domain --dport 1024:  -m state --state ESTABLISHED     -j ACCEPT
    
    #aus dem LAN kann man die FW fragen
    -A lan_in_fw_tcp   -p tcp --sport 1024:  --dport domain -m state --state NEW,ESTABLISHED -j ACCEPT
    -A fw_out_lan_tcp  -p tcp --sport domain --dport 1024:  -m state --state ESTABLISHED     -j ACCEPT
    
#################################################################
#  ssh                                                          #
#################################################################

#aus dem LAN in die FW
    -A lan_in_fw_tcp  -p tcp --sport 1024: --dport ssh   -m state --state NEW,ESTABLISHED -j ACCEPT
    -A fw_out_lan_tcp -p tcp --sport ssh   --dport 1024: -m state --state ESTABLISHED     -j ACCEPT
    
#aus dem LAN in das INET
    -A lan_to_inet_tcp -p tcp --sport 1024: --dport ssh   -m state --state NEW,ESTABLISHED -j ACCEPT
    -A inet_to_lan_tcp -p tcp --sport ssh   --dport 1024: -m state --state ESTABLISHED     -j ACCEPT

#aus der FW in das INET
    -A fw_out_inet_tcp  -p tcp --sport 1024: --dport ssh   -m state --state NEW,ESTABLISHED -j ACCEPT
    -A inet_in_fw_tcp -p tcp --sport ssh   --dport 1024: -m state --state ESTABLISHED     -j ACCEPT

#aus der INET in die FW
    -A inet_in_fw_tcp  -p tcp --sport 1024: --dport ssh   -m state --state NEW,ESTABLISHED -j ACCEPT
    -A fw_out_inet_tcp -p tcp --sport ssh   --dport 1024: -m state --state ESTABLISHED     -j ACCEPT

