- SSH-туннели — пробрасываем порт
- Как открыть порт Ubuntu
- Просмотр правил Iptables
- Как открыть порт iptables с нуля
- Как открыть порт, если уже есть правила
- Выводы
- Как изменить порт SSH в Linux
- Изменение порта SSH
- 1. Выбор нового номера порта
- 2. Настройка брандмауэра
- 3. Настройка SSH
- Использование нового порта SSH
- Выводы
- Статья Как открыть порт ssh с помощью ufw на Ubuntu/Debian Linux
- linux-notes.org
- Открыть порт ssh по стуку с IPtables в Unix/Linux
SSH-туннели — пробрасываем порт
Не всегда есть возможность, да и не всегда надо, строить полноценный туннель с интерфейсной парой адресов. Иногда нам нужно лишь «прокинуть» вполне определённые порты.
Тут важно понимать, что туннель можно организовать как изнутри сети, к ресурсам которой вы хотите получить доступ, на внешний ssh-сервер. Также можно организовать туннель с хоста в Интернете на пограничный ssh-сервер сети, чтобы получить доступ к внутренним ресурсам.
Итак. По-порядку.
Строим туннель из сети в мир.
теперь введя на хосте 99.88.77.66:
мы попадём на хост 10.11.12.13.
Таким-же образом можно получить доступ к любому другому ресурсу, например:
Введя на хосте 99.88.77.66:
получим дамп web-ресурса на 10.11.12.14.
Строим туннель из мира в сеть.
Аналогично, вводим на своём хосте:
и получаем доступ к web-ресурсу узла 192.168.0.10, который находится за хостом 88.77.66.55.
Поддерживаем туннели в поднятом состоянии
Ни для кого не секрет, что связь иногда обрывается, туннели при этом будут отваливаться по таймауту.
Чтобы не утруждать себя дополнительным монотонным вбиванием команды на поднятие туннеля и мониторингом этого процесса, автоматизируем его. Смело вводим:
и создаём расписание примерно следующего вида:
Сохраняемся. Проверяем по
что расписание принято.
Это лишь ещё один момент особой админской магии… Надеюсь, что лишних вопросов не должно водникнуть. С дополнительными опциями ssh можно ознакомиться в
По практическому опыту — cron-задания на перезапуск абсолютно недостаточно.
Разве что соединение абсолютно стабильно. В реальной жизни встречается в 0% случаев.
Даже соединённые напрямую кабелем две сетевые карты легко могут потерять n-ное количество пакетов и tcp-соединение «упадёт».
Клиент и сервер будут пребывать в святой уверенности, что всё в порядке, просто вторая сторона ничего не передаёт.
Нужен keepalive.
Примерно так:
Интервал и счётчик — по вкусу.
Добавлять их надо либо в /etc/ssh_config, либо в
/.ssh/config, либо прямо в команде через опцию -o.
В принципе, судя по man ssh_config, первую из опций можно и опустить. но, на всякий случай, пусть будет.
Источник
Как открыть порт Ubuntu
Правильная настройка брандмауэра имеет очень важное значение для безопасности вашего сервера или даже домашнего компьютера, подключенного к сети интернет.
На промышленных серверах брандмауэр запрещает подключение к большинству из них, оставляя только необходимые. В этой статье мы рассмотрим как открыть порт iptables и закрыть все остальные. Хотя в большинстве дистрибутивов существуют специальные утилиты для настройки брандмауэра,мы будем использовать iptables, чтобы вы смогли понять процесс на самом низком уровне.
Просмотр правил Iptables
Прежде чем что-либо менять, нужно понять каким образом система работает сейчас. Возможно, для лучшего понимания материала вам сначала стоит ознакомиться со статьей iptables для начинающих. Для просмотра текущих правил iptables выполните такую команду:
sudo iptables -L
Здесь мы видим три цепочки OUTPUT, INPUT и FORWARD, за открытые порты отвечает цепочка INPUT, именно через нее проходят все входящие пакеты. Сейчас политика по умолчанию — ACCEPT, это значит, что подключение ко всем портам разрешено. Здесь нам нужно настроить все самим и это будет проще если бы какая-либо программа уже создала свои настройки, но этот вариант мы тоже рассмотрим ниже.
Как открыть порт iptables с нуля
Если в iptables уже есть какие-либо правила и вы хотите их удалить просто выполните:
sudo iptables -F
Теперь нам нужно добавить правила, которые разрешат обмен данными между любыми портами на локальном интерфейсе lo, это нужно чтобы не вызвать системных ошибок:
sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
Если кратко, то здесь добавляется два правила в цепочки INPUT и OUTPUT, разрешающие отправку и прием данных из интерфейса lo. Еще одно интересное и важное правило, которое многие упускают. Нужно запрещать только новые соединения, а пакеты для уже открытых нужно разрешать. Иначе получится, что мы отправляем серверу запрос (цепочка OUTPUT открыта), соединение открывается, но сервер не может нам ответить, потому что все пакеты отбрасываются в INPUT. Поэтому нужно разрешить все пакеты с состоянием ESTABLISHED и RELATED. Для этого есть модуль state:
sudo iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT
Теперь самое интересное, рассмотрим как открыть порт 22 и 80 для протокола TCP:
sudo iptables -A INPUT -p tcp —dport 22 -j ACCEPT
$ sudo iptables -A INPUT -p tcp —dport 80 -j ACCEPT
Опция -A сообщает, что нужно добавить пакет в конец цепочки, -p — указывает протокол, а —dport или Destination Port (порт назначения) указывает из какого порта пакеты нужно принимать. Теперь вы можете снова посмотреть список правил:
sudo iptables -L
Вывод очень упрощен и понять здесь что-то сложно, например, может показаться что у нас два одинаковых правила, хотя это не так. Чтобы отобразить более подробную информацию используйте:
sudo iptables -nvL
Чтобы все это в действительности заработало, осталось поменять политику по умолчанию на DROP:
sudo iptables -P INPUT DROP
Все, можете проверять. Все пользователи смогут получить доступ к портам 22 и 80, а к остальным доступа не будет.
Как открыть порт, если уже есть правила
Довольно часто возникает ситуация, когда вам нужно открыть порт Linux, а iptables уже содержит набор правил, запрещающих доступ к портам. Иногда вы добавляете правило, все как нужно, с помощью описанной выше команды, но не замечаете никакого эффекта. Рассмотрим почему так происходит.
Допустим, программа или предыдущий администратор для надежности добавили в конец цепочки правило такого вида:
sudo iptables -A INPUT -j DROP
Как вы понимаете, это значит, что все пакеты, которые до него доходят, будут отброшены. Ваше правило добавляется в конец цепочки, уже после этого. Естественно, что к нему уже никакие пакеты не дойдут, потому что они были отброшены ранее. Чтобы обойти эту проблему нужно использовать опцию -I (INSERT) вместо -A (ADD), она добавляет правило в начало цепочки и все будет работать. Осталось открыть порты Linux:
sudo iptables -I INPUT -p tcp —dport 1924 -j ACCEPT
Теперь смотрим список правил и проверяем:
sudo iptables -L
Выводы
В этой статье мы рассмотрели как открыть порт Ubuntu 16.04 или в любом другом Linux дистрибутиве, а также закрыть ненужные порты. Это повысит безопасность вашей системы. Только на первый взгляд кажется, что с iptables сложно работать. Если разобраться, то все будет достаточно просто. Надеюсь, эта информация была полезной для вас.
Источник
Как изменить порт SSH в Linux
По умолчанию SSH прослушивает порт 22. Изменение порта SSH по умолчанию добавляет дополнительный уровень безопасности к вашему серверу, снижая риск автоматических атак.
В этом руководстве объясняется, как изменить порт SSH по умолчанию в Linux. Мы также покажем вам, как настроить брандмауэр, чтобы разрешить доступ к новому порту SSH.
Изменение порта SSH
Изменить SSH-порт изображения — простая задача. Все, что вам нужно сделать, это отредактировать файл конфигурации SSH и перезапустить службу.
В следующих разделах объясняется, как изменить порт SSH в системе Linux.
1. Выбор нового номера порта
В Linux номера портов ниже 1024 зарезервированы для хорошо известных служб и могут быть связаны только с пользователем root. Хотя вы можете использовать порт в диапазоне 1-1024 для службы SSH, чтобы избежать проблем с распределением портов в будущем, рекомендуется выбрать порт выше 1024.
В этом примере изменится порт SSH на 5522, вы можете выбрать любой порт, который хотите.
2. Настройка брандмауэра
Перед изменением порта SSH вам необходимо настроить брандмауэр, чтобы разрешить трафик на новый порт SSH.
Если вы используете UFW, инструмент настройки брандмауэра по умолчанию для Ubuntu, выполните следующую команду, чтобы открыть новый порт SSH:
В CentOS инструментом управления брандмауэром по умолчанию является FirewallD. Чтобы открыть новый порт, выполните:
Пользователям CentOS также необходимо настроить правила SELinux:
Если вы используете iptables в качестве брандмауэра, чтобы открыть новый порт, запустите:
3. Настройка SSH
Откройте файл конфигурации SSH /etc/ssh/sshd_config текстовом редакторе:
Найдите строку, начинающуюся с Port 22 . В большинстве случаев эта строка начинается с символа решетки ( # ). Удалите хэш # и введите новый номер порта SSH:
Будьте особенно осторожны при изменении файла конфигурации SSH. Неправильная конфигурация может привести к сбою запуска службы SSH.
После этого сохраните файл и перезапустите службу SSH, чтобы изменения вступили в силу:
В CentOS служба ssh называется sshd :
Чтобы убедиться, что демон SSH прослушивает новый порт 5522, введите:
Результат должен выглядеть примерно так:
Использование нового порта SSH
Чтобы указать порт, вызовите команду ssh за которой следует параметр -p
Если вы регулярно подключаетесь к нескольким системам, вы можете упростить рабочий процесс, указав все свои подключения в файле конфигурации SSH .
Выводы
В этом руководстве вы узнали, как изменить порт SSH на сервере Linux. Вам также следует настроить аутентификацию на основе ключей SSH и подключаться к серверам Linux без ввода пароля.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Источник
Статья Как открыть порт ssh с помощью ufw на Ubuntu/Debian Linux
Как разрешить входящие соединения SSH с определенного IP-адреса или подсети на сервере Ubuntu или Debian Linux с помощью ufw?
UFW является аббревиатурой для брандмауэра. Он используется для управления брандмауэром Linux и предназначен для обеспечения простого в использовании интерфейса для пользователя. В этом руководстве вы узнаете, как использовать UFW интерфейс для iptables для открытия входящего соединения SSH на сервере Ubuntu Linux 16.04 LTS или Debian Linux.
Если вы запустили ssh на TCP порту # 2222, введите:
Как разрешить входящий SSH с определенного IP-адреса
Синтаксис выглядит следующим образом:
Чтобы разрешить входящие SSH-соединения с конкретного IP-адреса с именем 202.54.1.1, введите:
Как разрешить входящий SSH из определенных подсетей
Синтаксис выглядит следующим образом:
Чтобы разрешить входящие SSH-соединения из конкретной IP-подсети с именем 202.54.1.1.29, введите:
Чтобы разрешить входящие SSH-соединения из конкретной подсети IP с 10.8.0.0/24 по 10.8.0.1 и tcp-портом 22, введите:
Ограничить входящий SSH-порт для всех
Откройте входящий SSH, но запретите подключения с IP-адреса, который пытался инициировать 6 или более соединений в течение последних 30 секунд. Синтаксис выглядит следующим образом:
Как проверить статус ufw
Синтаксис выглядит следующим образом:
Примеры возможных выводов данных:
если ufw не был включен, выход будет следующим:
Чтобы включить UFW с набором правил по умолчанию, включая открытый SSH-порт, введите:
Источник
linux-notes.org
Одно из очень простых решений — открывать ssh порт ( стандартный 22-й порт) после того как постучишься в заданный, «высокий» порт.
Открыть порт ssh по стуку с IPtables в Unix/Linux
Есть несколько способов сделать стук, чтобы открылся нужный порт. Сейчас я расскажу о нескольких из них.
-===Способ 1 (самый простой), стук на 1 порт===-
И так, я сейчас выполню ряд действий с IPtables. И так, первое что необходимо сделать — это создать новую цепочку чтобы выполнять проверку на попытки соединенится на защищаемый порт:
Далее, чтобы не ломились на определенный порт, я сейчас задам правило. Суть заключается в следующем, если кто-то будет производить стук на порт более 2-х раз за одну минуту ( 60 секунд), попадает в бан:
Следующим правилом создается исключение, которое говорит
Если производился стук в нужный порт ( за последние 10 секунд), то разрешаем соединение:
Очистим INPUT цепочку:
Разрешаем прохождение пакетов на установленные соединения:
Все попытки открыть новое SSH соединение, будут проверяться:
Сейчас, собственно прописываем правило для стука на заданный порт:
Закрываем соседние порты ( чтобы не стучались):
Для удобства использования, я создал баш скрипт:
И прописал в него:
PS: Может понадобится выставить права на исполнение ( chmod +x knock.sh).
Выполним проверку iptables:
Реализация довольно простая, но на практике — выполняем защиту: После стука на 27520 порт, будет производиться открытие SSH порта ( в этом примере, 22-й порт используется). Если за минуту будет произведено более 1 стука, порт не будет открыт и вы получите бан. Соседние порты были закрыты с целью защиты и от предотвращения подбора стука.
Чтобы постучаться, используем команду:
PS: Можно заюзать любую другую тулзу — telnet, nc hping.
И после чего, выполняем подключение на сервер:
Так не есть удобно! По этому, создаем баш-скрипт:
И прописывам в него:
Надеюсь описывать не нужно что делает данный скрипт? -Если что, пишите в коменты, отвечу и помогу.
PS: Не забываем выставить права на использование (chmod +x knock_ssh_connection.sh).
А сейчас я, расскажу более сложный стук, с использованием 3-х стуков на разные порты.
-===Способ 2 (более продвинутый, сложный), стук на 3 порта===-
Можно сохранить любое количество отдельных именованных списков. В этом случае будет три:
- KNOCK1 — идентифицирует исходные адреса, которые выполнили первый стук ( но не второй или третий).
- KNOCK2 — определяет адреса источника, которые выполнили первый и второй стук ( но не третий).
- KNOCK3 — идентифицирует исходные адреса, которые выполнили первый, второй и третий стуки ( но еще не установили соединение).
Т.е, чтобы подключиться на 22-й SSH порт, нужно постучаться на 3 разных порта, и после чего выполнить подключение на сервер.
Первым действием служит то, чтобы принимать трафик, который не должен подвергаться портовому удару.
Как и в случае с большинством конфигураций брандмауэра, после принятия решения о принятии первого пакета соединения все дальнейшие пакеты, входящие в одно и то же соединение, должны проходить беспрепятственно:
Обычно, нецелесообразно блокировать трафик с интерфейса loopback, по этому, создаем правило:
Блокировка ICMP-трафика может обеспечить некоторые незначительные преимущества в безопасности, но в большинстве случаев она может причинить больше неудобств, по этому, не блокируем его, а разрешаем прохождение ICMP пакетов:
Разрешаем прохождения трафика на порту 80:
Когда сервер ожидает первый стук:
- Если пакет является первым стуком, то переход в состояние 1 (STATE 1);
- Иначе остаются в состоянии 0 (STATE 0).
- В любом случае, любой полученный трафик должен быть удален.
Когда первый удар получен, и сервер ждет второго удара:
- Если пакет является вторым стуком, то переходом в состояние 2 (STATE 2);
- Если пакет является еще первым стуком, то остаемся в состоянии 1 (STATE 1);
- В противном случае выполните возврат к состоянию 0 (STATE 0).
- Как и выше, любой полученный трафик должен быть удален.
Цепь состояния 0 уже содержит правила обработки первого удара. Повторное использование этой цепочки позволяет избежать указания номера порта в нескольких местах в наборе правил:
Когда первый и второй удары были получены, и сервер ожидает третий стук:
- Если пакет является третьим ударом, то переход в состояние 3 (STATE 3);
- Если пакет является первым стуком, то регресс переходит в состояние 1 (STATE 1);
- В противном случае выполните возврат к состоянию 0 (STATE 0).
- Как и выше, любой полученный трафик должен быть удален.
Когда все три удара были получены, и сервер ожидает соединения:
- Если пакет является началом входящего TCP-соединения с соответствующим портом, то принимайте его;
- Если пакет является первым стуком, то регресс переходит в состояние 1 (STATE 1);
- В противном случае выполните возврат к состоянию 0 (STATE 0).
- Необходимо только принять первый пакет соединения таким образом, потому что уже существует правило принимать трафик, который является частью установленного соединения. Как и выше, другой трафик следует отбросить.
Определив цепи обработчика для всех четырех состояний (3 стука + подключение), необходимо поместить правила во входящую цепочку, чтобы вызвать соответствующую цепочку обработчика. Это можно сделать, проверив, находится ли адрес источника текущего пакета в любом из трех списков:
И так. Я все рассказал, но для удобства, я вынесу все эти правила в отдельный bash-скрипт:
И вставляем его:
Ну, переходим к тестированию!
Теперь чтобы выполнить подключение (я создам скрипт для подключение), открываем файл:
И прописывам в него:
Можно использовать еще один метод подключения:
Используем на здоровье.
Хотел бы отметить следующее, уже имеется готовое решение — knockd. Но о нем я расскажу немного позже.
На этом у меня все, статья «Открыть порт ssh по стуку с IPtables в Unix/Linux» завершена.
Источник