Firewall — Как найти и закрыть порт в Linux

В сегодняшней статье мы поговорим о том закрыть порт на Firewall в Linux. Firewall это специальный межсетевой экран который защищает ваш сервер от угроз извне посредством фильтрации входящего и выходящего трафика. Firewall минимизирует риск вирусных и хакерских атак. При попытках соединится с вашим сервером по каком либо из портов то сначала этот трафик пройдет через правила Firewall которые вы пропишите, и если Firewall разрешит то соединения успешно установится.
Мы сегодня будет закрывать порт 1521, этот порт используется для подключения к базе данных oracle.
- Как отключить Firewall в Linux
- Firewall — Как открыть порт в Linux
ШАГ 1. Находим порт 1521.
Чтобы нам найти порт который мы хотим закрыть то для начала нам нужно найти его в правилах Firewall. Команда, которая показывает весь список правил Firewall:

На изображении видно что в поле ports указано что порт 1521 по протоколу tcp сейчас открыт.
ШАГ 2. Закрываем порт.
Для того чтобы закрыть порт 1521, нам нужно выполнить команду, которая удалит этот порт из своих правил.
$. sudo firewall-cmd —remove-port=1521/tcp —permanent

В результате после выполнения команды у вас должно появится success.
Ну и конечно же не забываем после каждого действия с Firewall перезапускать сервис чтобы новые правила применились.
$. sudo firewall-cmd —reload

ШАГ 3. Проверяем результат.
После того как мы удалили порт 1521 из правил Firewall то необходимо в этом убедится, для этого воспользуемся той же командой для просмотра всех правил.

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

Разберём, как при помощи утилиты iptables открыть или закрыть порт на межсетевом экране.
В прошлый раз мы рассмотрели использование утилиты iptables для разрешения или запрета отдельных IP-адресов и целых подсетей. Разумеется, IP-адреса это далеко не единственный критерий фильтрации трафика. Можно открывать или закрывать доступ и по портам.
Закрыть порт через iptables
Допустим, что по умолчанию у нас открыты все порты, но некоторые всё таки понадобилось закрыть. К примеру, мы не хотим, чтобы на FTP-сервер можно было попасть по порту 21:
iptables -A INPUT -p tcp --dport 21 -j DROP
А вот ещё пример. Допустим, мы подключаемся к серверу через SSH с определённого адреса, с других адресов доступа быть не должно.
iptables -A INPUT -p tcp ! -s 192.168.105.31 --dport 22 -j DROP
В строке выше указан доверенный IP-адрес, который взят лишь для примера. Символ « ! » перед ключом -s используется для инверсии, таким образом показывается, что кроме этого адреса доступ никто не получит.
Открыть порт через iptables
Теперь представим обратную ситуацию — по умолчанию все порты закрыты. Допустим, у нас есть веб-сервер. Мы хотим открыть доступ по порту 80 для обеспечения работы протокола HTTP. Не помешает открыть и порт 443 — для поддержки протокола HTTPS совместно с SSL. Ну и порт 22 тоже можно открыть для доступа по SSH.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Как видите, мы написали три правила. Для каждого порта своё. Такая форма записи не является ошибочной, но можно свести всё в одну строку:
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
Если используете расширение multiport , учтите необходимость всегда использовать критерий -p tcp или -p udp . Так можно одной строкой указать до 15 разных портов через запятую. Обратите внимание, что в примере с построчной записью мы использовали критерий —dport . Он используется для указания одного порта. В примере с однострочной записью указан критерий —dports . Он используется для указания нескольких портов.
Как закрыть порт iptables
Серверы и компьютеры, подключенные к интернету подвержены атакам и сканированию различных скриптов, программ и злоумышленников. А поскольку известно, что во всех системах могут быть уязвимости, то лучше, чтобы извне было видно минимум портов.
Некоторые порты должны быть видны постоянно, например, порт веб-сервера, другие используются только системными администраторами, а еще одни, вообще, должны быть доступны только локально. Несмотря на то что все сервисы имеют методы авторизации, и не позволят подключиться кому попало, они могут быть уязвимы, поэтому все лишнее лучше закрыть. В этой статье мы рассмотрим как закрыть порт iptables. Мы закроем нужные порты полностью, а также сделаем некоторые из них доступными на время, после попытки подключения к определенному порту.
Table of Contents
- Как закрыть порт Iptables
- Закрыть порты 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, а также как его скрыть с возможностью подключения, когда это будет необходимо. Надеюсь, эта информация была для вас полезной.
Форум русскоязычного сообщества Ubuntu
Страница сгенерирована за 0.043 секунд. Запросов: 25.
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.