Advertisement
Guest User

xispiritotables

a guest
Dec 4th, 2011
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 8.75 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. ###########################
  4. ##Netfilter Config Script##
  5. ##By xispirito -- 12/2011##
  6. ###########################
  7.  
  8.  
  9. ################
  10. #Set Confs Here#
  11. ################
  12.  
  13. #Politcs
  14.  
  15.     #Input
  16.     INPUTP="DROP"
  17.  
  18.     #Output
  19.     OUTPUTP="DROP"
  20.  
  21.     #Forward
  22.     FORWARDP="DROP"
  23.  
  24.     #Load Modules ( options are: yes or no )
  25.     MLOAD="yes"
  26.  
  27.     #Modules To Load ( case MLOAD = yes )
  28.     MODULES="ip_conntrack_ftp"
  29.  
  30. #Outputs
  31.  
  32.     #Tcp Output Ports
  33.     TCPOPORTS="53 80"
  34.  
  35.     #Udp Output Ports
  36.     UDPOPORTS=""
  37.  
  38. #Inputs
  39.  
  40.     #Tcp Input Ports
  41.     TCPIPORTS=""
  42.  
  43.     #Udp Input Ports
  44.     UDPIPORTS=""
  45.  
  46.     #Source Ip's Authorized To Connect On those Ports Above
  47.     SOURCE=""
  48.  
  49.     #Tcp Input Ports -- Any Source
  50.     TCPIAPORTS=""
  51.  
  52.     #Udp Input Ports -- Any Source
  53.     UDPIAPORTS=""
  54.  
  55.  
  56. #Icmp
  57.  
  58.     #Icmp Output Type
  59.     ICMPOTY=""
  60.  
  61.     #Icmp Reply Type for Output Above
  62.     ICMPRTY=""
  63.  
  64.     #Icmp Input type
  65.     ICMPITY=""
  66.  
  67.     #Icmp Reply Type for Input Above
  68.     ICMPIRTY=""
  69.  
  70.     #Icmp Input authorized source ( blank to all )
  71.     ICMPIS=""
  72.  
  73. #Defaults
  74.    
  75.     #Output ( options are: free, filtered )
  76.     OUTPUTOP="filtered"
  77.  
  78.     #Allow Input ( options are: auth, any, all or no )
  79.     INPUTOP="no"
  80.  
  81.     #Allow ICMP Output ( options are: in, out, any or no )
  82.     ICMPOP="no"
  83.  
  84.  
  85. ###########
  86. #Functions#
  87. ###########
  88.  
  89. LMODULES()
  90.  
  91. {
  92.  
  93.     if [ $1 == load ];
  94.     then
  95.         echo -e "[\e[32m*\e[0m] Loading modules"
  96.         echo -e "\tModules:$MODULES"
  97.         modprobe $MODULES
  98.     elif [ $1 == unload ];
  99.     then
  100.         echo -e "[\e[33m*\e[0m] Unloading modules"
  101.         modprobe -r $MODULES
  102.     else
  103.         echo "Bad Argument for MODULES() : $1"
  104.     fi
  105.  
  106. }
  107.  
  108. BASE()
  109.  
  110. {
  111.    
  112.     echo -e "[\e[32m*\e[0m] Load basic rules"
  113.  
  114.     iptables -F
  115.     iptables -X
  116.     echo -e "\tCleaning Rules"
  117.  
  118.     iptables -P INPUT $INPUTP
  119.     iptables -P FORWARD $FORWARDP
  120.     iptables -P OUTPUT $OUTPUTP
  121.     echo -e "\tSet Politcs"
  122.  
  123.     iptables -A INPUT -i lo -j ACCEPT
  124.     iptables -A OUTPUT -o lo -j ACCEPT
  125.     echo -e "\tSet loopback"
  126.  
  127.     if [ $MLOAD == yes ];
  128.     then
  129.         LMODULES load
  130.     fi
  131.  
  132. }
  133.  
  134. OUT()
  135.  
  136. {
  137.     BASE
  138.  
  139.     if [ $1 == filtered ];
  140.     then
  141.  
  142.         echo -e "[\e[32m*\e[0m] Filtering Output"
  143.  
  144.         iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  145.         iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  146.  
  147.         #TCP
  148.         PROTO="tcp"
  149.  
  150.         for i in $PROTO
  151.         do
  152.             for j in $TCPOPORTS
  153.             do
  154.                 iptables -A OUTPUT -p $i --dport $j -j ACCEPT
  155.             done
  156.         done
  157.         echo -e "\tTCP Output ports:$TCPOPORTS"
  158.  
  159.         #UDP
  160.         PROTO="udp"
  161.  
  162.         for i in $PROTO
  163.         do
  164.             for j in $UDPOPORTS
  165.             do
  166.                 iptables -A OUTPUT -p $i --dport $j -j ACCEPT
  167.             done
  168.         done
  169.         echo -e "\tUDP Output ports:$UDPOPORTS"
  170.  
  171.     elif [ $1 == free ];
  172.     then
  173.    
  174.         echo -e "[\e[33m*\e[0m] Filtering Input only"  
  175.  
  176.         iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  177.         iptables -A OUTPUT -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
  178.     else
  179.         echo "Bad argument for OUTPUT : $1"
  180.     fi
  181.  
  182. }
  183.  
  184. INPUT()
  185.  
  186. {
  187.  
  188.     if [ $1 == auth ];
  189.     then
  190.  
  191.         echo -e "[\e[32m*\e[0m] Set Iputs for authorized sources"  
  192.  
  193.         #TCP
  194.         PROTO="tcp"
  195.  
  196.         for i in $PROTO
  197.         do
  198.             for j in $TCPIPORTS
  199.             do
  200.                 iptables -A INPUT -p $i --dport $j -s $SOURCE -j ACCEPT
  201.             done
  202.         done
  203.         echo -e "\tTCP Input ports:$TCPIPORTS"
  204.  
  205.         #UDP
  206.         PROTO="udp"
  207.  
  208.         for i in $PROTO
  209.         do
  210.             for j in $UDPIPORTS
  211.             do
  212.                 iptables -A INPUT -p $i --dport $j -s $SOURCE -j ACCEPT
  213.             done
  214.         done
  215.         echo -e "\tUDP Input ports:$UDPIPORTS"
  216.         echo -e "\tSource Allowed:$SOURCE"
  217.  
  218.     elif [ $1 == any ];
  219.     then
  220.  
  221.         echo -e "[\e[32m*\e[0m] Set Iputs for any" 
  222.  
  223.         #TCP
  224.         PROTO="tcp"
  225.  
  226.         for i in $PROTO
  227.         do
  228.             for j in $TCPAIPORTS
  229.             do
  230.                 iptables -A INPUT -p $i --dport $j -j ACCEPT
  231.             done
  232.         done
  233.         echo -e "TCP Input ports ( all sources ):$TCPAIPORTS"
  234.    
  235.         #UDP
  236.         PROTO="udp"
  237.  
  238.         for i in $PROTO
  239.         do
  240.             for j in $UDPIAPORTS
  241.             do
  242.                 iptables -A INPUT -p $i --dport $j -j ACCEPT
  243.             done
  244.         done
  245.         echo -e "\tUDP Input ports ( all sources ):$UDPIAPORTS"
  246.  
  247.     else
  248.         echo "Bad argument for INPUT : $1"
  249.     fi
  250.  
  251. }
  252.  
  253. ICMP()
  254.  
  255. {
  256.  
  257.     if [ $1 == out ];
  258.     then
  259.  
  260.         echo -e "[\e[32m*\e[0m] Set out ICMP rules"
  261.  
  262.         iptables -A OUTPUT -p icmp --icmp-type $ICMPOTY -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  263.         iptables -A INPUT -p icmp --icmp-type $ICMPRTY -m state --state ESTABLISHED,RELATED -j ACCEPT
  264.         echo -e "\tICMP Output type:$ICMPOTY, reply type:$ICMPRTY" 
  265.  
  266.     elif [ $1 == in ];
  267.     then
  268.         if [ ! $ICMPIS ];
  269.         then
  270.             echo -e "[\e[32m*\e[0m] Set Input ICMP rules"
  271.             iptables -A INPUT -p icmp --icmp-type $ICMPITY -s $ICMPIS -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  272.             iptables -A INPUT -p icmp --icmp-type $ICMPIRTY -s $ICMPIS -m state --state ESTABLISHED,RELATED -j ACCEPT
  273.             echo -e "\tICMP input allowed sources:$ICMPIS"
  274.         else
  275.             iptables -A INPUT -p icmp --icmp-type $ICMPITY -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  276.             iptables -A INPUT -p icmp --icmp-type $ICMPIRTY -m state --state ESTABLISHED,RELATED -j ACCEPT
  277.             echo -e "\tICMP Input type:$ICMPITY, reply type:$ICMPIRTY"
  278.         fi
  279.     else
  280.         echo "Bad argument for ICMP : $1"
  281.     fi
  282.  
  283.  
  284. }
  285.  
  286. STOP()
  287.  
  288. {
  289.    
  290.     echo -e "[\e[31m*\e[0m] Cleaning rules"
  291.  
  292.     iptables -F
  293.     iptables -X
  294.     iptables -Z
  295.     echo -e "\tFlush'em all"
  296.  
  297.     iptables -A INPUT -i o -j ACCEPT
  298.     iptables -A OUTPUT -o lo -j ACCEPT
  299.  
  300.     iptables -A INPUT -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
  301.     iptables -A OUTPUT -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
  302.     echo -e "\tSet all to ACCEPT"
  303.  
  304.     LMODULES unload
  305.  
  306. }
  307.  
  308. HELP()
  309.  
  310. {
  311.  
  312.     echo ""
  313.     echo "Usage:"
  314.     echo -e "\t-s or start       Start the Netfilter Script"
  315.     echo -e "\t-t or stop        Stop, unload Modules and set all to ACCEPT"
  316.     echo -e "\t-r or restart\t   Restart( using start rules )"
  317.     echo ""
  318.     echo -e "[-a]"
  319.     echo "Arguments:"
  320.     echo -e "\tdefault:          Same as start"
  321.     echo -e "\tauthin\t          Output filtered, Input from authorized sources"
  322.     echo -e "\tallin\t       Output filtered, Input from sources"
  323.     echo -e "\texin          Output filtered, Input from external sources only"
  324.     echo -e "\tfout          Free Output, no Input"
  325.     echo -e "\tfout_authin       Free Output, Input from authorized sources"
  326.     echo -e "\tfout_exin         Free Output, Input from external sources only"
  327.     echo -e "\tfout_allin        Free Output, Input from any source"
  328.     echo ""
  329.     echo -e "[-i]"
  330.     echo "Arguments:"
  331.     echo -e "\tauth          Input Allowed for authorized Sources"
  332.     echo -e "\tany           Input Allowed for external sources"
  333.     echo""
  334.     echo -e "[-o]"
  335.     echo "Arguments:"
  336.     echo -e "\tfree          Free Output"
  337.     echo -e "\tfiltered      Filtered Output"
  338.     echo""
  339.     echo -e "[-p]"
  340.     echo "Arguments:"
  341.     echo -e "\tout           Allow ICMP Output"
  342.     echo -e "\tin            Allow ICMP Iput"
  343.     echo -e "\tall           Allow ICMP Iput and Output"
  344.  
  345.     echo ""
  346. }
  347.  
  348. DEFAULT()
  349.  
  350. {
  351.  
  352.     if [ $INPUTOP == auth ];
  353.     then
  354.         INPUT auth
  355.     elif [ $INPUTOP == any ];
  356.     then
  357.         INPUT any
  358.     elif [ $INPUTOP == all ];
  359.     then
  360.         INPUT auth
  361.         INPUT any
  362.     fi
  363.  
  364.  
  365.     if [ $ICMPOP == in ];
  366.     then
  367.         ICMP in
  368.     elif [ $ICMPOP == out ];
  369.     then
  370.         ICMP out
  371.     elif [ $ICMPOP == any ];
  372.     then
  373.         ICMP in
  374.         ICMP out
  375.     fi
  376.  
  377.    
  378.     if [ $OUTPUTOP == free ];
  379.     then
  380.         OUT free
  381.     else
  382.         OUT filtered
  383.     fi
  384.  
  385. }
  386. ##########
  387. #Starting#
  388. ##########
  389.  
  390. #Get Options
  391.  
  392.     if [ ! $1 ];
  393.     then
  394.         DEFAULT
  395.         exit
  396.     elif [ $1 == start ];
  397.     then
  398.         DEFAULT
  399.         exit
  400.     elif [ $1 == stop ];
  401.     then
  402.         STOP
  403.         exit
  404.     elif [ $1 == restart ];
  405.     then
  406.         DEFAULT
  407.         exit
  408.     fi
  409.  
  410.  
  411.     while getopts sa:o:p:i:rth ARGM;
  412.     do
  413.         case $ARGM in
  414.  
  415.         i) 
  416.             if [ $OPTARG == auth ];
  417.             then
  418.                 INPUT auth
  419.             elif [ $OPTARG == any ];
  420.             then
  421.                 INPUT any
  422.             else
  423.                 echo "Bad argument for -i : $OPTARG"
  424.             fi
  425.             ;;
  426.    
  427.         o)
  428.             if [ $OPTARG == filtered ];
  429.             then
  430.                 OUT filtered
  431.             elif [ $OPTARG == free ];
  432.             then
  433.                 OUT free
  434.             else
  435.                 echo "Bad argument for -o : $OPTARG"
  436.             fi
  437.             ;;
  438.  
  439.         a)
  440.             if [ $OPTARG == default ];
  441.             then
  442.                 DEFAULT
  443.             elif [ $OPTARG == authin ];
  444.             then
  445.                 INPUT auth
  446.                 OUT filtered
  447.             elif [ $OPTARG == allin ];
  448.             then
  449.                 INPUT auth
  450.                 INPUT any
  451.                 OUT filtered
  452.             elif [ $OPTARG == exin ];
  453.             then
  454.                 INPUT any
  455.                 OUT filtered
  456.             elif [ $OPTARG == fout ];
  457.             then
  458.                 OUT free
  459.             elif [ $OPTARG == fout_authin ];
  460.             then
  461.                 INPUT auth
  462.                 OUT free
  463.             elif [ $OPTARG == fout_allin ];
  464.             then
  465.                 INPUT auth
  466.                 INPUT any
  467.                 OUT free
  468.             elif [ $OPTARG == fout_exin ];
  469.             then
  470.                 INPUT any
  471.                 OUT free
  472.             else
  473.                 echo "Bad Argument for -o : $OPTARG"
  474.                
  475.             fi
  476.             ;;
  477.  
  478.         p)
  479.             if [ $OPTARG == out ];
  480.             then
  481.                 ICMP out
  482.             elif [ $OPTARG == in ];
  483.             then
  484.                 ICMP in
  485.             elif [ $OPTARG == all ];
  486.             then
  487.                 ICMP in
  488.                 ICMP out
  489.             else
  490.                 echo "Bad argument for -p : $OPTARG"
  491.             fi
  492.             ;;
  493.  
  494.         r)
  495.             DEFAULT
  496.             exit
  497.             ;;
  498.  
  499.         s)
  500.             DEFAULT
  501.             ;;
  502.  
  503.         t)
  504.             STOP
  505.             exit
  506.             ;;
  507.  
  508.         h)
  509.             HELP
  510.             exit
  511.             ;;
  512.  
  513.         ?)
  514.             echo -e "[\e[31m*\e[0m] Bad Argument"
  515.             HELP
  516.             exit
  517.             ;;
  518.         esac
  519.     done
  520. shift $((OPTIND-1))
  521.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement