iptables
Nastavování firewallu z iptables ve většině případů není nic extrémě složitého, ale kdo si to má pamatovat. Linux v sobě má podporu pro netfilter snad v každé distribuci, takže s nějakou instalací se není třeba zabývat, stačí nastavit pravidla a zde je script, který obsahuje většinu běžně potřebných pravidel vetně maškarády.
Záměrně zde není přímo soubor ke stažení, protože toto má sloužit jen jako inspirace a v žádném případě to není hotová věc, kterou stačí spustit (i když se tak tváří).
#!/bin/bash #----------------------------------------------------------------------------# # # iptables initialization # by Josef Kufner <jk(a)myserver.cz> # # # special thanks to: # http://www.petricek.cz/mpfw/mpfw.sh.txt # #----------------------------------------------------------------------------# ## config IPTABLES=/sbin/iptables LO_IFACE=lo INET_IFACE=eth0 LAN_IFACE=eth1 ## vyber rozhrani na ktere to bude pustene ## (v pripade ze je spousteno z /etc/network/if-pre-up.d/ -- Debian) [ "$IFACE" != "" ] && [ "$IFACE" != "$INET_IFACE" ] && exit #----------------------------------------------------------------------------# # Moduly & inicializace #----------------------------------------------------------------------------# echo echo -n "Loading iptables settings" ## Zavedeme moduly pro nestandardni cile /sbin/modprobe ipt_REJECT /sbin/modprobe ipt_MASQUERADE ## Moduly pro FTP prenosy /sbin/modprobe ip_conntrack_ftp /sbin/modprobe ip_nat_ftp ## clear all $IPTABLES -F -t mangle $IPTABLES -F -t nat $IPTABLES -F $IPTABLES -Z $IPTABLES -X echo -n "." #----------------------------------------------------------------------------# # Default #----------------------------------------------------------------------------# $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD DROP echo -n "." #----------------------------------------------------------------------------# # retezce #----------------------------------------------------------------------------# ## Retezec pro stanoveni limitu prichozich SYN konexi (ochrana pred SYN floods) ## propusti pouze 4 SYN segmenty/sec $IPTABLES -N syn-flood $IPTABLES -A syn-flood -m limit --limit 20/s --limit-burst 5 -j RETURN $IPTABLES -A syn-flood -j DROP echo -n "." #----------------------------------------------------------------------------# # INPUT #----------------------------------------------------------------------------# ## Pakety od navazanych spojeni jsou v poradku $IPTABLES -A INPUT -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT ## loopback bez omezeni $IPTABLES -A INPUT -i $LO_IFACE -j ACCEPT ## server sit bez omezeni $IPTABLES -A INPUT -i $SERVER_IFACE -j ACCEPT ## lan bez omezeni -- jedine neco jako transparentni proxy, ale to az casem $IPTABLES -A INPUT -i $LAN_IFACE -j ACCEPT ## ping -- max 5 za sec $IPTABLES -A INPUT -i $INET_IFACE -p icmp --icmp-type 'echo-request' \ -m limit --limit 1/s --limit-burst 10 -j ACCEPT ## Odfiltrovat pokusy o syn-flooding $IPTABLES -A INPUT -i $INET_IFACE -p tcp --syn -j syn-flood ## Odfiltrovat pokusy o zahlceni icmp $IPTABLES -A INPUT -i $INET_IFACE -p icmp -j syn-flood ## auth nerado DROP $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport auth -j REJECT --reject-with tcp-reset ## povolene sluzby # $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 25 -j ACCEPT # SMTP server # $IPTABLES -A INPUT -i $INET_IFACE -p UDP --dport 53 -j ACCEPT # DNS server UDP # $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 53 -j ACCEPT # DNS server TCP # $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 80 -j ACCEPT # WWW server # $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 110 -j ACCEPT # POP3 server # $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 TCP --dport 995 -j ACCEPT # POP3s server # $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 10000 -j ACCEPT # webmin server ## DC++ # $IPTABLES -A INPUT -p tcp --dport 9176 -j ACCEPT # $IPTABLES -A INPUT -p udp --dport 9176 -j ACCEPT ## otevreni firewallu pro LAN $IPTABLES -A INPUT -i $LAN_IFACE -j ACCEPT echo -n "." #----------------------------------------------------------------------------# # OUTPUT #----------------------------------------------------------------------------# ## vse je defaultne povoleno ## 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 echo -n "." #----------------------------------------------------------------------------# # FORWARD #----------------------------------------------------------------------------# # MTU je na ppp0 a eth0 ruzny: # This is called MSS-clamping and influences the amount # of data per TCP packet. $IPTABLES -I FORWARD -p tcp --tcp-flags SYN,RST SYN \ -j TCPMSS --clamp-mss-to-pmtu ## NAT - maskarada echo "1" > /proc/sys/net/ipv4/ip_forward $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE ## jedna zlobiva IP $IPTABLES -A FORWARD -i $LAN_IFACE -s 192.168.1.99 -j REJECT ## povoleni provozu $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i $LAN_IFACE -p all -m state --state NEW -j ACCEPT echo -n "." #----------------------------------------------------------------------------# # Konec #----------------------------------------------------------------------------# echo done. exit #----------------------------------------------------------------------------#