- Главная... arrow - Статьи... arrow Crontab в будни и в выходные. Добавление правила в IPNAT по расписанию.

#Записки о Unix/Linux/BSD/Solaris

Crontab в будни и в выходные. Добавление правила в IPNAT по расписанию.
Автор Охальников Олег   
28:12:2010 г.
Приведу не сложный пример решения следующей задачи...
Необходимо чтобы запросы с внешнего IP с 18:00 до 9:00 редиректились в сеть на локальный IP, а с 9:00 до 18:00 это правило отключалось. Так же необходимо, чтобы в выходные дни правило редиректа работало круглосуточно.  Получается как бы динамический NAT )))))).
Все это можно сделать с помощью crontab и очень простых скриптов.
Итак, в качестве NAT у меня используется IPNAT, необходимое правило выглядит следующим образом:

rdr em1 Inet_IP/32 port 80 -> Local_IP port 3107 tcp

em1 - это внешний интерфейс. Т.е. согласно правилу все коннекты на Inet_IP порт 80 переадресовываются в локалку на Local_IP порт 3107, на котором крутится нужный сервис. Создаем два скрипта однострочника, на добавление правила (ipnat_in.sh) и на удаление правила (ipnat_out.sh).  /etc/ipnat.conf - конфиг с правилами IPNAT.
ipnat_in.sh:

#!/bin/sh
echo 'rdr em1 Inet_IP/32 port 80 -> Local_IP port 3107 tcp' >> /etc/ipnat.conf;

ipnat_out.sh:

#!/bin/sh
cat /etc/ipnat.conf | grep -v Local_IP > /etc/ipnat.conf;

Тестируем в ручном режиме, проверяем /etc/ipnat.conf, первый скрипт должен добавлять в конец файла нужное правило, второй - это правило удаляет. Для того чтобы перечитать правило, нужно выполнить следующую команду:

ipnat -FC && ipnat -f /etc/ipnat.conf

  Теперь в crontab пишем правила:

59 17 * * * /usr/local/etc/script/ipnat_in.sh
0 18 * * * ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1
59 8 * * * /usr/local/etc/script/ipnat_out.sh
0 9 * * * ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1
1 9 * * 0,6 /usr/local/etc/script/ipnat_in.sh
2 9 * * 0,6 ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1
57 17 * * 0,6 /usr/local/etc/script/ipnat_out.sh
58 17 * * 0,6 ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1

Первое правило в 17:59 добавит редирект в  /etc/ipnat.conf, далее чтобы изменения применились - в 18:00 перечитываем /etc/ipnat.conf. Соответственно в 8:59 - удаляем редирект и в 9:00 перечитываем конф с правилами. Это работает каждый день включая выходные. Следующие правила 

1 9 * * 0,6 /usr/local/etc/script/ipnat_in.sh
2 9 * * 0,6 ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1
57 17 * * 0,6 /usr/local/etc/script/ipnat_out.sh
58 17 * * 0,6 ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1

работают в выходные. Т.е. дополнительно в Сб. после того как 9:00 правило будет удалено, мы его в 9:01 повторно включим до 17:57 - в это время отключаем и в 18:00 заного включаем первыми правилами. В общем получаются круглые сутки. Схемка возможно будет более понятна:

 
Пн. 9:00 - ipnat_out  18:00 - ipnat_in  # работает только с 18:00 и ночью до 9:00
Вт.  9:00 - ipnat_out  18:00 - ipnat_in  # работает только с 18:00 и ночью до 9:00
Ср. 9:00 - ipnat_out  18:00 - ipnat_in  # работает только с 18:00 и ночью до 9:00
Чт.  9:00 - ipnat_out  18:00 - ipnat_in  # работает только с 18:00 и ночью до 9:00
Пт.  9:00 - ipnat_out  18:00 - ipnat_in  # работает только с 18:00 и ночью до 9:00
Сб. 9:00 - ipnat_out  9:02  - ipnat_in  17:58 - ipnat_out  18:00 - ipnat_in # сутки
Вс.  9:00 - ipnat_out  9:02  - ipnat_in 17:58 - ipnat_out  18:00 - ipnat_in # сутки


Вот таким образом, без написания сложных скриптов, можно решить поставленную задачу.

Материал подготовил:
Охальников Олег aka H@wk!  

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code


Просмотров: 5903

  Коментарии (2)
RSS комментарии
 1 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 08:33 16.09.2013
Согласен с dom 
Опасно кроном от рута пускать скрипт
 2 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 18:15 30.03.2013
зверство.  
в правилах iptables есть параметр время. 
iptables RULE -m time --timestart TIME --timestop TIME --days DAYS -j ACTION
 
« Скрипт простого мониторинга с отправкой результатов на почту (на примере gmirror).   Простой скрипт бэкапа ( на примере FreeBSD) »

#COMMENT

Блокируем Ylmf-pc на Exim, Bru...
Благодарю за кучу уцелевших нервов:) постоянно приходилось б...
30/05/17 00:02 More...
By Mus

Установка даты и времени в кон...
Спасибо
12/05/17 17:49 More...
By dushka

Раскладка в rdesktop
Огромное спасибо!
28/04/17 14:01 More...
By Виктор

Аутентификация средствами Apac...
подскажите как писать пороль цифры ?пж! :sigh
28/03/17 13:06 More...
By Лиза

Logwatch - мониторинг журналов...
Отлично, очень не хватало. Автору большое спасибо, пиши еще.
25/01/17 02:44 More...
By Gregg