Нет профиля приложения UFW? Он описывает порты, а не службы
Профиль приложения UFW — это именованный список портов и протоколов, а не служба. Прочитайте app info, сравните реального слушателя и сохраните путь назад перед перезагрузкой.
UFW сообщает, что не находит профиль, соответствующий OpenSSH, и поиск причины ведёт прямо к серверу SSH. Это неверное направление: сообщение касается именованного определения межсетевого экрана и ничего не говорит о том, установлен ли sshd, запущен или слушает. Профиль приложения UFW — это список портов и протоколов с меткой. Чтение определения занимает одну команду и обычно завершает расследование.
Шаг 1: перечислите имена, которые UFW действительно знает
Спросите межсетевой экран, какие имена у него есть, прежде чем просить разрешить одно из них. Список берётся из профилей, установленных на этой машине, поэтому отсутствующее имя — факт об этой системе, а не о программном обеспечении, которое вы пытались защитить. Если имя есть, ошибка возникла из-за опечатки или устаревшего псевдонима в истории вашей оболочки.
ufw app list
ufw app info OpenSSH
Список короток при стандартной установке, и имена не являются именами пакетов. Профиль с именем OpenSSH может отсутствовать, хотя пакет openssh-server установлен, и обратное тоже возможно. Используйте точное имя, которое печатает список; имя VPN-профиля или ярлык рабочего стола с похожим написанием не является профилем приложения UFW. Если нужного имени нет, это и есть вывод, а следующий шаг — посмотреть, что должно его предоставлять.
Шаг 2: читайте определение, а не метку
Профиль — это файл в стиле INI в /etc/ufw/applications.d, с именем, заголовком, описанием и полем портов. Поле портов может перечислять несколько портов и транспортов, поэтому метка говорит меньше, чем определение. Руководство UFW описывает эти поля и операцию обновления приложений. Читайте файл, а не предполагайте, что имя означает один знакомый порт.
cat /etc/ufw/applications.d/openssh-server
ufw app info OpenSSH
Определение, содержащее 22/tcp, описывает TCP-порт 22 и ничего больше. Оно не доказывает, что демон на этой машине слушает там, и не охватывает второй порт, добавленный позже. Если демон работает в другом месте, профиль — это неверное разрешение, даже если его имя совпадает с продуктом. Сравните слушателя с определением, прежде чем разрешать любой из них.
ss -ltnp 'sport = :22'
Остановитесь, если определение и слушатель расходятся. Разрешение профиля, который называет порт, где никто не слушает, создаёт правило, которое выглядит как прогресс и ничего не защищает.
Шаг 3: отделите профиль от работающей службы
Разрешение именованного профиля не устанавливает, не запускает и не настраивает службу, а работающей службе не нужен упакованный профиль, чтобы быть доступной. Это отдельные решения, принадлежащие разным инструментам: менеджеру пакетов, менеджеру служб и межсетевому экрану. Отношение к ним как к одному — это то, как люди устанавливают ненужный сервер, чтобы появилось символическое имя.
Для VPN-сервера разделение продолжается после разрешения внешнего слушателя. Разрешение для порта зашифрованного транспорта не включает пересылку в ядре, не добавляет правило NAT и не даёт пользователям туннеля доступ к LAN. Каждое из этого — отдельная политика со своим обзором. Профиль, названный в честь продукта VPN, описывает только перечисленные порты, а остальную часть конфигурации сервера по-прежнему писать вам.
Если профиль отсутствует и он нужен, проверенное явное правило порта или локальный профиль в applications.d — оба законны. Устанавливать пакет, который вам не нужен, — нет.
Шаг 4: сохраните путь назад перед перезагрузкой межсетевого экрана
Перед любым изменением правила убедитесь, что у вас есть второй путь в машину: консоль, адрес вне полосы или запланированный откат. Затем прочитайте набор правил и политику по умолчанию, потому что отказ по умолчанию без правила SSH — классический способ заблокировать себя снаружи во время тестирования. Меняйте по одному правилу за раз и читайте подтверждение, которое печатает UFW. Сохранённое правило, активное правило и доступная служба — это три разных наблюдения.
ufw status verbose
ufw allow 22/tcp
ufw app update OpenSSH
После изменения проверьте разрешённое соединение и один путь, который должен остаться запрещённым. Тест отказа так же важен, как тест разрешения, потому что правило шире задуманного проходит первый тест и проваливает второй. Запишите имя профиля, порты, которые он содержал, и слушателя, с которым вы сверялись.
Контрольный список заканчивается, когда имя существует или намеренно заменено, определение соответствует реальному слушателю, служба управляется отдельно, и вы проверили как разрешённый, так и запрещённый путь, имея под рукой путь восстановления. Имя в списке не является ни одним из этого.