LINUX.ORG.RU

Сообщения Netman

 

Прерывание выполнения скрипта по Ctrl+C работает, а с kill -SIGINT - нет. Почему?

Форум — Development

Привет, ЛОР.

Я написал скрипт, который имеет обработку прерывания по Ctrl+C вот таким образом:

# SigINT handling to cleaunp on "Crtl + C" command
trap 'killall stunnel && rm -f /tmp/sslconn.log && exit 0' INT

То есть, убивает все тоннели stunnel и удаляет файл временных логов sslconn.log.

Если я нажимаю Ctrl+C в консоли, где работает скрипт в режиме foreground, то trap отрабатывает как надо, туннели убиваются, файл удаляется.

А вот есть я из другой консоли отправляю команду kill с нужным PID-ом:

kill -SIGINT $pid
то ничего не происходит, скрипт продолжает работать. То же самое, если слать SIGINT через htop.

Что я делаю не так? Как мне прекращать работу скрипта с помощью команды?

Мне нужно это для того, чтобы останавливать работу скрипта, когда его останавливает мой сервис по команде

service mytunnel stop
Секции «start» и «stop» в /etc/init.d/mytunnel выглядят так:
start() {
    /etc/mytunnel/mytunnel.sh &
    pid=$!
    echo $pid > /tmp/run/mytunnel.pid
}

stop() {
    if [ -f "/tmp/run/mytunnel.pid" ]; then
        pid=$(cat /tmp/run/mytunnel.pid)
        kill -SIGINT $pid
    fi
}

UPD. Заметил такую особенность. Если пробовать завершить процесс mytunnel.sh с помощью команды kill -SIGTERM, ничего не происходит. Но, если с помощью этой же команды завершить chils-процесс «sleep», то mytunnel.sh обрабатывает SIGTERM и выходит корректно.

Получается, что sleep как-то блокирует trap?

 , , ,

Netman
()

Нужна ваша критика по решению SSH+VPN.

Форум — Security

Привет, ЛОР.

Я сделал такую штуку как на иллюстрации: https://i.stack.imgur.com/C7JrC.jpg

Хочу обеспечить выход в интернет только через связку SSH+VPN. В случае, если любой из компонентов «отваливается», трафик не идёт вообще.

Скажите, пожалуйста, какие у меня могут быть проблемы с точки зрения безопасноти? Где мне стоит «подложить соломку»? Какие тесты провести, чтобы убедиться в надёжности решения?

 , , , ,

Netman
()

Где почитать про маршрутизацию и файерволы?

Форум — Admin

Всем привет.

Я осваиваю настройку сетей на примере OpenWRT и Open vSwitch. Уже научился строить SSH тоннели и организовывать VPN на WireGuard и OpenVPN. Примитивные успехи, конечно.

Основная проблема у меня сейчас в том, что я умею работать только с один интерфейсом / одной сетью. А пробрасывать трафик из одной сети с одного интерфейсва в другую сеть не понимаю как.

Например, я не понимаю какие различия между device, port (имеется в виду порт на железе, а не IP-порт), network и zone.

Другой пример. У меня есть роутер на OpenWRT с двумя портами Eth0 и Eth1. OpenWRT сам назначил на порт Eth0 две сети «lan» и «br-lan»(кстаи, зачем он?), а на Eth1 - «wan». И по умолчанию в настройках firewall есть связность между «lan» и «wan». При этом «lan» - это и interface, и zone. С «wan» ситуация аналогичная. Я, конечно, вижу, что связность между «wan» и «lan» есть в настройках /etc/config/firewall. Там указаны reject или accept для разных направлений трафика, а также указан сети(?) source и/или destination. Проблемы начинаются далее. Когда я устанавливаю VPN соединение между OpenWRT(client) и внешним сервисом VPN, появляется новый девайс «tun». При этом новый интерфейс и/или зона не появляется. То есть я должен создать новую зону, ассоциировать с ней VPN подключение в виде device или interface и проключить трафик из «lan» в «vpn» вместо «wan». А как это сделать? И как протестировать утечку трафика вне VPN-подключения?

Короче говоря, подскажите, где мне набраться ума разума в маршрутизации, чтобы понимать как эти ваши файерволы работают.

PS. Для конкретики приведу текущую задачу. Хочу чтобы трафик от конкретного IP-адреса, подключённого к OpenWRT шёл только в SSH-туннель построенный между OpenWRT и удалённым Debian-сервером. А далее трафик шёл только в конкретном VPN-подключении и вылезал в Интернет уже после VPN-а. А если какое-то звено цепи не работает, хочу чтобы трафик резался и никуда не шёл.

 , , ,

Netman
()

RSS подписка на новые темы