Вопрос или проблема
Я изучаю iptables, файрволы, маршрутизацию и так далее. Я использую Linux, Centos7, и настроил локальную переадресацию порта на localhost с помощью:
firewall-cmd --add-forward-port=port=2023:proto=tcp:toport=22
Это работает, как ожидалось, при попытке с другой машины. Локально не видно. Пробовал с netstat и ss, nmap lsof и nc. Ничего, все они “видят” все, кроме 2023, даже если в настоящий момент выполняется переадресация сессии ssh.
После долгих поисков здесь, на stackexchange, я нашел способ сделать его видимым локально (от iptables: перенаправление локального запроса с использованием NAT), но на самом деле это не решение, это просто дало мне понять, почему он не виден локально, но я действительно хотел бы знать, существует ли способ проверить это локально. Или единственный вариант — это удаленное подключение?
Спасибо 🙂
Правка:
Настройка тестовой машины проста, просто выполните строку, содержащую firewall-cmd, которую я написал в этом вопросе. Других правил не добавлено. Затем протестируйте его с помощью ssh (или nmap) извне: работает. Проверьте его с самого localhost: и ssh, и nmap выдают отказ в соединении.
Правка2:
Извините, я неправильно написал строку firewall-cmd с :toaddr=127.0.0.1 в конце, исправил.
На локальной машине используйте IP интерфейса в вашем тесте. Например, если IP – 10.10.10.10
telnet 10.10.10.10 2023
.
Ответ или решение
Чтобы проверить перенаправление порта с localhost на localhost в системе CentOS 7, вам необходимо понять несколько ключевых моментов, касающихся работы с iptables, firewalld и сетевой маршрутизацией. Давайте разберёмся, как можно решить эту задачу, шаг за шагом.
Описание проблемы
Вы настроили перенаправление порта с помощью команды:
firewall-cmd --add-forward-port=port=2023:proto=tcp:toport=22
Это позволяет перенаправлять трафик, поступающий на порт 2023, на стандартный SSH порт 22. Однако, вы столкнулись с трудностями при проверке этого перенаправления локально, используя такие утилиты как netstat
, nmap
, ss
, lsof
и nc
.
Почему локальная проверка не работает
Обычно проблема заключается в том, что правила перенаправления применяются на уровне маршрутизации, которые не обрабатывают пакеты, проходящие через интерфейс loopback (127.0.0.1). Маршруты для внутренних пакетов в основном остаются нетронутыми из-за особенностей работы ядра Linux, где не происходит NAT (Network Address Translation) для таких пакетов.
Решение проблемы
-
Проверка локальным интерфейсом:
Попробуйте использовать IP-адрес вашего локального сетевого интерфейса вместо 127.0.0.1. Например, если ваш интерфейс имеет IP 10.10.10.10, используйте следующую команду:telnet 10.10.10.10 2023
Этот метод может показать разные результаты, так как вы обращаетесь к физическому интерфейсу сети, минуя loopback.
-
Используйте
iptables
для трансляции локальных пакетов:
Чтобы сделать перенаправление видимым на локальном узле, необходимо модифицировать правила NAT в iptables:iptables -t nat -A OUTPUT -o lo -p tcp --dport 2023 -j REDIRECT --to-ports 22
Это правило изменит поведение пакетов, выходящих из
127.0.0.1
к127.0.0.1
на порт 2023, направляя их на порт 22. -
Проверка текущих правил:
Убедитесь, что ваше правило успешно добавлено в firewalld, и оно активно:firewall-cmd --list-all
Эта команда покажет настройку и активные правила, примененные вашим файрволом.
SEO Оптимизация
SEO здесь может сыграть ключевую роль в формировании заголовков и метаописаний, что поможет другим специалистам быстро находить аналогичные решения через поисковые системы. Используйте ключевые слова как "проверка перенаправления порта", "Linux localhost port forwarding", "тестирование iptables на CentOS 7".
Заключение
Настройка и проверка перенаправления порта на Linux платформе требует понимания специфики работы сетевых протоколов и особенностей системы. Использование вышеописанных шагов поможет вам проверить и удостовериться в правильной работе настройки, сохраняя при этом гибкость и безопасность вашей сетевой конфигурации.