All pastes #922478 Raw Edit

ghot

public shellscript v1 · immutable
#922478 ·published 2008-02-28 20:50 UTC
rendered paste body
#!/bin/bash# Linux iptables tűzfal script# Dátum : 2008.02.28# Ghotler-FW-HomeTITLE="Ghotler-Firewall-Home"IPTABLES=/sbin/iptablesSYSCTL=/sbin/sysctlINET_IF=ppp0 #külső interfészLNET_IF=eth0 #belső interfészINET_ADDR="12.12.12.12" #külső IP címFW_ADDR="192.168.0.1" #belső IP címLNET_ADDR="192.168.0.0/24" #védett hálózat IP címeCLASS_A="10.0.0.0/8"CLASS_B="172.16.0.0/12"CLASS_C="192.168.0.0/16"CLASS_D_MULTICAST="224.0.0.0/4"CLASS_E_RESERVED="240.0.0.0/5"DENIED_IPS="61.31.0.0/16	    61.140.0.0/11	    61.220.0.0/10	    62.165.226.178	    62.165.227.56	    62.165.227.223	    62.165.225.99	    62.165.224.86	    62.165.215.44	    62.165.224.241	    62.165.215.19	    62.165.227.41	    62.165.227.97	    64.12.24.161	    66.137.176.6	    89.132.26.222	    86.106.44.179	    200.195.0.0/10	    210.73.133.22	    210.212.0.0/16	    218.248.35.62	    218.188.23.45	    218.248.35.62	    218.13.0.0/11	    218.160.0.0/12	    219.80.0.0/15	    219.128.0.0/12	    222.156.0.0/15	    "## Szűrési láncok létrehozása#create_chains(){   # Beállítjuk az alapértelfwzett policykat: DROP   # Eldobunk minden csomagot alapból, előtte válogatunk.   $IPTABLES -P INPUT DROP   $IPTABLES -P OUTPUT DROP   $IPTABLES -P FORWARD DROP   # Csoportosított láncok a forgalom iránya alapján   # a gépről az internetre fwnő csomagok   $IPTABLES -N fw_to_inet   # az internetről a gépre jövő csomagok   $IPTABLES -N inet_to_fw   # a lokális hálózatról az internetre fwnő csomagok (forward)   $IPTABLES -N lnet_to_inet   # az internetről a lokális hálózatra fwnő csomagok   $IPTABLES -N inet_to_lnet   # a lokális hálózatról a gépre jövő csomagok   $IPTABLES -N lnet_to_fw   # a gépről a lokális hálózatra fwnő csomagok   $IPTABLES -N fw_to_lnet   # szűrési lánc   $IPTABLES -N securityecho "Szűrési láncok létrehozása ..........[ OK ]"}## Láncok törlése#delete_chains(){   # Táblák tisztítása   $IPTABLES -F   $IPTABLES -X   $IPTABLES -F -t nat   $IPTABLES -X -t nat   $IPTABLES -F -t mangle   $IPTABLES -X -t mangle   # Csomagszzmlálók nullázása   $IPTABLES -Zecho "Láncok tőrlése ......................[ OK ]"}## Átirányítások#basic_rules(){   # Loopbacken mindent fogadunk   $IPTABLES -A INPUT -i lo -j ACCEPT   $IPTABLES -A OUTPUT -o lo -j ACCEPT   # Bejövő csomagok   $IPTABLES -A INPUT -i $INET_IF -j inet_to_fw   $IPTABLES -A INPUT -i $LNET_IF -s $LNET_ADDR -j lnet_to_fw   # Kimenő csomagok   $IPTABLES -A OUTPUT -o $INET_IF -j fw_to_inet    $IPTABLES -A OUTPUT -o $LNET_IF -d $LNET_ADDR -j fw_to_lnet   # Átmenő csomagok - továbbítás   $IPTABLES -A FORWARD -i $INET_IF -o $LNET_IF -d $LNET_ADDR -j inet_to_lnet   $IPTABLES -A FORWARD -i $LNET_IF -o $INET_IF -s $LNET_ADDR -j lnet_to_inetecho "Átirányítások beállítása ..........[ OK ]"}## Az internetről a tűzfalra érkező csomagok#inet_to_fw(){   # Tiltott IP-k szűrése   for i in `echo $DENIED_IPS`; do      $IPTABLES -A inet_to_fw -s $i -j DROP   done      # Hamisított IP-k szűrése (sysctl-k bebiztosítása)   $IPTABLES -A inet_to_fw -s $CLASS_A -j LOG --log-prefix "$TITLE : fake IP source "   $IPTABLES -A inet_to_fw -s $CLASS_A -j DROP   $IPTABLES -A inet_to_fw -s $CLASS_B -j LOG --log-prefix "$TITLE : fake IP source "   $IPTABLES -A inet_to_fw -s $CLASS_B -j DROP   $IPTABLES -A inet_to_fw -s $CLASS_C -j LOG --log-prefix "$TITLE : fake IP source "   $IPTABLES -A inet_to_fw -s $CLASS_C -j DROP   $IPTABLES -A inet_to_fw -s $CLASS_D_MULTICAST -j LOG --log-prefix "$TITLE : fake IP source "   $IPTABLES -A inet_to_fw -s $CLASS_D_MULTICAST -j DROP   $IPTABLES -A inet_to_fw -s $CLASS_E_RESERVED -j LOG --log-prefix "$TITLE : fake IP source "   $IPTABLES -A inet_to_fw -s $CLASS_E_RESERVED -j DROP      # SYN-Flood   $IPTABLES -A inet_to_fw -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT   $IPTABLES -A inet_to_fw -p tcp --syn -j LOG --log-prefix "$TITLE : SYN-Flood attack  "   $IPTABLES -A inet_to_fw -p tcp --syn -j DROP   # Nmap FIN/URG/PSH   $IPTABLES -A inet_to_fw -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/m -j LOG --log-prefix "$TITLE : Nmap XMAS scan "   $IPTABLES -A inet_to_fw -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP      # SYN/RST   $IPTABLES -A inet_to_fw -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/m -j LOG --log-prefix "$TITLE : SYN/RST scan "   $IPTABLES -A inet_to_fw -p tcp --tcp-flags SYN,RST SYN,RST -j DROP      #SYN/FIN   $IPTABLES -A inet_to_fw -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m -j LOG  --log-prefix "$TITLE : SYN/FIN scan "   $IPTABLES -A inet_to_fw -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP      # Portscan,PoD   $IPTABLES -A inet_to_fw -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "$TITLE : XMAS-tree scan "   $IPTABLES -A inet_to_fw -p tcp --tcp-flags ALL NONE -m state --state ! ESTABLISHED -j LOG --log-prefix "$TITLE : NULL scan  "   # PING -re ne válaszoljunk   $IPTABLES -A inet_to_fw -m state --state NEW -p icmp -j DROP   $IPTABLES -A inet_to_fw -p icmp --icmp-type echo-request -m limit --limit 3/s -j ACCEPT   $IPTABLES -A inet_to_fw -p icmp --icmp-type echo-request -j LOG --log-prefix "$TITLE : PoD attack "   $IPTABLES -A inet_to_fw -p icmp --icmp-type echo-request -j DROP      # Az új kapcsolatok helyesen kezdődjenek ( közvetett DoS )   $IPTABLES -A inet_to_fw -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "$TITLE : hidden portscan "   $IPTABLES -A inet_to_fw -p tcp ! --syn -m state --state NEW -j DROP      # Jóváhagyott kapcsolatok elfogadása   $IPTABLES -A inet_to_fw -m state --state ESTABLISHED,RELATED -j ACCEPT       }## Az internetről a LAN-ra továbbított csomagok#inet_to_lnet(){   # Tiltott IP-k szűrése   for i in `echo $DENIED_IPS`; do      $IPTABLES -A inet_to_fw -s $i -j DROP   done   # Hamisított IP-k szűrése (sysctl-k bebiztosítása)   $IPTABLES -A inet_to_lnet -s $CLASS_A -j LOG --log-prefix "$TITLE : fake IP source "   $IPTABLES -A inet_to_lnet -s $CLASS_A -j DROP   $IPTABLES -A inet_to_lnet -s $CLASS_B -j LOG --log-prefix "$TITLE : fake IP source "   $IPTABLES -A inet_to_lnet -s $CLASS_B -j DROP   $IPTABLES -A inet_to_lnet -s $CLASS_C -j LOG --log-prefix "$TITLE : fake IP source "   $IPTABLES -A inet_to_lnet -s $CLASS_C -j DROP   $IPTABLES -A inet_to_lnet -s $CLASS_D_MULTICAST -j LOG --log-prefix "$TITLE : fake IP source "   $IPTABLES -A inet_to_lnet -s $CLASS_D_MULTICAST -j DROP   $IPTABLES -A inet_to_lnet -s $CLASS_E_RESERVED -j LOG --log-prefix "$TITLE : fake IP source "   $IPTABLES -A inet_to_lnet -s $CLASS_E_RESERVED -j DROP      # SYN-Flood   $IPTABLES -A inet_to_lnet -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT   $IPTABLES -A inet_to_lnet -p tcp --syn -j LOG --log-prefix "$TITLE : SYN-Flood attack  "   $IPTABLES -A inet_to_lnet -p tcp --syn -j DROP      # Nmap FIN/URG/PSH   $IPTABLES -A inet_to_lnet -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/m -j LOG --log-prefix "$TITLE : Nmap XMAS scan "   $IPTABLES -A inet_to_lnet -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP      # SYN/RST   $IPTABLES -A inet_to_lnet -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/m -j LOG --log-prefix "$TITLE : SYN/RST scan "   $IPTABLES -A inet_to_lnet -p tcp --tcp-flags SYN,RST SYN,RST -j DROP      #SYN/FIN   $IPTABLES -A inet_to_lnet -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m -j LOG  --log-prefix "$TITLE : SYN/FIN scan "   $IPTABLES -A inet_to_lnet -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP      # Portscan,PoD   $IPTABLES -A inet_to_lnet -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "$TITLE : XMAS-tree scan "   $IPTABLES -A inet_to_lnet -p tcp --tcp-flags ALL NONE -m state --state ! ESTABLISHED  -j LOG --log-prefix "$TITLE : NULL scan  "   # PING -re ne válaszoljunk   $IPTABLES -A inet_to_lnet -m state --state NEW -p icmp -j DROP   $IPTABLES -A inet_to_lnet -p icmp --icmp-type echo-request -m limit --limit 3/s -j ACCEPT   $IPTABLES -A inet_to_lnet -p icmp --icmp-type echo-request -j LOG --log-prefix "$TITLE : PoD attack "   $IPTABLES -A inet_to_lnet -p icmp --icmp-type echo-request -j DROP      # Az új kapcsolatok helyesen kezdődjenek ( közvetett DoS )   $IPTABLES -A inet_to_lnet -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "$TITLE : hidden portscan "   $IPTABLES -A inet_to_lnet -p tcp ! --syn -m state --state NEW -j DROP      # Jóváhagyott kapcsolatok elfogadása   $IPTABLES -A inet_to_lnet -m state --state ESTABLISHED,RELATED -j ACCEPT       # Szolgáltatások engedélyezése (nyitott portok)#  $IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 20 -j ACCEPT # Ftp-data#  $IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 20 -j ACCEPT # Ftp-data#  $IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 21 -j ACCEPT # Ftp#  $IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 21 -j ACCEPT # Ftp#  $IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 23 -j ACCEPT # Telnet#  $IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 23 -j ACCEPT # Telnet#  $IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 25 -j ACCEPT # SMTP#  $IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 25 -j ACCEPT # SMTP#  $IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 53 -j ACCEPT # DNS#  $IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 53 -j ACCEPT # DNS#  $IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 80 -j ACCEPT # HTTP#  $IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 80 -j ACCEPT # HTTP#  $IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 22 -j ACCEPT # ssh#  $IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 22 -j ACCEPT # ssh#  $IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 107 -j ACCEPT # rtelnet#  $IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 107 -j ACCEPT # rtelnet#  $IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 110 -j ACCEPT # POP3#  $IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 110 -j ACCEPT # POP3#  $IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 143 -j ACCEPT # IMAP#  $IPTABLES -A inet_to_lnet -m state --state NEW -p udő --dport 143 -j ACCEPT # IMAP#  $IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 3389 -j ACCEPT # Távsegítség#  $IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 3389 -j ACCEPT # Távsegítség}## A LAN-ról a tűzfalra érkező csomagok#lnet_to_fw(){   # Itt mindent engedünk   $IPTABLES -A lnet_to_fw -j ACCEPT   # Másik alternatíva : SSH-t engedünk, pingelni lehet, dhcp ok#  $IPTABLES -A lnet_to_fw -m state --state ESTABLISHED,RELATED -j ACCEPT#  $IPTABLES -A lnet_to_fw -m state --state NEW -p tcp --dport 22 -j ACCEPT#  $IPTABLES -A lnet_to_fw -m state --state NEW -p udp --dport 22 -j ACCEPT#  $IPTABLES -A lnet_to_fw -m state --state NEW -p icmp -j ACCEPT#  $IPTABLES -A lnet_to_fw -p udp --dport 67 -j ACCEPT # DHCP#  $IPTABLES -A lnet_to_fw -j DROP}## A LAN-ról az internetre küldött csomagok#lnet_to_inet(){   # Itt mindent engedünk   $IPTABLES -A lnet_to_inet -j ACCEPT}## A tűzfalról a LAN-ra küldött csomagok#fw_to_lnet(){   # Itt mindent engedünk   $IPTABLES -A fw_to_lnet -j ACCEPT}## A tűzfalról az internetre küldött csomagok#fw_to_inet(){   # Itt mindent engedünk   $IPTABLES -A fw_to_inet -j ACCEPT}## Internet megosztása a LAN számára#nat(){   $IPTABLES -t nat -A POSTROUTING -o $INET_IF -j MASQUERADE}## Sysctl beállítások a /proc fájlrendszeren#sysctls(){   # ICMP redirect fogadásának kikapcsolása   for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.accept_redirects=0 > /dev/null;   done   #$SYSCTL -w net.ipv4.conf.all.accept_redirects=0 > /dev/null      # A forrás-routolási csomagok kikapcsolása   for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.accept_source_route=0 > /dev/null;   done   #$SYSCTL -w net.ipv4.conf.all.accept_source_route=0 > /dev/null      # A lehetetlen IP ről jövő csomagok loggolása   for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.log_martians=1 > /dev/null;   done   #$SYSCTL -w net.ipv4.conf.all.log_martians=1 > /dev/null      # Routolási háromszögelés illetve ip spoofing védelem   for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.rp_filter=1 > /dev/null;   done   #$SYSCTL -w net.ipv4.conf.all.rp_filter=1 > /dev/null      # ICMP redirect engedélyezése az átjáróknak   for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.secure_redirects=1 > /dev/null;   done   #$SYSCTL -w net.ipv4.conf.all.secure_redirects=1 > /dev/null      # ICMP redirect kikapcsolása   # Ha a gép router, írjuk át 1-re, és a többi host kap ICMP redirect-t   for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.send_redirects=0 > /dev/null;   done   #$SYSCTL -w net.ipv4.conf.all.send_redirects=0 > /dev/null      # PING-re válaszolunk - majd a láncokon szűrjük/kikapcsolhatjuk   $SYSCTL -w net.ipv4.icmp_echo_ignore_all=0 > /dev/null   # Ne válaszoljunk a broadcast PING-re   $SYSCTL -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null   # Ne loggoljuk a hibás router broadcastokat   $SYSCTL -w net.ipv4.icmp_ignore_bogus_error_responses=1 > /dev/null   # IP routolás engedélyezése NAT-hoz   $SYSCTL -w net.ipv4.ip_forward=1 > /dev/null   }## Sysctl visszaállítások#unsysctls(){   # Default értékeket visszaállítjuk   #  --- mégjobb lenne: config fájlban elmenteni a tűzfal előtti beállításokat, és onnan visszamenteni! ---   for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.accept_redirects=1 > /dev/null;   done   for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.accept_source_route=0 > /dev/null;   done    for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.log_martians=0 > /dev/null;   done   for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.rp_filter=0 > /dev/null;   done   for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.secure_redirects=1 > /dev/null;   done   for f in /proc/sys/net/ipv4/conf/*; do      $SYSCTL -w net.ipv4.conf.`basename $f`.send_redirects=1 > /dev/null;   done   $SYSCTL -w net.ipv4.icmp_echo_ignore_all=0 > /dev/null   $SYSCTL -w net.ipv4.icmp_echo_ignore_broadcasts=0 > /dev/null   $SYSCTL -w net.ipv4.icmp_ignore_bogus_error_responses=0 > /dev/null   $SYSCTL -w net.ipv4.ip_forward=0 > /dev/null}## Az internethozzáférés zárása#lock(){   LINE=`$IPTABLES -L inet_to_lnet -n | head -3 | tail -1`   if ! ( [ `echo $LINE | awk '{print $1}'` == "DROP" ] && [ `echo $LINE | awk '{print $2}'` == "all" ] && [ `echo $LINE | awk '{print $4}'` == "0.0.0.0/0" ] && [ `echo $LINE | awk '{print $5}'` == "0.0.0.0/0" ]); then      $IPTABLES -I inet_to_lnet 1 -j DROP   fi   LINE=`$IPTABLES -L inet_to_fw -n | head -3 | tail -1`   if ! ( [ `echo $LINE | awk '{print $1}'` == "DROP" ] && [ `echo $LINE | awk '{print $2}'` == "all" ] && [ `echo $LINE | awk '{print $4}'` == "0.0.0.0/0" ] && [ `echo $LINE | awk '{print $5}'` == "0.0.0.0/0" ]); then       $IPTABLES -I inet_to_fw 1 -j DROP   fi}## Az internethozzáférés engedélyezése#unlock(){   LINE=`$IPTABLES -L inet_to_lnet -n | head -3 | tail -1`   if [ `echo $LINE | awk '{print $1}'` == "DROP" ] && [ `echo $LINE | awk '{print $2}'` == "all" ] && [ `echo $LINE | awk '{print $4}'` == "0.0.0.0/0" ] && [ `echo $LINE | awk '{print $5}'` == "0.0.0.0/0" ]; then      $IPTABLES -D inet_to_lnet 1   fi   LINE=`$IPTABLES -L inet_to_fw -n | head -3 | tail -1`   if [ `echo $LINE | awk '{print $1}'` == "DROP" ] && [ `echo $LINE | awk '{print $2}'` == "all" ] && [ `echo $LINE | awk '{print $4}'` == "0.0.0.0/0" ] && [ `echo $LINE | awk '{print $5}'` == "0.0.0.0/0" ]; then      $IPTABLES -D inet_to_fw 1   fi}case "$1" in   start)      if [ ! -x $IPTABLES ]; then	 echo "No iptables found so not starting firewall..."	 exit 1      fi      echo " * Starting Firewall..."      sysctls      delete_chains      create_chains      basic_rules      inet_to_fw      inet_to_lnet      lnet_to_fw      lnet_to_inet      fw_to_lnet      fw_to_inet      nat      ;;   stop)      echo " * Stopping Firewall..."      delete_chains      unsysctls      ;;   restart)      $0 stop      sleep 1      $0 start      ;;   lock)      echo " * Locking System & LAN from Internet access..."      lock      ;;   unlock)      echo " * Unlocking System & LAN for Internet acccess..."      unlock      ;;   list)      $IPTABLES -L -n      ;;   *)      echo "Usage : $0 {start|stop|restart|lock|unlock}"      exit 1      ;;esac