iptables + adsl



  • hallo,
    ich schlag mich jetzt schon ein paar tage mit einem iptables script herum...

    meine konfiguration:

    INTERNET<----->| ADSL-MODEM 10.0.0.138 |<------------->|10.0.0.140 eth0 bzw. ppp0 LINUX-ROUTER 192.168.1.1|<--------->INTERN

    das \1:

    #!/bin/sh 
    
    #local interface 
    INT="eth1" 
    
    #nach draußen 
    EXT="ppp0" 
    
    #loopback 
    LO="lo" 
    
    #ports auf router von aussen zugänglich machen 
    SERVER_PORTS_TCP="" 
    SERVER_PORTS_UDP="" 
    
    #ports an rechner im lokalen netz zugänglich machen 
    DEST_HOST="" 
    PORTS_TCP="" 
    PORTS_UDP="" 
    
    ##################################################### 
    
    case "$1" in 
    start) 
     echo -n "Starte Firewall (Paketfilter): " 
    
     # Alte Regeln loeschen 
     iptables -F 
     iptables -t nat -F 
     iptables -t mangle -F 
     iptables -X 
     iptables -t nat -X 
     iptables -t mangle -X 
    
     #default policies 
     iptables -P INPUT DROP 
     iptables -P FORWARD DROP 
     iptables -P OUTPUT DROP 
    
     #ip-forwarding einschalten 
     echo "1" > /proc/sys/net/ipv4/ip_forward 
    
     ##################### 
     #eingehender verkehr# 
     ##################### 
    
     #neue verbindungen verboten 
     iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP 
    
     #von intern erlaubt 
     iptables -A INPUT -i $INT -j ACCEPT 
    
     #ueber loopback erlaubt 
     iptables -A INPUT -i $LO -j ACCEPT 
    
     #von aussen verboten 
     iptables -A INPUT -i $EXT -s 10.0.0.0/8 -j DROP 
     iptables -A INPUT -i $EXT -s 172.16.0.0/12 -j DROP 
     iptables -A INPUT -i $EXT -s 192.168.0.0/24 -j DROP 
    
     #bestehende verbindungen von aussen erlauben 
     iptables -A INPUT -i $EXT -m state --state ESTABLISHED,RELATED -j ACCEPT 
    
     #ports auf router von aussen 
     if [ "$SERVER_PORTS_TCP" != "" ]; then 
        iptables -A INPUT -i $EXT -p tcp -m multiport --dport $SERVER_PORTS_TCP -j ACCEPT 
     fi 
    
     if [ "$SERVER_PORTS_UDP" != "" ]; then 
       iptables -A INPUT -i $EXT -p udp -m multiport --dport $SERVER_PORTS_UDP -j ACCEPT 
     fi 
    
     ############ 
     #forwarding# 
     ############ 
    
     #wegen telekom 
     iptables -I FORWARD -p TCP --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 
    
     #lokal -> internet erlaubt 
     iptables -A FORWARD -i $INT -o $EXT -j ACCEPT 
    
     #internet -> lokal nur bestehende verbindungen 
     iptables -A FORWARD -i $EXT -o $INT -m state --state ESTABLISHED,RELATED -j ACCEPT 
    
     #ports auf rechner im lokalem netz 
     if [ "$PORTS_TCP" != "" ]; then 
       iptables -A FORWARD -i $EXT -o $INT -p tcp -m multiport --dport $PORTS_TCP -d $DEST_HOST -j ACCEPT 
     fi 
    
     if [ "$PORTS_UDP" != "" ]; then 
       iptables -A FORWARD -i $EXT -o $INT -p tcp -m multiport --dport $PORTS_UDP -d $DEST_HOST -j ACCEPT 
     fi 
    
     ######## 
     #output# 
     ######## 
    
     #alles erlaubt 
     iptables -A OUTPUT -o $INT -j ACCEPT 
     iptables -A OUTPUT -o $EXT -j ACCEPT 
     iptables -A OUTPUT -o $LO -j ACCEPT 
    
     ######### 
     #routing# 
     ######### 
    
     #umleiten der ports auf einen lokalen rechner 
     if [ "$PORTS_TCP" != "" ]; then 
       iptables -t nat -A PREROUTING -i $EXT -p tcp -m multiport --dport $PORTS_TCP -j DNAT --to $DEST_HOST 
     fi 
    
     if [ "$PORTS_UDP" != "" ]; then 
       iptables -t nat -A PREROUTING -i $EXT -p tcp -m multiport --dport $PORTS_UDP -j DNAT --to $DEST_HOST 
     fi 
    
     #masquerading 
     iptables -t nat -A POSTROUTING -o $EXT -j MASQUERADE 
     echo "done." 
     ;; 
    
    stop) 
     echo -n "Firewall (Packetfilter) anhalten: " 
    
     #alte regeln löschen 
     iptables -F 
     iptables -t nat -F 
     iptables -t mangle -F 
     iptables -X 
     iptables -t nat -X 
     iptables -t mangle -X 
    
     #default policies 
     iptables -P INPUT ACCEPT 
     iptables -P FORWARD DROP 
     iptables -P OUTPUT ACCEPT 
     echo "done." 
     ;; 
    
    restart) 
     $0 start 
     ;; 
    
    status) 
     iptables -L 
     ;; 
    
    *) 
     echo "Usage: fwscript start|stop|restart|status" 
     exit 1 
     ;; 
    
    esac
    

    ich verwende debian woody.
    wenn ich eine adsl-verbindung aufbauen will, dann geht das nicht, weil sämtlicher traffic der über eth0 geht (woran das modem hängt) gedropt wird (is ja eigentlich logisch).
    wie machen das mehr oder weniger professionelle firewallscripts (z.B. SuSefirewall2)? die werden doch auch beim hochfahren des systems gestartet, es werden nur 2 interfaces angegeben (wobei eines davon bei adsl ppp0 ist), und trotzdem kann eine verbindung aufgebaut werden, oder?

    wenn ich das script erst ausführe, wenn die verbindung schon steht (ip-up), dann wird die verbindung abgebrochen (versteh ich nicht, weil ja dann eigentlich keine kommunikation mehr über eth0 gehen müsste (intern eth1, extern ppp0)....

    mfg



  • Hi, mi+chi
    hab irgendwie so das gefühl, dass du nicht wirklich weißt was du überhaupt willst. Oder zumindest versteh ich das nicht.

    Du musst dir vorher im klaren sein, was du erlauben, und was verbieten willst. Was soll deine Firewall denn tun? Einfaches Port-Forwarding? (wobei das den keine eigentliche firewall ist) oder bestimmte ports blocken? NAT-Routing???

    gruß
    dose


Anmelden zum Antworten