6

У меня есть сервер, который запускает несколько служб. Однако из соображений безопасности я настроил сервер так, чтобы ничего, кроме SSH, не было доступно извне.

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

Есть ли способ сделать это?

Я использую Arch Linux на сервере и ufw для управления брандмауэром.

2 ответа2

1

Вы можете поместить команды в ~/.bashrc , все, что там выполняется, каждый раз, когда пользователь входит в систему.

Если ваши команды выполняются только при входе через ssh (а не при физическом входе), вы можете проверить наличие переменной среды SSH_CONNECTION .

0

Я написал решение для этого. Это не идеально, и улучшения приветствуются. В частности, я думаю, что ~/.bash_logout не вызывается , если соединение умирает, но я хочу, чтобы в этих случаях и сам брандмауэр закрывался.

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

Затем в ~/.bashrc:

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
echo "=> Opening the firewall for $ip..."
sudo ufw allow from $ip
echo "=> Done."

В ~/.bash_logout:

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
echo "=> Closing the firewall for $ip..."
sudo ufw delete allow from $ip
echo "=> Bye."

Опять же, однако, это только повторно закроет порты, если вы правильно завершите сеанс. Если кто-то знает, как закрыть его всякий раз, когда соединение завершается / умирает / что угодно, отредактируйте этот ответ в своем решении.

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