The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Раздел полезных советов: Автоматическое изменение правил IPT..."
Отправлено auto_tips, 07-Сен-09 13:41 
Возникла задача предоставить сервис для клиентов, использующих внешние динамические адреса.
Доступ к сервису ограничен правилами 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

Создаем сам скрипт /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/.

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

URL: http://subnets.ru/blog/?p=1007
Обсуждается: https://www.opennet.ru/tips/info/2155.shtml

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру