Перейти к содержанию

Рекомендуемые сообщения

Опубликовано (изменено)

Стояла задача предоставить доступ пользователям к внутренниму сервису.

Обеспечив минимальную безопасность сервиса - сокрытие самого порта от сканеров и брутфорсеров.

С минимальным инструментарием клиента.

Использовать только одну программу клиента, которая поддерживает множественность адресов подключения - резервные адреса.

Клиент RAS Client (Parallels client)

У клиента выставляем 5 адреса подключения
1) адрес роутера, порт пробрасываемого сервиса

2) адрес роутера, порт СТУК 1

3) адрес роутера, порт СТУК 2

4) адрес роутера, порт СТУК 3

5) адрес роутера, порт пробрасываемого сервиса

Первое подключение происходит долго , идёт простукивание портов.
Все последующие быстро, уже в белом списке.

 

На роутере, предварительно, пробросить порт обычными средствами.

#!/bin/sh
# PORT KNOKING для пробрасываемого порта
# класть в /opt/etc/ndm/netfilter.d/100portknok.sh
# не забыть chmod +x /opt/etc/ndm/netfilter.d/100portknok.sh
# 
# логика работы
# требуется 3 стука
# если между простуками будет обращение к постороннему порту доверие утрачивается
# сделано для защиты от случайного срабатывания при массовом сканировании портов
# пример
# если сделать 3 массовых сканирования всех портов то без этой проверки попадёт в списко доверия - KKD

# проверка для какой таблици запускается скрипт
[ "$type" == "ip6tables" ] && exit 0 
[ "$table" != "filter" ] && exit 0 
# поверка на наличие правил в системе
if iptables -С KNOCKING-LAST -j RETURN ; then
    exit 0
fi

# переменные
#WAN
MYIF=eth3
# порты простука
KK1=1111
KK2=2222
KK3=3333
# внутренний получатель пакетов
TIP=192.168.0.2
# порт получателя пакетов
TPORT=80
# интервал времени кежду портами
MYIDLE=15
# вермя пропуска (28800 = 8ч)
WT=28800

# цепочки
iptables -N STATE0
iptables -N STATE1
iptables -N STATE2
iptables -N STATE3
iptables -N SUB_STATE1
iptables -N SUB_STATE2
iptables -N SUB_STATE3
iptables -N KNOCKING-LAST
iptables -N KNOCKING-FIRST
# для проверки когда выпадает
#iptables -N SUB_KNOCKING-FIRST
 
# white list
iptables -I _NDM_INPUT -s 1.1.1.1 -m recent --set --name KKD --rsource

# используются цепочки стоящие после проверок на безопасность
echo  "=== PORT KNOCKING ==="
iptables -I _NDM_INPUT   -m state --state NEW -i $MYIF -p tcp -j KNOCKING-FIRST
iptables -I _NDM_FORWARD -m state --state NEW -i $MYIF -p tcp -j KNOCKING-LAST
#==============================================================================================
echo  "=== KNOCKING-LAST==="
# -=01=- пропущен на 8ч
iptables -A KNOCKING-LAST -d $TIP        -p tcp -m tcp --dport $TPORT \
            -m recent --rcheck --seconds $WT --name KKD --rsource   -j ACCEPT
# -=02=- на 3й стадии
iptables -A KNOCKING-LAST -d $TIP        -p tcp -m tcp --dport $TPORT -j STATE3
# -=03=- время истекло 8ч или не в том списке
iptables -A KNOCKING-LAST -m recent --remove --name KK1 --rsource
iptables -A KNOCKING-LAST -m recent --remove --name KK2 --rsource
iptables -A KNOCKING-LAST -m recent --remove --name KK3 --rsource
iptables -A KNOCKING-LAST -m recent --remove --name KKD --rsource
# -=04=- не наш пакет
iptables -A KNOCKING-LAST                                             -j RETURN
#==============================================================================================
echo  "=== KNOCKING-FIRST==="
# -=05=- на 2й стадии
iptables -A KNOCKING-FIRST -p tcp -m tcp --dport $KK3  -j STATE2
# -=06=- на 1й стадии
iptables -A KNOCKING-FIRST -p tcp -m tcp --dport $KK2  -j STATE1
# -=07=- на 0й стадии
iptables -A KNOCKING-FIRST -p tcp -m tcp --dport $KK1  -j STATE0
# -=08=- промах по порту, удаление из списков
iptables -A KNOCKING-FIRST -m recent --remove --name KK1 --rsource
iptables -A KNOCKING-FIRST -m recent --remove --name KK2 --rsource
iptables -A KNOCKING-FIRST -m recent --remove --name KK3 --rsource

# для проверки когда выпадает
#iptables -A KNOCKING-FIRST -m recent --rcheck --name KK1 --rsource -j SUB_KNOCKING-FIRST
#iptables -A KNOCKING-FIRST -m recent --rcheck --name KK2 --rsource -j SUB_KNOCKING-FIRST
#iptables -A KNOCKING-FIRST -m recent --rcheck --name KK3 --rsource -j SUB_KNOCKING-FIRST

# -=09=- НЕ выбрал нужный порт, вернуть
iptables -A KNOCKING-FIRST                             -j RETURN

# для проверки когда выпадает
#iptables -A SUB_KNOCKING-FIRST -m recent --set    --name KK- --rsource -j ACCEPT
#==============================================================================================
echo  "=== STATE0==="
# === СТАДИЯ 1 порт $KK1 ===
# -=10=- елси он ещё в 1ом списке
iptables -A STATE0 -m recent --update --seconds $MYIDLE --name KK1 --rsource  -j DROP
# -=11=- если не в списке, занести в 1й список
iptables -A STATE0 -m recent --set --name KK1 --rsource
# для включения счётчика времени и самоудалине ИП из списка
iptables -A STATE0 -m recent --rcheck --seconds $MYIDLE --name KK1 --rsource  -j DROP
#==============================================================================================
echo  "=== STATE1 ==="
# === СТАДИЯ 2 порт $KK2 (только если был $KK1) ===
# -=12=- если он уже во 2ом списке
iptables -A STATE1 -m recent --update --seconds $MYIDLE --name KK2 --rsource -j DROP
# -=13=- если он ещё в 1ом списке (первое попадание)
iptables -A STATE1 -m recent --rcheck --seconds $MYIDLE --name KK1 --rsource -j SUB_STATE1
# -=14=- попал в нужный порт но оказался не в том списке (не та стадия)
iptables -A STATE1                                                           -j RETURN

# -=15=- из 1го перенести во 2й список
iptables -A SUB_STATE1 -m recent --remove --name KK1 --rsource
iptables -A SUB_STATE1 -m recent --set    --name KK2 --rsource
# для включения счётчика времени и самоудалине ИП из списка
iptables -A SUB_STATE1 -m recent --rcheck --seconds $MYIDLE --name KK2 --rsource -j DROP
#==============================================================================================
echo  "=== STATE2 ==="
# === СТАДИЯ 3 порт $KK3 (только если был $KK2) ===
# -=16=- если он уже во 3ем списке
iptables -A STATE2 -m recent --update --seconds $MYIDLE --name KK3 --rsource -j DROP
# -=17=- если он ещё в 2ем списке (первое попадание)
iptables -A STATE2 -m recent --rcheck --seconds $MYIDLE --name KK2 --rsource -j SUB_STATE2
# -=18=- попал в нужный порт но оказался не в том списке (не та стадия)
iptables -A STATE2                                                           -j RETURN

# -=19=- из 1го перенести во 2й список
iptables -A SUB_STATE2 -m recent --remove --name KK2 --rsource
iptables -A SUB_STATE2 -m recent --set    --name KK3 --rsource
# для включения счётчика времени и самоудалине ИП из списка
iptables -A SUB_STATE2 -m recent --rcheck --seconds $MYIDLE --name KK3 --rsource -j DROP
#==============================================================================================
echo  "=== STATE3 ==="
# === СТАДИЯ 4 порт $TPORT (только если был $KK3) ===
# -=20=- если он ещё в 3ем списке (первое попадание)
iptables -A STATE3 -m recent --rcheck --seconds $MYIDLE --name KK3 --rsource -j SUB_STATE3
# -=21=- попал в нужный порт но оказался не в том списке (не та стадия)
iptables -A STATE3                                                           -j DROP

# -=22=- из 3го перенесли в 4й список
iptables -A SUB_STATE3 -m recent --remove --name KK3 --rsource
iptables -A SUB_STATE3 -m recent --set    --name KKD --rsource
# для включения счётчика времени и самоудалине ИП из списка
iptables -A SUB_STATE3 -m recent --rcheck --seconds $MYIDLE --name KKD --rsource -j ACCEPT

Первый раз пишу BASH скрипт, посему "не сильно бейте".
Жду конструктивную критику и пожелания по улучшению.

Изменено пользователем odin
добавлено правило белого списка
Опубликовано (изменено)
3 часа назад, odin сказал:

Обеспечив минимальную безопасность сервиса - сокрытие самого порта от сканеров и брутфорсеров.

На этот счет уже придуман хороший инструмент ;)

Изменено пользователем FLK
Опубликовано (изменено)

Я в курсе, сам пользуюсь.
НО , одно другому не мешает.
Усиление безопасности никогда не помешает.

 

Добавлю.

Если есть открытый порт то уже вызывает интерес.

Для кого то даже спортивный.
Так что лучше открыть порт не привлекая излишнего внимания.

 

Один мой знакомы рассказал мне такую историю
У него была легковая машина. На очередном СТО автомеханик ему предложил поставить противоугонную систему.
Суть её была в том что зажигание не сработает пока не провести руку рядом с некоторой поверхностью, даже не прикасаясь.
И вот как то он ехал и остановили его ДПС, оказалось переодетые бандиты которые промышляли перепродажей отобранных машин.
И лишь только потому что его машина никак не заводилась он остался в живых.

Это я к тому что не стоит рассчитывать открытые решения, потайные тоже рулят.

Ещё пример.
у 99% населения на входной двери квартиры стоят секретки на 20мин работы медвежатника.
Но это не значит что надо ставить супер дорогую секретку, этим вы только привлечёте ещё больше внимание, прямо бросите вызов.
Единственно правильное решение, скрытый замок, например магнитный или радио.
Проводите магнитом в некотором месте двери или стены и начинают работать основные замки.

Изменено пользователем odin
Опубликовано (изменено)

Пробовал
НО там вручную надо закрывать порт и нет ограничений по посторонним портам
К тому же там приложение, здесь просто скрипт


В моём решении порт открывается на 8ч и сам закрывается.
Не надо лишних телодвижений по закрытию "двери"

 

Добавлю

knokd трогает только таблицу filter,
Таблица nat не трогается
открыв порт в таблице nat его тут же надо закрыть в таблице filter  и потом отдельным правилом открывать/фильтровать
итого, надо 2 правила вручную создавать, одно перманентно закрывает, второе при условии открывает, без скрипта ни как

Так что их решение хорошо для локально открываемого порта.

Здесь порт открываете средствами вебморды кинетика а блокируете и фильтруется средствами скрипта.

Изменено пользователем odin

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.