Portál AbcLinuxu, 29. prosince 2025 13:39
#!/bin/sh
#
# Vase IP adresa a vnejsi rozhrani
INET_IP="XXX.XXX.XXX.XXX"
INET_IFACE="ppp0"
# IP a broadcast adresa a rozhrani vnitrni site
LAN1_IP="192.168.2.10/24"
LAN2_IP="10.0.0.10/8"
LAN1_BCAST="192.168.2.255/32"
LAN2_BCAST="10.0.0.255/32"
LAN1_IFACE="eth1"
LAN2_IFACE="eth0"
# Lokalni loopback rozhrani
LO_IFACE="lo"
LO_IP="127.0.0.1/8"
# Cesta k programu iptables
IPTABLES="/sbin/iptables"
# Inicializace databaze modulu
/sbin/depmod -a
# Zavedeme moduly pro nestandardni cile
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
# Modul pro FTP prenosy
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
# Zapneme routovani paketu
echo "1" > /proc/sys/net/ipv4/ip_forward
# rp_filter na zamezeni IP spoofovani
for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo "1" > ${interface}
done
#
# Implicitni politikou je zahazovat nepovolene pakety
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
# RETEZEC PREROUTING >>>
$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -d $INET_IP -j DNAT --to 192.168.2.100:80
#<<<
# RETEZEC POSTROUTING >>>
# IP maskarada - SNATujeme
$IPTABLES -t nat -A POSTROUTING -s $LAN1_IP -o $INET_IFACE -j SNAT --to $INET_IP
#<<<
#
# Zahazovat a logovat (max. 5 x 3 pakety za hod)
$IPTABLES -N logdrop
$IPTABLES -A logdrop -m limit --limit 5/h --limit-burst 3
-j LOG --log-prefix "Rezervovana adresa: "
$IPTABLES -A logdrop -j DROP
# V tomto retezci se kontroluje, zda prichozi pakety nemaji nesmyslnou IP adresu
# Ochrana proti ip spoofingem...
$IPTABLES -N IN_FW
$IPTABLES -A IN_FW -s 192.168.0.0/16 -j logdrop # rezervovano podle RFC1918
$IPTABLES -A IN_FW -s 10.0.0.0/8 -j logdrop # ---- dtto ----
$IPTABLES -A IN_FW -s 172.16.0.0/12 -j logdrop # ---- dtto ----
$IPTABLES -A IN_FW -s 96.0.0.0/4 -j logdrop # rezervovano podle IANA
# ... dalsi rezervovane adresy mozno doplnit podle
# http://www.iana.com/assignments/ipv4-address-space
# 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 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 >>>
# Navazovani spojeni ala Microsoft -
# Paket navazuje spojeni, ale nema nastaveny priznak SYN, pryc s nim
$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
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE -p tcp -d 192.168.2.100 --dport 80 -j ACCEPT
# Povolime neomezene forwardovani z lokalni site, opacne jen existujici
# spojeni
$IPTABLES -A FORWARD -i $LAN2_IFACE -j ACCEPT
$IPTABLES -A FORWARD -i $LAN1_IFACE -j ACCEPT
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE -m state \
--state ESTABLISHED,RELATED -j ACCEPT
# <<<
# RETEZEC INPUT >>>
# Navazovani spojeni ala Microsoft -
# Paket navazuje spojeni, ale nema nastaveny priznak SYN, pryc s nim
$IPTABLES -A INPUT -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
# Odfiltrovat pokusy o zahlceni icmp
$IPTABLES -A INPUT -i $INET_IFACE -p icmp -j syn-flood
# Vytvorime novy chain pro prehlednost tcp_segmenty ktere jsou pristupne z
# internetu
$IPTABLES -N tcp_segmenty
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_segmenty
# $IPTABLES -A tcp_segmenty -p TCP --dport 21 -j ACCEPT #FTP server
# $IPTABLES -A tcp_segmenty -p TCP --dport 22 -j ACCEPT #SSH server
# $IPTABLES -A tcp_segmenty -p TCP --dport 25 -j ACCEPT #SMTP server
# $IPTABLES -A tcp_segmenty -p TCP --dport 53 -j ACCEPT #DNS server
$IPTABLES -A tcp_segmenty -p TCP --dport 80 -j ACCEPT #WWW server
# $IPTABLES -A tcp_segmenty -p TCP --dport 110 -j ACCEPT #POP3 server
# $IPTABLES -A tcp_segmenty -p TCP --dport 143 -j ACCEPT #IMAP server
# $IPTABLES -A tcp_segmenty -p TCP --dport 443 -j ACCEPT #HTTPS server
# $IPTABLES -A tcp_segmenty -p TCP --dport 873 -j ACCEPT #rsync server
$IPTABLES -A tcp_segmenty -p TCP --dport 113 -j REJECT #
Sluzbu AUTH neni dobre zahazovat takze zdvorile odmitneme
# Vytvorime novy chain pro prehlednost udp_pakety
$IPTABLES -N udp_pakety
$IPTABLES -A INPUT -p UDP -i $LAN1_IFACE -j udp_pakety
# $IPTABLES -A udp_pakety -p UDP --dport 53 -j ACCEPT #DNS server
# Povolime jen uzitecne ICMP datagramy
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type 0 -j ACCEPT
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type 3 -j ACCEPT
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type 8 -j ACCEPT
# $IPTANLES -A INPUT -p ICMP -i $INET_IFACE --icmp-type 11 -j ACCEPT
# Ochrana proti DoS utokum tim ze dovolime pouze 5 za sekundu
$IPTABLES -A INPUT -p icmp --icmp-type echo-request \
-m limit --limit 1/s --limit-burst 5 -j ACCEPT
# Povolime pakety z lokalni LAN1,LAN2,Lo, opacne z internetu jen
# od jiz navazanych spojeni
$IPTABLES -A INPUT -p ALL -i $LAN1_IFACE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LAN2_IFACE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -j ACCEPT
$IPTABLES -A INPUT -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
# MS klienti maji chybu v implementaci DHCP
$IPTABLES -A INPUT -i $LAN1_IFACE -p udp --dport 67 -j ACCEPT
# Vsechny ostatni prichozi datagramy logujeme
$IPTABLES -A INPUT -j LOG
$IPTABLES -A FORWARD -j LOG
# ---------------------------------------------------------
# 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
# 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 (12 x 5 pkt/hod) $IPTABLES -A FORWARD -m limit --limit 12/h -j LOG --log-prefix "forward drop: "a asi bych zevšeobecnil maškarádu.
# IP maskarada - SNAT $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to $INET_IP
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.