ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Возникла задача предоставить сервис для клиентов использующих внешние динамические адреса. Доступ к сервису ограничен правилами IPTABLES.

Клиенты, которым необходимо получить услугу предлагается создать учетную запись на ресурсе dyndns.org, клиент получит доменное имя в виде client.dyndns.org.

При каждом изменении ip адреса клиента мы всегда узнаем его адрес по доменному имени. Если мы добавим правило в iptables для этого доменного имени, правило будет работать только для текущего  ip адреса клиента и при последующем изменении ip адреса, доступ к сервису будет ограничен.

Это статья посвящена решению этой проблемы, и за комментарии, добавления и поправки к статье большое спасибо)

Оригинал решения был найден здесь: http://dave.thehorners.com/content/view/86/65/ , а мы всего лишь доработаем этот скрипт.

Создаем несколько каталогов:

/root/dynhosts/ — общий каталог

/root/dynhosts/zones/ — здесь будем хранить файлы доменных зон клиентов

/root/dynhosts/logs/ — лог файлы работы скрипта

/root/dynhosts/scripts/ — здесь будет находится сам запускаемый скрипт

Создаем лог-файл:

#touch /root/dynhosts/logs/dynhosts.log

Создаем файл зоны клиента:

#touch /root/dynhosts/zones/client.dyndns.org

Создаем сам скрипт:

# vi /root/dynhosts/scripts/firewall-dynhosts.sh

#!/bin/bash
#
# filename: firewall-dynhosts.sh
#
NOW=$(date)
CHAIN="dynamichosts"  # change this to whatever chain you want.
IPTABLES="/sbin/iptables"

# create the chain in iptables.
`$IPTABLES -N $CHAIN`
# insert the chain into the input chain @ the head of the list.
`$IPTABLES -I INPUT 1 -j $CHAIN`
# flush all the rules in the chain
`$IPTABLES -F $CHAIN`

FILES=`ls --format=single-column /root/dynhosts/zones/`

echo $FILES

for file in $FILES
do
HOSTFILE="/root/dynhosts/zones/$file"
echo $HOSTFILE

# lookup host name from dns tables
IP=`/usr/bin/dig +short $file | /usr/bin/tail -n 1`
if [ "${#IP}" = "0" ]; then
echo "$NOW Couldn't lookup hostname for $file, failed." >> /root/dynhosts/logs/dynhosts.log

continue
fi

OLDIP=""
if [ -a $HOSTFILE ]; then
OLDIP=`cat $HOSTFILE`
echo "CAT returned: $?"
fi

# save off new ip.
echo $IP>$HOSTFILE

echo "Updating $file in iptables."
echo "Inserting new rule ($IP)"
`$IPTABLES -A $CHAIN -s $IP/32 -j ACCEPT`

done
exit0

Запускаем скрипт:

# /root/dynhosts/scripts/firewall-dynhosts.sh

iptables: Chain already exists

client.dyndns.org

CAT returned: 0
Updating client.dyndns.org in iptables.
Inserting new rule (213.64.141.6)

Проверяем,

# cat /root/dynhosts/zones/client.dyndns.org
213.64.141.6

#/sbin/iptables -nL dynamichosts

Chain dynamichosts

target     prot opt source               destination
ACCEPT     all  —  213.64.141.6         0.0.0.0/0

Если такого доменного имени не существует в /root/dynhosts/logs/dynhosts.log была бы запись следующего содержания:

Tue Aug 25 09:47:15 MSD 2009 Couldn’t lookup hostname for client.dyndns.org, failed.

После того как контракт с клиентом истек достаточно удалить файл его зоны из /root/dynhosts/zones/.

Осталось добавить выполнение скрипта в крон и предоставлять сервисы этим абонентам.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: zaikini


Похожие статьи:

    Не найдено

Прочитано: 13 016 раз(а)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 2, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Добавить комментарий

Вам следует авторизоваться для размещения комментария.