Proc iptables propousti port 80 a dalsi

Linux linux na artcomp.cz
Sobota Březen 16 21:18:19 CET 2002


Tady je dedy nastaveni iptables. Nejdriv jsem zkusil, jestli to neni bezne
chovani nebo problem, ktere je nutno explicitne zakazat.

Petr



$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

# Presmerovaní posty
$IPTABLES -t nat -A PREROUTING -p tcp --dport 25 -d $INET_IP -j DNAT --to
$LAN1_SERVER:25
$IPTABLES -t nat -A PREROUTING -p tcp --dport 110 -d $INET_IP -j DNAT --to
$LAN1_SERVER:110

# 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

# IP maskarada - SNAT
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to $INET_IP

# 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 retezci se kontroluje, zda prichozi pakety nemaji nesmyslnou IP
adresu
$IPTABLES -N IN_FW
$IPTABLES -A IN_FW -s 192.168.0.0/16 -j spoofing # rezervovano podle RFC1918
$IPTABLES -A IN_FW -s 10.0.0.0/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     # rezervovano podle IANA

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

#
# Retezec FORWARD
#

# Paket je oznacen jako NEW, ale nema nastaveny priznak SYN, pryc s nim
$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 rezervovane adresy na internetovem rozhrani
$IPTABLES -A FORWARD -i $INET_IFACE -j IN_FW

# Umoznit presmerovani portu na stanici dovnitr site (25, 110, 1723,
protokol 47)
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE -p tcp -d $LAN1_SERVER
--dport 25 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE -p tcp -d $LAN1_SERVER
--dport 110 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Routing zevnitr site ven neomezujeme
$IPTABLES -A FORWARD -i $LAN1_IFACE -j ACCEPT

# Routing zvenku dovnitr pouze pro navazana spojeni (stavovy firewall)
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE -m state --state
ESTABLISHED,RELATED -j ACCEPT

# Ostatni 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:
"

#
# Retezec INPUT
#

# Paket je oznaceny jako NEW, ale nema nastaveny SYN flag - pryc s nim
$IPTABLES -A INPUT -i $INET_IFACE -p tcp ! --syn -m state --state NEW -j
DROP

# Nejprve se zbavime nezadoucich 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

# Sluzbu AUTH neni dobre filtrovat pomoci DROP, protoze to muze
# vest k prodlevam pri navazovani nekterych spojeni. Proto jej
# sice zamitneme, ale vygenerujeme korektni ICMP chybovou zpravu
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 113 -j REJECT --reject-with
tcp-reset #AUTH server

# Propoustime pouze vybrane ICMP zpravy
$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 neni radno omezovat
$IPTABLES -A INPUT -i $LO_IFACE -j ACCEPT

# Stejne jako pakety z lokalni site, jsou-li urceny pro nas
$IPTABLES -A INPUT -i $LAN1_IFACE -d $LAN1_IP -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -d $INET_IP -j ACCEPT

# Broadcasty na lokalnim rozhrani jsou take nase
$IPTABLES -A INPUT -i $LAN1_IFACE -d $LAN1_BCAST -j ACCEPT

# Pakety od navazanych spojeni jsou v poradku
$IPTABLES -A INPUT -d $INET_IP -m state --state ESTABLISHED,RELATED -j
ACCEPT

# Vsechno ostatni je zakazano - tedy logujeme, maximalne 5 paketu,
# 6x za hodinu
$IPTABLES -A INPUT -m limit --limit 6/h -j LOG --log-prefix "input drop: "

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

# Povolime odchozi pakety, ktere maji nase 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

# Ostatni pakety logujeme (nemely by byt zadne takove)
$IPTABLES -A OUTPUT -j LOG --log-prefix "output drop: "


Další informace o konferenci Linux