[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

firewall



Witam,
oto firewall niekompletny,i pytanie jak zrobic aby INTNET nie był ogólny,ale
dla poszczególnych IP np.0.1,0.2 ale nie cała podsieć.
Googlowalem,czytalem faqi,howto ipt. no i niestety nic.Z góry dziekuje.Karol

# Wszystko z przedrostkim EXT oznacza wyjscie na swiat, z INT siec
wewnetrzna

# Adres do iptables
# tu powinienes/as se zmienic...
IPTABLES="/sbin/iptables"

# Zewnetrzny interfejs
EXTDEV="ppp0"

# Zewnetrzny adres IP
# Dalem taka skaplikowana regulke poniewaz dziala ona tez przy sieciach DHCP
EXTIP=`ifconfig $EXTDEV | grep "inet addr:" | \
 awk -F: {'print $2'} | cut -d\  -f 1`
if [ -z "${EXTIP}" ]; then
 exit 1
fi
# Ale gdyby nie dzialala to zamiast niej uruchom ta:
#EXTIP="x.x.x.x"

# Wewnetrzny interfejs
INTDEV="eth0"

# Wewnetrzny adres IP
# Dalem taka skaplikowana regulke poniewaz dziala ona tez przy sieciach DHCP
INTIP=`ifconfig $INTDEV | grep "inet addr:" | \
 awk -F: {'print $2'} | cut -d\  -f 1`
if [ -z "${INTIP}" ]; then
 exit 1
fi

# Ale gdyby nie dzialala to zamiast niej uruchom ta:
#INTIP="y.y.y.y"

# Maska sieci wewnetrznej
INTNET="192.168.0.0/24"


# Kwestie informacyjne
echo "EXTDEV: ${EXTDEV} z ${EXTIP}"
echo "INTDEV: ${INTDEV} z ${INTIP}"

case "$1" in

    start)

 # Startuje firewall.
 echo -n "Odpalam firewall: "

 # Ladowanie Modolow
 #modprobe ip_tables
 #modprobe ip_conntrack
 #modprobe ip_conntrack_ftp
 #modprobe ip_masq_ftp
 #modprobe ip_masq_irc
 #modprobe ip_masq_raudio



 # Wlaczamy se maskarade
 $IPTABLES -t nat -A POSTROUTING -o $EXTDEV -j SNAT --to-source=$EXTIP



 # Czyscimy lancuchy
 $IPTABLES -F

 # Polityki domyslne
 $IPTABLES -P INPUT DROP
 $IPTABLES -P OUTPUT DROP
 $IPTABLES -P FORWARD DROP

 #--==[ Opcje kernela ]==--
 #

 # Zalaczenie forwardingu w kernelu
 echo 1 > /proc/sys/net/ipv4/ip_forward

 # Wylaczamy odpowiedzi na pingi
 /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

 # Ochrona przed atakiem typu Smurf
 /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

 # Nie akceptujemy pakietow "Source route"
 /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

 # Nie przyjmujemy pakietow ICMP redirect,
 # ktore moga zmienic nasza tablice routingu
 /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

 # Wlaczamy ochrone przed blednymi pakietami ICMP error
 /bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

 # Kazdy interfejs sieciowy bedzie przyjmowal
 # tylko te pakiety ktore znajduja sie w tablicy routingu
 /bin/echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

 # Pelny ruch na interfejsie lo
 $IPTABLES -A INPUT -i lo -j ACCEPT
 $IPTABLES -A OUTPUT -o lo -j ACCEPT

 #--=={ PRZEKIEROWANIA PORTOW }==--
 # Odkomentuj ponizsze linie jedynie jesli
 # przekierowanie portow jest konieczne
 #
 # (nie tlumacze co to robi - jesli tego naprawde
 # potrzebujesz to sobie poradzisz :] )
 #
 # (ten fragment w zasadzie spisalem z gShield..)
 #
 #
 #$IPTABLES -I FORWARD -p tcp -d $DSTIP --dport $SRCPRT -j ACCEPT
 #$IPTABLES -I FORWARD -p udp -d $DSTIP --dport $SRCPRT -j ACCEPT
 #$IPTABLES -t nat -A PREROUTING -p tcp -i $LOCALIF -s $ALLOWFROM -d
$SRCIP --dport $SRCPRT -j DNAT --to $DSTIP
 #$IPTABLES -t nat -A PREROUTING -p udp -i $LOCALIF -s $ALLOWFROM -d
$SRCIP --dport $SRCPRT -j DNAT --to $DSTIP



 #---==[ LANCUCH INPUT ]==---

 # Przepuszczamy nawiazane polaczenia
 $IPTABLES -A INPUT -i $EXTDEV -p icmp -m state --state ESTABLISHED -j
ACCEPT
 $IPTABLES -A INPUT -i $EXTDEV -p icmp -m state --state RELATED -j ACCEPT
 # Przepuszczamy nawiazywanie polaczen
 $IPTABLES -A OUTPUT -o $EXTDEV -p icmp -m state --state NEW -j ACCEPT
 $IPTABLES -A OUTPUT -o $EXTDEV -p icmp -m state --state ESTABLISHED -j
ACCEPT
 $IPTABLES -A OUTPUT -o $EXTDEV -p icmp -m state --state RELATED -j ACCEPT

 # Pozbywamy sie "smieci" z shitu micro$oftu -netbios.
 $IPTABLES -A INPUT -i $INTDEV -p udp -d 192.168.1.255 --dport 137:138 -j
DROP

 # Sekcja wywalania _dziur_ w firewallu dla roznych demonow czy serwerow:
 #** SSH **
 # Akceptujemy pakiety NEW na naszym porcie 22(ssh).
 # fajnie by bylo dodac "-s a.b.c.d" aby moc sie logowac tylko z jednego IP.
 $IPTABLES -A INPUT -p tcp --sport 1024: --dport 22 -m state --state NEW -j
ACCEPT

 #** FTP **
 # Akceptujemy pakiety NEW na naszym porcie 21(ftp) tcp i udp.
 $IPTABLES -A INPUT  -p tcp --dport 21 -m state --state NEW -j ACCEPT
 $IPTABLES -A INPUT  -p udp --dport 21 -m state --state NEW -j ACCEPT

 #** DHCPD **
 # Akceptujemy pakiety NEW na naszym portach 67 i 68(dhcpd) tcp i udp.
 $IPTABLES -A INPUT  -p tcp --dport 67 -m state --state NEW -j ACCEPT
 $IPTABLES -A INPUT  -p udp --dport 67 -m state --state NEW -j ACCEPT
 $IPTABLES -A INPUT  -p tcp --dport 68 -m state --state NEW -j ACCEPT
 $IPTABLES -A INPUT  -p udp --dport 68 -m state --state NEW -j ACCEPT



 #** HTTP **
 # Akceptujemy pakiety NEW na naszym porcie 80(www).
 $IPTABLES -A INPUT -p tcp --sport 1024: --dport 80 -m state --state NEW -j
ACCEPT

 #** RPC **
 # Akceptujemy pakiety NEW na naszym porcie 111(Portmap) tcp i udp z sieci
lokalnej.
 $IPTABLES -A INPUT -i $INTDEV -p tcp --dport 111 -m state --state NEW -j
ACCEPT
 $IPTABLES -A INPUT -i $INTDEV -p udp --dport 111 -m state --state NEW -j
ACCEPT

 # Akceptujemy pakiety NEW na naszym porcie 2049(NFS)  udp z sieci lokalnej.
 $IPTABLES -A INPUT -i $INTDEV -p udp --dport 2049 -m state --state NEW -j
ACCEPT

 # Akceptujemy pakiety NEW na naszym niestandartowym porcie 1026(mountd) tcp
i udp z sieci lokalnej.
 $IPTABLES -A INPUT -i $INTDEV -p udp --dport 1026 -m state --state NEW -j
ACCEPT
 $IPTABLES -A INPUT -i $INTDEV -p tcp --dport 1026 -m state --state NEW -j
ACCEPT

 #** DNS **
 # Akceptujemy pakiety NEW na naszym porcie 53(DNS) tcp i udp z sieci
lokalnej.
 # Transakcje serwer-klient
 $IPTABLES -A INPUT -i $INTDEV -p udp --sport 1024: --dport 53 -m
state --state NEW -j ACCEPT
 # Transakcje serwer-serwer
 $IPTABLES -A INPUT -i $INTDEV -p udp --sport 53 --dport 53 -m state --state
NEW -j ACCEPT

 #** INNE **
 # Wiesz co na jakim porcie siedzi i skad ma przyjmowac polaczenia...
 # np. $IPTABLES -A INPUT -p tcp -s z.z.z.z --dport 6666 -m state --state
NEW -j ACCEPT
 # wywala dziure dla uslugi na porcie 6666 tylko dla klienta z.z.z.z



 # Koniec sekcji konfiguracji demonow.

 # Odrzuca te pakiety-bez tego ftp by dluzej czekal na polaczenie
 $IPTABLES -A INPUT -p tcp --sport 1024: --dport 113 -m state --state NEW -j
REJECT --reject-with icmp-port-unreachable

 # Przepuszcza pakiety z flaga ESTABLISHED i RELATED
 $IPTABLES -A INPUT -m state --state ESTABLISHED -j ACCEPT
 $IPTABLES -A INPUT -m state --state RELATED -j ACCEPT

 # Reszte pakietow logujemy i usuwamy
 #$IPTABLES -A INPUT -j LOG --log-prefix "IPT INPUT: "
 $IPTABLES -A INPUT -j DROP


 #---==[ LANCUCH OUTPUT ]==---

 # Akceptacja wszystkiego co jest prawidlowe :-)
 $IPTABLES -A OUTPUT -m state --state ! INVALID -j ACCEPT

 # "Reszte" logujemy i wyrzucamy
 #$IPTABLES -A OUTPUT -j LOG --log-prefix "IPT OUTPUT: "
 $IPTABLES -A OUTPUT -j DROP


 #---==[ LANCUCH FORWARD ]==---

 # Pozwalamy na nawiazywanie i utrzymanie polaczenia z sieci lokalnej
 $IPTABLES -A FORWARD -i $INTDEV -p tcp -s $INTNET --sport 1024: -m
state --state NEW -j ACCEPT
 $IPTABLES -A FORWARD -i $INTDEV -p tcp -s $INTNET --sport 1024: -m
state --state ESTABLISHED -j ACCEPT
 $IPTABLES -A FORWARD -i $INTDEV -p tcp -s $INTNET --sport 1024: -m
state --state RELATED -j ACCEPT


 $IPTABLES -A FORWARD -i $INTDEV -p udp -s $INTNET --sport 1024: -m
state --state NEW -j ACCEPT
 $IPTABLES -A FORWARD -i $INTDEV -p udp -s $INTNET --sport 1024: -m
state --state ESTABLISHED -j ACCEPT
 $IPTABLES -A FORWARD -i $INTDEV -p udp -s $INTNET --sport 1024: -m
state --state RELATED -j ACCEPT

 # Przepuszczamy pakiety do sieci lokalnej
 $IPTABLES -A FORWARD -o $INTDEV -p tcp -d $INTNET --dport 1024: -m
state --state ESTABLISHED -j ACCEPT
 $IPTABLES -A FORWARD -o $INTDEV -p tcp -d $INTNET --dport 1024: -m
state --state RELATED -j ACCEPT

 $IPTABLES -A FORWARD -o $INTDEV -p udp -d $INTNET --dport 1024: -m
state --state ESTABLISHED -j ACCEPT
 $IPTABLES -A FORWARD -o $INTDEV -p udp -d $INTNET --dport 1024: -m
state --state RELATED -j ACCEPT

 # Przepuszczamy caly poprawny ruch ICMP
 $IPTABLES -A FORWARD -p icmp -m state --state ! INVALID -j ACCEPT

 # Logujemy i kasujemy reszte
 #$IPTABLES -A FORWARD -j LOG --log-prefix "IPT FORWARD: "
 $IPTABLES -A FORWARD -j DROP




 #---==[ TOS ]==---
 # TOS(type of service) -pozwala nadac rozny piorytet pakietom.
 # niestety nie wszystkie routery obslugoja ta funkcje wiec
 # nie spodziewajcie sie cudow, ale nie zaszkodzi sprobowac
 #
 # Parametry zgodne z RFC 1060/1349
 #
 # typ    dec hex
 # Minimalize-delay  16 0x10
 # Maximalize-throughput  8 0x08
 # Maxymalize-Reliability  4 0x04
 # Minimalize-cost   2 0x02
 # Normal-service   0 0x00

 $IPTABLES -t mangle -A PREROUTING -p tcp -s $INTNET --dport 80 -j
TOS --set-tos 0x10
 $IPTABLES -t mangle -A OUTPUT  -p tcp -s $INTNET --dport 80 -j
TOS --set-tos 0x10


 #---==[ TTL ]==---
 # TTL - czas zycia pakietu.
 # Potrzebny do dzialania patch-0-matic www.netfilter.org wkapliowany w
jadro.
 #
 # Gdy pakietom wychodzacym od nas w siec lokalna ustawimy TTL=1 to
 # naszym klientom bedzie trodniej ustawic masquerade.
 # Zas gdy otrzymamy pakiet z LAN z TTL=127 to mozemy miec sporo pewnosci ze
 # ktos dzieli net za naszymi plecami...
 #
 # Jesli kcesz dzielioc lacze i twoj ISP daje Ci TTL=1 to znaczy ze ma jakis
powod...
 # Nie podam Ci jakiej regolki nalezaloby wtedy uzyc.. ale 'man iptables' :)


 # Ta regolka wyrzuca wszystkie pakiety z LAN ktore sa podejzane o bycie z
masq
     #$IPTABLES -A FORWARD -s $INTNET -m ttl --ttl-eq 127 -j DROP

 # Ta z koleji ustawia wszystkie wychodzace na LAN ttl=1 :)
 #$IPTABLES -t mangle -A PREROUTING -i $EXTDEV -j TTL -ttl-set 1





 #---==[ QoS ]==---
 # potrzebujesz je wkaplikowac w jadro,
 # nie uzywam wiec nie wiem jak dziala...
 # to tez na prosbe usera spisalem w gShield.
 # jesli potrzebujesz odkomentuj

 ## mark "mail/news" traffic to "1"
 #MAIL="25 110 119 143 993 995"
 #for marked in $MAIL
 # do
 #  $IPTABLES -A PREROUTING -i $EXTERNAL -t mangle -p tcp --dport $marked -j
MARK --set-mark 1
 #  $IPTABLES -A PREROUTING -i $EXTERNAL -t mangle -p udp --dport $marked -j
MARK --set-mark 1
 # done

 ## mark "interactive" traffic to "2"
 #LOGIN="22 23 6667"
 #for interactive in $LOGIN
 # do
 #  $IPTABLES -A PREROUTING -i $EXTERNAL -t mangle -p tcp --dport
$interactive -j MARK --set-mark 2
 #  $IPTABLES -A PREROUTING -i $EXTERNAL -t mangle -p udp --dport
$interactive -j MARK --set-mark 2
 # done

 ## mark "web" traffic to "3"
 #WEB="80 443"
 #for web in $WEB
 # do
 #  $IPTABLES -A PREROUTING -i $EXTERNAL -t mangle -p tcp --dport $web -j
MARK --set-mark 3
 #  $IPTABLES -A PREROUTING -i $EXTERNAL -t mangle -p udp --dport $web -j
MARK --set-mark 3
 # done

 ## mark "game" traffic to "4"
 #GAMES="27910:27980 7777 22450 26000 26950 27015 27020 27500 28000:28008
28910"
 #for games in $GAMES
 # do
 #  $IPTABLES -A PREROUTING -i $EXTERNAL -t mangle -p tcp --dport $games -j
MARK --set-mark 4
 #  $IPTABLES -A PREROUTING -i $EXTERNAL -t mangle -p udp --dport $games -j
MARK --set-mark 4
 # done

 echo "zrobione!"



Reply to: