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: