Настройте сервер openssh в linux с максимальной безопасностью

Неправильное имя хоста

При выполнении команды подключения по SSH на стороне клиента может быть получена ошибка:

$ ssh [email protected]
ssh: Could not resolve hostname hostname.com: Name or service not known

Это значит, что имя хоста «hostname.com» не может быть сопоставлено с IP-адресом сервера SSH. Зачастую, это связано с работой DNS. В первую очередь, следует убедиться в правильности написания самого имени хоста. Также можно проверить разрешение этого хоста с помощью команды ping или сторонних сервисов. Если же во всех случаях наблюдается та же ошибка, можно попытаться подключиться, используя непосредственно IP-адрес:

$ ssh [email protected]

Проверьте порты прослушивания с помощью netstat

— это инструмент командной строки, который может предоставить информацию о сетевых подключениях.

Чтобы вывести список всех прослушиваемых портов TCP или UDP, включая службы, использующие порты, и статус сокета, используйте следующую команду:

Параметры, используемые в этой команде, имеют следующее значение:

  • — Показать TCP-порты.
  • — Показать порты UDP.
  • — Показывать числовые адреса вместо разрешающих узлов.
  • — Показать только прослушивающие порты.
  • — Показать PID и имя процесса слушателя. Эта информация отображается только в том случае, если вы запускаете команду от имени пользователя root или sudo .

Результат будет выглядеть примерно так:

Важными столбцами в нашем случае являются:

  • — протокол, используемый сокетом.
  • — IP-адрес и номер порта, который прослушивает процесс.
  • — PID и имя процесса.

Если вы хотите отфильтровать результаты, используйте команду . Например, чтобы узнать, какой процесс прослушивает TCP-порт 22, введите:

Выходные данные показывают, что на этой машине порт 22 используется сервером SSH:

Если вывод пуст, это означает, что порт ничего не прослушивает.

Вы также можете фильтровать список по критериям, например, PID, протоколу, состоянию и так далее.

устарел и заменен и , но все же это одна из наиболее часто используемых команд для проверки сетевых подключений.

Перенаправление локального порта

Перенаправление локального порта позволяет вам перенаправить порт на локальном (ssh-клиент) компьютере на порт на удаленном (ssh-сервере), который затем перенаправляется на порт на конечном компьютере.

В этом типе пересылки клиент SSH прослушивает данный порт и туннелирует любое соединение с этим портом на указанный порт на удаленном сервере SSH, который затем подключается к порту на конечном компьютере. Конечный компьютер может быть удаленным SSH-сервером или любым другим компьютером.

Перенаправление локальных портов в основном используется для подключения к удаленной службе во внутренней сети, такой как база данных или сервер VNC.

В Linux, macOS и других системах Unix, чтобы создать переадресацию локального порта, передайте параметр клиенту :

Используются следующие параметры:

  • — IP-адрес и номер порта локального компьютера. Если опущен, клиент ssh привязывается к локальному хосту.
  • — IP или имя хоста и порт конечного компьютера.
  • — удаленный пользователь SSH и IP-адрес сервера.

В качестве можно использовать любой порт с номером больше . Порты с номерами меньше являются привилегированными и могут использоваться только пользователем root. Если ваш SSH-сервер прослушивает порт, отличный от 22 (по умолчанию), используйте параметр .

Имя хоста назначения должно разрешаться с сервера SSH.

Допустим, у вас есть сервер базы данных MySQL, работающий на машине во внутренней (частной) сети, на порте 3306, который доступен с машины , и вы хотите подключиться к базе данных с помощью клиента MySQL на локальном компьютере. сервер. Для этого вы можете перенаправить соединение, используя следующую команду:

После запуска команды вам будет предложено ввести пароль удаленного пользователя SSH. После входа вы войдете на удаленный сервер, и туннель SSH будет установлен. Также рекомендуется настроить аутентификацию на основе ключей SSH и подключаться к серверу без ввода пароля.

Теперь, если вы базы данных на компьютере , соединение будет перенаправлено на MySQL через компьютер который действует как промежуточный сервер.

Вы можете перенаправить несколько портов в несколько пунктов назначения с помощью одной команды ssh. Например, у вас есть другой сервер базы данных MySQL, работающий на компьютере , и вы хотите подключиться к обоим серверам со своего локального клиента, вы должны запустить:

Чтобы подключиться ко второму серверу, вы должны использовать .

Когда целевой хост совпадает с SSH-сервером, вместо указания IP-адреса или имени хоста назначения вы можете использовать .

Допустим, вам нужно подключиться к удаленному компьютеру через VNC, который работает на том же сервере и недоступен извне. Вы бы использовали следующую команду:

Параметр указывает команде работать в фоновом режиме, а не выполнять удаленную команду. Мы используем потому что VNC и SSH-сервер работают на одном хосте.

Если у вас возникли проблемы с настройкой туннелирования, проверьте конфигурацию удаленного SSH-сервера и убедитесь, что для параметра не задано значение . По умолчанию пересылка разрешена.

Изменение порта SSH

Выполните следующие действия, чтобы изменить порт SSH в вашей системе Linux:

1. Выбор нового номера порта

В Linux номера портов ниже 1024 зарезервированы для известных служб и могут быть связаны только с правами root. Хотя вы можете использовать порт в диапазоне 1-1024 для службы SSH, чтобы избежать проблем с распределением портов в будущем, рекомендуется выбирать порт выше 1024.

В этом примере порт SSH изменится на 3452, вы можете выбрать любой порт, который вам нравится.

2. Настройка брандмауэра

Перед изменением порта SSH сначала необходимо настроить брандмауэр, чтобы разрешить трафик на новый порт SSH.

Если вы используете UFW, средство настройки брандмауэра по умолчанию для Ubuntu запускает следующую команду, чтобы открыть новый порт SSH:

sudo ufw allow 3452/tcp

В CentOS инструментом управления брандмауэром по умолчанию является FirewallD. Чтобы открыть новый порт, выполните следующие команды:

sudo firewall-cmd --permanent --zone=public --add-port=3452/tcp
sudo firewall-cmd --reload

Пользователям CentOS также необходимо настроить правила SELinux, чтобы разрешить новый порт SSH:

sudo semanage port -a -t ssh_port_t -p tcp 3452

Если вы используете iptables в качестве брандмауэра, следующая команда откроет новый порт SSH:

sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

3. Редактирование конфигурации SSH

Откройте файл конфигурации SSH /etc/ssh/sshd_config в текстовом редакторе:

sudo nano /etc/ssh/sshd_config

Поиск строки, начинающейся с Port 22. В большинстве случаев эта строка начинается с хеша #. Удалите хэш #и введите новый номер порта SSH, который будет использоваться вместо стандартного порта 22 SSH.

/etc/ssh/sshd_config

Port 3452

Будьте особенно осторожны при изменении файла конфигурации SSH. Неправильная конфигурация может привести к сбою службы SSH.

Когда вы закончите, сохраните файл и перезапустите службу SSH, чтобы применить изменения:

sudo systemctl restart ssh

В CentOS сервис ssh называется sshd:

sudo systemctl restart sshd

Чтобы убедиться, что демон SSH прослушивает новый порт 3452, введите:

ss -an | grep 3452

Вывод должен выглядеть примерно так:

tcp   LISTEN      0        128            0.0.0.0:3452           0.0.0.0:*
tcp   ESTAB       0        0      192.168.121.108:3452     192.168.121.1:57638
tcp   LISTEN      0        128               :3452              :*

Как закрыть порт Iptables

В этой статье я не стану подробно рассматривать все возможности Iptables, виды цепочек и как работает эта служба. Все это мы рассмотрели в статье настройка Iptables для начинающих. Вместо этого, перейдем ближе к делу. Чтобы заблокировать порт нам сначала нужно понять какие порты открыты в Linux и за что они отвечают. Чтобы посмотреть какие порты слушаются локально, можно использовать утилиту netstat:

Для анализа портов, доступных извне используется программа nmap:

Как видите, извне у нас, кроме стандартных портов веб-сервера, доступны mysql, ftp, dns и другие сервисы. Некоторые из них не должны быть доступны публично. Это не критично, но и нежелательно. Мы можем очень просто закрыть такие порты с помощью iptables. Общий синтаксис команды для блокировки порта будет выглядеть вот так:

$ iptables -A INPUT -p tcp —dport номер_порта -j DROP

Например, если мы хотим заблокировать порт iptables mysql, то необходимо выполнить:

Можно закрыть порт для определенного интерфейса, например, eth1:

Или даже для ip и целой подсети. Например, закрыть все подключения к порту 22 SSH кроме IP адреса 1.2.3.4:

Здесь знак восклицания означает инверсию, то есть применить ко всем кроме этого. Можно убрать этот знак и указать только IP, к которым нужно применить запрет. Мы рассмотрели как закрыть порт iptables в цепочке INPUT, которая отвечает за входящие соединения, это более применимо к серверам. Но что, если нужно закрыть подключение к удаленному порту из этого компьютера или нашей сети? Для этого существует цепочка OUTPUT.

Например, заблокируем попытки отправки почты подключением к любой машине по порту 25:

Также, как и раньше, вы можете указать исходящий сетевой интерфейс, только теперь он указывается опцией -o:

После того как вы завершите с настройкой портов нужно сохранить все созданные правила, чтобы они остались активными даже после перезагрузки. Для этого выполните:

Чтобы посмотреть текущие правила для каждой из цепочек выполните:

Такая команда покажет все правила, а если вы хотите только информацию о заблокированных портах, выполните:

Очистить все правила в случае возникновения проблем можно командой:

Проброс портов на роутере

Процедура шаг за шагом:

  • Запустить браузер и написать в поле адреса локальный адрес маршрутизатора. По стандарту это TP-LINK (адрес 192.168.0.1). Имя пользователя «admin», пароль «admin».
  • После введения данных запустится интерфейс роутера.
  • Нужно посмотреть на левое верхнее меню и отыскать там строку «Переадресация» («Retrack» или «Forwarding»). Если на маршрутизаторе есть альтернативный язык, нужно загрузить прошивку с сайта разработчика и установить её.
  • Далее нужно кликнуть по пункту «Сервер» и перейти в меню «Виртуальные серверы» (Virtual Servers).
  • Данная процедура позволит настроить удалённый доступ к любому ПК в локальной сети, причём машина, которая подключена к локальной сети не обязательно должна быть включена в сеть.
  • Далее, ищем кнопку «Добавить» (Add New) и нажимаем её.
  • Затем заполняем поля, чтобы можно было открыть доступ для другого устройства.
  • Порт сервиса (Service Port) можно указать наугад, например 28. Этот порт указывается при заходе на устройство из Интернета. Нужно прописать значение в адресном поле браузера (после двоеточия в хост-адресе).
  • Строку «Внутренний порт» (Internal Port) Оставляем пустой. Стандартное значение — «80». Можно просмотреть его в руководстве пользователя.
  • IP адрес (IP Address) – это внутренний локальный адрес указанного устройства. Его можно либо посмотреть в «Параметрах оборудования» в «Диспетчере устройств Windows».
  • Сохранить изменения при помощи кнопки (Save). Теперь у нас есть новый проброшенный порт, который можно
  • Удалить (Delete) или Изменить (Modify) по желанию. Перезапускать устройство не требуется.
  • Ещё раз нажать кнопку Добавить (Add New) и пробросить ещё один порт. После нажатия клавиши «Сохранить» будет доступно два порта для удаленного доступа.

Другой способ — запустить роутер в режиме «Теста» (зажать кнопку де-активации и функциональную клавишу). Пока гаджет перезагружается, нужно прописать в полу браузера адрес 192.168.0.1. Когда страница откроется, данные загрузятся не сразу.

Для получения данных время от времени обновляйте страницу, пока коннект не будет установлен. На странице имеется 2 кнопки «Return to standart settings» и «Swap port». Первая — возврат к заводским настройкам, вторая — замена портов. Нажатие по второй клавише автоматически создаёт максимум свободных портов, которые можно привязать к устройствам. Выполнить это можно добавив новое соединение.

Перенаправление портов

Перенаправление портов нужно в том случае, если мы хотим «замаскировать» внутреннюю службу, обеспечив к ней доступ извне не по стандартному, а совсем по другому порту.

Пусть — обманный порт на внешнем интерфейсе шлюза, подключившись к которому мы должны попасть на адрес и порт .

Набор правил для iptables будет отличаться несущественно, поэтому приведу сразу пример итогового скрипта для ленивых.

#!/bin/bashEXT_IP="xxx.xxx.xxx.xxx" INT_IP="xxx.xxx.xxx.xxx" EXT_IF=eth0 INT_IF=eth1 FAKE_PORT=$1  LAN_IP=$2     SRV_PORT=$3   iptables -t nat -A PREROUTING -d $EXT_IP -p tcp -m tcp --dport $FAKE_PORT -j DNAT --to-destination $LAN_IP:$SRV_PORTiptables -t nat -A POSTROUTING -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j SNAT --to-source $INT_IPiptables -t nat -A OUTPUT -d $EXT_IP -p tcp -m tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IPiptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT

Какие настройки SSH по умолчанию стоит заменить

К сожалению, интернет-среда буквально пропитана мифами и легендами. После появления очередной «утки» все программисты реагируют, а со временем люди уже забывают, что это всего лишь миф и продолжают делать все по предписанным правилами, которые, возможно, и не правила вовсе. И как же разобраться в этой пучине надуманных законов и ложных советов? Лучший помощник в этом вопросе — это практика и мудрость опытных программистов.

К примеру, вам стоит сразу же отредактировать данные по root-пользователю. Никак нельзя его подпускать к серверу SSH — это чревато необратимыми последствиями. Мало того, что хакер может проникнуть к вам на компьютер через аккаунт суперадминистратора, так и вы сами способны нанести вред серверу SSH, ведь у root неограниченные права. Никак нельзя допускать кому-либо выполнять команды sudo удаленно, а по умолчанию суперадмину дозволено входить на сервер SSH. Так что начните с того, что запретите ему доступ.

Другая ненадуманная настройка, которая стоит по умолчанию, и ее нужно отредактировать, — это способ аутентификации. Никак нельзя оставлять старый метод авторизации путем стандартного ввода пароля. Вы для того и используете протокол SSH, чтобы обезопасить себя от прецедентов взлома паролей. В SSH есть и более умные способы аутентификации. Возьмите тот же открытый ключ — такую систему авторизации практически невозможно взломать, так как вы ничего при входе на сервер вводить не будете — аутентификация пройдет посредством сверки публичного ключа на компьютере. Единственный способ взломать такую защиту — это напрямую вломиться в квартиру пользователя, и завладеть его компьютером с публичным ключом.

Также к немифическим настройкам по умолчанию, которые нужно изменить, относятся параметры сеанса авторизации. Порой хакеры обваливают ботов-взломщиков на сервера, которые пытаются взломать парольную аутентификацию. Они пытаются подобрать пароль для входа классическим рандомным способом выборки. И у них получится, если дать им достаточно время и попыток. Но вам под силу остановить намерения злоумышленников — вы можете изменить количество попыток авторизоваться, длительность сеанса и даже общее число одновременных авторизаций, чтобы боты не пытались взломать сервер сразу через множество клиентов. В этом вопросе все кажется логичным — нет смысла не менять такие конфигурации по умолчанию, так как бездействие может привести к печальным последствиям.

Но стоит ли менять порты? Точнее стоит ли менять стандартный порт, который прописан в SSH по умолчанию? Как известно, это значение равно — Port 22. И по поводу этой строки у многих программистов возникает масса вопросов. Одни уверенно твердят, что нельзя поддавать себя такой опасности и лучше просто заменить порт. Другие говорят, что и Port 22 — это нормально и ничего страшного произойти не может, если игнорировать стандартный порт в настройках.

Как утверждают бывалые пользователи SSH, нет большой разницы, установлен ли у вас Port 22 в файле конфигураций или любой другой порт. Куда важнее то, как вы защищаете ваш сервер SSH. Если это слабая парольная защита, то вполне вероятно, что наступит момент, когда пароль, пусть и зашифрованный, будет перехвачен взломщиками и они свободно проникнут к вам на сервер. И нестандартный порт в таком случае не сыграет защитной роли — он будет не в силах закрыть пробоины, которые вы сами и оставили.

Кроме того, ходят слухи, догадки и даже утверждения о том, что Port 22 вовсе не стоит заменять на другой порт. А все потому, что Port 22 считается универсальным и его уже используют большинство серверов. Если вы сисадмин, и хотите настроить сервер для массового использования, то применение другого значения вместо Port 22 может навредить процессу взаимодействия с клиентом. Ведь все привыкли, что в командах нужно писать именно Port 22. А в случае замены придется каким-то образом сообщать клиентам об этом, что весьма неудобно.

Еще одна неприятность, которая подстерегает тех, кто решился заменить port 22 на другое значение — это возможные сбои в работе. Все-таки, не зря разработчики протокола SSH выбрали именно Port 22 для стандартных настроек. Видимо, этот порт лучше других подходит для обеспечения взаимодействия сервера и клиента, и если заменить port 22 на другой, можно поплатиться потерей функциональности, вплоть до потери возможности работать с сервером. Но если вы все же не боитесь приведенных предостережений, то разберем следующие вопросы: как изменить port 22 и как создать forwarding (переадресацию) портов.

Видео

Онлайн курс «SRE практики и инструменты»

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «SRE практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и Linux. Обучение длится 3 месяц, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

На курсе вы узнаете как:

  • Внедрить SRE практики в своей организации
  • Управлять надежностью, доступностью и эффективностью сервисов
  • Управлять изменениями
  • Осуществлять мониторинг
  • Реагировать на инциденты и производительность
  • Работать со следующим технологическим стеком: Linux, AWS, GCP, Kubernetes, Ansible, Terraform, Prometheus, Go, Python.

Проверьте себя на вступительном тесте и смотрите подробнее программу по .

Примеры

Кросс-платформенный

В macOS, системах BSD, дистрибутивах Linux и Microsoft Windows:

Чтобы отобразить ые tatistics только для TCP или UDP р rotocols введите одну из следующих команд:

Unix-подобный

В Unix-подобных системах:

Чтобы отобразить все порты, открытые процессом с идентификатором pid :

Чтобы постоянно отображать открытые TCP- и UDP-соединения в числовом виде, а также какую программу их использует в Linux:

Окна

В Microsoft Windows:

Чтобы отображать активные TCP-соединения и идентификаторы процессов каждые 5 секунд, введите следующую команду (работает только в системах на базе NT или Windows 2000 с исправлением):

Для отображения активных соединений TCP и идентификаторов процессов с использованием п umerical формы, введите команду следующий (работает на NT систем на базе только или Windows 2000 с исправлением):

* nix

Командование Объяснение
Показывает все сокеты, как прослушивающие, так и не прослушивающие, все протоколы, такие как TCP, UDP и т. Д.
Показывает только TCP-соединения (-au показывает только UDP-соединения)
Показывает все TCP-соединения без разрешения DNS (вместо этого показывать IP-адреса).
Показывает только прослушивающие сокеты.
Также покажите PID и какой программе принадлежит каждый сокет, e добавляет дополнительную информацию, например, о пользователе. Запустите как root, чтобы увидеть все PID.
Показывает сетевую статистику.
Показывает информацию о маршрутизации ядра. Это тот же результат, что и route -e.
Отображает таблицу всех сетевых интерфейсов. Добавьте -e, чтобы получить результат, аналогичный ifconfig.
Постоянно отображает TCP-соединения.
Отображение информации о членстве в группе многоадресной рассылки для IPv4 и IPv6.
Показать все службы, прослушивающие TCP и UDP, все свободные открытые порты на локальном компьютере.
Отображает все «установленные» TCP-соединения.

Подстановочные знаки

Netstat использует звездочку * как подстановочный знак, что означает «любой». Примером может быть

Пример вывода:

 
....Local Address Foreign Address State
... *:smtp          *:*   LISTEN

Под «Локальным адресом» *, in означает, что процесс прослушивает все сетевые интерфейсы, которые машина имеет для порта, отображаемого как smtp (см. / Etc / services для разрешения службы). Это также может отображаться как 0.0.0.0. Первый * в означает, что соединения могут поступать с любого IP-адреса, а второй * в означает, что подключение может исходить из любого порта на удаленной машине.

Блокировать/разблокировать запросы ping с помощью iptables

Iptables – это утилита межсетевого экрана в Linux, которая контролирует входящий и исходящий трафик на основе определенных правил. Он предустановлен в системе Ubuntu. Если он отсутствует в системе, вы можете установить его с помощью следующей команды в Терминале:

$ sudo apt install iptables
Блокировать запрос Ping

Чтобы заблокировать запросы ping к вашей системе, введите следующую команду в Терминале:

$ sudo iptables -A INPUT -p icmp --icmp-type 8 -j REJECT

Если флаг A используется для добавления правила в iptables, а icmp-type 8 – это номер типа ICMP, используемый для эхо-запроса.

Приведенная выше команда добавит правило в брандмауэр, которое будет блокировать любые входящие запросы ping в вашу систему. Добавив это правило, любой, кто отправит запрос ping в вашу систему, увидит сообщение «Destination Port Unreachable», как показано на снимке экрана ниже.

Если вы не хотите, чтобы это сообщение появлялось, используйте следующую команду, заменив REJECT на DROP:

$ sudo iptables -A INPUT -p icmp --icmp-type 8 -j DROP

Теперь любой, кто отправит запрос ping в вашу систему, увидит следующий аналогичный вывод:

Разблокировать запрос Ping

Чтобы разблокировать ping-запросы к вашему серверу, введите следующую команду в Терминале:

$ sudo iptables -D INPUT -p icmp --icmp-type 8 -j REJECT

Если флаг D используется для удаления правила в iptables, а icmp-type 8 – это номер типа ICMP, используемый для эхо-запроса.

Чтобы эти правила стали постоянными после перезагрузки системы, вам понадобится пакет iptables-persistent. Выполните следующую команду в Терминале, чтобы установить iptables-persistent:

$ sudo apt install iptables-persistent

Вам будет предложено подтвердить, хотите ли вы продолжить установку. Нажмите y, чтобы продолжить, после чего система начнет установку, и после ее завершения она будет готова к использованию.

После добавления или удаления любого правила введите следующие команды в Терминале, чтобы они пережили перезагрузку системы.

$ sudo netfilter-persistent save
$ sudo netfilter-persistent reload

Чтобы просмотреть все правила, добавленные в iptables, введите в Терминале следующую команду:

$ sudo iptables -L

Вот и все! В этой статье мы обсудили, как блокировать/разблокировать ping-запросы к Linux Server либо через параметры ядра, либо через утилиту iptables. Надеюсь это поможет!

Открываем порты в Linux

Хоть во многих дистрибутивах по умолчанию присутствует встроенный инструмент по управлению сетями, все же такие решения часто не позволяют в полной мере осуществить настройку открытия портов. Инструкции данной статьи будут основаны на дополнительном приложении под названием Iptables — решение для редактирования параметров межсетевого экрана с использованием прав суперпользователя. Во всех сборках ОС на Линуксе она работает одинаково, разве что отличается команда для установки, но об этом мы поговорим ниже.

Подробнее: Просмотр открытых портов в Ubuntu

Шаг 1: Установка Iptables и просмотр правил

Утилита Iptables изначально не входит в состав операционной системы, из-за чего ее нужно самостоятельно инсталлировать из официального репозитория, а уже потом работать с правилами и всячески изменять их. Установка не занимает много времени и выполняется через стандартную консоль.

  1. Откройте меню и запустите «Терминал». Сделать это также можно, используя стандартную горячую клавишу Ctrl + Alt + T.

В дистрибутивах на базе Debian или Ubuntu пропишите для запуска установки, а в сборках, основанных на Fedora — . После ввода нажмите на клавишу Enter.

Активируйте права суперпользователя, написав пароль от своей учетной записи. Обратите внимание, что символы во время ввода не отображаются, сделано это для обеспечения безопасности.

Ожидайте завершения инсталляции и можете убедиться в активности работы инструмента, просмотрев стандартный список правил, задействовав .

Как видите, в дистрибутиве теперь появилась команда , отвечающая за управление одноименной утилитой. Еще раз напомним, что работает этот инструмент от прав суперпользователя, поэтому в строке обязательно должна содержаться приставка , а уже потом остальные значения и аргументы.

Шаг 2: Разрешение обмена данными

Никакие порты не будут нормально функционировать, если утилита запрещает обмен информацией на уровне собственных правил межсетевого экрана. Кроме всего, отсутствие необходимых правил в дальнейшем может вызывать появление различных ошибок при пробросе, поэтому мы настоятельно советуем выполнить следующие действия:

  1. Убедитесь, что в конфигурационном файле отсутствуют какие-либо правила. Лучше сразу же прописать команду для их удаления, а выглядит она так: .

Теперь добавляем правило для вводимых данных на локальном компьютере, вставив строку .

Примерно такая же команда — — отвечает за новое правило для отправки информации.

Осталось только обеспечить нормальное взаимодействие указанных выше правил, чтобы сервер смог отправлять обратно пакеты. Для этого нужно запретить новые соединения, а старые — разрешить. Производится это через .

Благодаря указанным выше параметрам вы обеспечили корректную отправку и прием данных, что позволит без проблем взаимодействовать с сервером или другим компьютером. Осталось только открыть порты, через которые и будет осуществляться то самое взаимодействие.

Шаг 3: Открытие необходимых портов

Вы уже ознакомлены с тем, по какому принципу добавляются новые правила в конфигурацию Iptables. Существуют и несколько аргументов, позволяющих открыть определенные порты. Давайте разберем эту процедуру на примере популярных портов под номерами 22 и 80.

  1. Запустите консоль и введите туда две следующие команды поочередно:

    .

Теперь проверьте список правил, чтобы убедиться в том, что порты были успешно проброшены. Используется для этого уже знакомая команда .

Придать ей читабельный вид и вывести все детали можно с помощью дополнительного аргумента, тогда строка будет такой: .

Поменяйте политику на стандартную через и можете смело приступать к работе между узлами.

В случае когда уже администратор компьютера внес свои правила в инструмент, организовал сброс пакетов при подходе к точке, например, через , вам нужно использовать другую команду sudo iptables: , где 1924 — номер порта. Она добавляет необходимый порт в начало цепи, и тогда пакеты не сбрасываются.

Далее вы можете прописать все ту же строку и убедиться в том, что все настроено корректно.

Теперь вы знаете, как пробрасываются порты в операционных системах Linux на примере дополнительной утилиты Iptables. Советуем обязательно следить за появляющимися строками в консоли при вводе команд, это поможет вовремя обнаружить какие-либо ошибки и оперативно устранить их.

Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.

Редактирование прав

Все, что нужно для разрешения проблем, связанных с правами в Linux.

sudo — выдает права суперпользователя. Используется перед любой командой, если нужно выполнить ее от имени администратора. Многие программы и операции запускаются исключительно при наличии этих прав, так что sudo используется часто. Например, чтобы обновить список пакетов в Fedora, введем: sudo dnf update. При этом система запросит пароль администратора.

sudo su — на время превращает все вводимые в терминал команды в команды суперпользователя. Пригодится, если предстоит вносить много изменений в системные файлы, которые нельзя редактировать без соответствующих прав.

sudo !! — запускает предыдущую команду от имени администратора. Пригодится, если уже ввели команду, требующую прав суперпользователя, но забыли их затребовать. Не придется вводить весь текст заново. Достаточно сокращенной версии.

chmod — корректирует права доступа к выбранному файлу. Применяется исключительно с набором опций, обозначающих список прав. Допустим, я хочу выдать права на чтение и запись файла Timeweb.html на рабочем столе. Для этого введу в терминал: chmod 777 ~/Desktop/timeweb.html. Теперь его можно открывать и редактировать. Аналогичным образом пользователи поступают с системными файлами, когда приходит время что-то в них менять. По умолчанию большая их часть защищена от записи.

chown — назначает владельца для выбранной директории, документа, картинки или любого другого элемента в файловой системе. Синтаксис следующий: chown имя учетной записи, которому надо передать права путь до файла, права на который нужно передать. На примере этого может выглядеть следующим образом: есть пользователь Timeweb, которому я хочу передать права на файл timeweb-file.txt с рабочего стола. Сделаю это командой:

chown Timeweb ~/Desktop/timeweb-file.txt

Что такое порты и зачем они нужны?

Порты — это более широкое понятие, чем просто возможность подключится к удалённому компьютеру через сеть. Когда процесс хочет обратиться к серверу, ему нужно каким-либо образом идентифицировать, к какому серверу он хочет подключиться. Если мы знаем 32 битный IP-адрес сервера, то мы можем без проблем к нему подключиться.

Но как указать программу, к которой нужно обратиться? Для решения этой проблемы оба протокола UDP и TCP поддерживают систему портов. Порт — это целое число от 1024 до 65535. Все номера до 1024 зарезервированы и используются только определёнными службами, например, 22 — ssh, http — 80, FTP — 21 и так далее.

Таким образом, процесс прослушивает определённый порт на сервере, а клиент, который хочет к нему обратиться, должен знать этот порт. Вся обработка прав доступа к портам в большинстве случаев ложится на процесс, поэтому если в его коде есть уязвимости, то это может стать серьёзной проблемой безопасности.

Как проверить открытые порты в Linux с соответствующим сервисом-процессом?

Существуют различные способы, с помощью которых можно определить открытые порты прослушивания на Linux.

1. Проверка открытых портов в Linux с помощью команды NETSTAT

В основной форме команда NetStat выводит на экран или печатает информацию о сетевых подключениях и таблицу маршрутизации и т.д. Однако та же команда вместе с параметром ниже может быть использована для проверки открытых портов в Linux.

Команда:

netstat -tulpn | grep LISTEN

Вывод:

# netstat -tulpn | grep LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      904/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      866/master
tcp6       0      0 :::80                   :::*                    LISTEN      1086/httpd
tcp6       0      0 :::22                   :::*                    LISTEN      904/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      866/master
#

Вот команда выше отображает все выходные TCP, а также порты UDP. В случае, если вы хотите отфильтровать его дальше, допустим, вы хотите узнать, процесс или услугу, используемую по порту 80, следуют использовать команду ниже.

# netstat -tulpn | grep LISTEN|grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      1086/httpd
#

В приведенной выше командной порт используется HTTPd службы с PID 1086.

2. Проверка открытых портов в Linux с помощью утилиты lsof

Утилита lsof в основном отображает список открытых файлов. Однако с некоторыми настройками параметров мы можем в состоянии также проверить открытые порты в Linux. По умолчанию она не установлена в системе, пожалуйста, следуйте ниже набором команд для установки в соответствии с дистрибутивом Linux.

Для RHEL и CentOS OS
#yum install lsof
 
Для Debian и Ubuntu OS
#apt install lsof

Команда:

#lsof -i -P -n

Вывод:

# lsof -i -P -n
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
chronyd   513   chrony    1u  IPv4  14330      0t0  UDP 127.0.0.1:323
chronyd   513   chrony    2u  IPv6  14331      0t0  UDP :323
dhclient  548     root    6u  IPv4  15326      0t0  UDP *:68
dhclient  548     root   20u  IPv4  15315      0t0  UDP *:41668
dhclient  548     root   21u  IPv6  15316      0t0  UDP *:23435
master    866     root   13u  IPv4  16678      0t0  TCP 127.0.0.1:25 (LISTEN)
master    866     root   14u  IPv6  16679      0t0  TCP :25 (LISTEN)
sshd      904     root    3u  IPv4  17424      0t0  TCP *:22 (LISTEN)
sshd      904     root    4u  IPv6  17426      0t0  TCP *:22 (LISTEN)
sshd      951     root    3u  IPv4  17884      0t0  TCP 172.31.22.4:22->103.211.42.2:59572 (ESTABLISHED)
sshd      954 ec2-user    3u  IPv4  17884      0t0  TCP 172.31.22.4:22->103.211.42.2:59572 (ESTABLISHED)
httpd    1086     root    4u  IPv6  19036      0t0  TCP *:80 (LISTEN)
httpd    1088   apache    4u  IPv6  19036      0t0  TCP *:80 (LISTEN)
httpd    1089   apache    4u  IPv6  19036      0t0  TCP *:80 (LISTEN)
httpd    1090   apache    4u  IPv6  19036      0t0  TCP *:80 (LISTEN)
httpd    1091   apache    4u  IPv6  19036      0t0  TCP *:80 (LISTEN)
httpd    1092   apache    4u  IPv6  19036      0t0  TCP *:80 (LISTEN)

В случае, если вы хотите получить более подробную информацию о порте 80 можно использовать следующую команду:

# lsof -i :80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   1056   root    4u  IPv6  19036      0t0  TCP *:http (LISTEN)
httpd   1057 apache    4u  IPv6  19036      0t0  TCP *:http (LISTEN)
httpd   1058 apache    4u  IPv6  19036      0t0  TCP *:http (LISTEN)
httpd   1059 apache    4u  IPv6  19036      0t0  TCP *:http (LISTEN)
httpd   1060 apache    4u  IPv6  19036      0t0  TCP *:http (LISTEN)
httpd   1061 apache    4u  IPv6  19036      0t0  TCP *:http (LISTEN)

Здесь, в этом выводе вы можете четко отметить, что порт 80 используется службой HTTP, имеющей PID 1056.

3. Проверка открытых портов в Linux с помощью nmap

Nmap является инструментом сканирования порта, используемый в Linux. Он не установлен на системах Linux по умолчанию. Вам необходимо установить его с помощью следующей команды.

yum install nmap

После того, как он установиться, используется команда для проверки открытых портов в Linux.

Команда:

# nmap -sT -O localhost

Вывод:

# nmap -sT -O localhost
 
Starting Nmap 6.40 ( http://nmap.org ) at 2017-09-15 13:59 UTC
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00023s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 997 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
25/tcp open  smtp
80/tcp open  http
Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS details: Linux 3.7 - 3.9
Network Distance: 0 hops
 
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.66 seconds
#

В выводе выше мы можем в состоянии очень легко проверить открытые порты.

В случае, если Вы хотите изучить больше о сетевых команд в Linux следуйте этой статье.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: