Linux закрыть исходящий порт

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

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

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

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

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

Для анализа портов, доступных извне используется программа 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.

Читайте также:  Linux how to unzip all zip files

Например, заблокируем попытки отправки почты подключением к любой машине по порту 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 | grep -i DROP

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

Закрыть порты 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 -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

Читайте также:  Kali linux bruteforce wifi

При обращении к порту 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. Утилита сообщит, что произошла ошибка во время подключения, поскольку мы отбросили пакет:

Но зато теперь вы можете получить доступ к сервису SSH на порту 22. Чтобы снова закрыть порт выполните:

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

Выводы

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

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Как разрешить или заблокировать порт и IP-адрес с помощью Firewalld, iptables и UFW в Linux

В Linux брандмауэр необходим для контроля входящего и исходящего сетевого трафика. Разрешить или заблокировать IP-адреса и порты с помощью брандмауэра очень просто. Ниже приведены команды для разрешения или блокирования IP-адресов и портов с помощью различных брандмауэров.

firewall

Firewalld

Firewalld — это инструмент управления брандмауэром в ОС Linux. Он конфигурируется с помощью XML-файлов. Мы можем использовать интерфейс командной строки firewall-cmd для настройки и управления правилами брандмауэра.

Разрешить входящий трафик порта 80. Приведенная ниже команда разрешит трафик для порта 80, до перезапуска.

sudo firewall-cmd --zone=public --add-port=80/tcp

Разрешите входящий порт 80 в брандмауэре, постянно.

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

Запретите исходящий порт номер 25. Следующая команда заблокирует все исходящие соединения с порта 25.

firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p tcp -m tcp -d 127.0.0.1 --dport=25 -j ACCEPT firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport=25 -j REJECT firewall-cmd --reload

Запретите входящий порт номер 80. Следующая команда запретит весь трафик для порта 80.

sudo firewall-cmd --remove-port=80/tcp --permanent

Выполните приведенную ниже команду для блокирования IP-адреса в Firewalld. Замените 173.248.192.12 на ваш IP-адрес.

sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='173.248.192.12' reject".

Откройте порт для определенного IP-адреса в Firewalld. Добавьте IP-адрес источника и порт (3306), который вы хотите открыть на локальном сервере Linux. После этого перезагрузите настройки firewalld, чтобы применить изменения.

firewall-cmd --zone=mariadb-access --add-source=173.248.192.12 --permanent firewall-cmd --zone=mariadb-access --add-port=3306/tcp --permanent firewall-cmd --reload

Iptables

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

Читайте также:  Как узнать какая версия linux

Выполните следующую команду, чтобы разрешить все входящие соединения HTTP (порт 80).

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

Вторая команда разрешает исходящий трафик установленных HTTP-соединений, что необходимо, если политика исходящих соединений не установлена на ACCEPT.

Выполните приведенную ниже команду, чтобы разрешить несколько входящих портов. Команда ниже будет принимать трафик с портов 22, 53 и 80.

/sbin/iptables -A INPUT -p tcp --match multiport --dports 22,53,80 -j ACCEPT

Запретите входящий порт 80 с помощью IPtables. Следующая команда запретит все входящие соединения для порта 80.

/sbin/iptables -A INPUT -p tcp --dport 80 -j DROP /sbin/service iptables save

Заблокируйте IP-адрес в IPtables. Замените 173.248.192.11 на ваш IP-адрес.

sudo iptables -A INPUT -s 173.248.192.11 -j DROP

Открытие порта для определенного IP-адреса в IPtables. Разрешить входящий SSH с определенного IP-адреса или подсети.

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

UFW — Uncomplicated Firewall

UFW также известен как Uncomplicated Firewall. Он подходит для брандмауэров на основе хостов. Он поддерживает IPv4 и IPv6.

Разрешить входящий порт 80. Следующая команда разрешит весь трафик с порта 80.

Разрешить несколько входящих портов. Команда ниже разрешит входящий трафик с портов 53, 80 и 443.

Запретить входящий трафик с порта 80. Приведенная ниже команда запретит весь входящий трафик для порта 80.

Запретить исходящий порт 25. Следующая команда запретит весь исходящий трафик с порта 25.

Заблокировать IP-адрес в UFW. Вы можете заблокировать любой IP-адрес для входящего трафика на вашем компьютере.

sudo ufw deny from 173.248.192.11

Открыть порт для определенного IP-адреса в UFW. Следующая команда откроет порт 80 для указанного IP-адреса. Вы можете заменить его на свой IP-адрес.

sudo ufw allow from 173.248.192.11 to any port 80

Источник

Оцените статью
Adblock
detector