
Я хотел бы настроить некоторые службы Linux на нестандартные порты. Какой максимальный допустимый номер порта?
решение1
(2^16)-1, или 0-65,535 (-1 означает, что порт 0 зарезервирован и недоступен). (отредактировано, потому что o_O Tync напомнил мне, что мы не можем использовать порт 0, а Стив Фолли напомнил мне, что вы просили самый большой порт, а не количество портов)
Но вы, вероятно, идете в неправильном направлении. Есть люди, которые спорят за и против нестандартных портов. Я говорю, что они не имеют значения, за исключением самого обычного сканера, а самого обычного сканера можно держать на расстоянии, используя современное программное обеспечение и надлежащие методы брандмауэра, а также надежные пароли. Другими словами, лучшие практики безопасности.
решение2
1-65535 доступны, а порты в диапазоне 1-1023 являютсяпривилегированный: для прослушивания этих портов приложение должно быть запущено от имени пользователя root.
решение3
Хотя 1-65535 являются легитимными портами TCP, и верно, что 1-1023 предназначены для известных служб портов. Вы можете столкнуться со случайными проблемами с вашими собственными службами, если они запускаются после установки эфемерного порта. Для тех, кто может не знать, эфемерные порты - это те, которые подключены локально для удаленных конечных точек (или что-то в этом роде). Так что если вы пишете службу TCP, которая прослушивает порт 20001. У вас может быть все хорошо сегодня... и завтра. Но однажды ваша служба может запуститься и попытаться привязаться к 20001, и это не удастся, потому что он был принят как эфемерный порт. Есть решение. Вы должны попросить своего администратора или себя изменить политику диапазона эфемерных портов системы на вашем сервере. В системах Linux это делается в два этапа:
- Динамично
- Постоянно
Оба шага должны быть выполнены, если вы не планируете перезагрузку (в этом случае шаг Dynamic не нужен). Чтобы установить диапазон от 40000 до 65535, выполните следующие действия:
Динамичный
echo 40000 65535 > /proc/sys/net/ipv4/ip_local_port_range
или
sysctl -w net.ipv4.ip_local_port_range="40000 65535"
Постоянный
Добавьте следующее в /etc/sysctl.conf:
net.ipv4.ip_local_port_range = 40000 65535
Чтобы прочитать текущую настройку или подтвердить изменение:
/sbin/sysctl net.ipv4.ip_local_port_range
Вывод будет примерно таким:
net.ipv4.ip_local_port_range = 9000 65500
Убедитесь, что вы понимаете цель вашего сервера. Слишком большое уменьшение диапазона может привести к другим проблемам.
Удачного кодирования! (или чем бы вы ни занимались)
решение4
Все, кто говорит 65 535, правы.
ОДНАКО!!! с помощью некоторых осторожных манипуляций с настраиваемыми параметрами ядра вы можете заставить Linux использовать больше. Некоторые коммерческие системы UNIX будут запускать службы на технически недопустимых портах без проблем. Очень простой способ обойти некоторые сети, защищенные брандмауэром/ACL! :P
Я использовал второй сервер telnet на tcp/99999, и он всегда работал для меня. Даже в случаях, когда типичные привилегированные порты (1-1024) блокируются ACL или сетевым брандмауэром.
Почти никто не сканирует порты, прослушивающие выше 65 535. Большая часть сетевого оборудования не может проверять ничего за пределами определенного диапазона (0-65 535) и слепо перенаправляет трафик, если только правило не предписывает делать иначе. Теперь, когда у нас есть 64-битные системы, верхний диапазон технически является 64-битными границами. Это не означает, что сети будут пропускать трафик, но обычно они пропускают все, что не запрещено правилом.