Привет всем и добро пожаловать обратно в этой лекции я покажу вам, как
фильтровать трафик по tcp или udp портам. Это очень распространенная задача при разработке брандмауэра, который
вы можете сопоставить с одним портом, используя параметр max минус минус d порт, который приходит
от порта назначения или минус минус порт s, который поступает из порта источника, обязательно
указать протокол tcp или udp с помощью параметра минус p max, иначе вы получите ошибку, имейте в виду,
что в заголовке пакета есть порты, только если протокол - tcp или udp другие протоколы,
такие как, например, icmp, вообще не используют порты, в этом примере мы отбрасываем входящий пакет ssh,
это входящий трафик, потому что цепочка является входной, протокол - tcp, а порт назначения
- стандартный порт ssh, мы предполагаем, что существует ssh-сервер, который прослушивает порт 22.
Если мы хотим соответствовать нескольким портам, мы можем написать больше правил iptables, одно правило для каждого порта,
или мы можем использовать другой вариант, который минус m multiport, есть два других варианта минус минус us
s портов для сопоставления по исходным портам и минус-минус d портов для сопоставления по портам назначения
после того, как эта опция max прибывает порты, разделенные запятыми,
давайте посмотрим на этот пример, мы принимаем исходящий трафик x выходная
цепочка на порт 80 или 443 это означает, что трафик, предназначенный для серверов http или https,
идеально подходит, давайте перейдем к терминалу и посмотрим несколько живых примеров
из linux 2, я хочу увидеть, какие порты открыты на linux one, чтобы проверить, какие порты
открыты, я буду использовать nmap, который как отличный сканер портов
nmap и vip-адрес другой Linux-машины 192 168.0.10
через несколько секунд Nmap покажет нам, какие порты открыты на linux one, как вы можете видеть
, открыто четыре порта 22 для ssh 25 для smtp 84 http и 443 для https,
я сбросил все правила, поэтому на данный момент это открытый брандмауэр, и весь трафик принимается,
это состояние, с которого я начинаю, в каждом примере я покажу вам, что нет правила
и значение по умолчанию политика настроена на принятие, и я хочу отбросить входящий трафик fic на порт
25 iptables минус входящий трафик минус ptcp минус минус d порт 25 минус j
drop, и я снова перечисляю брандмауэр, мы можем видеть правило здесь, и нет ни одного пакета, совпадающего,
я снова сканирую linux1 из linux2 с помощью nmap Я снова выполняю ту же команду,
и мы замечаем, что порт 25 теперь фильтруется по тому, как вы знаете, в чем разница между
фильтруемым и закрытым портом? фильтруемый порт на самом деле является открытым портом, но есть брандмауэр,
который отключается трафик на этот открытый порт, и мы не получаем никакого трафика обратно при отправке
пакета на этот порт. В этом случае порт 25 открыт на Linux One, поэтому есть процесс,
который прослушивает этот порт, но он, похоже, отфильтрован до linux 2, потому что пакеты отброшены
с другой стороны, закрытый порт - это порт, на котором ни одно приложение не прослушивает, если мы отправляем
пакет на закрытый порт, мы получаем пакет обратно, указывающий, что порт закрыт
, это пакет tcp с установленным флагом сброса, например, порт 55 закрыто так В качестве вывода
отфильтрованный порт - это открытый порт, который не отвечает, потому что брандмауэр отбрасывает пакет,
а закрытый порт - это порт, где ни одно приложение не слушает, и он отвечает пакетом сброса tcp,
указывающим, что он закрыт сейчас linux 1 если я перечислю брандмауэр, я увижу несколько пакетов с максимальным значением,
есть два максимальных пакета,
давайте попробуем другие примеры, я хочу заблокировать весь входящий трафик
на порт 80. Давайте проверим, открыт ли порт 80, закрыт или отфильтрован,
и он открыт,
я собираюсь создайте новое правило брандмауэра, которое будет блокировать весь входящий трафик на порт 80.
Фактически это то же правило, что вместо порта 25 у меня есть порт 80.
Я перечисляю брандмауэр, нет подходящего пакета, и если я просканирую его снова,
мы увидим, что часть отфильтрована и есть максимальные пакеты, есть три максимальных пакета,
давайте продолжим и посмотрим еще один пример, который является очень распространенным и полезным, мы предполагаем,
что есть сервер Linux и станция управления, и мы хотим разрешить только
управление станция для подключения к серверу linux с помощью ssh или, другими словами,
мы разрешаем одному исходному IP-адресу подключаться к linux 1 с помощью ssh,
в этом примере это будет IP-адрес записывающей машины Windows, все остальные исходные
IP-адреса будут отклонены, давайте проверим, что IP-адрес этой машины с Windows.
Я запускаю ipconfig, и мы видим, что IP-адрес 192 168.0, что 112.
Хорошо, для этой задачи я собираюсь создать сценарий bash, напишите правила внутри сценария, а затем выполните
сценарий, это проще чтобы управлять файлом таким образом, первая строка моего скрипта - это shebang
и указывает, что этот скрипт будет запускаться оболочкой bash по умолчанию, сначала я очищаю таблицу фильтров
всех цепочек, потому что, возможно, я буду запускать скрипт много раз, и я не хочу, чтобы правила
добавлялись каждый раз, когда я запускаю скрипт iptables minus f, мы уже обсуждали это в
предыдущей лекции, и первое правило iptables разрешит ssh-трафик с этого конкретного IP-адреса
iptables минус ввод минус ptcp минус минус т он порт 22 минус s и IP-адрес моей
машины Windows минус j принять
это правило принимает трафик, который идет с машины Windows, теперь вы можете себе представить, что
нам все еще нужно что-то, что отбросит трафик ssh, поступающий из другого источника IP адресов
есть две возможности, если политика по умолчанию для входной цепочки настроена на отбрасывание, это означает, что
трафик, который не соответствует ни одному правилу, будет отброшен политикой в ​​этом случае
нам не нужно писать другое правило iptables, но если политика настроена на принятие, тогда нам обязательно
нужно второе правило, которое отбрасывает весь входящий трафик ssh, который не был принят до этого момента
в этом примере я ничего не сказал о политике, поэтому я напишу это второе правило iptables
минус ввод минус p tcp минус минус d порт 22 минус j drop
Я не указываю исходный IP-адрес, а это означает, что любой IP-адрес,
если вы хотите указать IP-адрес, вы можете просто написать минус s 0 0 это то же самое,
что должно быть достаточно, давайте сохраним скрипт t и сделайте его исполняемым
перед запуском скрипта. Я хочу проверить, что порт 22
открыт, поэтому я сканирую его с помощью nmap из linux 2.
x open now Я запускаю скрипт, давайте просканируем порт снова,
и порт будет отфильтрован брандмауэром отбрасывает пакеты, которые не поступают
с разрешенного IP-адреса. linux 2 не имеет разрешенного IP-адреса,
если мы перечисляем брандмауэр, который мы видим, есть отброшенные пакеты
из окон. Я открываю шпатлевку и пытаюсь подключиться к Linux 1.
Я записываем IP-адрес linux 1 и открываем, и мы видим, что порт открыт,
пакеты разрешены через брандмауэр;
первое правило принимает 18 пакетов, в последнем примере этой лекции я покажу
вам, как максимально использовать несколько портов в единственном правиле iptables, используя параметр minus m multiport max,
я попытаюсь заблокировать доступ к портам 80 и 443,
я напишу правила iptables внутри того же сценария iptables минус ввод
минус ptcp минус m многопортовый минус минус d порты 80 запятая 4 4 3 минус j
падение. в конце есть s, поэтому глубокие работы не депортируются, и я сохраняю скрипт
перед его запуском, я проверю состояние этих двух портов,
порт 80 и 443, и они открыты,
я запускаю скрипт, а затем сканирую порты снова
хорошо хост не отвечают на все и птар думает, что это не до
я буду добавлять минус р на заглавном р и 0, чтобы избежать зондирований сервера с
помощью пингов теперь говорит, что порты фильтруются именно то, что мы ожидали
там 8 совпадающих пакетов по правилу