Fórum Ubuntu CZ/SK

Ostatní => Archiv => Téma založeno: radeczech 03 Září 2006, 14:00:50

Název: NAT a FORWARD
Přispěvatel: radeczech 03 Září 2006, 14:00:50
Pokouším se aplikovat již řešený firewall pomocí iptables na router a chtěl bych mít povolené jen některé porty. Příklad skripitu uvádím na konci.
Když jsem měl tento skript jen pro pracovní stanici, tak jsem si odchytával právě používané porty pomocí
"netstat -n --numeric-ports |more"
ale toto mi při forwardování nefunguje :-( je tedy nějaká možnost, jak zjistit, které právě používá porty některá stanice?
Další dotaz bych měl takový, že jsem se snažil zakázat všechny porty, kromě těch, co jsem chtěl povolit a výsledek byl takový, že se zakázalo téměř vše. Nebo spíše, když jsem pro forwardování povolil dns, tak mi používání názvů místo ip stejně nefungovalo a když jsem přidal povolení
"$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT"
nebo
"$IPTABLES -A FORWARD -p ALL -j ACCEPT"
tak mi vše jede. Co bych měl tedy ještě dopsat, abych měl pod kontrolou jen porty, které chci?
Díky

skript:

#!/bin/sh

# -> managed by radeczech

# ------------------------------------------------------------------------------
# nastaveni
# ------------------------------------------------------------------------------

# lokalni loopback rozhrani
LO_IP="127.0.0.1/32"

# vnejsi rozhrani (eth0, eth1)
INET_IFACE="eth0"
LAN_IFACE="eth1"

# cesta k programu iptables
IPTABLES="/sbin/iptables"

# logovani datagramu, ktere nejsou propusteny
LOGGING=1

# ------------------------------------------------------------------------------
# zakladni akce
# ------------------------------------------------------------------------------

# odstraneni pravidel
$IPTABLES -F
$IPTABLES -X

# implicitne jsou zakazany vsechny pakety
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

# povoleni routovani paketu
echo "1" > /proc/sys/net/ipv4/ip_forward

# NAT
$IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# ------------------------------------------------------------------------------
# INPUT - prichozi pakety
# ------------------------------------------------------------------------------

# spojeni na lokalnim pocitaci
$IPTABLES -A INPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT

# servisni pakety
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type echo-request -j ACCEPT
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type destination-unreachable -j ACCEPT

# ochrana proti ping of death, odfiltrovat pokusy o zahlceni icmp
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 5 -j ACCEPT

# pakety od navazanych spojeni jsou v poradku
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# odmitnuti auth serveru
$IPTABLES -A INPUT -p TCP --dport 113 -j REJECT --reject-with tcp-reset

# paket navazuje spojeni, ale nema nastaveny priznak SYN, pryc s nim
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# ochrana pred ip spoofingem
for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo "1" > ${interface}
done

$IPTABLES -N spoofing
$IPTABLES -A spoofing -s 192.168.0.0/16 -j DROP
$IPTABLES -A spoofing -s 172.16.0.0/12 -j DROP
$IPTABLES -A spoofing -s 10.0.0.0/8 -j DROP
$IPTABLES -A INPUT -i $INET_IFACE -j spoofing

# ochrana proti syn flooding, DoS utoku
$IPTABLES -N syn_flood
$IPTABLES -A INPUT -i $INET_IFACE -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

# ------------------------------------------------------------------------------
# logovani
# ------------------------------------------------------------------------------

if [ "$LOGGING" ]
then
    $IPTABLES -A INPUT -m limit --limit 12/h --limit-burst 5 -j LOG --log-prefix "INPUT DROP: " --log-level 6
    $IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT DROP: "
fi

# ------------------------------------------------------------------------------
# FORWARD - smerovane pakety
# ------------------------------------------------------------------------------

$IPTABLES -A FORWARD -p tcp --dport 80 -j ACCEPT        #http
$IPTABLES -A FORWARD -p tcp --dport 443 -j ACCEPT       #https
$IPTABLES -A FORWARD -p tcp --dport 53 -j ACCEPT        #dns
$IPTABLES -A FORWARD -p udp --dport 53 -j ACCEPT        #dns
$IPTABLES -A FORWARD -p icmp -j ACCEPT                  #icmp

# ------------------------------------------------------------------------------
# OUTPUT - odchozi pakety
# ------------------------------------------------------------------------------

$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp --dport 443 -j ACCEPT         #https
$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp --dport 22 -j ACCEPT          #ssh
$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp --dport 53 -j ACCEPT          #dns
$IPTABLES -A OUTPUT -o $INET_IFACE -p udp --dport 53 -j ACCEPT          #dns
$IPTABLES -A OUTPUT -o $INET_IFACE -p icmp -j ACCEPT                    #icmp


$IPTABLES -A INPUT -i $LAN_IFACE -p ALL -j ACCEPT       #vse na LAN
$IPTABLES -A OUTPUT -o $LAN_IFACE -p ALL -j ACCEPT      #vse na LAN
Název: NAT a FORWARD
Přispěvatel: radeczech 18 Září 2006, 12:54:10
Už jsem si dohledal, co jsem potřeboval, takže nastavení firewallu jsem z velké části vyřešil a doplnil si nedostatky z dané problematiky. Z velké části však vděčím těmto článkům (http://www.root.cz/serialy/stavime-firewall/), je tam vše rozepsané, co jsem chtěl vědět... Až na zjišťování otevíraných portů -> časem :-)