Platon Technologies
neprihlásený Prihlásiť Registrácia
SlovakEnglish
open source software development oslavujeme 10 rokov vývoja otvoreného softvéru! Piatok, 13. december 2024

Súbor: [Platon] / scripts / shell / firewall / fw-on-masq.sh (stiahnutie)

Revízia 1.2, Sat Oct 11 15:29:00 2003 UTC (21 years, 2 months ago) by nepto


Zmeny od 1.1: +2 -1 [lines]

Just IP change.

#!/bin/sh

#
# mpfw.sh - pravidla pro firewall
#
#        http://www.root.cz/clanek.phtml?id=980
#        http://www.root.cz/clanek.phtml?id=990
#
# sestavil Miroslav Petříček - mirek@petricek.cz
#                              http://www.petricek.cz
#   připomínky jsou vítány !
#
# Tohle je funkční (doufám) konfigurace firewallu nad iptables.
#
# Předpokládáme nasazení na routeru se dvěma síťovými kartami eth0
# a eth1. Router zajišťuje konektivitu vnitřní síti pomocí SNATu
#
# Na routeru kromě toho zároveň běží tyto služby
# ftp, http(s), smtp, ssh, pop2, imap, rsync a dns
#
# Požadavky na HTTP jsou transparentně směrovány na proxy-cache
#
# Uvnitř sítě je počítač, na kterém běží ssh server a my jej
# prostřednictvím našeho portu 2222, umožňujeme oslovit z internetu
#
#
# 18.12.2001 - prvni verze
# 19.12.2001 - ochrana pred SYN floodingem, rp_filter,
#              casove podminene logovani.
# 23.12.2001 - ICMP tcp-reset je pro AUTH lepsi nez prosty REJECT
# 28.12.2001 - Vaclav Bartik: presnejsi prefixy u logovanych paketu
# 02.01.2002 - nastavovani TOS flagu u odchozich paketu
# 04.01.2002 - oprava TOS, opravy syntaxe
#

# $Platon: $

# Vaše IP adresa a vnější rozhraní
#INET_IP="195.80.179.0/24"
#INET_IP="213.81.136.181/16"
INET_IP="195.168.60.53/16"
INET_IFACE="ppp0"

# IP a broadcast adresa a rozhraní vnitřní sítě
LAN1_IP="192.168.1.0/24"
LAN1_BCAST="192.168.1.255/24"
LAN1_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
/sbin/modprobe ipt_MASQUERADE

# Modul pro FTP přenosy
/sbin/modprobe ip_conntrack_ftp

# Zapneme routování paketů
echo "1" > /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

# Implicitní politikou je zahazovat nepovolené pakety
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

#
# Řetězec PREROUTING v NAT tabulce
#

# Odchozí HTTP požadavky budou přesměrovány na lokálního squida
# ve funkci transparentní proxy cache
#$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -i ! $INET_IFACE \
#  -d ! $INET_IP -j REDIRECT --to-port 3128

# Přesměrujeme port 2222 na port 22 (ssh) stanice uvnitř sítě
#$IPTABLES -t nat -A PREROUTING -p tcp --dport 2222 -d $INET_IP \
#  -j DNAT --to 192.168.1.2:22

# TOS flagy slouzi k optimalizaci datovych cest. Pro ssh, ftp a telnet
# pozadujeme minimalni zpozdeni.
$IPTABLES -t mangle -A PREROUTING -p tcp --dport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport telnet -j TOS --set-tos Minimize-Delay


#
# Řetězec POSTROUTING v NAT tabulce
#

# IP maškaráda - SNAT
#$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to $INET_IP
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE


#
# 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

# V tomto řetězci se kontroluje, zda příchozí pakety nemají nesmyslnou IP adresu
$IPTABLES -N IN_FW
$IPTABLES -A IN_FW -s 192.168.0.0/16 -j spoofing # rezervováno podle RFC1918
$IPTABLES -A IN_FW -s 10.0.0.8/8 -j spoofing     #   ---- dtto ----
$IPTABLES -A IN_FW -s 172.16.0.0/12 -j spoofing  #   ---- dtto ----
$IPTABLES -A IN_FW -s 96.0.0.0/4 -j spoofing     # rezervováno podle IANA
# ... dalsi rezervovane adresy mozno doplnit podle
#       http://www.iana.com/assignments/ipv4-address-space

# Ř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

# 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 PREROUTING -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --sport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport telnet -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --sport ftp-data -j TOS --set-tos Maximize-Throughput


#
# Ř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

# Nechceme rezervované adresy na internetovém rozhraní
$IPTABLES -A FORWARD -i $INET_IFACE -j IN_FW


# Umožnit přesměrování portu na stanici dovnitř sítě
#$IPTABLES -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.1.2 --dport ssh \
#  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Routing zevnitř sítě ven neomezujeme
$IPTABLES -A FORWARD -i $LAN1_IFACE -j ACCEPT

# Routing zvenku dovnitř pouze pro navázaná spojení (stavový firewall)
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE \
  -m state --state ESTABLISHED,RELATED -j ACCEPT

# 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

# Nejprve se zbavíme nežádoucích adres
$IPTABLES -A INPUT -i $INET_IFACE -j IN_FW

# 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 25 -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 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

# 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

# To get Nepto.SK ident timeout hang up
#$IPTABLES -A INPUT -i $LAN1_IFACE -p TCP --dport 113 -j REJECT
#$IPTABLES -A INPUT -i $LO_IFACE -p TCP --dport 113 -j REJECT

# 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

# Loopback není radno omezovat
$IPTABLES -A INPUT -i $LO_IFACE -j ACCEPT

# Stejně jako pakety z lokální sítě, jsou-li určeny pro nás
$IPTABLES -A INPUT -i $LAN1_IFACE -d $LAN1_IP -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -d $INET_IP -j ACCEPT

# Broadcasty na lokálním rozhraní jsou také naše
$IPTABLES -A INPUT -i $LAN1_IFACE -d $LAN1_BCAST -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ů,
# 6x za hodinu
$IPTABLES -A INPUT -m limit --limit 6/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 $LAN1_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.sk> http://platon.sk/
Copyright © 2002-2006 Platon Group
Stránka používa redakčný systém Metafox
Na začiatok