Как закрыть все порты кроме нужных
Свежий сервер по умолчанию слушает больше, чем нужно, и каждый открытый порт — это дверь, которую кто-то попробует. Правильная эксплуатация сервера начинается с фаервола: закрыть всё и открыть только необходимое. Ниже разберём по шагам, как закрыть все порты кроме нужных с помощью ufw, задать безопасную политику по умолчанию и проверить результат — с готовыми командами и защитой от главной ошибки, когда админ запирает сам себя.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Зачем закрывать порты
Каждый открытый порт, на котором что-то слушает, — потенциальная точка входа. Базы данных, панели управления, кеши, отладочные интерфейсы часто по умолчанию доступны со всего интернета, хотя должны быть видны только локально или из доверенной сети. Боты круглосуточно сканируют диапазоны IP в поисках открытых портов и известных уязвимостей: незакрытый порт базы данных или административной панели находят за минуты и начинают перебирать пароли или эксплуатировать дыры.
Принцип минимальных прав здесь работает так: сервер должен принимать соединения только на те порты, которые реально нужны для его работы, а всё остальное — молча отбрасывать. Для типового веб-сервера это порты HTTP и HTTPS для сайта и SSH для управления. База данных, если она обслуживает приложение на этом же сервере, вообще не должна торчать наружу — только слушать локальный интерфейс. Такой подход резко сокращает поверхность атаки и снимает большую часть автоматических угроз.
Полезно понимать разницу между двумя уровнями защиты — облачным фаерволом провайдера и фаерволом внутри сервера. Многие хостинги дают сетевой фаервол (security groups) в панели управления, который фильтрует трафик ещё до того, как он дойдёт до вашей машины. Это удобно и надёжно, но у него есть слабое место: если вы настроили только его и забыли про фаервол на самом сервере, то при ошибке в панели или запуске сервиса, о котором панель не знает, дыра открывается незаметно. Правильнее держать оба уровня: облачный фаервол как первый рубеж и ufw на самом сервере как второй. Они не мешают друг другу, а дополняют — трафик должен пройти оба фильтра. Такая двойная защита особенно ценна, когда на сервере работает несколько человек и не все помнят, что где открыто: даже если кто-то по ошибке откроет порт в одном месте, второй уровень его прикроет.
Смотрим, что открыто сейчас
Прежде чем закрывать, поймите, что сервер слушает в данный момент. Команда покажет все слушающие порты и процессы за ними:
ss -tulpn
Вы увидите список портов с привязкой к интерфейсам. Обратите внимание на разницу: если сервис слушает на 127.0.0.1, он доступен только локально — это безопасно. Если на 0.0.0.0 или на внешнем IP — он открыт всему интернету, и это кандидат либо на закрытие фаерволом, либо на перенастройку, чтобы слушал только локальный интерфейс. Частая находка на этом шаге — база данных или Redis, торчащие наружу без всякой необходимости. Идеально закрыть их на двух уровнях: и в конфиге самого сервиса заставить слушать localhost, и прикрыть фаерволом.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSНастройка ufw: закрываем всё, открываем нужное
ufw — простая надстройка над iptables, которая делает управление фаерволом понятным. Установите его, если не установлен, и первым делом задайте политику по умолчанию: запретить всё входящее, разрешить всё исходящее.
apt install ufw -y
ufw default deny incoming
ufw default allow outgoing
Это фундамент: теперь любое входящее соединение блокируется, пока вы явно не разрешите его. Дальше откройте только нужное. Критически важно первым делом разрешить SSH, иначе вы отрежете себе доступ к серверу:
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
Здесь мы открыли SSH для управления и HTTP с HTTPS для сайта. Всё остальное остаётся закрытым политикой по умолчанию. Если SSH у вас на нестандартном порту, открывайте именно его номер, а не 22.
Включаем фаервол, не заперев себя
Самая болезненная ошибка — включить фаервол, забыв разрешить SSH, и потерять доступ к серверу. Поэтому дважды проверьте, что правило для вашего порта SSH добавлено, и только потом включайте фаервол:
ufw status numbered
ufw enable
Первая команда показывает список правил — убедитесь, что порт SSH в нём есть. При включении ufw предупредит, что операция может разорвать текущие соединения, но добавленное правило SSH сохранит ваш доступ. Если вы работаете на удалённом сервере и не уверены, подстрахуйтесь: многие настраивают отложенную задачу, которая через несколько минут отключит фаервол, и отменяют её только после того, как убедились, что доступ жив. У некоторых провайдеров есть аварийная консоль через панель — это ещё одна страховка на случай, если что-то пойдёт не так.
Ограничиваем доступ по адресам
Открыть порт всему миру нужно не всегда. Административные интерфейсы, панели и тем более базы данных лучше открывать только для доверенных адресов. ufw позволяет разрешить порт не для всех, а для конкретного IP или подсети:
ufw allow from ВАШ_IP to any port 22 proto tcp
Такое правило разрешает SSH только с вашего адреса, а для остальных порт остаётся закрытым. Это заметно усиливает защиту: даже если пароль или ключ утекут, подключиться можно будет только из доверенной сети. Для баз данных, которые всё же должны быть доступны с другого сервера, открывайте порт строго для его IP, а не для всего интернета. Чем уже вы очерчиваете доступ, тем меньше поверхность атаки.
Проверка и поддержание
После настройки проверьте результат не только изнутри, но и снаружи. Изнутри посмотрите активные правила командой ufw status, а снаружи — просканируйте свой сервер с другого хоста, чтобы убедиться, что закрытые порты действительно не отвечают. Полезно периодически повторять проверку слушающих портов через ss -tulpn: новые сервисы имеют привычку открывать порты, о которых вы не просили, и регулярный аудит ловит это вовремя. Закрытие лишних портов — не разовая настройка, а часть постоянной эксплуатации сервера: каждый раз, ставя новый сервис, проверяйте, не открыл ли он наружу то, что должно оставаться локальным. Хороший фаервол в связке с входом по SSH-ключу и свежими обновлениями закрывает подавляющее большинство автоматических атак.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
С чего начать настройку фаервола?
С команды ss -tulpn, чтобы увидеть все открытые порты, и политики ufw default deny incoming, которая закрывает всё входящее по умолчанию.
Как не потерять доступ при включении фаервола?
Первым делом разрешить порт SSH и проверить это через ufw status numbered до ufw enable. На удалённом сервере подстрахуйтесь отложенным отключением фаервола.
Нужно ли открывать порт базы данных?
Обычно нет: если база обслуживает приложение на том же сервере, она должна слушать только localhost. Наружу открывайте лишь для конкретного доверенного IP.
Достаточно ли одного фаервола для безопасности?
Он закрывает поверхность атаки, но работает в связке: вход по SSH-ключу, свежие обновления и минимум открытых сервисов вместе дают надёжную защиту.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.