#!/bin/sh # # $Id: firewall.const v 1.0 2004/07/27 16:11:06 root Exp $ # # Name: firewall.const # Summary: IPtable based firewall script const # Author: Aleksey Avdeev # Organization: RAMAX International # Comments [ru]: Константы скрипта настройки firewall-а с помощью iptables # IPT="/sbin/iptables" DEPMOD="/sbin/depmod" MODPROBE="/sbin/modprobe" IFCONFIG="/sbin/ifconfig" GREP="/bin/grep" FGREP="/bin/fgrep" CUT="/bin/cut" SORT="/bin/sort" UNIQ="/usr/bin/uniq" EXT_INT="ppp_ext" # внешний сетевой интерфейс #DMZ_INT="eth1" # сетевой интерфейс dmz LAN_INT="eth0" # сетевой интерфейс локальной сети LOOPBACK_INT="lo" # интерфейс "локальной петли" LAN_PROXY="sl0" # сетевой прокси интерфейс #EXT_INT="eth0_1" # внешний сетевой интерфейс # Внешние интерфейсы: declare -a EXT_INTS=( "$LAN_PROXY" "$EXT_INT" "eth1" "eth1_1" ) # Nat интерфейсы declare -a NAT_INTS=( "$LAN_PROXY" "$EXT_INT" ) # Внутренние интерфейсы: declare -a LAN_INTS=( "$LAN_INT" "eth1_0" ) # Внутренние интерфейсы: declare -a DMZ_INTS="eth1" ANYWHARE="0/0" IP_LO="127.0.0.0/8" IP_A="10.0.0.0/8" IP_B="172.16.0.0/12" IP_C="192.168.0.0/16" IP_D="224.0.0.0/4" # multicast, немогут быть источником IP_E="240.0.0.0/5" # экспириментальные # Широковешательные: IP_BC_SRC="0.0.0.0" IP_BC_DEST="255.255.255.255" # IP внешние declare -a INT_ppp_ext=( "ppp0" "ppp1" "ppp2" "ppp3" ) declare -a INT_sl0=("sl0") NET_sl0="$ANYWHARE" # IP сети declare -a INT_eth0=("eth0") IP_eth0="192.168.0.1" NET_eth0="192.168.0.0/25" declare -a IP_BC_SRC_eth0=( "192.168.0.0" "0.0.0.0" ) declare -a IP_BC_DEST_eth0=( "192.168.0.127" "192.168.0.255" "192.168.255.255" "255.255.225.255" ) declare -a INT_eth1=("eth1") IP_eth1="192.168.1.2" NET_eth1="192.168.1.0/24" declare -a IP_BC_SRC_eth1=( "192.168.1.0" "0.0.0.0" ) declare -a IP_BC_DEST_eth1=( "192.168.1.255" "255.255.255.255" ) declare -a INT_eth1_0=("eth1") IP_eth1_0="10.8.8.7" NET_eth1_0="10.0.0.0/8" declare -a IP_BC_SRC_eth1_0=( "10.0.0.0" "0.0.0.0" ) declare -a IP_BC_DEST_eth1_0=( "10.255.255.255" "255.255.255.255" ) declare -a INT_eth1_1=("eth1") IP_eth1_1="xxx.xxx.xxx.xxx" NET_eth1_1="xxx.xxx.xxx.0/24" declare -a IP_BC_SRC_eth1_1=( "xxx.xxx.xxx.0" "0.0.0.0" ) declare -a IP_BC_DEST_eth1_1=( "xxx.xxx.xxx.255" "255.255.255.255" ) # Некорректные адреса: BAD_IP_HACK=( "212.18.63.105" # Вск Ноя 13 17:38:51 MSK 2005 "212.49.98.34" # Пнд Ноя 14 06:32:52 MSK 2005 "84.244.3.70" # Срд Ноя 30 21:12:01 MSK 2005 "67.43.159.57" # Сбт Дек 3 03:14:34 MSK 2005 "202.90.158.204" # Птн Дек 30 01:28:47 MSK 2005 "63.228.246.2" # Птн Дек 30 03:05:51 MSK 2005 ) # All BAD_IP_ALL=( "$IP_LO" "$IP_B" "$IP_D" "$IP_E" ${BAD_IP_HACK[@]} ) # Входящие на внешние адреса BAD_IP_SRC_ppp_ext=( "$IP_A" "$IP_C" "$IP_BC_DEST" ) # Входящие на внутренние адреса BAD_IP_SRC_eth0=( "$IP_A" "$IP_BC_DEST_eth0" "$IP_BC_DEST" ) BAD_IP_SRC_eth1=( "$IP_BC_DEST_eth1" "$IP_BC_DEST" ) BAD_IP_ALL_DEST=( "$IP_LO" "$IP_B" "$IP_E" "$IP_BC_SRC" ) UNPRIVPORTS="1024:" declare -a ALARM_PORTS=( "135:139" # rpc, netbios-* "1433:1434" # ms-sql-* "445" # microsoft-ds "1025" "1512" # wins "2745" "3127" "6129" "5000" "4444" ) declare -a MAIL_TCP=( "25" # smtp "143" # imap "993" # imaps "110" # pop3 "995" # pop3s ) declare -a PUBLIC_ALL=( "53" # domain ) declare -a PUBLIC_TCP=( ${PUBLIC_ALL[@]} "22" # ssh # "20" # ftp-data # "21" # ftp # "25" # smtp "80" # http ${MAIL_TCP[@]} ) declare -a PUBLIC_UDP=( ${PUBLIC_ALL[@]} "123" # ntp ) #echo ${PUBLIC_UDP[@]} declare -a PRIVAT_TCP=( # "80" # http # "8200" # httpd-perl # ${MAIL_TCP[@]} ) declare -a PRIVAT_UDP=( "514" # syslog ) declare -a LAN_ALL=( "53" # domain "631" # ipp ) declare -a LAN_TCP=( # "80" # http # "8200" # httpd-perl "3128" # squid "139" # netbios-ssn "445" # microsoft-ds "139" # netbios-ssn "7741" # lisa "8080" # webcache "8081" # tproxy ${LAN_ALL[@]} ) declare -a LAN_UDP=( # "67" # bootps # "68" # bootpc "137" # netbios-ns "138" # netbios-dgm # "123" # ntp ${LAN_ALL[@]} ) declare -a FORVARD_TCP=( ${MAIL_TCP[@]} ) declare -a FORVARD_UDP=( ) declare -a REJECT_ALL=( "113" # auth ) declare -a REJECT_TCP=( ${REJECT_ALL[@]} ) declare -a REJECT_UDP=( ${REJECT_ALL[@]} ) declare -a LAN_FIZ_INTS LAN_FIZ_INTS=(`for INT in ${LAN_INTS[@]} do eval INT=\\${INT_$INT[@]} for I in ${INT[@]} do echo $I done done|$SORT|$UNIQ` ) declare -a EXT_FIZ_INTS EXT_FIZ_INTS=(`for INT in ${EXT_INTS[@]} do eval INT=\\${INT_$INT[@]} for I in ${INT[@]} do echo $I done done|$SORT|$UNIQ` ) declare -a NAT_FIZ_INTS NAT_FIZ_INTS=(`for INT in ${NAT_INTS[@]} do eval INT=\\${INT_$INT[@]} for I in ${INT[@]} do echo $I done done|$SORT|$UNIQ` ) declare -a LAN_IP LAN_IP=(`for INT in ${LAN_INTS[@]} ${DMZ_INTS[@]} do eval IP=\\${NET_$INT[@]} for I in ${IP[@]} do echo $I done done|$SORT|$UNIQ` ) declare -a PRIVAT_IP=( ${LAN_IP[@]} 192.168.1.1 10.8.8.8 ) Ipt() { echo "$IPT $@" $IPT "$@" } # Ipt IptMass() { # Генерит массив правил вида: # Ipt $1 $n $2 # где n>2 local sfirst="$1" local send="$2" shift 2 # echo "$@" declare -a PARAMS local PARAMS=(`for I in $@; do echo $I; done|$SORT|$UNIQ`) # echo ${PARAMS[@]} for I in ${PARAMS[@]} do Ipt $sfirst $I $send done } #IptMass IptPorts() { # $1 - направление <-s|-d|-a> # S2 - строка условия (до списка портов) # $3 - действие (после списка портов) # $5 - список портов local DestPort case "$1" in -s) DestPort="--source-port" ;; -d) DestPort="--destination-port" ;; -a) DestPort="--port" ;; *) exit 1 ;; esac local sfirst="$2" local send="$3" shift 3 #echo $@ # Группы портов declare -a PORTS local PORTS=(`for I in $@; do echo $I; done|$SORT|$UNIQ|$GREP '^[0-9]*:[0-9]*$'`) #echo ${PORTS[@]} if [ "${#PORTS[@]}" -gt 0 ] then if [ "$DestPort" != "--port" ] then IptMass "$sfirst $DestPort" "$send" ${PORTS[@]} else IptMass "$sfirst --destination-port" "$send" ${PORTS[@]} IptMass "$sfirst --source-port" "$send" ${PORTS[@]} fi fi # Отдельные порты local PORTS=(`for I in $@; do echo $I; done|$SORT|$UNIQ|$GREP '^[0-9]*$'`) #echo ${PORTS[@]} if [ "${#PORTS[@]}" -gt 0 ] then local I=1 local LP="" for P in ${PORTS[@]} do if [ $I -eq 1 ] then LP="$P" elif [ $I -eq 15 ] then Ipt $sfirst -m multiport $DestPort "${LP},$P" $send I=0 LP="" else LP="${LP},$P" fi (( I++ )) done if [ $I -gt 0 ] then Ipt $sfirst -m multiport $DestPort "$LP" $send fi fi } # IptPorts #echo ${ALARM_PORTS[@]} #echo ${ALARM_MPORTS[@]} #echo ${ALARM_PORTS[@]} ${ALARM_MPORTS[@]}