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