Настраиваем iptables с нуля
ฝัง
- เผยแพร่เมื่อ 6 ก.ย. 2021
- Защита сетевых соединений сейчас просто необходима буквально на каждом устройстве, подключенном к Интернет. Тем более, на сервере. Расскажем и покажем конфигурирование штатного сетевого экрана Linux через интерфейс Iptables.
Этот канал посвящён теме поддержки сайтов: от технических аспектов системного администрирования до вопросов экономической эффективности технологий.
Занимаясь комплексной поддержкой сайтов более 19 лет, мы накопили значительный опыт, которым готовы делиться с помощью наших видео. Так что присоединяйтесь, будет интересно!
Профессиональная поддержка сайтов: www.methodlab.ru/price/suppor...
Тестирование скорости сайтов: xn--80aanaoiczhuihpc.xn--p1ai/
Сервис оптимизации картинок: www.fotorubka.ru/
Группа "Ускорение сайтов" в VK: sitespeedup
Метод Лаб в VK: methodlab
Лучшая из тех коротких обучалок , которые я до сих пор видел....Стиль изложения логичный , лаконичный и системный.
Спасибо!
*Автор - один из немногих людей, которые объясняют доступно и понятно. Спасибо!*
Николай как ваш ученик на платформе Geekbrains,могу сказать что вы большой молодец,доступно рассказываете👏
Супер!!! Жалко только не сказали как командой удилить правило . Но это мелочь.
Ну и небольшой конспект от меня.
Посмотреть информацию о фильтрах
iptables -L -nv
Посмотреть информацию о NAT
iptables -t nat -L -nv
Список адресов:портов которые слушают
ss -ntulp
Посмотреть какие подключены интерфейсы
ip a
Разрешили подключение по SSH
iptables -A INPUT -p tcp --dport=22 -j ACCEPT
Разрешили входящий трафик по loopback
iptables -A INPUT -i lo -j ACCEPT
Разрешили ping
iptables -A INPUT -p icmp -j ACCEPT
Разрешили подключение по http
iptables -A INPUT -p tcp --dport=80 -j ACCEPT
Разрешили подключение по https
iptables -A INPUT -p tcp --dport=443 -j ACCEPT
Разрешаем все пакеты которые приходят в качестве ответа
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Всё остальное запретить. Политика.
iptables -p INPUT DROP
Сохранить(м.б. выгрузить) все настройки в файл
iptables-save > ./iptables.rules
Восстановить настройки из файла
iptables-restore < ./iptables.rules
Заблокировать по IP
iptables -I INPUT -s 209.175.153.23 -j DROP
Пакеты для сохранения, автоматической загрузки правил фаервола
apt install iptables-persistent netfilter-persistent
Сохранение правил
netfilter-persistent save
Запуск правил
netfilter-persistent start
Разрешить ssh по конкретному интерфейсу
iptables -A INPUT -i enp0s3 -p tcp --dport 22 -j ACCEPT
Да, удалить правило можно через iptables -D и дальше все его параметры или указать номер правила.
Например: iptables -D OUTPUT -o eth0 -p TCP --sport 22 -j ACCEPT
или iptables -D INPUT 3
@@site_support о, спасибо, про удаление по номеру кстати не знал.
@@mariabrest Кстати, вывести правила с номерами в начале строк можно так: iptables -vnL --line-numbers
Запрет пакетов по умолчанию должен быть с параметром "-P" (--policy), а не "-p" (--protocol)
В целом всё знал, но для начинающего очень хороший выпуск. Хотелось бы серию выпусков, и про нат и про форвард. Как пробрасывать порты, как перенаправлять порты. Сложного тут тоже ничего нет, но в стиле изложения автором - будет доходчиво.
Спасибо за столь лаконичный ликбез! Четко и без воды
Рассказано легко и просто для освоения. Спасибо за проделанную работу.
Отличное видео, все понятно, смотреть и слушать одно удовольствие! Спасибо)
Большое спасибо за обучалку. Было интересно и полезно!
Для новичков самое то, очень чётко изложено и без лишней воды. Спасибо!
Спасибо Вам за проделанную работу. Просто отличное видео. Все доходчиво объяснено.
Господи, это крайне прекрасно поданный и изложенный материал. Самое то освежить в памяти основные концепции или подготовиться к интервью) Спасибо большое!
P.S. Подписался в надежде послушать когда-нибудь в подобном изложении про nftables и ipvs.
Спасибо, благодаря тебе только и понял как работать с iptables
Спасибо!
Очень понятно, слушается приятно, и СИСТЕМНО!
ОДнозначно ЛАЙК!)
Грамотная, приятная речь. Способ подачи материала - отличный! Спасибо Вам!
Очень доступно и понятно, большое спасибо за ролик. Нашел для себя много интересного на канале, буду смотреть.
Спасибо, крайне полезно провел 39 минут! Прям зашло видео для меня!
Спасибо друг! Некоторые моменты сложные, но интересно и полезно! Больше тем по безопасности =)
Классный дядька! объясняет очень понятно
Легче, чем кажется при первом гуглении, спасибо
Всё чётко и по делу, никакой воды.
Спасибо, все очень подробно и понятно. В из этого видео я унал все что хотел знать.
Очень хорошее объяснение, спасибо автору)
Очень доходчиво, спасибо.
поддерживаю
Это очень хороший ролик. Прежде всего нет воды, узнал целый ряд деталей, которые были непонятны с прохождения моего платного курса. Все последовательно и ясно. Лайк и подписка.
Просто и понятно, спасибо.
Давайте ещё про iptables, особенно про forward и nat
Хорошо, сделаем!
Отличное видео по iptables, спасибо!
Спасибо, все четко и понятно, просмотрел на кодклауд серию, но все в кашу смешалось)
Автору - огромное спасибо!
Спасибо большое, начал больше понимать. Еще бы видео где рассказывается про таблицу mangle как её использовать
Спасибо, что смотрите, про mangle сделаем видео позже.
Спасибо ты лучший, очень помог!
не заметил как пролетело 40 мин. отличное видео!
спасибо! отлично обьясняете!
очень круто, лучшее объяснение по iptables
Спасибо!
Отличное вводное видео, просто, чётко и понятно.
Только на 27:23 некорректно про DROP и REJECT. Как раз DROP пакета показывает наличие файрвола.
В общем случае, при отсутствии iptables или другого файрвола, при получении пакета на порт на котором ничего нет, ответ должен / будет отправлен в любом случае, и на другом уровне (пакет с reset на уровне TCP, см. RFC 793)
DROP же это поведение меняет и пакет не отправит, так что REJECT (с --reject-with tcp-reset) как раз эмулирует поведение незащищённого порта без файрвола и без какого-либо сервиса, слушающего на этом порту, а вот DROP показывает наличие файрвола, блокирующего порт.
В целом, насчёт DROP vs REJECT есть разные мнения для разных ситуаций, просто по видео может сложиться однобокое мнение по этому вопросу, поэтому уточнил.
А так супер, как и вообще канал.
Спасибо, всё по делу.
Шикарный гайд!
Насчёт включения правил - можно подстраховатся и выполнить две команды через sleep, первая команда добавляет правило, вторая отменяет его.
Пример
>> echo "one" && sleep 20 && echo "two"
Если всё впорядке, то тогда применяем правило уже окончательно.
Добрый. PING не проходил на сервер. привел команду к такому виду. iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT. Всё заработало. Спасибо за видео.
Спасибо огромное, 10/10
Отличное видео. Спасибо.
Хотелось бы еще увидеть как дебажить запросы. Что происходит с конкретным запросом пока он попадет к службе.
Какие запросы вы имеете в виду?
Хорошо объяснено, хотелось бы увидеть продолжение для локальных сетей и другой тонкой настройки
А что именно для локальных сетей интересует?
@@site_support например настройка локальной сети с несколькими подсетями и различным оборудованием, например, принтерами с ограничением доступа к определенному оборудованию из определенной подсети
Спасибо.
Отличный материал. Было бы замечательно, если рассмотрите возможность сделать что-то похожее, но про nftables.
Уже есть, на этом канале.
Спасибо, доходчиво. Хотелось бы примеры использования iptables для ограничения доступа vpn клиентов к конкретным сетям/айпишникам
vpn создает интерфейсы. В частности традиционно Wireguard создает интерфейс wg0, так же как, например, ens33 или eth0. И соответственно все эти правила пишутся для этого интерфейса. Тут нет какой-то особенности. Все тоже самое. Либо без указания интерфейса - по умолчанию - для всех, либо для конкретного интерфейса.
Освежил утерянные в рутине потока времени знания) щас пойду применять на "боевой" сервер 😅
спасибо
Про мангл и "прыжки" расскажите, пожалуйста с примерами, как всегда, было бы очень интересно
А что вас конкретно интересует?
Жаль что в этом видео не рассказали про удаление и как нужно двигать правило вверх вниз. Спасибо за ваше полезное видео
Удаление IPTABLES -D, а двигать правила нельзя.
"Волшебный рубильник" - это shutdown -r +5
27:17 Тут присутствует небольшое когнитивное искажение.
REJECT, отвечая, эмулирует закрытый (т.е. неиспользуемый) порт, скрывая, таким образом, наличие сервиса и файрвола, а DROP (на фоне ping-ов и других отвечающих портов) подчеркивает, что мы блокируем данный порт, и на нем, вероятно, запущен какой-то сервис.
Это можно проиллюстрировать с помощью nmap(8). Для REJECT он покажет, что порт закрыт ("closed", то есть не используется), так же, как если бы сервис не был запущен, а для DROP - что заблокирован ("filtered").
Разумеется, REJECT не требуется и даже будет вреден, если DROP используется по умолчанию или если мы прячем сервер от всего, включая пинги.
Всё так, тоже обратил внимание, что на видео неправильно объяснён этот момент.
Насчёт REJECT vs DROP есть разные мнения и у обоих подходов свои + и -, а на видео как-то однозначно в пользу DROP посыл.
Народная примета. Играешь с фаерволом на сервере в ЦОДе, это к дороге.
Да, если нет KVM.
@@site_support Да этой шутке лет 20, тогда никаких KVM не было.
И можете сделать какие нибудь сложные примеры с редиректом, nat и т.д.
Можем!
Отличный контетн, спасибо!
Я то по должности разработчик, так что я мамкин администратор.
Но тема захватывает.
Возник такой вопрос.
Сталкивался с руководствами, в который нежелательный траффик отсекали при помощи UFW.
Предполагаю что проблему они решают на несколько разных уровнях.
Нужно ли эти инструменты использовать совместно?
Или вы посоветуете остановиться на чем то одном?
UFW это всего лишь прокладка перед iptables, лучше сразу изучайте iptables, будет намного полезнее.
@@site_support понял вас, спасибо
Присоединюсь к остальным - отличный урок для начинающих!
Вопрос: есть ли у вас уроки по настройке QoS с помощью iptables+iproute2 на Debian/Ubuntu? Сколько не рыл - ничего не могу найти.
Такого нет, но в своё время пытался настраивать QoS и шейпинг с помощью TC. Довольно сложно и муторно.
Спасибо самое понятное обьяснение на канале, простите за вопрос - можно сделать видео ИМЕННО для простого ПК (НЕ СЕРВЕРНОГО) и как пример сделайте настройку iptables по максимуму что бы DROP БЫЛ ДЛЯ входящих и ИМЕННО для исходящих - то есть по глобальным правилам все закрыть ,но что бы работали программы которые уже стоят - поскольку в сети нет нормальной настройки именно для (простого ПК (НЕ СЕРВЕРНОГО) - для дилетанта не понятно то что есть в сети - скрипты и тд - ПОЖАЛУЙСТА сделайте такое видео
Если у вас Ubuntu, просто поставьте ufw и не парьтесь. Если у вас простой ПК, то он и без файрвола вполне нормально будет себя чувствовать.
@@site_support Спасибо но как то хочется по максимуму все сделать -)
Приветствую, вопрос как мне настроить приоритет интерфейсов, например есть два рабочих интерфейса с выходом в интернет, мне надо чтобы трафик ходил всегда по первому интерфейсу, но если первый интерфейс отваливается, то мне надо чтобы трафик ходил по второму. Спасибо
Спасибо, упорядочилось. А по nftables будет? Не пора ли на него переходить?
Возможно, будет. Пока не вижу тенденции перехода на него.
Ещё не встречал такой задачи с которой не справился бы iptables.
Эх еще бы логирование событий iptables добавить и совсем бы огонь было.
31:28 про -I
33:20 можно было ставить только iptables-persistent, так как второй пакет идет зависимостью
Спасибо за объяснение по iptables. А можете подсказать как блокировать пул ip c помощью ipset. Например если есть списки CIDR
Да, легко. Делается ipset, а потом правило. Вот здесь есть все примеры: wiki.archlinux.org/title/Ipset
продолжение про фаерволлы
День добрый коллеги , вопрос такой , вот мы тут прописываем эти правила , но при ребуте не слетят эти правила т к они добавлены но не записаны в конфигах , кто то это разбирал ? или же они сразу же прописавыються в конфигах и почему их сразу в файл не записать ???
ответ с 29 минуты >>>
А это все на CPU обрабатывается или сетевая карта может делать часть работы?
Это на CPU.
+
про ipset у вас есть?
Что-то понятное начинается с 11 мин. Где комп, где роутер, где схема сети на которой происходит работа? Может программу запустить типа браузера чтобы показывать что сеть работает
А можете сделать гайд по настройке nat
Можем!
сохранил после перезагрузки правило сбрасывается
Всем привет, для чего нужен, -A INPUT -i lo -j ACCEPT ?
Добрый день! Разрешить все входящие пакеты на интерфейс loopback. Это как localhost в windows.
У меня дедик (на debian 9) падал после команды iptables -F
Ни у кого такого не случалось?
Он не падал, скорее всего политика стояла на DROP, и весь трафик порезался.
а кто и когда решает, куда пойдет пакет - в приложения или в интерфейс? И по каким признакам принимается решение
По таблице маршрутизации и адресам в пакете.
Почему Вы считаете что iptables не может работать самостоятельно?
Что значит "самостоятельно"?
@@NickLavlinsky Вы в конце netfilter зачем то использовали. Как вводный урок - отлично!
не проще ввести один раз sudo -i?
Можно еще sudo su.
хм... Перестали резолвиться днс-запросы. Чего не зватает?
Очевидно, правил. Скорее всего с related, established.
@@site_support спасибо за внимание.
Правила:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT (при этом ping по ip-адресам проходит)
и даже
iptables -A INPUT -p udp --sport=53 -j ACCEPT
не решают проблему
А вот такое, случайно обнаруженное:
iptables -A INPUT -p udp --dport=53 -j ACCEPT
проблему решает, но почему, не понятно.
Может проблема в Docker ?
После обновления убунты? Они много что поломали, по сравнению например с версией 14. Там теперь настройка немного иначе, фаерволл не причем.
Не корректная картинка, postrouting работает и для пакетов которые приходят самому серверу и для пакетов не для него. На картинке показано как будто postrouting только для пакетов предназначенных не для сервера
В чем именно некорректная? Для входящих пакетов на хост POSTROUTING не применяется. Эта цепочка стоит на пути исходящих пакетов.
почему бы сразу не объяснять что такое -L -nv и так далее
root@box:~# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables: No chain/target/match by that name.
в чём проюлема?
сервер VPS ubuntu 22.04
соответсвенно сервер не может устанавливать соединения с другими
Правило корректное, должно работать. Может у вас уже используется nftables? Проверьте nft list ruleset.
/sbin/iptables-save?
В нормальных системах полный путь для команды не требуется.
а можешь подсказать как поставить защиту на сервер чтобы к примеру можно было зайти на него только с определенных ip.
Ну например 21 и 22 порт закріть для всех кто не всписке исключений.
но при 80 и 443 что бы не затрагивать так как там сайты для клиетов )
Поставить в правиле для SSH -s IP
@@site_support напиши пожалуйста пару команд что бы добавить и после убрать их. добавление и удаление ip. ну и я так понимаю какая то общая команда еще должна быть .
На сегодня вот такую штуку пробовал.
1. Сперва установить iptables
sudo yum install iptables
2. Проверка установки
rpm -q iptables
3. Очищаем текущие правила
sudo iptables -F"
4.
Создайте папку iptables в каталоге /etc:
sudo mkdir /etc/iptables
Создайте файл rules.v4 в этой папке:
sudo touch /etc/iptables/rules.v4
5. Разрешаем доступ к порту SSH (порт 22) только с определенных IP-адресов
sudo iptables -A INPUT -p tcp --dport 22 -s мой ip1 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -s мой ip2 -j ACCEPT
6. Блокируем доступ к порту SSH со всех остальных IP-адресов
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
7. Сохраняем правила iptables
sudo iptables-save > /etc/iptables/rules.v4
8. Перезапускаем Сервер
reboot
Но это то что с GPT сами на коленке придумали )))
Можешь подсказать правильную схему данного процесса.
От А до Я какдолжно быть ну что бы без особых еще заморочек.
Что бы просто и понятно было )))