- Как закрыть порты в Linux?
- Как закрыть открытый порт в Ubuntu?
- 7 ответов
- Как закрыть порты в Linux?
- 4 ответа
- Как найти и закрыть открытый порт в linux
- Как найти открытый порт
- Как закрыть порт
- Как закрыть порт iptables
- Как закрыть порт Iptables
- Закрыть порты iptables, кроме разрешенных
- Как скрыть порт iptables?
- Выводы
Как закрыть порты в Linux?
У меня есть какой-то вопрос в закрытии порта, я думаю, что у меня есть некоторые странные вещи.
Когда я использую выполнить
это показывает, что порт 23 / TCP открыт.
Но когда я выполню
это показывает, что порт 23 / tcp закрыт.
Какой из них является правдой? Я хочу закрыть этот порт на всей моей системе, как я могу это сделать?
Nmap — отличный сканер портов, но иногда вам хочется чего-то более авторитетного. Вы можете спросить ядро, какие процессы имеют какие порты открывать, используя netstat утилиту:
Варианты, которые я дал:
- -t Только TCP
- -l Только прослушивающие порты
- -n Не ищите имена сервисов и хостов, просто отображайте номера
- -p Показать информацию о процессе (требуется привилегия root)
В этом случае мы можем видеть, что sshd прослушивает любой 0.0.0.0 порт интерфейса ( ) 22 и cupsd прослушивает 127.0.0.1 порт 631 loopback ( ). Ваш вывод может показать, что telnetd имеет локальный адрес 192.168.1.1:23 , то есть он не будет отвечать на соединения на адаптере обратной связи (например, вы не можете telnet 127.0.0.1 ).
Существуют и другие инструменты, которые отображают аналогичную информацию (например, lsof или /proc ), но netstat является наиболее широко доступным. Это даже работает на Windows ( netstat -anb ). Netstat в BSD немного отличается: вам придется использовать sockstat (1) для получения информации о процессе.
Если у вас есть идентификатор процесса и имя программы, вы можете найти процесс и убить его, если хотите закрыть порт. Для более детального управления вы можете использовать брандмауэр (iptables в Linux), чтобы ограничить доступ только определенными адресами. Возможно, вам придется отключить запуск службы. Если PID в Linux означает «-», это, вероятно, процесс ядра (например, это характерно для NFS), так что удачи в выяснении, что это такое.
Примечание: я сказал «авторитетный», потому что вам не мешают условия сети и брандмауэры. Если вы доверяете своему компьютеру, это здорово. Однако, если вы подозреваете, что вас взломали, вы не сможете доверять инструментам на своем компьютере. Замена стандартных утилит (а иногда даже системных вызовов) на те, которые скрывают определенные процессы или порты (или руткиты), является стандартной практикой для злоумышленников. Лучше всего на этом этапе сделать криминалистическую копию вашего диска и восстановить ее из резервной копии; затем используйте копию, чтобы определить, как они вошли, и закройте ее.
Источник
Как закрыть открытый порт в Ubuntu?
Мне нужна команда для отображения списка всех открытых портов на моем ПК и другая команда для закрытия порта.
Мне нужно закрыть порт некоторых приложений.
7 ответов
netstat можно использовать для просмотра статистики портов.
Перечислить все номера портов, с которыми отвечает процесс. Завершите или убейте процесс, чтобы закрыть порт. ( kill , pkill . )
Без завершения процесса, это невозможно!, См. Закрытие порта вручную из командной строки. Другой способ — поиск брандмауэра (например, изоляция этого порта от сети).
Вы можете использовать iptables, чтобы заблокировать порт на сетевом уровне, не закрывая приложение. Порт по-прежнему будет открыт, но будет недоступен.
альтернативно, это зависит от приложения, некоторые разрешают отключать некоторые порты (например, dovecot и порт pop3 или imap), а некоторые — нет. Некоторые приложения также можно настроить на прослушивание только на локальном хосте или по определенному адресу.
Для закрытия порта прослушивания в Ubuntu вы можете использовать команду ниже
на месте 3000 Вы можете указать свой номер порта
lsof команда выдаст информацию о файле, открытом процессом
-t: Этот флаг указывает, что lsof должен производить краткий вывод только с идентификаторами процесса и без заголовка — например, чтобы вывод мог быть передан в kill(1). Эта опция выбирает опцию -w.
-i: Этот флаг выбирает список файлов, любой из которых, чей интернет-адрес совпадает с адресом, указанным в i. Если адрес не указан, этот параметр выбирает список всех сетевых файлов Интернета и x.25 (HP-UX).
Источник
Как закрыть порты в Linux?
У меня есть вопрос в закрытии порта, я думаю, что у меня есть некоторые странные вещи.
Когда я использую execute
он показывает, что открыт порт 23 /TCP.
Но когда я выполняю
показывает, что порт 23 /tcp закрыт.
Какое из них верно? Я хочу закрыть этот порт на всей моей системе, как я могу это сделать?
4 ответа
Nmap — отличный сканер портов, но иногда вам нужно что-то более авторитетное. Вы можете спросить ядро, какие процессы открывают порты, используя утилиту netstat :
Параметры, которые я дал:
- -t Только TCP
- -l Только для прослушивающих портов
- -n Не искать имена сервисов и хостов, просто отображать числа
- -p Показать информацию о процессе (требуется привилегия root)
В этом случае мы видим, что sshd прослушивает любой интерфейс ( 0.0.0.0 ) порт 22, а cupsd прослушивает loopback ( 127.0.0.1 ). Вы можете показать, что telnetd имеет локальный адрес из 192.168.1.1:23 , то есть он не будет отвечать на соединения на петлевом адаптере (например, вы не можете telnet 127.0.0.1 )
Существуют и другие инструменты, которые будут отображать аналогичную информацию (например, lsof или /proc ), но netstat является наиболее широко доступным. Он работает даже в Windows ( netstat -anb ). BSD netstat немного отличается: вам нужно будет использовать sockstat (1) , чтобы получить информацию о процессе.
Как только у вас есть идентификатор процесса и имя программы, вы можете найти процесс и убить его, если хотите закрыть порт. Для более тонкого управления вы можете использовать брандмауэр (iptables для Linux) для ограничения доступа только к определенным адресам. Возможно, вам придется отключить запуск службы. Если PID является «-» в Linux, это, вероятно, процесс ядра (это часто встречается с NFS, например), так что удачи, узнав, что это такое.
Примечание. Я сказал «авторитетный», потому что вам не мешают сетевые условия и брандмауэры. Если вы доверяете своему компьютеру, это здорово. Однако, если вы подозреваете, что вас взломали, вы не сможете доверять инструментам на своем компьютере. Замена стандартных утилит (а иногда и системных вызовов) теми, которые скрывают определенные процессы или порты (руткиты a.k.a.), является стандартной практикой среди злоумышленников. Лучше всего на этом этапе сделать криминалистическую копию вашего диска и восстановить из резервной копии; затем используйте копию, чтобы определить, как они вошли и закрыть ее.
Linux-система имеет так называемый loopback-интерфейс, который предназначен для внутренней связи. Его имя хоста localhost , а его IP-адрес: 127.0.0.1 .
При запуске nmap на localhost , вы фактически запускаете portscan на интерфейсе loopback виртуальный . 192.168.1.1 — это IP-адрес вашего физического (скорее всего eth0 ).
Итак, вы запускаете nmap на двух разных сетевых интерфейсах, поэтому в открытых портах есть разница. Они оба верны.
Если у вас открыт TCP-порт 23, вполне вероятно, что вы используете сервер telnet (что не очень хорошо к его отсутствию шифрования), или у вас на вашем компьютере есть какой-то троянский конь.
Чтобы «закрыть» порт, вы можете использовать iptables
Если работает служба и прослушивает порт 23, возможно, более чистым будет остановить процесс, который прослушивает порт 23 ( вероятно, telnet ), чем для его запуска, а закрыть или заблокировать порт 23, используя iptables
Когда процесс прослушивания не выполняется на порту, даже при отсутствии блока межсетевого экрана любая попытка подключения к нему должна приводить к немедленному «отказу подключения» ( ECONNREFUSED до connect(2) )
Один из способов найти процесс (и его pid), который прослушивает порт 23, если есть такой процесс, это:
В приведенном выше -i перечислены открытые интернет-порты (как UDP, так и TCP), а -P запрещает перевод портов в имена сервисов ( через /etc/services )
После того, как вы обнаружили, что запущенный процесс прослушивает порт 23, вы можете выяснить, как это началось, посмотрев на дерево процессов (например, pstree ). Если его родительский код init (очень вероятно), вы можете рекурсивно искать имя процесса в /etc . например:.
Это должно привести вас к лучшему способу отключить его от работы в 1-м месте.
Источник
Как найти и закрыть открытый порт в linux
Итак, вы являетесь сетевым администратором, и у вас есть несколько машин Linux в вашей сети или дата-центре. Вы обнаружили странный трафик и вам требуется его определить. Возможно ли, что трафик использует открытый порт на машине? Если так, где находится порт и как вы его закроете?
На машинах с Linux эта задача на самом деле довольно проста. Я хочу показать вам, как найти открытый порт и закрыть его. Я буду демонстрировать на Ubuntu Server 18.04, хотя процесс будет схожим во многих дистрибутивах, единственное отличие будет в том, как закрыть порт.
Как найти открытый порт
К счастью, вам не нужно устанавливать какое-либо программное обеспечение, чтобы сделать эту работу. Почему? Потому что мы будем использовать команду ss (так как netstat устарел) для просмотра портов прослушивания на вашем сервере. Это будет сделано полностью из командной строки, поэтому либо войдите на свой сервер, либо используйте безопасную оболочку для доступа. Когда вы получите приглашение bash, введите команду:
Возможны следующие варианты:
-t Показать только сокеты TCP в Linux
-u Показать только сокеты UDP в Linux
-l Показать прослушивающие сокеты (например, TCP-порт 22 открыт SSHD-сервером)
-p Список имен процессов, которые открывали сокеты
-n Не разрешать имена сервисов
Вывод команды будет перечислять только прослушиваемые порты.
Наши открытые порты
Как видите, на этой машине имеется только несколько открытых портов (53, 22, 631, 445, 3306, 11211, 80, 8080).
Если вы не уверены, какой порт соответствует какой службе, вы всегда можете узнать это в файле /etc/services. Прочитайте этот файл с помощью команды:
Вы должны увидеть список всех портов, доступных для Linux.
Какой порт linux соответствует какой службе
Как закрыть порт
Скажем, вы размещаете веб-сервер на компьютере, но не хотите прослушивать порт 8080. Вместо этого вы хотите, чтобы трафик проходил только через порты 80 (HTTP) и 443 (HTTPS). Чтобы закрыть порт 8080, мы будем использовать команду ufw (Uncomplicated FireWall) следующим образом:
Вы должны увидеть, что правила были обновлены, а порт заблокирован. Если вы обнаружите, что блокирование этого порта вызывает проблемы со службой или приложением, вы можете снова открыть его с помощью команды:
И это все, что нужно для поиска и закрытия открытого порта на Ubuntu. Этот процесс должен работать в большинстве дистрибутивов, единственное предостережение — как вы блокируете порт, так как не каждый дистрибутив использует ufw. Если выбранный вами дистрибутив использует другую команду для блокировки портов (например, sudo iptables -A INPUT -p tcp —destination-port 80 -j DROP), убедитесь, что вы знаете, как выполнить эту задачу на своем сервере.
Источник
Как закрыть порт iptables
Серверы и компьютеры, подключенные к интернету подвержены атакам и сканированию различных скриптов, программ и злоумышленников. А поскольку известно, что во всех системах могут быть уязвимости, то лучше, чтобы извне было видно минимум портов.
Некоторые порты должны быть видны постоянно, например, порт веб-сервера, другие используются только системными администраторами, а еще одни, вообще, должны быть доступны только локально. Несмотря на то что все сервисы имеют методы авторизации, и не позволят подключиться кому попало, они могут быть уязвимы, поэтому все лишнее лучше закрыть. В этой статье мы рассмотрим как закрыть порт iptables. Мы закроем нужные порты полностью, а также сделаем некоторые из них доступными на время, после попытки подключения к определенному порту.
Как закрыть порт Iptables
В этой статье я не стану подробно рассматривать все возможности Iptables, виды цепочек и как работает эта служба. Все это мы рассмотрели в статье настройка Iptables для начинающих. Вместо этого, перейдем ближе к делу. Чтобы заблокировать порт нам сначала нужно понять какие порты открыты в Linux и за что они отвечают. Чтобы посмотреть какие порты слушаются локально, можно использовать утилиту netstat:
sudo netstat -ntulp
Для анализа портов, доступных извне используется программа nmap:
Как видите, извне у нас, кроме стандартных портов веб-сервера, доступны mysql, ftp, dns и другие сервисы. Некоторые из них не должны быть доступны публично. Это не критично, но и нежелательно. Мы можем очень просто закрыть такие порты с помощью iptables. Общий синтаксис команды для блокировки порта будет выглядеть вот так:
$ iptables -A INPUT -p tcp —dport номер_порта -j DROP
Например, если мы хотим заблокировать порт iptables mysql, то необходимо выполнить:
sudo iptables -A INPUT -p tcp —dport 3306 -j DROP
Можно закрыть порт для определенного интерфейса, например, eth1:
sudo iptables -A INPUT -i eth1 -p tcp —dport 3306 -j DROP
Или даже для ip и целой подсети. Например, закрыть все подключения к порту 22 SSH кроме IP адреса 1.2.3.4:
sudo iptables -A INPUT -i eth1 -p tcp -s !1.2.3.4 —dport 22 -j DROP
Здесь знак восклицания означает инверсию, то есть применить ко всем кроме этого. Можно убрать этот знак и указать только IP, к которым нужно применить запрет. Мы рассмотрели как закрыть порт iptables в цепочке INPUT, которая отвечает за входящие соединения, это более применимо к серверам. Но что, если нужно закрыть подключение к удаленному порту из этого компьютера или нашей сети? Для этого существует цепочка OUTPUT.
Например, заблокируем попытки отправки почты подключением к любой машине по порту 25:
sudo iptables -A OUTPUT -p tcp —dport 25 -j DROP
Также, как и раньше, вы можете указать исходящий сетевой интерфейс, только теперь он указывается опцией -o:
sudo iptables -A OUTPUT -o eth1 -p tcp —dport 25 -j DROP
После того как вы завершите с настройкой портов нужно сохранить все созданные правила, чтобы они остались активными даже после перезагрузки. Для этого выполните:
Чтобы посмотреть текущие правила для каждой из цепочек выполните:
sudo iptables -L -n -v
Такая команда покажет все правила, а если вы хотите только информацию о заблокированных портах, выполните:
sudo iptables -L -n -v | grep -i DROP
Очистить все правила в случае возникновения проблем можно командой:
sudo iptables -F
Закрыть порты iptables, кроме разрешенных
По умолчанию политика для цепочек INPUT и OUTPUT — разрешать все подключения, а уже с помощью правил мы указываем какие подключения стоит запретить. Но если вы хотите закрыть все порты кроме разрешенных iptables. То нужно поступить по-другому. Мы поменяем политику по умолчанию, так чтобы она запрещала все и разрешим только доступ к нужным портам.
Например, меняем политику для цепочки INPUT:
sudo iptables -P INPUT DROP
Затем разрешаем все входящие соединения от локального интерфейса:
sudo iptables -A INPUT -i lo -j ACCEPT
Затем разрешаем доступ к портам 80 и 22:
sudo iptables -A INPUT -i eth0 -p tcp —dport 80 —match state —state NEW -j ACCEPT
$ sudo iptables -A INPUT -i eth0 -p tcp —dport 80 —match state —state NEW -j ACCEPT
Как скрыть порт iptables?
Закрыть порт, это очень хорошо, но что если он нужен нам открытым и желательно, чтобы для других этот же порт был недоступен. Существует такая технология, как Port Knocking, которая позволяет открывать нужный порт только для определенного ip адреса и только после обращения его к нужному порту. Например, нам нужно защитить SSH от перебора паролей и несанкционированного доступа. Для этого все пакеты, которые будут приходить на порт 22, 111 и 112 мы будем перенаправлять в цепочку SSH.
Как вы уже догадались, порт 22 нам непосредственно нужен, на порты 111 и 112 будут включать его и отключать соответственно. Когда пользователь обратится к порту 111 мы укажем системе, что нужно присвоить всем его пакетам имя ssh, при обращении к порту 112 уберем этот флаг. А если пользователь решит зайти на 22 порт, то проверим присвоено ли этому пакету имя SSH, если да, то пропустим, в противном случае — отбросим.
Сначала создаем цепочку SSH:
sudo iptables -N SSH
sudo iptables -A INPUT -p tcp —dport 22 -j SSH
$ sudo iptables -A INPUT -p tcp —dport 111 -j SSH
$ sudo iptables -A INPUT -p tcp —dport 112 -j SSH
При обращении к порту 111 присваиваем IP адресу имя, сам пакет дальше не пускаем:
sudo iptables -A SSH -p tcp -m state —state NEW -m tcp —dport 111 -m recent —set —name SSH —rsource -j DROP
При обращении к 112 убираем имя у IP:
sudo iptables -A SSH -p tcp -m state —state NEW -m tcp —dport 112 -m recent —remove —name SSH —rsource -j DROP
И нам осталось только проверить имеет ли наш пакет, который пытается обратиться к 22 порту имя SSH и если да, то мы его одобряем:
sudo iptables -A SSH -p tcp -m state —state NEW -m tcp —dport 22 -m recent —rcheck —name SSH —rsource -j ACCEPT
Вот и все. Теперь для того чтобы открыть наш SSH порт будет достаточно попытаться подключиться к порту 111 с помощью telnet. Утилита сообщит, что произошла ошибка во время подключения, поскольку мы отбросили пакет:
telnet ip_адрес 111
Но зато теперь вы можете получить доступ к сервису SSH на порту 22. Чтобы снова закрыть порт выполните:
telnet ip_адрес 112
Даже при открытии, этот порт доступен только вашему ip адресу и больше никому другому. Но нужно заметить, что это не панацея. Кто-либо может случайно запросить порт, который предназначен для активации, и таким образом, открыть себе доступ к службе SSH. Так что надежные пароли и ключи шифрования это не отменяет.
Выводы
В этой статье мы рассмотрели как закрыть порт iptables, а также как его скрыть с возможностью подключения, когда это будет необходимо. Надеюсь, эта информация была для вас полезной.
Источник