#!/bin/sh
##############################################################################

# Nazwa i lokalizacja programu
IPTABLES=iptables

# Sciezka do pliku wykonywlanego 
PATH="/usr/sbin"

# Adres serwera - naszego kompa

SERWER="192.168.0.3"

# Adres komputera z ktorego logujemy sie jako admin :)

KOMP="192.168.0.10"

# Przestrzen adresowa naszej sieci wewnetrzenej i karta ja obslugujace

WEW_NET="192.168.0.1/28"
WEW_DEV="eth0"

# Adres wyjsciowy - zewnetrzny i karta obslugujaca

ZEW_NET="0/0"   # 0/0 wskazuje jakikolwiek adres IP
ZEW_DEV="eth1"

# Uslugi TCP,ktore chcemy przepuszczac - "" puste oznacza wszystkie porty
# kolejne oddzielamy przecinkami  

TCP_IN="www,ssh,ftp-data,ftp"           # 80,22,20,21 
TCP_OUT="www,ftp,ftp-data,irc,ssh"      # 80,21,20, ,22


# Uslugi UDP,ktore przepuszczamy - "" puste oznacza wszytskie porty
# kolejne oddzielone przecinkami 

UDP_IN="443,465,995" 
UDP_OUT=""

# Uslugi ICMP, ktore chcemy przepuszczac - "" puste oznacza wszystkie typy
# kolejne oddzielone przecinkami

ICMP_IN=""
ICMP_OUT=""

#################################################################################

# Usuwamy poprzednie regoly 

$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -F OUTPUT

# Ustawienie domyslnej polityki

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


# Zapisujemy caly nasz ruch w logach 

$IPTABLES -A INPUT -j LOG -m limit --limit 15/hour # 15 logow na godzine
$IPTABLES -A OUTPUT -j LOG -m limit --limit 15/hour
$IPTABLES -A FORWARD -j LOG -m limit --limit 15/hour

# Ladujemy mozliwosc sledzenia polaczen

modprobe ip_conntarck
modprobe ip_conntarck_ftp

# Wylaczamy odpowiedzi na pingi

    #echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

# Ochrona przed atakami typu Smurf

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Wlaczamy ochrone przed komunikacja ICMP error

echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# Wlacza logowanie dziwnych pakietow (spoofed. source routed. redirects) 

echo "1" > /proc/sys/net/ipv4/conf/all/log_martians 

# Nie akceptujemy datagramu IP z opcja "source route"
  
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

# Nie przyjmujemy pakietow ICMP redict, ktore moga zmienic nasza tablice routingu

echo "0" /proc/sys/net/ipv4/conf/all/accept_redirects

# Wszystkie karty nie beda przyjmowaly pakietow z sieici innych niz te 
# z tablicy routingu 

echo "1" /proc/sys/net/ipv4/conf/all/rp_filter 
  

# Pozwalamy pakietom biegac po naszym komputerze
# czyli odblokowujemy petle zwrotna LOOPBACK

$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# Pozwalamy na korzstanie z protokolow w trybie passive on

$IPTABLES -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT

# Pozwalamy na pingowanie nas i innych (opcje te zadzialaja jezli nie wylaczymy  
# pingowania) patrz wyzej  

    #$IPTABLES -A INPUT -p icmp -s 0/0 -d 0/0 -j ACCEPT
    #$IPTABLES -A OUTPUT -p icmp -s 0/0 -d 0/0 -j ACCEPT

$IPTABLES -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT #tylko my mozemy pingowac

# Odblokowujemy uslugi na serwerze dla innych przychodzacych z zewnatrz

#$IPTABLES -A INPUT -p tcp -s 0/0 --dport 20:22 -j ACCEPT # czyli ftp-data,ftp,ssh,
#$IPTABLES -A INPUT -p tcp  -s 0/0 --dport 80 -j ACCEPT # czyli www
#$IPTABLES -A INPUT -p udp -s 0/0 --dport 20:22 -j ACCEPT # czyli ftp-data,ftp,ssh,

$IPTABLES -A INPUT -p tcp -s 0/0 --sport 20:22 -j ACCEPT # czyli ftp-data,ftp,ssh,
$IPTABLES -A INPUT -p tcp  -s 0/0 --sport 80 -j ACCEPT # czyli www
$IPTABLES -A INPUT -p udp -s 0/0 --sport 20:22 -j ACCEPT # czyli ftp-data,ftp,ssh,

$IPTABLES -A INPUT -p tcp -s 0/0 --dport 113 -j ACCEPT # identyfikacja

$IPTABLES -A INPUT -p udp -s 0/0 --dport 1025:1100 -j ACCEPT # dla hotha 

# Odblokowujemy uslugi na sewerze dla danego adresu IP - KOMP patrz wyzej definicje TCP_IN, UDP_IN

    #$IPTABLES -A INPUT -p tcp -s $KOMP -m multiport --dport $TCP_IN  -j ACCEPT # protokol tcp
    #$IPTABLES -A INPUT -p udp -s $KOMP -m multiport --dport $UDP_IN -j ACCEPT # protokol udp

    #$IPTABLES -A INPUT -p udp -s $KOMP --dport 137:139 -j ACCEPT # protokol udp

# Zezwalamy na wszystko z danego adresu IP

$IPTABLES -A INPUT -s $KOMP -j ACCEPT


# dostep do DNS

$IPTABLES -A INPUT -p tcp -s 0/0 --sport 53 -d $SERWER  -j ACCEPT
$IPTABLES -A INPUT -p udp -s 0/0 --sport 53 -d $SERWER -j ACCEPT

    #$IPTABLES -A OUTPUT -p tcp -s $SERWER -d 0/0 --dport 53 -j ACCEPT 
    #$IPTABLES -A OUTPUT -p udp -s $SERWER -d 0/0 --dport 53 -j ACCEPT

    # lub mozna tak
$IPTABLES -A INPUT -s 213.173.209.70 -j ACCEPT  # DNSy tele2 :)
$IPTABLES -A INPUT -s 213.173.209.71 -j ACCEPT

# Teraz troche sie pozamykamy :)
# Pakiety z adresem zrodlowym ustawionym na nasz 

$IPTABLES -A INPUT -i $WEW_DEV -s $SERWER -j DROP 		# atak Land

# Pakiety z adresow nierutowlanych, multicast i zarezerwowanych

$IPTABLES -A INPUT -i $WEW_DEV -s 10.0.0.0/8 -j DROP 		#class A
$IPTABLES -A INPUT -i $WEW_DEV -s 172.16.0.0/12 -j DROP 	#class B
#$IPTABLES -A INPUT -i $WEW_DEV -s 192.168.0.0/16 -j DROP 	#class C - z tego korzystamy
$IPTABLES -A INPUT -i $WEW_DEV -s 224.0.0.0/4 -j DROP 		#multicast
$IPTABLES -A INPUT -i $WEW_DEV -d 224.0.0.0/4 -j DROP 		#multicast
$IPTABLES -A INPUT -i $WEW_DEV -s 240.0.0.0/5 -j DROP 		#reserved
$IPTABLES -A INPUT -i $WEW_DEV -s 127.0.0.0/5 -j DROP 		#lo



