#!/bin/sh # $Platon: scripts/shell/firewall/fw-on-single.sh,v 1.1 2003/10/11 15:35:03 nepto Exp $ cmd=`/etc/firewall/ifconfig-parse.sh`; eval "$cmd"; # Vaše IP adresa a vnější rozhraní #INET_IP="10.122.24.140/32" INET_IP="$IP_eth0/$Mask_eth0"; #echo "**** $INET_IP"; INET_IFACE="eth0" # Lokální loopback rozhraní LO_IFACE="lo" LO_IP="127.0.0.1/24" # Cesta k programu iptables IPTABLES="/sbin/iptables" # Inicializace databáze modulů /sbin/depmod -a # Některé moduly pro nestandardní cíle /sbin/modprobe ipt_LOG /sbin/modprobe ipt_REJECT # Vypneme routování paketů echo "0" > /proc/sys/net/ipv4/ip_forward # rp_filter na zamezení IP spoofování for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do echo "1" > ${interface} done for table in filter nat mangle; do $IPTABLES -t $table -F # clear all chains $IPTABLES -t $table -X # remove all chains $IPTABLES -t $table -Z # zero counts done # Implicitní politikou je zahazovat nepovolené pakety $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP $IPTABLES -P FORWARD DROP # Loopback není radno omezovat $IPTABLES -A INPUT -i $LO_IFACE -j ACCEPT # Neobmedzujeme sami seba #$IPTABLES -A FORWARD -i $INET_IFACE -j ACCEPT # # Přídavné řetězce pro snazší kontrolu na rezervované adresy # # Zahazovat a logovat (max. 5 x 3 pakety za hod) $IPTABLES -N spoofing $IPTABLES -A spoofing -m limit --limit 5/h --limit-burst 3 \ -j LOG --log-prefix "Rezervovana adresa: " $IPTABLES -A spoofing -j DROP # Řetězec pro stanovení limitu příchozích SYN konexí (ochrana před SYN floods) # propustí pouze 4 SYN segmenty/sec $IPTABLES -N syn-flood $IPTABLES -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN $IPTABLES -A syn-flood -j DROP # # Řetězec FORWARD # # Paket je označen jako NEW, ale nemá nastavený příznak SYN, pryč s ním $IPTABLES -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "NEW nema SYN: " $IPTABLES -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP # Ostatní pakety budou zahozeny, tak je budeme logovat (6 x 5 pak/hod) $IPTABLES -A FORWARD -m limit --limit 6/h -j LOG --log-prefix "forward drop: " # # Řetězec INPUT # # Paket je označený jako NEW, ale nemá nastavený SYN flag - pryč s ním $IPTABLES -A INPUT -i $INET_IFACE -p tcp ! --syn -m state --state NEW -j DROP # Odfiltrovat pokusy o syn-flooding $IPTABLES -A INPUT -i $INET_IFACE -p tcp --syn -j syn-flood # Pravidla pro povolené služby #$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 21 -j ACCEPT #FTP server $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 22 -j ACCEPT #SSH server #$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 139 -j ACCEPT $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 25 -j ACCEPT #SMTP server $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 2525 -j ACCEPT # alternative SMTP server $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 465 -j ACCEPT #SMTP server $IPTABLES -A INPUT -i $INET_IFACE -p UDP --dport 53 -j ACCEPT #DNS server $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 53 -j ACCEPT #DNS server nad TCP #$IPTABLES -A INPUT -i $INET_IFACE -p UDP --sport 53 -j ACCEPT #DNS klient $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 80 -j ACCEPT #WWW server $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 2401 -j ACCEPT # CVS server #$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 110 -j ACCEPT #POP3 server #$IPTABLES -A INPUT -i $INET_IFACE -p UDP --sport 123 -j ACCEPT #NTP klient #$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 143 -j ACCEPT #IMAP server $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 443 -j ACCEPT #HTTPS server #$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 873 -j ACCEPT #rsync server #$IPTABLES -A INPUT -i $INET_IFACE -p UDP --dport 517 -j ACCEPT # talk #$IPTABLES -A INPUT -i $INET_IFACE -p UDP --dport 518 -j ACCEPT # ntalk $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 993 -j ACCEPT # IMAPS server # Službu AUTH není dobré filtrovat pomocí DROP, protože to může # vést k prodlevám při navazování některých spojení. Proto jej # sice zamítneme, ale vygenerujeme korektní ICMP chybovou zprávu $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 113 -j REJECT --reject-with tcp-reset #AUTH server # Propouštíme pouze vybrané ICMP zprávy $IPTABLES -A INPUT -i $INET_IFACE -p ICMP --icmp-type echo-reply -j ACCEPT $IPTABLES -A INPUT -i $INET_IFACE -p ICMP --icmp-type destination-unreachable -j ACCEPT $IPTABLES -A INPUT -i $INET_IFACE -p ICMP --icmp-type echo-request -j ACCEPT $IPTABLES -A INPUT -i $INET_IFACE -p ICMP --icmp-type time-exceeded -j ACCEPT # Pakety od navázaných spojení jsou v pořádku $IPTABLES -A INPUT -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT # Všechno ostatní je zakázáno - tedy logujeme, maximálně 5 paketů, # 12x za hodinu $IPTABLES -A INPUT -m limit --limit 12/h -j LOG --log-prefix "input drop: " # # Řětězec OUTPUT # # TOS flagy slouzi k optimalizaci datovych cest. Pro ssh, ftp a telnet # pozadujeme minimalni zpozdeni. Pro ftp-data zase maximalni propostnost $IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ssh -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport ssh -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ftp -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport ftp -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport telnet -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ftp-data -j TOS --set-tos Maximize-Throughput # Povolíme odchozí pakety, které mají naše IP adresy $IPTABLES -A OUTPUT -s $LO_IP -j ACCEPT $IPTABLES -A OUTPUT -s $INET_IP -j ACCEPT # Ostatní pakety logujeme (neměly by být žádné takové) $IPTABLES -A OUTPUT -j LOG --log-prefix "output drop: "