Linux Network Administration — Открытие портов на некоторое время
Доброго времени суток, welinux.ru
Работаю сисадмином в некоторой конторе, есть сетка, есть прокси-сервер, он же шлюз, на основе ОС GNU/Linux.
На сервачке всё как положено - весь инет идет через прокси (squid), файрвол настроен, все политики по умолчанию установлены в drop, нескольким машинам открыты нужные им порты. Всё вроде хорошо, маршрутизация настроена, пакетики бегают, юзеры довольны, но есть одно но...
Иногда, а бывает даже и часто, требуется открывать определённые порты определенным хостам. Например ПО какое-нибудь обновить, которое не понимает аутентификации моего прокси, или открыть порт требуется для какой-нибудь машины в сети, или просто что-то протестировать/проверить на клиентской машине, либо вообще временно ей предоставить доступ в инет по всем непривилегированным портам, да и мало ли всякое бывает. При чем так, чтобы открыл, поставил нужное время, и пошел спокойно к той машине свои дела делать, а через время эти порты сами и закрылись.
Так что вот для этой цели и был написан на баше скрипт-обертка для iptables, который я и представляю здешней общественности.
Установка и принцип работы у него простые. Для начала копируем себе скрипт, обзываем его как Вам нравится (у меня это openport.sh), даем права на выполнение, помещаем в любой каталог с исполняемыми файлами (например /usr/bin/), и можем спокойно использовать.
Опции он принимает такие:
Далее, если есть аргументы open и --sleep скрипт открывает нужные порты (добываляет нужные правила), а затем уходит в фоновый режим, погружается в сон, затем через опеределенное время просыпается и закрывает открытые до этого порты (удаляет добавленные правила). Как видите, все просто.
Вот сам листинг скрипта:
Например, его можно использовать так:
Т.е. открываем порт 8080 для протокола tcp (т.к. стоит по умолчанию) для хоста 192.168.0.25 на 25 минут.
Почему поместил не в блог "Скрипты", а в "Linux Network Administration"? Отвечаю, задача непосредственно из области администрирования сети, в Linux (да и в UNIX в целом) многие задачи решаются с помощью написания скриптов, поэтому постить в блог "Скрипты", где свалены разношерстные по задачам сценарии, не захотелось. Да и людям, решающим конкретные задачи по сетевому администрирования Linux проще будет найти именно в этом блоге.
В этом скрипте много чего еще можно реализовать, как то: открытие порта из нета к локальной машине, отмена проверки устанговленного соединения (т.е. отменая расширения "-m state"), поддержка протокола icmp и его кодов, и т.д. и т.п.
Замечания и предложения приветствуются.
p.s. При определенном уровне интереса могу запостить скрипт на гитхабе для дальнейшего его развития. Пожелания можно слать на почту sugar.61rus сбк gmail тчк com
Работаю сисадмином в некоторой конторе, есть сетка, есть прокси-сервер, он же шлюз, на основе ОС GNU/Linux.
На сервачке всё как положено - весь инет идет через прокси (squid), файрвол настроен, все политики по умолчанию установлены в drop, нескольким машинам открыты нужные им порты. Всё вроде хорошо, маршрутизация настроена, пакетики бегают, юзеры довольны, но есть одно но...
Иногда, а бывает даже и часто, требуется открывать определённые порты определенным хостам. Например ПО какое-нибудь обновить, которое не понимает аутентификации моего прокси, или открыть порт требуется для какой-нибудь машины в сети, или просто что-то протестировать/проверить на клиентской машине, либо вообще временно ей предоставить доступ в инет по всем непривилегированным портам, да и мало ли всякое бывает. При чем так, чтобы открыл, поставил нужное время, и пошел спокойно к той машине свои дела делать, а через время эти порты сами и закрылись.
Так что вот для этой цели и был написан на баше скрипт-обертка для iptables, который я и представляю здешней общественности.
Установка и принцип работы у него простые. Для начала копируем себе скрипт, обзываем его как Вам нравится (у меня это openport.sh), даем права на выполнение, помещаем в любой каталог с исполняемыми файлами (например /usr/bin/), и можем спокойно использовать.
Опции он принимает такие:
- open|close - открыть/закрыть порт(ы)
- -m - подключение расширения iptables "-m multiport"
- --host $arg - ip машины (можно указать и подсеть в таком виде - 192.168.11.0/24)
- --port $arg - порт(ы), для такой записи - 1024:2048, опция -m не требуется, а для такой - 22,80,443, требуется
- --proto $arg - протокол (tcp, udp), для которого требуется открыть порты
- --sleep $arg - время в минутах, через которое следует закрыть порты, которые вы открыли, игнорируется при действии close.
Далее, если есть аргументы open и --sleep скрипт открывает нужные порты (добываляет нужные правила), а затем уходит в фоновый режим, погружается в сон, затем через опеределенное время просыпается и закрывает открытые до этого порты (удаляет добавленные правила). Как видите, все просто.
Вот сам листинг скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
#!/bin/bash |
Например, его можно использовать так:
openport.sh open --host 192.168.0.25 --port 8080 --sleep 25
Т.е. открываем порт 8080 для протокола tcp (т.к. стоит по умолчанию) для хоста 192.168.0.25 на 25 минут.
Почему поместил не в блог "Скрипты", а в "Linux Network Administration"? Отвечаю, задача непосредственно из области администрирования сети, в Linux (да и в UNIX в целом) многие задачи решаются с помощью написания скриптов, поэтому постить в блог "Скрипты", где свалены разношерстные по задачам сценарии, не захотелось. Да и людям, решающим конкретные задачи по сетевому администрирования Linux проще будет найти именно в этом блоге.
В этом скрипте много чего еще можно реализовать, как то: открытие порта из нета к локальной машине, отмена проверки устанговленного соединения (т.е. отменая расширения "-m state"), поддержка протокола icmp и его кодов, и т.д. и т.п.
Замечания и предложения приветствуются.
p.s. При определенном уровне интереса могу запостить скрипт на гитхабе для дальнейшего его развития. Пожелания можно слать на почту sugar.61rus сбк gmail тчк com