IPtables -Закрытие портов для всех кроме одного IP
Уважаемые форумчане подскажите начинающему, как осуществить закрытие портов по средством iptables, для порта к примеру 20 и 80, так что бы тот и другой порт был закрыт для всех из вне и доступен только владельцу определённого ip-адресса.
первым правилом открой доступ нужному Ипу, а дальше руби остальных
Понимаете ли я не понимаю каким образом составляется правило. Прочитав о iptables на wikipedia я не нашёл ответа на этот вопрос. Не могли бы вы поподробнее описать, привести пример составления данного правила. И последующих строк на примере IP 109.107.123.13
Задаешь политику, что не разрешено, то запрещено. Разрешаешь владельца.
iptables -P INPUT -j DROP iptables -A INPUT -s 1.2.3.4 -j ACCEPT
> Не могли бы вы поподробнее описать
Iptables — закрыть всё, кроме некоторых
Приветствую, господа. Собстнна, сабж. Поднят опенвпн на впс, дебиан 9. Задача: 1. Дать отдельным ип доступ по опенвпн(upd, 1950 порт) в сеть. Моих кривых рук хватило только на: iptables -A INPUT ! -s xxx.xxx.xxx.xxx -j DROP и так повторять, пока не наберётся нужное нам кол-во 2. Закрыть любые дыры\утечки — заблокировать все входящие\исходящие, кроме тех ип, что указаны выше + заблокировать все порты, кроме 443, 1950, 22 и 80-го.
Комментарии в стиле «кури основы» приветствуются, но, увы, с Линуксом работать тесно не требуется, нужно только установить данные правила.
Дать отдельным ип доступ по опенвпн(upd, 1950 порт) в сеть
Какую сеть? Рыболовную может быть?
iptables -A INPUT ! -s xxx.xxx.xxx.xxx -j DROP и так повторять, пока не наберётся нужное нам кол-во
«нам» это кому? Не ну «набирать» можно много, вот только смысл? Первое же правило пропускает все что не содержит в входящем адресе xxx.xxx.xxx.xxx
Закрыть любые дыры\утечки
заблокировать все входящие\исходящие
Вы случайно не в ркн устроились работать?
Комментарии в стиле «кури основы» приветствуются
ssh на 22 порту — несекурно
Ога, при учете еще 443 и 80 со скорее всего кучей пых и тому подобного мусора. Конечно только через ssh вас и поломают. не, ну если рутовый с пассом 111. поломают быстро, только смена порта это страусиная политика при таких условиях.
Сначала нужно закрыть все, потом уже разрешать что хочется:
Как закрыть порт 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
Очистить все правила в случае возникновения проблем можно командой:
Закрыть порты 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, а также как его скрыть с возможностью подключения, когда это будет необходимо. Надеюсь, эта информация была для вас полезной.