1

У меня есть сервер разработки, на котором я постоянно синхронизирую свой код с помощью rsync. Для большей безопасности dev-сервера я теперь активировал UFW, который, кажется, работает нормально. Проблема в том, что он работает слишком хорошо, потому что теперь я часто получаю сообщение об ошибке при попытке синхронизации:

rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-45/rsync/io.c(453) [sender=2.6.9]

Согласно этому посту, проблема в том, что UFW устанавливает "ограничение скорости" для соединений SSH; если вы попытаетесь подключиться через SSH более X раз за 30 секунд, это на некоторое время отключит вас. Это, конечно, здорово, чтобы блокировать нежелательных людей, но я хочу

  • либо отключите это для определенных IP-адресов,
  • или отключите его для успешных попыток подключения (т. е. разрешите работать только этому ограничению скорости для неудачных попыток).

Пост блога, на который я ссылаюсь выше, не предлагает решения для UFW, а просто заменил UFW на ip-таблицы. Поскольку мне нужно тратить время на программирование, я не хочу тратить время на изучение ip-таблиц. Так что мне было интересно, знает ли кто-нибудь здесь, как заставить это работать с UFW? Все советы приветствуются!

1 ответ1

2

Не решение UFW, но вы можете использовать ssh-мультиплексирование, чтобы уменьшить количество соединений SSH, которые вы делаете. Протокол SSH позволяет нескольким независимым потокам проходить через одно и то же TCP-соединение, а ssh программа OpenSSH позволяет одному процессу использовать мультиплексирование для соединения с соединением, открытым другим процессом.

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

На этой странице есть хорошее описание того, как настроить мультиплексирование и как управлять соединениями. По сути, вы бы добавили что-то подобное в ваш файл ~/.ssh/config :

Host name-of-rsync-server
    ControlPath ~/.ssh/controlmasters/%r@%h:%p
    ControlMaster auto
    ControlPersist 10m

Когда вы запускаете копию ssh или в вашем случае, запускаете rsync который запускает ssh для вас - он будет искать сокет в ControlPath который он может использовать для связи с существующим экземпляром ssh ("управляющий мастер") ) который имеет соединение, открытое к серверу rsync. Если это сработает, два процесса будут работать вместе, чтобы запустить новый сеанс ssh через существующее TCP-соединение. В противном случае экземпляр ssh откроет новое TCP-соединение с сервером rsync и станет управляющим мастером для других экземпляров ssh.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .