# ------------------- materialy k workshopu ----------------------------------
#Firewally -- Rastislav Macko, Ondřej Čečák, K308, Neděle 15:30
#
#Základní konfigurace firewallů, překlad adres (NAT) a další zajímavé kousky,
#které se Vám můžou hodit, pokud si budete zabezpečovat počítač, případně
#budete chtít vytvořit menší síť a zajistit, aby se tvářila jako jeden počítač.
#Předpoládaná délka 1-1,5 hod.
#
#------------------------------------------------------------------------------
#(v 0.4, ondrej.cecak linuxsoft.cz)
#
#1. Bezstavove filtrovani packetov
#
#   man iptables
#   iptables --help
#
#   iptables -A INPUT ...
#   iptables -D INPUT ...
#                     -p tcp -i eth0 -s ! 147.32.121.107 --dport 22 ...
#                                                                   -j DROP
# 
#   iptables -A INPUT -s 127.0.0.1/8 -i lo -j ACCEPT
#   iptables -A INPUT -s 192.168.1.2 -j REJECT
#   iptables --table filter --append INPUT --source 192.168.1.2 --jump REJECT
#
#   "Technicky nic nebrani tomu mit cely firewall treba v mangle tabulce, ale
#   ma-li nekdo jen minimalni cit pro vec, tak bude jednotlive tabulky
#   pouzivat k tomu, k cemu byly urceny, tj.
#  
#   * filter k filtrovani
#   * mangle k pozmenovani paketu
#   * nat k hratkam s IP adresami a porty"
#                                           (Honza Houstek, linux@linux.cz)
#
#2. Stavove filtrovani packetu 
#
#    # nejprve implicitni politika
#    iptables -P INPUT DROP
#    iptables -P OUTPUT DROP 
#    iptables -P FORWARD DROP
#
#    # pak uz muzeme povolovat
#    iptables -A INPUT -p ICMP -j ACCEPT #(ping -- RFC 792)
#
#    iptables -A INPUT -p ALL -m state --state ESTABLISHED -j ACCEPT
#    iptables -A INPUT -p ALL -m state --state RELATED -j ACCEPT
#
#    iptables -A OUTPUT -p ALL -m state --state NEW -j ACCEPT
#    iptables -A OUTPUT -p ALL -m state --state ESTABLISHED -j ACCEPT
#    iptables -A OUTPUT -p ALL -m state --state RELATED -j ACCEPT
#
#    # syn flooding
#
#    iptables -N syn_flood
#    iptables -A INPUT -i eth0 -p tcp --syn -j syn_flood
#    iptables -A syn_flood -m limit --limit 1/s --limit-burst 5 -j RETURN
#    iptables -A syn_flood -j DROP
#
#3. Podpora IPv4 i IPv6
#4. Podpora prekladov adries NAT (DNAT, SNAT)
#
#   iptables -t nat -A POSTROUTING -o eth1 -s 192.168.2.1 -j SNAT --to 147.32.121.107
#   iptables -t nat -A PREROUTING -j DNAT -d 147.32.121.107 --to 192.168.2.1
#   iptables -A FORWARD -d 147.32.121.107 -i eth0 -o eth1 -j ACCEPT    
#
#4.1 Sdileni pripojeni (NAT, maskarada)
#
#    sysctl net/ipv4/ip_forward (sysctl -w net/ipv4/ip_forward=1, /etc/sysctl)
#    iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth0 -j MASQUERADE    
#
#    iptables -A FORWARD -p ALL -m state --state NEW -j ACCEPT
#    iptables -A FORWARD -p ALL -m state --state ESTABLISHED -j ACCEPT
#    iptables -A FORWARD -p ALL -m state --state RELATED -j ACCEPT
#
#4.2 transparentne proxy
#
#    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
#    iptables -t nat -A PREROUTING -i eth0 -s !192.168.1.3 -p tcp --dport 80 -j DNAT --to 192.168.1.3:3128
#    iptables -t nat -A POSTROUTING -o eth0 -s eth1 -d 192.168.1.3 -j SNAT --to 192.168.1.1
#    iptables -A FORWARD -s eth1 -d 192.168.1.3 -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT
#
#4.3 TTL a NAT
#
#    iptables -t mangle -A POSTROUTING -o eth0 -j TTL --ttl-set 64
#    
#    * ID (timestamps) v packetech, pasivni fingerprinting ruznych OS nebo
#      aplikaci, arp dotazy na privatni site, ...
#
#5. Podpora presmerovani portu
#
#   
#    iptables -t nat -A PREROUTING -p tcp -d 192.168.1.1 --dport 2222 -j DNAT --to 192.168.1.2:22
#    # ... zpracovani (routing decision) ...
#    iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.1.2 --dport 22 -j ACCEPT
#
#6. Manipulace s packety pomoci mangle
#        -       zmena TOS/DSCP/ECN bitov IP hlaviciek
#
#   iptables -t mangle -A OUTPUT -o eth0 -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
#   iptables -t mangle -A OUTPUT -o eth0 -p tcp --dport ssh -j TOS --set-tos Minimize-Delay
#   iptables -t mangle -A OUTPUT -o eth0 -p tcp --sport ftp -j TOS --set-tos Minimize-Delay
#   iptables -t mangle -A OUTPUT -o eth0 -p tcp --dport ftp -j TOS --set-tos Minimize-Delay
#   iptables -t mangle -A OUTPUT -o eth0 -p tcp --sport ftp-data -j TOS --set-tos Maximize-Throughput
#
#   iptables -t mangle -A FORWARD -o eth0 -s 192.168.1.2 -p tcp --sport 22 -j MARK --set-mark 2
#   iptables -t mangle -A FORWARD -o eth0 -s 192.168.1.2 -p tcp --dport 22 -j MARK --set-mark 2
#   iptables -t mangle -A FORWARD -o eth0 -s 192.168.1.2 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 2
#   iptables -t mangle -A FORWARD -o eth0 -s 192.168.1.2 -p ! tcp -j MARK --set-mark 2
#   iptables -t mangle -A FORWARD -o eth0 -s 192.168.1.2 -p icmp -j MARK --set-mark 1
#
#   iptables -t mangle -A OUTPUT -j DSCP --set-dscp 0x0
#   iptables -t mangle -A PREROUTING -j DSCP --set-dscp 0x0
#
#7. Connection tracking (ip_conntrack, nf_conntrack)
#8. Optimalizace odezvy a propustnosti
#9. Targets v iptables (ACCEPT,DROP,REJECT,DENY,REDIRECT,LOG...atd)
#10.PREROUTING a POSTROUTING
#11.Skripty na spousteni, restartovani iptables
#  
#    iptables-save
#    iptables-restore
#
#11.1 Debugovani
#    
#    iptables -A INPUT -j LOG --log-prefix "INPUT reject: "
#    iptables -A OUTPUT -j LOG --log-prefix "OUTPUT reject: "
#    iptables -A FORWARD -j LOG --log-prefix "FORWARD reject: "	 
#     
#    iptables -t nat -nL
#    iptables -t nat -nL -v
#
#11. iptables a GUI
#-------------------------------------------------------------------
# ukazkovy skript

#!/bin/bash
# OC's firewall, v. 0.99if2005
# Ondrej Cecak <ondrej.cecak zavinac linuxsoft tecka cz>

# Script spusteni firewallu
# typ firewallu: explicitni povoleni, stavovy firewall pro ostatni > localhost

# .:: Povoleni zvlastnich paketu ICMP ::.

# povoleni vsech paketu ICMP
iptables -A INPUT -p ICMP -j ACCEPT
iptables -A FORWARD -p ICMP -j ACCEPT

# .:: Povoleni navazovani spojeni a komunikace s navazanymi - stavovy # firewall::.

# povoleni navazovani spojeni: localhost > ostatni
iptables -A OUTPUT -p ALL -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p ALL -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p ALL -m state --state RELATED -j ACCEPT
iptables -A FORWARD -p ALL -m state --state NEW -j ACCEPT
iptables -A FORWARD -p ALL -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -p ALL -m state --state RELATED -j ACCEPT
# povoleni udrzovani a prijem z navazanych relaci na spjeni: localhost > ostatni, ostatni > localhost
iptables -A INPUT -p ALL -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p ALL -m state --state RELATED -j ACCEPT

# .:: Zvlastni povoleni z techto IP ::.

# povoleni komunikace pro lokalni sit
iptables -A INPUT -s 192.168.1.2 -i eth0 -j ACCEPT

# .:: Povoleni lokalnich sluzeb a komunikace ::.

# povoleni loopback
iptables -A INPUT -p ALL -i lo -j ACCEPT

# .:: Vse co neni povoleno, je zakazano ::.

# blokovani vsech nezadoucich spojeni: net > localhost
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth0 -j MASQUERADE
#echo "1" >  /proc/sys/net/ipv4/ip_forward

# .:: Logovani ::.
#iptables -A INPUT -j LOG --log-prefix "INPUT reject: "
#iptables -A OUTPUT -j LOG --log-prefix "OUTPUT reject: "
#iptables -A FORWARD -j LOG --log-prefix "FORWARD reject: "

# hlaska pri startu:
echo -n "& loading firewall ...  "

