Home
Дневник Неонового Человека ака Злобного Линуксоида [entries|archive|friends|userinfo]
neonman

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

iptables [Дек. 4, 2007|01:49 pm]
Накидал скриптец для первоначальной настройки iptables, может быть будет кому полезен, комментарии приветствуются

------------
#!/bin/bash
#
#       $1 - список интерфейсов, которые смотрят в интернет в формате "eth1 eth2" (можно указать и один: "eth1")
#

###############################################################################
# Interface variables setup
###############################################################################

if [ -z "$1" ]; then
    echo "internet incoming interface must be set!"
    exit
fi

# переделываем переданный параметр в массив
ARG=$1
COUNT=0
for I in ${ARG[@]}; do
    INTLIST[$COUNT]=$I
    let COUNT+=1
done

# генерируем на основе имен интерфейсов имена цепочек для них (формат ETH1-IN, ETH2-IN и т.д.)
COUNT=0
for INT in `echo $1|tr [:lower:] [:upper:]`; do
    CHAINS[$COUNT]=$INT-IN
    let COUNT=$COUNT+1
done

# переменные:
# CHAINS - массив с именами цепочек для сетевух
# INTLIST - массив с именами сетевух

###############################################################################
# INPUT chain setup
###############################################################################

# INTERNET access setup #

# список адресов которым разрешен полный доступ к серверу
IPLIST=""

# список портов, доступных на сервере всем из интернета
TCPPORTLIST="25"
UDPPORTLIST="53"

# цепочка badpackets, фильтруем пакеты с некорректными флагами
iptables -N BADPKT
iptables -A BADPKT -p tcp --tcp-flags ALL       FIN,URG,PSH           -j DROP
iptables -A BADPKT -p tcp --tcp-flags ALL       ALL                   -j DROP
iptables -A BADPKT -p tcp --tcp-flags ALL       SYN,RST,ACK,FIN,URG   -j DROP
iptables -A BADPKT -p tcp --tcp-flags ALL       NONE                  -j DROP
iptables -A BADPKT -p tcp --tcp-flags SYN,RST   SYN,RST               -j DROP
iptables -A BADPKT -p tcp --tcp-flags SYN,FIN   SYN,FIN               -j DROP
iptables -A BADPKT -p icmp -f -j DROP
iptables -A BADPKT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
iptables -A BADPKT -m state --state INVALID -j DROP
iptables -I INPUT 1 -j BADPKT

# распихиваем доступ по цепочкам сетевух
INDEX=0
for INTCHAIN in ${CHAINS[@]}; do
    iptables -N $INTCHAIN
    if [ -n "$IPLIST" ]; then
        for IP in $IPLIST; do
            iptables -A $INTCHAIN -s $IP -j ACCEPT
        done
    fi

    # accept connections from internet on allowed port's
    if [ -n "$TCPPORTLIST" ]; then
        for TCPPORT in $TCPPORTLIST; do
                iptables -A $INTCHAIN -p tcp --dport $TCPPORT -j ACCEPT
        done
    fi

    if [ -n "$UDPPORTLIST" ]; then
        for UDPPORT in $UDPPORTLIST; do
            iptables -A $INTCHAIN -p udp --dport $UDPPORT -j ACCEPT
        done
    fi

    iptables -A $INTCHAIN -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A $INTCHAIN -p icmp -j ACCEPT
    iptables -A $INTCHAIN -j DROP
   
    iptables -I INPUT 2 -i ${INTLIST[$INDEX]} -j $INTCHAIN
    let INDEX+=1
done

# цепочка для забаненных адресов
iptables -N BANNED
iptables -I INPUT 1 -j BANNED

###############################################################################
# FORWARD chain setup
###############################################################################

iptables -N FWD-IN
iptables -N FWD-OUT
iptables -A FORWARD -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
iptables -A FWD-OUT -p tcp -m multiport --dport 135,137,138,139,445 -j DROP
iptables -A FWD-OUT -p udp -m multiport --dport 135,137,138,139,445 -j DROP
iptables -A FORWARD -s ! 192.168.0.0/16 -d 192.168.0.0/16 -j FWD-IN
iptables -A FORWARD -s 192.168.0.0/16 -d ! 192.168.0.0/16 -j FWD-OUT

# доступ всей локалке до какого либо адреса, например mail.hotbox.ru
iptables -A FWD-IN -s mail.hotbox.ru -d 192.168.0.0/16 -j ACCEPT
iptables -A FWD-OUT -s 192.168.0.0/16 -d mail.hotbox.ru -p tcp --dport 110 -j ACCEPT

iptables -P FORWARD DROP

###############################################################################
# NAT POSTROUTING chain setup
###############################################################################

# натим до mail.hotbox.ru
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d mail.hotbox.ru -j MASQUERADE

###############################################################################

iptables -L -v -n --line-numbers
---------------

Всё, бан, нат и прочее добавляются маленькими скриптами в соответствующие цепочки: нат в FWD-IN, FWD-OUT и -t nat POSTROUTING, бан соответственно в BANNED
ссылка2 комментария|Оставить комментарий

(без темы) [Апр. 20, 2005|12:36 am]
[Музыка |Theatre Of Tragedy - Venus]

С наступлением первых теплых деньков весь underground, background и foreground Автограда выбрался на улицу. Теперь в парке некуда сесть... и встать...
ссылка2 комментария|Оставить комментарий

Весна. [Апр. 1, 2005|06:43 pm]
Весна. На улице начался массовый сход говна, а в Старом Городе люди опять достали байдарки и каноэ...
ссылкаОставить комментарий

navigation
[ viewing | most recent entries ]

Реклама