#!/bin/bash
## otthoni tűzfal
 
## megkeressük az iptables -t
IPTABLES=`which iptables`
## megadjuk a modulkönyvtárat:
MODKT=/lib/modules/`uname -r`/kernel/net/ipv4/netfilter
## megkeressük a modprobe parancsot
MODPROBE=`which modprobe`
## kivesszük az ipcímünket:
IFACE=`ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1 }'`
echo
echo "=========================================="
echo "| ::         TUZFAL BEALLITASA        :: |"
echo "=========================================="

## először törlünk minden szabályt.
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
echo "Minden szabĂˇly tĂ¶rlĂ©se .............[ OK ]"

## felállítjuk az alap policyt.
## mindent tiltunk, amit külön nem engedélyezünk.
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "Alap szabĂˇlyok beĂˇllĂ­tĂˇsa ..........[ OK ]"

## megnézzük vannak -e modulok, amiket betöltünk.
## az ftp követő modul, betölti majd a többi modult.
if [ -f $MODKT/ip_conntrack_ftp.ko ]
then MOD=ip_conntrack_ftp ;
$MODPROBE $MOD
fi
if [ -f $MODKT/ip_nat_ftp.ko ]
then MOD2=ip_nat_ftp ;
$MODPROBE $MOD2
fi
echo "Modulok betĂ¶ltĂ©se ..................[ OK ]"

## figyeljük a syn sütiket
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "Anti-synflood vĂ©delem ..............[ OK ]"

## bekapcsoljuk a forráscímhitelesítést.
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
#for spoofing in /proc/sys/net/ipv4/conf/default/rp_filter; do
#        echo "1" > $spoofing
#done
echo "Anti-spoofing vĂ©delem ..............[ OK ]"

## INPUT szabályok.
## loopback -en engedélyezzük a forgalmat.
$IPTABLES -A INPUT -i lo -j ACCEPT

## engedélyezzük befele, ami tőlünk származik.
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## figyeljük, hogy a tcp kapcsolatok, tényleg a syn bittel kezdődjenek.
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -N syn-flood
$IPTABLES -A INPUT -p tcp --syn -j syn-flood
$IPTABLES -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A syn-flood -j LOG --log-prefix "SYN-Flood attack :"
$IPTABLES -A syn-flood -p tcp --syn -j DROP

# Nmap FIN/URG/PSH
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/m -j LOG --log-prefix "Nmap XMAS scan :"
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

# SYN/RST
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/m -j LOG --log-prefix "SYN/RST scan :"
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

#SYN/FIN
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m -j LOG --log-prefix "SYN/FIN scan :"
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# Portscan,PoD
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "XMAS-tree scan :"
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -m state --state ! ESTABLISHED -j LOG --log-prefix "NULL scan :"

## kintről ssh hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT

## kintről ftp hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 20:21 --syn -j ACCEPT

## kintről http hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 443 -j ACCEPT

## VPN
$IPTABLES -A INPUT -i tun+ -j ACCEPT
$IPTABLES -A FORWARD -i tun+ -j ACCEPT

## kintről samba hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 134:139 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 134:139 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 426 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 426 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 445 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 445 -j ACCEPT

## DNS akarunk.
$IPTABLES -A INPUT -p tcp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 53 -j ACCEPT

## kintről vnc hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 5900 -j ACCEPT

## gnutella jĂ¶het
$IPTABLES -A INPUT -p tcp --dport 6346 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 6346 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 6881:6900 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 6881:6900 -m state --state NEW -j ACCEPT


## kintről distcc hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 3632 -j ACCEPT

## kintről "ping" mehet.
$IPTABLES -A INPUT -p icmp -j ACCEPT --icmp-type echo-request

## igaz , hogy a forráscímhitelesítés be van kapcsolva,
## de azért biztosra megyünk. A hamis IP címeket kiszűrjük. 
$IPTABLES -A INPUT -i IFACE -s 192.168.1.0/24 -j REJECT

## ami jönne, azt loggoljuk:
#$IPTABLES -A INPUT -j LOG --log-prefix "nem kellene bejonnie: "

## utána eldobjuk. Igaz, hogy az alap szabály drop, de azért biztosra megyünk:
$IPTABLES -A INPUT -j DROP
echo "INPUT szabĂˇlyok beĂˇllĂ­tĂˇsa .........[ OK ]"

## OUTPUT szabályok.
## loopback -en engedélyezzük a forgalmat.
$IPTABLES -A OUTPUT -o lo -j ACCEPT

## jóváhagyott kapcsolatok engedélyezése.
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## a DNS -re szükség van.
$IPTABLES -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

## http mehet.
$IPTABLES -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

## https mehet
$IPTABLES -A OUTPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

## ssh mehet.
$IPTABLES -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

## ftp mehet
$IPTABLES -A OUTPUT -p tcp --dport 20:21 -m state --state NEW,ESTABLISHED -j ACCEPT

## Ha nem csak webes felületen szeretnénk levelezni.
$IPTABLES -A OUTPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 465 -m state --state NEW,ESTABLISHED -j ACCEPT

## vnc mehet
$IPTABLES -A OUTPUT -p tcp --dport 5900 -m state --state NEW,ESTABLISHED -j ACCEPT

## irc mehet
$IPTABLES -A OUTPUT -p tcp --dport 6667 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 10000 -m state --state NEW,ESTABLISHED -j ACCEPT

## rádió mehet
$IPTABLES -A OUTPUT -p tcp --dport 8000 -m state --state NEW,ESTABLISHED -j ACCEPT

## ntp mehet
$IPTABLES -A OUTPUT -p udp --dport 123 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 123 -m state --state NEW,ESTABLISHED -j ACCEPT

## rdate mehet
$IPTABLES -A OUTPUT -p tcp --dport 37 -m state --state NEW,ESTABLISHED -j ACCEPT

## gnutella mehet
$IPTABLES -A OUTPUT -p tcp --dport 6346 -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 6346 -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 6881:6900 -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 6881:6900 -m state --state NEW -j ACCEPT

## subsession mehet
$IPTABLES -A OUTPUT -p tcp --dport 587 -m state --state NEW,ESTABLISHED -j ACCEPT

## icq mehet
$IPTABLES -A OUTPUT -p tcp --dport 5190 -m state --state NEW,ESTABLISHED -j ACCEPT

## msn mehet
$IPTABLES -A OUTPUT -p tcp --dport 1863 -m state --state NEW,ESTABLISHED -j ACCEPT

## yahoo mehet
$IPTABLES -A OUTPUT -p tcp --dport 5050 -m state --state NEW,ESTABLISHED -j ACCEPT

## gentoo rsync mehet
$IPTABLES -A OUTPUT -p tcp --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT

## samba mehet
$IPTABLES -A OUTPUT -p tcp --dport 134:139 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 134:139 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 445 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 445 -m state --state NEW,ESTABLISHED -j ACCEPT

## pgp keyszerver mehet
$IPTABLES -A OUTPUT -p tcp --dport 11371 -m state --state NEW,ESTABLISHED -j ACCEPT

## rdp mehet
$IPTABLES -A OUTPUT -p tcp --dport 3389 -m state --state NEW,ESTABLISHED -j ACCEPT

## ldap mehet
$IPTABLES -A OUTPUT -p tcp --dport 389 -m state --state NEW,ESTABLISHED -j ACCEPT

## gyali mehet
$IPTABLES -A OUTPUT -p tcp --dport 8888 -m state --state NEW,ESTABLISHED -j ACCEPT

## XDMCP mehet
$IPTABLES -A OUTPUT -p udp --dport 177 -m state --state NEW,ESTABLISHED -j ACCEPT

## telnet mehet
$IPTABLES -A OUTPUT -p udp --dport 23 -m state --state NEW,ESTABLISHED -j ACCEPT

## distcc mehet
$IPTABLES -A OUTPUT -p tcp --dport 3632 -m state --state NEW,ESTABLISHED -j ACCEPT

## gnome talk mehet
$IPTABLES -A OUTPUT -p tcp --dport 5222 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 5223 -m state --state NEW,ESTABLISHED -j ACCEPT

##kifele menő "ping" -re szükség lehet.
$IPTABLES -A OUTPUT -p icmp -j ACCEPT --icmp-type echo-request 

### logolĂˇs ###
#$IPTABLES -A OUTPUT -d 84.21.23.173 -j LOG --log-prefix " ez megy kifele: "
echo "OUTPUT szabĂˇlyok beĂˇllĂ­tĂˇsa ........[ OK ]"
echo "KĂ©sz!! Tuzfal: OK! .................[ OK ]"
echo "=========================================="
echo
