Firewall na NAT -author JEZIOR :P

Serwery i sieci oparte na Slackware, wszelkiego rodzaju usługi, troubleshooting.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
grz3si3k
Użytkownik
Posty: 259
Rejestracja: 2004-05-22, 10:47

Firewall na NAT -author JEZIOR :P

Post autor: grz3si3k » 2004-05-29, 10:09

Kod: Zaznacz cały

#!/bin/sh

#v0.0.1beta
#author jezior
#THERE'S NO COPYRIGHT <lol>
##########################################################################
#ustawienia lokalne																			      #
##########################################################################
#sciezka do sysctl ( raczej zgodna dla wszystkich linuxow )
SYSCTL="/sbin/sysctl -w" 

#sciezka do iptables domyslnie ustawione dla slacka
IPT="/usr/sbin/iptables"
IPTS="/usr/sbin/iptables-save"
IPTR="/usr/sbin/iptables-restore"

# interface do internetu ( np. dla neo to bedzie ppp0)
INET_IFACE="ppp0"

#siec lokalna. popraw jesli trzeba
LOCAL_IFACE="eth1"
LOCAL_IP="192.168.0.1"
LOCAL_NET="192.168.0.0/24"
LOCAL_BCAST="192.168.1.255"

# interfejsy lokalne
LO_IFACE="lo"
LO_IP="127.0.0.1"

# w przypadku neo chyba <lol> trzeba jeszcze dodac "karte wirtualna" i odhaszowac potrzebne linie :)
#jest tego 3 lub 4 regulki, latwo znalezc :)
LO_IFACEV="eth0"
LO_IPW="10.0.0.10"

#koniec ustawien lokalnych
##########################################################################

# Ponizej mozna grzebac na wlasna odpowiedzialnosc :P

#argumenty uruchomieniowe skryptu
if [ "$1" = "usage" ] || [ "$1" = "help" ];
then
	echo ""
	echo " uzycie skryptu: {start | stop | save | restore | zapis}"
	echo ""
	echo " save - zapis firewall'a do /etc/rc.d/iptables ... "
	echo ""
	echo " restore - przywracanie firewall'a z /etc/rc.d/iptables ... "
	echo ""
	echo " zapis - zapisywanie regulek do pliku /etc/rc.d/iptable.save ... "
	echo ""
	echo " stop - zatrzymywanie firewall'a."
	echo ""
	exit 0
elif [ "$1" = "save" ]
then
	echo -n "zapis firewall'a do /etc/rc.d/iptables ... "
	$IPTS > /etc/rc.d/iptables
	echo "zrobione"
	exit 0
elif [ "$1" = "restore" ]
then
	echo -n "przywracanie firewall'a z /etc/rc.d/iptables ... "
	$IPTR < /etc/rc.d/iptables
	echo "zrobione"
	exit 0
elif [ "$1" = "zapis" ]
then
	echo -n "zapisywanie regulek do pliku /etc/rc.d/iptable.save ... "
	$IPTS > /etc/rc.d/iptable.save
	echo "zrobione"
	exit 0
fi


#stopowanie firewall'a
if [ "$1" == "stop" ]
then
  echo "zatrzymywanie firewall'a" 
  iptables -t filter -F > /dev/null 2>&1
  iptables -t filter -X > /dev/null 2>&1
  iptables -t nat -F > /dev/null 2>&1
  iptables -t nat -X > /dev/null 2>&1
#  iptables -t mangle -F > /dev/null 2>&1
#  iptables -t mangle -X > /dev/null 2>&1
  iptables -t filter -P INPUT ACCEPT > /dev/null 2>&1
  iptables -t filter -P OUTPUT ACCEPT > /dev/null 2>&1
  iptables -t filter -P FORWARD ACCEPT > /dev/null 2>&1
  iptables -t nat -P PREROUTING ACCEPT > /dev/null 2>&1
  iptables -t nat -P POSTROUTING ACCEPT > /dev/null 2>&1
  iptables -t nat -P OUTPUT ACCEPT  > /dev/null 2>&1
#  iptables -t mangle -P POSTROUTING ACCEPT > /dev/null 2>&1
#  iptables -t mangle -P OUTPUT ACCEPT > /dev/null 2>&1
#  iptables -t mangle -P PREROUTING ACCEPT > /dev/null 2>&1
#  iptables -t mangle -P INPUT ACCEPT > /dev/null 2>&1
#  iptables -t mangle -P FORWARD ACCEPT > /dev/null 2>&1
  if !(( `which modprobe 2>&1 | grep -c "which: no modprobe in"` )) && [ -a "/proc/modules" ]; then
    for MODULE in ipt_TTL iptable_mangle ipt_mark ipt_MARK ipt_MASQUERADE ip_nat_irc ip_nat_ftp ipt_LOG ipt_limit ipt_REJECT ip_conntrack_irc ip_conntrack_ftp ipt_state iptable_nat iptable_filter ip_tables; do
      if (( `lsmod | grep -c "$MODULE"` )); then
	rmmod $MODULE > /dev/null 2>&1
      fi
    done
  fi
  echo -n " -> Firewall wylaczony."
#exit
#czyszczenie tablic polaczen
  echo " [ czyszczenie starych polaczen... ]" 
  COUNT=`iptables -nL INPUT | grep -c "tcp-reset"`
  TAB=$COUNT
  while [ "$((COUNT--))" -gt "0" ]; do
    iptables -D INPUT 1
  done
  COUNT=`iptables -nL FORWARD | grep -c "tcp-reset"`
  while [ "$((COUNT--))" -gt "0" ]; do
    iptables -D FORWARD 1
  done
  echo "-> stare polaczenia wyczyszczone... ( $TAB )...."
  exit 0
fi


##########################################################################
#
#Ladujemy moduly
#

echo "ladowanie modulow iptables ..."

# modul podstawowy
/sbin/modprobe ip_tables

# zastanawiam sie czy nie wywalic tego modulu...
#/sbin/modprobe ip_conntrack

# modul filrtujacy
# /sbin/modprobe iptable_filter

# modul nat-u
# /sbin/modprobe iptable_nat

# modul logujacy ztargetowane pakiety
# /sbin/modprobe ipt_LOG

# do limitowania liczby pakietow na sec/min/hr
# /sbin/modprobe ipt_limit

# modul maskarady
# /sbin/modprobe ipt_MASQUERADE

# filtrowanie uzywajace "wlasciciela" jako czesci regulki filtrowania
# /sbin/modprobe ipt_owner

# odmowa i zwrot ICMP, odpowiedz konfigurowalna. defaultowo - odmowa polaczenia
# /sbin/modprobe ipt_REJECT

# tego modulu nier moge jeszcze rozgryzc...
# /sbin/modprobe ipt_tcpmss

# pozwalamy na wybieranie wielu portow jednoczesnie zamiast pojedynczych
# /sbin/modprobe multiport

# sprawdzanie na obecnosc flag w pakietach
# /sbin/modprobe ipt_state

# do wylapywania pakietow z blednymi flagami
# /sbin/modprobe ipt_unclean

# modul wymagany w przypadku non-passive FTP
/sbin/modprobe ip_nat_ftp

# modul sledzenia polaczen ftp ( wywalic?)
#/sbin/modprobe ip_conntrack_ftp

# modul do sledzenia polaczen IRC
#/sbin/modprobe ip_conntrack_irc


##########################################################################
# konfiguracja parametrow kernela ( duza czesc zerznieta od innych :P:P:P )

#wlaczenie forwardowania w kernelu
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/ip_forward
else
    $SYSCTL net.ipv4.ip_forward="1"
fi

# wlaczenie wspomagania w przypadku dynamicznego IP ( neo, modem, dhcp.... )
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/ip_dynaddr
else
    $SYSCTL net.ipv4.ip_dynaddr="1"
fi

# wlaczenie ochrony przed SYN FLOOD
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/tcp_syncookies
else
    $SYSCTL net.ipv4.tcp_syncookies="1"
fi

# walidacja zrodla pakietow
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
else
    $SYSCTL net.ipv4.conf.all.rp_filter="1"
fi

# ten parametr instruuje kernel o ignorowaniu \u017c\u0105da\u0144 ICMP
# powinno pomagac w odpieraniu atakow DoS
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
else
    $SYSCTL net.ipv4.icmp_echo_ignore_broadcasts="1"
fi

#przyjmowanie lub odrzucanie zrodla rutowanych pakietow 
#zazwyczaj jest wlaczone, ta opcja je wylacza ze wzgledu 
#na mozliwosc naruszenia bezpieczenstwa

if [ "$SYSCTL" = "" ]
then
    echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
else
    $SYSCTL net.ipv4.conf.all.accept_source_route="0"
fi

# ta opcja pozwala na przekierowania ICMP tylko z listy naszych gatewayow
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
else
    $SYSCTL net.ipv4.conf.all.secure_redirects="1"
fi

# ta opcja loguje pakiety z "niemozliwych" adresow
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
else
    $SYSCTL net.ipv4.conf.all.log_martians="1"
fi


##########################################################################
# przeladowanie aktualnych tabel

echo "przeladowuje tabele ..."

# resetowanie standartowych regulek
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
#$IPT -t mangle -P PREROUTING ACCEPT
#$IPT -t mangle -P OUTPUT ACCEPT

# przeladowanie wszystkich tabel
$IPT -F
$IPT -t nat -F
#$IPT -t mangle -F

# wymazanie wszystkich lancuchow
$IPT -X
$IPT -t nat -X
#$IPT -t mangle -X

##########################################################################
# konfiguracja zasad

# tabela filtrowania

# zabraniamy wszystkiego

$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# lecimy regulki

echo "laduje lancuchy ..."

# lancuch do filtrowania "zlych" pakietow
$IPT -N bad_packets

# jeszcze jeden...
$IPT -N bad_tcp_packets

# tworzymy osobne lancuchy dla icmp, tcp (incoming & outgoing),
# i dla przychodzacych udp.

$IPT -N icmp_packets

# uzywany dla przychodzacych z internetu pakietow UDP 
$IPT -N udp_inbound

# uzywane dla wychodzacych uslug UDP z localnetu
# Defaultowo pozwalamy
$IPT -N udp_outbound

# uzywane do pozwalania przychodzacym uslugom jesli potrzebne
# Defaultowo blad oprocz polaczen ustanowionych
$IPT -N tcp_inbound

# uzywane do blokowania wychodzacych uslug z localnetu
# Defaultowo pozwalamy
$IPT -N tcp_outbound

###############################################################################
#
# lancuchy
#

# lancuchy bad_packets
#
# Dropujemy zle pakiety natychmiast po uprzednim zalogowaniu :P
$IPT -A bad_packets -p ALL -m state --state INVALID -j LOG --log-prefix "fp=bad_packets:1 a=DROP "
$IPT -A bad_packets -p ALL -m state --state INVALID -j DROP

# nastepnie sprawdzamy czy wszystko inne jest oki :)
$IPT -A bad_packets -p tcp -j bad_tcp_packets

# jesli tak, to wracamy
$IPT -A bad_packets -p ALL -j RETURN

# lancuchy bad_tcp_packets

# powrot do "wzywajacego" lancucha jesli pakiet przychodzi z localnetu.
# opcja w sumie dla duzych sieci lokalnych
$IPT -A bad_tcp_packets -p tcp -i $LOCAL_IFACE -j RETURN

#localnet - raczej zostawic jak jest, nie chcialo mi sie komentowac bo cholera duzo tego :P
# $IPT -A bad_tcp_packets -p tcp -i $LOCAL_IFACE ! --syn -m state --state NEW -j DROP

$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "fp=bad_tcp_packets:1 a=DROP "
$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

# wszystko oki wiec powrot
$IPT -A bad_tcp_packets -p tcp -j RETURN

# lancuch icmp_packets

# pakiety ICMP powinny zawsze miescic sie w warstwie 2 ramki
# i nigdy nie powinny byc zfragmentowane
# zfragmentowane pakiety ICMP sa typowa oznaka ataku DoS
$IPT -A icmp_packets --fragment -p ICMP -j LOG --log-prefix "fp=icmp_packets:1 a=DROP "
$IPT -A icmp_packets --fragment -p ICMP -j DROP

#  te lancuchy sa dla przychodzacych pakietow type 8 ICMP
#  (Echo Request) i jest defaultowo odrzucany.
# odhaszuj rowniez linijke LOG jesli chcesz aby pingowania byly logowane
 $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j LOG --log-prefix "fp=icmp_packets:2 a=ACCEPT "

# Echo - odhaszuj jesli chcesz aby mozna bylo pingnac router.
 $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT

# akceptujemy z przychodzacych pakiety ICMP typu Time Exceeded
$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

# brak regul pozwalajacych, wiec powrot
$IPT -A icmp_packets -p ICMP -j RETURN


##########################################################################
# TCP & UDP

# lancuchy udp_inbound

# mowimy goodbye to microshit netbios
$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j DROP
$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j DROP

# jesli korzystasz z DHCP to odhaszuj
#$IPT -A udp_inbound -p UDP -s 0/0 --source-port 67 --destination-port 68 -j ACCEPT

# przychodzace UDP bez zadania odbijamy...
$IPT -A udp_inbound -p UDP -j RETURN

# lancuchy udp_outbound

# blokowanie wychodzacego ICQ
#$IPT -A udp_outbound -p UDP -s 0/0 --destination-port 4000 -j REJECT

# jesli nie ma regulek zabraniajacych to akceptujemy
$IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT


##########################################################################
# lancuchy tcp_inbound

# serwis identd, reject przyspiesza logowanie...
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 113 -j REJECT
# $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 113 -j ACCEPT
$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j REJECT
#$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j ACCEPT

##########################################################################
# uslugi dostepne z zewnatrz

# indianiec
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT

# indianiec w wersji ssl
#$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 443 -j ACCEPT

# sshd
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT

# rozne inne uslugi..... odhaszowac lub dodac w razie potrzeby...
#$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 8000:8001 -j ACCEPT
#$IPT -A tcp_inbound -p UDP -s 0/0 --destination-port 8# jeszcze jeden...
$IPT -N bad_tcp_packets

# tworzymy osobne lancuchy dla icmp, tcp (incoming & outgoing),
# i dla przychodzacych udp.

$IPT -N icmp_packets

# uzywany dla przychodzacych z internetu pakietow UDP 
$IPT -N udp_inbound

# uzywane dla wychodzacych uslug UDP z localnetu
# Defaultowo pozwalamy
$IPT -N udp_outbound

# uzywane do pozwalania przychodzacym uslugom jesli potrzebne
# Defaultowo blad oprocz polaczen ustanowionych
$IPT -N tcp_inbound

# uzywane do blokowania wychodzacych uslug z localnetu
# Defaultowo pozwalamy
$IPT -N tcp_outbound

###############################################################################
#
# lancuchy
#

# lancuchy bad_packets
#
# Dropujemy zle pakiety natychmiast po uprzednim zalogowaniu :P
$IPT -A bad_packets -p ALL -m state --state INVALID -j LOG --log-prefix "fp=bad_packets:1 a=DROP "
$IPT -A bad_packets -p ALL -m state --state INVALID -j DROP

# nastepnie sprawdzamy czy wszystko inne jest oki :)
$IPT -A bad_packets -p tcp -j bad_tcp_packets

# jesli tak, to wracamy
$IPT -A bad_packets -p ALL -j RETURN

# lancuchy bad_tcp_packets

# powrot do "wzywajacego" lancucha jesli pakiet przychodzi z localnetu.
# opcja w sumie dla duzych sieci lokalnych
$IPT -A bad_tcp_packets -p tcp -i $LOCAL_IFACE -j RETURN

#localnet - raczej zostawic jak jest, nie chcialo mi sie komentowac bo cholera duzo tego :P
# $IPT -A bad_tcp_packets -p tcp -i $LOCAL_IFACE ! --syn -m state --state NEW -j DROP

$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "fp=bad_tcp_packets:1 a=DROP "
$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

# wszystko oki wiec powrot
$IPT -A bad_tcp_packets -p tcp -j RETURN

# lancuch icmp_packets

# pakiety ICMP powinny zawsze miescic sie w warstwie 2 ramki
# i nigdy nie powinny byc zfragmentowane
# zfragmentowane pakiety ICMP sa typowa oznaka ataku DoS
$IPT -A icmp_packets --fragment -p ICMP -j LOG --log-prefix "fp=icmp_packets:1 a=DROP "
$IPT -A icmp_packets --fragment -p ICMP -j DROP

#  te lancuchy sa dla przychodzacych pakietow type 8 ICMP
#  (Echo Request) i jest defaultowo odrzucany.
# odhaszuj rowniez linijke LOG jesli chcesz aby pingowania byly logowane
 $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j LOG --log-prefix "fp=icmp_packets:2 a=ACCEPT "

# Echo - odhaszuj jesli chcesz aby mozna bylo pingnac router.
 $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT

# akceptujemy z przychodzacych pakiety ICMP typu Time Exceeded
$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

# brak regul pozwalajacych, wiec powrot
$IPT -A icmp_packets -p ICMP -j RETURN


##########################################################################
# TCP & UDP

# lancuchy udp_inbound

# mowimy goodbye to microshit netbios
$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j DROP
$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j DROP

# jesli korzystasz z DHCP to odhaszuj
#$IPT -A udp_inbound -p UDP -s 0/0 --source-port 67 --destination-port 68 -j ACCEPT

# przychodzace UDP bez zadania odbijamy...
$IPT -A udp_inbound -p UDP -j RETURN

# lancuchy udp_outbound

# blokowanie wychodzacego ICQ
#$IPT -A udp_outbound -p UDP -s 0/0 --destination-port 4000 -j REJECT

# jesli nie ma regulek zabraniajacych to akceptujemy
$IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT


##########################################################################
# lancuchy tcp_inbound

# serwis identd, reject przyspiesza logowanie...
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 113 -j REJECT
# $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 113 -j ACCEPT
$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j REJECT
#$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j ACCEPT

##########################################################################
# uslugi dostepne z zewnatrz

# indianiec
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT

# indianiec w wersji ssl
#$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 443 -j ACCEPT

# sshd
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT

# rozne inne uslugi..... odhaszowac lub dodac w razie potrzeby...
#$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 8000:8001 -j ACCEPT
#$IPT -A tcp_inbound -p UDP -s 0/0 --destination-port 8000:8001 -j ACCEPT

# brak regulki, powrot
$IPT -A tcp_inbound -p TCP -j RETURN

##########################################################################
#uslugi jakie chcemy zablokowac dla sieci lokalnej
# blokowanie wychodzacego IRC
#$IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 194 -j REJECT

# blokowanie wychodzacego telnetu
#$IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 23 -j REJECT

# blokowanie internet messengerow ( przyklady... )

# AIM
#$IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 5190 -j REJECT

# grafika przez AIM'a
#$IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 4443 -j REJECT

# MSN Messenger
#$IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 1863 -j REJECT

# brak regulek zabraniajacych wiec akceptujemy
$IPT -A tcp_outbound -p TCP -s 0/0 -j ACCEPT

##########################################################################
# lancuchy INPUT

echo "laduje lancuchy INPUT ..."

# pozwol na wszystko dla ifejsu lo
$IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT
$IPT -A INPUT -p ALL -i $LO_IFACEV -j ACCEPT

# Drop bad packets
$IPT -A INPUT -p ALL -j bad_packets

# modemy kablowe DOCSIS
# $IPT -A INPUT -p ALL -d 224.0.0.1 -j DROP
# $IPT -A INPUT -p ALL -d 224.0.0.1 -j ACCEPT

# zasady dla sieci lokalnej (dostep do gateway'a dla samych siebie)
$IPT -A INPUT -p ALL -i $LOCAL_IFACE -s $LOCAL_NET -j ACCEPT
$IPT -A INPUT -p ALL -i $LOCAL_IFACE -d $LOCAL_BCAST -j ACCEPT


# zasady dla pakietow "przychodzacych"

# akceptujemy juz ustanowione polaczenia
$IPT -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

# rutujemy reszte wlasciwych pakietow
$IPT -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound
$IPT -A INPUT -p UDP -i $INET_IFACE -j udp_inbound
$IPT -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

# odrzucamy bez logowania
$IPT -A INPUT -p ALL -d 255.255.255.255 -j DROP

# logujemy pakiety ktore ciagle nie pasuja...
$IPT -A INPUT -j LOG --log-prefix "fp=ip_in:99 a=DROP "

##########################################################################
# lancuchy FORWARD

echo "laduje lancuchy FORWARD ..."

# regulki do nat-u

# odrzucamy zle pakiety
$IPT -A FORWARD -p ALL -j bad_packets

# akceptujemy pakiety TCP ktore chcemy forwardowac z localnetu
$IPT -A FORWARD -p tcp -i $LOCAL_IFACE -j tcp_outbound

# akceptujemy pakiety UDP ktore chcemy forwardowac z localnetu
$IPT -A FORWARD -p udp -i $LOCAL_IFACE -j udp_outbound

# jesli nie sa zablokowane akceptujemy wszystkie pakiety z localnetu
$IPT -A FORWARD -p ALL -i $LOCAL_IFACE -j ACCEPT

# ustanawiamy polaczenia z internetem
$IPT -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

# logujemy pakiety ktore ciagle nie pasuja...
$IPT -A FORWARD -j LOG --log-prefix "fp=ip_forward:99 a=DROP "

##########################################################################
# lancuchy OUTPUT

echo "laduje lancuchy OUTPUT ..."

# generalnie ufamy pakietom wychodzacym :P
# ale, "zle" pakieciki ICMP powinny "zejsc" :P
$IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP

# Localhost
$IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -s $LO_IPW -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LO_IFACEV -j ACCEPT

# do sieci lokalnej
$IPT -A OUTPUT -p ALL -s $LOCAL_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LOCAL_IFACE -j ACCEPT

# do internet'u
$IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT

# logujemy pakiety ktore ciagle nie pasuja...
$IPT -A OUTPUT -j LOG --log-prefix "fp=ip_out:99 a=DROP "

##########################################################################
# tabela nat-u

echo "laduje lancuchy nat ..."

# lancuchy postrouting

$IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

echo "Zrobione:P"
000:8001 -j ACCEPT

# brak regulki, powrot
$IPT -A tcp_inbound -p TCP -j RETURN

##########################################################################
#uslugi jakie chcemy zablokowac dla sieci lokalnej
# blokowanie wychodzacego IRC
#$IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 194 -j REJECT

# blokowanie wychodzacego telnetu
#$IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 23 -j REJECT

# blokowanie internet messengerow ( przyklady... )

# AIM
#$IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 5190 -j REJECT

# grafika przez AIM'a
#$IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 4443 -j REJECT

# MSN Messenger
#$IPT -A tcp_outbound -p TCP -s 0/0 --destination-port 1863 -j REJECT

# brak regulek zabraniajacych wiec akceptujemy
$IPT -A tcp_outbound -p TCP -s 0/0 -j ACCEPT

##########################################################################
# lancuchy INPUT

echo "laduje lancuchy INPUT ..."

# pozwol na wszystko dla ifejsu lo
$IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT
$IPT -A INPUT -p ALL -i $LO_IFACEV -j ACCEPT

# Drop bad packets
$IPT -A INPUT -p ALL -j bad_packets

# modemy kablowe DOCSIS
# $IPT -A INPUT -p ALL -d 224.0.0.1 -j DROP
# $IPT -A INPUT -p ALL -d 224.0.0.1 -j ACCEPT

# zasady dla sieci lokalnej (dostep do gateway'a dla samych siebie)
$IPT -A INPUT -p ALL -i $LOCAL_IFACE -s $LOCAL_NET -j ACCEPT
$IPT -A INPUT -p ALL -i $LOCAL_IFACE -d $LOCAL_BCAST -j ACCEPT


# zasady dla pakietow "przychodzacych"

# akceptujemy juz ustanowione polaczenia
$IPT -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

# rutujemy reszte wlasciwych pakietow
$IPT -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound
$IPT -A INPUT -p UDP -i $INET_IFACE -j udp_inbound
$IPT -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

# odrzucamy bez logowania
$IPT -A INPUT -p ALL -d 255.255.255.255 -j DROP

# logujemy pakiety ktore ciagle nie pasuja...
$IPT -A INPUT -j LOG --log-prefix "fp=ip_in:99 a=DROP "

##########################################################################
# lancuchy FORWARD

echo "laduje lancuchy FORWARD ..."

# regulki do nat-u

# odrzucamy zle pakiety
$IPT -A FORWARD -p ALL -j bad_packets

# akceptujemy pakiety TCP ktore chcemy forwardowac z localnetu
$IPT -A FORWARD -p tcp -i $LOCAL_IFACE -j tcp_outbound

# akceptujemy pakiety UDP ktore chcemy forwardowac z localnetu
$IPT -A FORWARD -p udp -i $LOCAL_IFACE -j udp_outbound

# jesli nie sa zablokowane akceptujemy wszystkie pakiety z localnetu
$IPT -A FORWARD -p ALL -i $LOCAL_IFACE -j ACCEPT

# ustanawiamy polaczenia z internetem
$IPT -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

# logujemy pakiety ktore ciagle nie pasuja...
$IPT -A FORWARD -j LOG --log-prefix "fp=ip_forward:99 a=DROP "

##########################################################################
# lancuchy OUTPUT

echo "laduje lancuchy OUTPUT ..."

# generalnie ufamy pakietom wychodzacym :P
# ale, "zle" pakieciki ICMP powinny "zejsc" :P
$IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP

# Localhost
$IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -s $LO_IPW -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LO_IFACEV -j ACCEPT

# do sieci lokalnej
$IPT -A OUTPUT -p ALL -s $LOCAL_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LOCAL_IFACE -j ACCEPT

# do internet'u
$IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT

# logujemy pakiety ktore ciagle nie pasuja...
$IPT -A OUTPUT -j LOG --log-prefix "fp=ip_out:99 a=DROP "

##########################################################################
# tabela nat-u

echo "laduje lancuchy nat ..."

# lancuchy postrouting

$IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

echo "Zrobione:P"
niestety z tego nie kozystałem tak ze nie wiem jak pracuje :(

ODPOWIEDZ