Freesco, NND, CDN, EOS
http://forum.freesco.pl/

taki wlasny firewall... i nie wiem co dalej
http://forum.freesco.pl/viewtopic.php?f=22&t=10375
Strona 1 z 1

Autor:  milupo [ wtorek, 20 grudnia 2005, 17:49 ]
Tytuł:  taki wlasny firewall... i nie wiem co dalej

Witam,
Napisalem sobie takiego prostego firewalla na podstawie firewalla czerwo... testuje w nim blokowanie po macku

: [/] [] ()
#!/bin/sh

# firewall adminet.pl

. /etc/rc.conf
. /etc/rc.d/functions
. /etc/iptables/firewall.config
i=`which iptables`
case $1 in

start)

    if [ -e /proc/sys/net/ipv4/tcp_ecn ];then
        echo 0 > /proc/sys/net/ipv4/tcp_ecn
    fi

    echo 1 > /proc/sys/net/ipv4/ip_forward

    if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then
        echo 1 > /proc/sys/net/ipv4/tcp_syncookies
    fi

    for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
        echo  1 > $f
    done

    $i -F
    $i -F -t nat

    $i -P INPUT DROP
    $i -P FORWARD DROP
    $i -P OUTPUT ACCEPT

    # interfejs lo
    $i -A INPUT -i lo -j ACCEPT
    $i -A FORWARD -o lo -j ACCEPT
# Blaster i Saser
    if [ $wirus = 1 ]; then
        $i -A INPUT -p tcp --dst 0/0 --dport 135 -j LOG -m limit --limit 2/hour --log-prefix "Blaster z zewnatrz: "
        $i -A INPUT -p tcp --dst 0/0 --dport 135 -j LOG -m limit --limit 2/hour --log-prefix "Blaster z zewnatrz: "
        $i -A FORWARD -p tcp --dst 0/0 --dport 445 -j LOG -m limit --limit 2/hour --log-prefix "Saser z zewnatrz: "
        $i -A FORWARD -p tcp --dst 0/0 --dport 445 -j LOG -m limit --limit 2/hour --log-prefix "Saser z zewnatrz: "
        $i -A INPUT -p tcp --dst 0/0 -m multiport --dport 135,445 -j DROP
        $i -A FORWARD -p tcp --dst 0/0 -m multiport --dport 135,445 -j DROP
    fi

# Adresy zabronione
    for IP in `cat /etc/iptables/ip_deny| cut -d "#" -f1`;do
        $i -A INPUT -s $IP -j DROP
        $i -A FORWARD -s $IP -j DROP
        $i -A INPUT -d $IP -j DROP
        $i -A FORWARD -d $IP -j DROP
    done

# Adresy majace absolutny dostep do serwera, adresy zaufane

    for IP in `cat /etc/iptables/ip_all| cut -d "#" -f1`;do
            $i -A INPUT -s $IP -j ACCEPT

    done

# Porty zablokowane dla wszystkich

    if [ "$TCP_IN_DENY" ];then
           $i -A INPUT -p tcp --dst 0/0 -m multiport --dport $TCP_IN_DENY -j DROP
    fi
    if [ "$UDP_IN_DENY" ];then
           $i -A INPUT -p udp --dst 0/0 -m multiport --dport $UDP_IN_DENY -j DROP
    fi

# uslugi udostepnione dla polaczen z internetu
    if [ "$TCP_IN_ALLOW" ];then
        $i -A INPUT -p tcp -i $EXTIF -m multiport --dst 0/0 --dport $TCP_IN_ALLOW -j ACCEPT
    fi
    if [ "$UDP_IN_ALLOW" ];then
        $i -A INPUT -p udp -i $EXTIF -m multiport --dst 0/0 --dport $UDP_IN_ALLOW -j ACCEPT
    fi


    # zaplotkuj jesli nie chcesz udostepniac serwisu  http do inetu
    if [ $WWW = 1 ]; then
                $i -A INPUT -p tcp -i $EXTIF --dport 80 -j ACCEPT
                fi

            # zaplotkuj jesli nie chcesz udostepniac serwisu  https do inetu
        if [ $HTTPS = 1 ]; then
            $i -A INPUT -p tcp -i $EXTIF --dport 443 -j ACCEPT
    fi


    # zaplotkuj jesli nie chcesz udostepniac serwisu  ftp do inetu
    if [ $FTP = 1 ]; then
                $i -A INPUT -p tcp -i $EXTIF --dport 20 -j ACCEPT
                    $i -A INPUT -p tcp -i $EXTIF --dport 21 -j ACCEPT
               fi

    # zaplotkuj jesli nie chcesz udostepniac poczty do inetu
    if [ $MAIL = 1 ]; then
                $i -A INPUT -p tcp -i $EXTIF --dport 110 -j ACCEPT
                    $i -A INPUT -p tcp -i $EXTIF --dport 25 -j ACCEPT
                fi

        # zaplotkuj jesli nie chcesz udostepniac SSH do inetu
    if [ $SSH = 1 ]; then
            $i -A INPUT -p tcp -i $EXTIF --dport 22 -j ACCEPT
    fi
 # zaplotkuj jesli nie chcesz udostepniac serwera IMAP do inetu
    if [ $IMAP = 1 ]; then
                $i -A INPUT -p tcp -i $EXTIF --dport 143 -j ACCEPT
                    $i -A INPUT -p udp -i $EXTIF --dport 143 -j ACCEPT
                fi

        # zaplotkuj jesli nie chcesz udostepniac serwera IMAPS do inetu
    if [ $IMAPS = 1 ]; then
            $i -A INPUT -p tcp -i $EXTIF --dport 993 -j ACCEPT
        $i -A INPUT -p udp -i $EXTIF --dport 993 -j ACCEPT
    fi
 # Odrzucamy z komunikatem ICMP Port Unreachable polaczenia
 # na IDENT oraz SOCKS (czesto sprawdzane przez serwery IRC)
 # Jesli udostepniasz te uslugi zaplotkuj (#) odpowiedne linie

    $i -A INPUT -p tcp --dst 0/0 --dport 113  -j REJECT --reject-with icmp-port-unreachable
    $i -A INPUT -p tcp --dst 0/0 --dport 1080 -j REJECT --reject-with icmp-port-unreachable



 #Blokada gadu-gadu

    for IP in `cat /etc/iptables/ip_gg | cut -d "#" -f1` ;do
         $i -I FORWARD -s $IP -p tcp --dport 443 -j DROP
         $i -I FORWARD -s $IP -p tcp --dport 8074 -j DROP
         $i -t nat -A PREROUTING -d 217.17.46.250 -s $IP -p tcp --dport 80 -j DNAT --to $IPADDR1
    done
# pingi pozwalamy
    $i -A INPUT -p icmp --icmp-type echo-request -j ACCEPT -m limit --limit 1/sec

#TTL
   if [ $TTL = 1 ]; then
        $i -t mangle -A POSTROUTING -o $INTIF1 -j TTL --ttl-set 1
   fi
   if [ $TTL = 2 ]; then
        for IP in `cat /etc/iptables/ip_ttl| cut -d "#" -f1`;do
                $i -t mangle -A POSTROUTING -d $IP -j TTL --ttl-set 1
        done
   fi

# Redirect wyswietlenie komunikatu o zablokowaniu dostepu do internetu
# przy kazdej probie laczenia sie z innymi numerami IP niz lokalne.
# Wymaga uruchomiena strony www na porcie 200 lub programu miniserv
   for IP in `cat /etc/iptables/ip_redirect | cut -d "#" -f1`;do
            $i -t nat -A PREROUTING -p tcp -s $IP -d ! $IPADDR1 -j REDIRECT --to-port 80
   done

   # domyslnie wszystkim wyswietla sie napis o macku

   #$i -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 -d ! 192.168.1.1 -j REDIRECT  --to-port 80
#   $i -A INPUT -i ! eth0 -s 192.168.1.0/24 -j REDIRECT --to-port 80


#limit polaczen

   echo "7200" >/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

   for ip in `cat /etc/iptables/ip_polaczenia | cut -d "#" -f1`;do
         $i -A FORWARD -s $ip -p tcp --tcp-flags SYN,RST,ACK SYN -m connlimit --connlimit-above 50 --connlimit-mask 32 -j DROP

   done

 #limit polaczen koniec
        $i -t nat -A POSTROUTING -s 195.182.164.0/24 -d 195.182.164.0/24 -j ACCEPT

   #Zezwalamy na wszystko co odbywa sie w ramach juz dozwolonych polaczen
        $i -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
        $i -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED


   #Komendy uruchamiana po starcie firewalla

   if [ -x /etc/rc.d/mrtg ]; then
           /etc/rc.d/mrtg stop
           killall mrtg
           /etc/rc.d/mrtg start
   fi
   if [ -x /usr/stat/rc.stat ]; then
           cd /usr/stat/
           sh rc.stat restart
           cd /etc/rc.d
   fi
#KONIEC

    wynik
        ;;

    stop)

    $i -F INPUT
    $i -F FORWARD
    $i -F OUTPUT
    $i -P INPUT DROP
    $i -P FORWARD DROP
    $i -P OUTPUT DROP

    echo 0 > /proc/sys/net/ipv4/ip_forward

    wynik

    ;;

esac



potem dopialem dobie plik ktory generuje na podstawie mackow i ip takie wpisy dla firewalla:

: [/] [] ()
#!/bin/sh

echo" ..."
com=`which iptables`
temp="./temp.tmp"



i=1

echo "" > $temp

for IP in `cat /etc/iptables/macip | cut -d "#" -f1 |awk '{print $1}'`; do
        tablica_ip[$i]=$IP
        i=$(expr $i + 1)
done

i=1

for MAC in `cat /etc/iptables/macip | cut -d "#" -f1 |awk '{print $2}'`; do
        tablica_mac[$i]=$MAC

        # input i forward

        echo $com -A INPUT -i ! eth0 -s ${tablica_ip[$i]} -j ACCEPT >> $temp
        #echo $com -A FORWARD -i ! eth0 -s ${tablica_ip[$i]} -j ACCEPT >> $temp

        # maskarada

        echo $com -t nat -A POSTROUTING -o eth0 -s ${tablica_ip[$i]} -j MASQUERADE >> $temp

         #echo $com -i eth1 -s ${tablica_ip[$i]} -m mac --mac-source ${tablica_mac[$i]} -j ACCEPT >> $temp
        echo $com -A FORWARD -m mac --mac-source ${tablica_mac[$i]} -s ${tablica_ip[$i]} -i ! eth0 -j ACCEPT >> $temp

        i=$(expr $i + 1)
done





i teraz mam problem.... jesli komus nie pasuje mac do ip to nie ma internetu... a jesli pasuje to ma internet...

jak zrobic zeby dla tego komu nie pasuje mac wyskakiwala strona na porcie np 200 ze jego macka nie ma w bazie ?

z gory dzieki za sugestje

Autor:  stk [ środa, 21 grudnia 2005, 14:24 ]
Tytuł: 

dodajesz do dhcpd jeszcze jedna klase adresow ip np.192.168.200.0/24 i dajesz zeby przydzilal dynamicznie - w firewallu kierujesz caly ruch nowej klasy adresowej na dany port na ktorym masz stronke.

Autor:  Koriolan [ czwartek, 22 grudnia 2005, 17:07 ]
Tytuł: 

Ładnie robi to firewall Zciecha:
: [/] [] ()
for IP in `cat /etc/firewall/IP_Redirect | cut -d "#" -f1`;do
    $i -t nat -A PREROUTING -p tcp -s $IP -d ! $IPADDR1 -j REDIRECT --to-port 84
done
Na porcie 84 jest serwer www ze stronką "Brak Twojego IP-MAC" lub podobną

Autor:  milupo [ czwartek, 22 grudnia 2005, 17:23 ]
Tytuł: 

No dobra ale to jest zrobione na tej zasadzie ze w pliku sa napisane macki ktore maja byc przekierowane. Mi chodzi raczej o cos takiego:

Mam plik z adresami IP i adresami MAC oddzielonych spacja. Jesli adres goscia znajduje sie w tym pliku i jesli pasuje do macka to ma internet. Jesli nie to przekierowuje go na jakis tam port na ktorym jest stronka ze jego IP nie pasuje do macka lub ma calkiem inne IP i nie moze miec ani gg ani nic.

Jesli cos takiego by sie dalo zrobic to bylo by super

Autor:  zciech [ czwartek, 22 grudnia 2005, 17:30 ]
Tytuł: 

Nie chce mi się analizowa tego wszystkiego, ale w regule przekierowujacej uzyj:
--mac-source ! ${tablica_mac[$i]} -s ${tablica_ip[$i]}

kazdy ip ktory zglosi sie z innym macem zostanie przekierowany.
uwaga IP MUSI miec dojscie do uslugi lokalnej na porcie na ktorym ona dziala!

Autor:  milupo [ czwartek, 22 grudnia 2005, 17:44 ]
Tytuł: 

u mnie dziala to tak:

firewall sie uruchamia bez inputa, forwarda i maskarady
potem uruchamia sie skrypt, ktory pobiera sobie z pliku adresy ip , macka i dla nich generuje regulki input, forward i maskarade ( jesli jest w pliku 5 takich adresow to generuje sie w sumie 15 regulek)

Tym co ich IP nie znajduje sie na liscie lub nie pasuje mac to poprostu nie chodzi net (nie ma dla ich IP Inputa, Forwarda i maskarady)

Nie bardzo wiem co masz na mysli zciech. Jesli wziac pod uwage twoja sugestie to musial bym przeleciec wszystkie 253 adresy... kurcze nie wiem czy dobrze rozumiem :?

Cholerka nie wiem jak ruszyc z tym, a iptables to tak srednio pojmuje :)

Autor:  nicek [ środa, 4 stycznia 2006, 18:38 ]
Tytuł: 

a co z przypadkiem kiedy w ip_redirect sa ip osob ktore zalegaja z oplatami, i ma sie dla nich wyswietlac strona off.htm a dla osob zupelnie z poza sieci (nie ujeci w pliku np hosts) maja miec wyswietlona strone z portu 200. bo w sumie na stronie off moga byc informacje o ip ktore ma nieoplacony miesiac a tego lepiej zeby nie czytal nikt z poza sieci.
brak dhcp, ethers, stare nn.

Strona 1 z 1 Strefa czasowa UTC+2godz.
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/