Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Thursday, March 28, 2024

File: [Platon] / scripts / shell / firewall / fw-on-single.sh (download)

Revision 1.2, Thu Jan 27 16:17:40 2005 UTC (19 years, 2 months ago) by rajo


Changes since 1.1: +23 -8 lines

* Use ifconfig-parse.sh script for IP address parsing.
* Fixed rules cleanup (tables nat and mangle was not cleaned on fw restart).
* Allow/deny some other ports.

#!/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: "


Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top