Portál AbcLinuxu, 5. listopadu 2025 12:00
iptables_command=iptables
enable_autosave=false
enable_save_counters=true
# Vase IP adresa a vnejsi rozhrani
INET_IP="195.68.XX.XX"
INET_IFACE="eth1"
# IP a broadcast adresa a rozhrani vnitrni site
LAN1_IP="192.168.YY.YY/28"
LAN1_BCAST="192.168.YY.YY/28"
LAN1_IFACE="eth0"
# Lokalni loopback rozhrani
LO_IFACE="lo"
LO_IP="127.0.0.1/32"
# Cesta k programu iptables
IPTABLES="/sbin/iptables -v"
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
# 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 DROP
$IPTABLES -P FORWARD DROP
# IP maskarada - SNAT
# NATujeme
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to $INET_IP
#
# Pridavne retezce pro snazsi kontrolu na rezervovane adresy
#
# 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
$IPTABLES -N IN_FW
#$IPTABLES -A IN_FW -s 192.168.222.0/24 -j logdrop # rezervovano podle RFC1918
#$IPTABLES -A IN_FW -s 192.168.223.0/24 -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 22 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 22 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --sport 21 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 23 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --sport 20 -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
# 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: "
$IPTABLES -A FORWARD -j DROP
#
# 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
$IPTABLES -A INPUT -i $INET_IFACE -p icmp -j ACCEPT
# Pravidla pro povolene sluzby
$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 7 -j ACCEPT #monitor server
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 25 -j ACCEPT #SMTP server
$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 TCP --dport 443 -j ACCEPT #HTTPS server
#$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 80 -j DROP #rsync server
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 8080 -j ACCEPT #rsync server
#$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 3389 -j ACCEPT #vzdialena plocha
# Sluzbu AUTH neni dobre filtrovat pomoci DROP, protoze to muze
# vest k prodlevam pri navazovani nekterych spojeni. Proto jej
# sice zamitneme, ale tak, aby nedoslo k nezadoucim prodlevam.
#$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 113 -m limit --limit 12/h -j LOG
#$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 113 -j REJECT --reject-with tcp-reset #AUTH server
# Propoustime pouze ICMP ping
$IPTABLES -A INPUT -i $INET_IFACE -p ICMP --icmp-type echo-request -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
# MS klienti maji chybu v implementaci DHCP
$IPTABLES -A INPUT -i $LAN1_IFACE -p udp --dport 67 -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, maxim. 12x5 pkt/hod
#$IPTABLES -A INPUT -m limit --limit 12/h -j LOG --log-prefix "INPUT drop: "
$IPTABLES -A INPUT -j 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 22 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 22 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport 21 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 21 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 23 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport 20 -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
# Povolime DHCP broadcasty na LAN rozhrani
$IPTABLES -A OUTPUT -o $LAN1_IFACE -p UDP --dport 68 --sport 67 -j ACCEPT
# Ostatni pakety logujeme (nemely by byt zadne takove)
#$IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT drop: "
#$IPTABLES -A OUTPUT -j DROP
iptables_command=iptables
enable_autosave=false
enable_save_counters=true
# Vase IP adresa a vnejsi rozhrani
INET_IP="195.68.XX.XX"
INET_IFACE="eth1"
# IP a broadcast adresa a rozhrani vnitrni site
LAN1_IP="192.168.YY.YY/28"
LAN1_BCAST="192.168.YY.YY/28"
LAN1_IFACE="eth0"
# Lokalni loopback rozhrani
LO_IFACE="lo"
LO_IP="127.0.0.1/32"
# Cesta k programu iptables
IPTABLES="/sbin/iptables -v"
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
# 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 DROP
$IPTABLES -P FORWARD DROP
# IP maskarada - SNAT
# NATujeme
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to $INET_IP
#
# Pridavne retezce pro snazsi kontrolu na rezervovane adresy
#
# 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 $IPTABLES -N IN_FW #$IPTABLES -A IN_FW -s 192.168.222.0/24 -j logdrop # rezervovano podle RFC1918 #$IPTABLES -A IN_FW -s 192.168.223.0/24 -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 22 -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A PREROUTING -p tcp --dport 22 -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A PREROUTING -p tcp --sport 21 -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A PREROUTING -p tcp --dport 23 -j TOS --set-tos Minimize-Delay$IPTABLES -t mangle -A PREROUTING -p tcp --sport 20 -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# 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: " $IPTABLES -A FORWARD -j DROP # # 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 $IPTABLES -A INPUT -i $INET_IFACE -p icmp -j ACCEPT # Pravidla pro povolene sluzby $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 7 -j ACCEPT #monitor server $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 25 -j ACCEPT #SMTP server $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 TCP --dport 443 -j ACCEPT #HTTPS server #$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 80 -j DROP #rsync server $IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 8080 -j ACCEPT #rsync server #$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 3389 -j ACCEPT #vzdialena plocha # Sluzbu AUTH neni dobre filtrovat pomoci DROP, protoze to muze # vest k prodlevam pri navazovani nekterych spojeni. Proto jej # sice zamitneme, ale tak, aby nedoslo k nezadoucim prodlevam. #$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 113 -m limit --limit 12/h -j LOG#$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 113 -j REJECT --reject-with tcp-reset #AUTH server
# Propoustime pouze ICMP ping $IPTABLES -A INPUT -i $INET_IFACE -p ICMP --icmp-type echo-request -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 # MS klienti maji chybu v implementaci DHCP $IPTABLES -A INPUT -i $LAN1_IFACE -p udp --dport 67 -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, maxim. 12x5 pkt/hod #$IPTABLES -A INPUT -m limit --limit 12/h -j LOG --log-prefix "INPUT drop: " $IPTABLES -A INPUT -j 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 22 -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 22 -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport 21 -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 21 -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport 23 -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport 20 -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 # Povolime DHCP broadcasty na LAN rozhrani $IPTABLES -A OUTPUT -o $LAN1_IFACE -p UDP --dport 68 --sport 67 -j ACCEPT # Ostatni pakety logujeme (nemely by byt zadne takove) #$IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT drop: " #$IPTABLES -A OUTPUT -j DROP
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.