- Порядок выполнения (.pdf)
- ВМ 1 (Спамер или еще кто-то из плохих людей)
- ВМ 2 (Фаервол; Он же - щит, который будет отбивать атаки ВМ 1)
- ВМ 3 (потенциальный сервер)
Нам требуется построить такую систему, при которой...
iptables является утилитой, выполняющей функции межсетевого экрана. Настройка iptables производится в командной строке, с помощью правил iptables можно разрешать или блокировать прохождение трафика. Когда происходит попытка установления соединения с текущей машиной, iptables просматривает список правил в списке, чтобы понять, как нужно поступить в этом случае. Если правила нет, то выполняется действие по умолчанию.
Как правило, itpables предустанавливается на всех Linux-дистрибутивах.
Общий вид управляющей команды:
iptables таблица команда цепочка критерии действие
Существует пять типов правил(цепочек) iptables:
- PREROUTING — предназначена для первичной обработки входящих пакетов, адресованных как непосредственно серверу, так и другим узлам сети. Сюда попадает абсолютно весь входящий трафик для дальнейшего анализа.
- INPUT — для входящих пакетов, отправленных непосредственно этому серверу.
- FORWARD — для проходящих пакетов, не адресованных этому компьютеру, предназначены для передачи следующему узлу, в случае, если сервер выполняет роль маршрутизатора.
- OUTPUT — для пакетов, отправленных с этого сервера.
- POSTROUTING — здесь оказываются пакеты, предназначенные для передачи на другие узлы сети.
В netfilter существуют 5 типов таблиц, каждая из них имеет свое назначение.
Мы рассмотрим таблицу nat
, так как собираемся её использовать.
Таблица nat
Используется для трансляции сетевых адресов, т.е. подмены адреса получателя/отправителя, применяется, если сервер используется в качестве маршрутизатора. Содержит цепочки PREROUTING, OUTPUT, POSTROUTING.
Рассмотрим три основных вида действий с соединениями:
- Accept — разрешить соединение;
- Drop — игнорировать соединение, вести себя так, будто его никогда не было. Действие подходит для случаев, когда нужно сделать так, чтобы источник запроса не узнал о его блокировке.
- Reject — заблокировать соединение и отправить в ответ сообщение об ошибке. Действие подходит для тех случаев, когда владелец сервера хочет дать понять, что соединение заблокировано файрволом.
- DNAT — подменяет адрес получателя в заголовке IP-пакета, основное применение — предоставление доступа к сервисам снаружи, находящимся внутри сети.
Для iptables команда — это инструкция к действию, при помощи них можно добавлять, удалять и сбрасывать все правила, задавать действия по умолчанию и многое другое. Мы рассмотрим только те команды, которые собираемся использовать:
№ | Сокращенная команда | Описание |
---|---|---|
1 | -A |
добавить правило в конец указанной цепочки |
2 | -D |
удалить правило с указанным номером в заданной цепочке |
3 | -I |
вставить правило с заданным номером, без указания номера — правило будет по умолчанию добавлено первым |
Чтобы к пакету применить какое-либо действие, необходимо, чтобы он попал под определенные критерии.
№ | Полный вид | Сокращенная команда | Описание |
---|---|---|---|
1 | —destination |
-d |
адрес получателя |
2 | —protocol |
-p |
указывает протокол, такие как tcp, udp, udplite и другие |
3 | —destination-port |
—dport |
порт получателя пакета |
4 | —jump |
-j |
когда правило подошло — выполнить указанное действие |
5 | —source |
-s |
указывает адрес источника пакета |
Надеюсь, что за 4 лабы вы научились устанавливать ВМ (виртуальные машины) и не нуждаетесь в Божьей помощи, если это не так, то рекомендую посмотреть начало 3й лабы
- Установка аналогично лабе 2 (маршрутизатор)
- На всех 3х машинах советую установить сразу net-tools:
apt install net-tools
Т.е. нам нужны 3 машины, 2 из которых с разлиными сетевыми адаптерами, а 3тья должна иметь 2 адаптера, пример:
- ВМ1 Имеет только сетевой адаптер: "Сетевой мост"
- ВМ2 Имеет 2 сетевых адаптера: "Сетевой мост" и "Виртуальный хост адаптера"
- ВМ3 Имеет только сетевой адаптер: "Виртуальный хост адаптера"
На 2й машине (маршрутизатор) не забываем включить ip forwarding
аналогично 3й лабе: там понятно описано то, как это делать netplan выдача статического ip
Нам следует для всех 3х машин зафиксировать ip, чтобы не испытывать проблем с этим в будущем, хотя этот пункт необязательный.
В моем случае после манипуляций я имею:
№ | Интерфейс | ВМ 1 | ВМ 2 | ВМ 3 |
---|---|---|---|---|
1 | enp0s3 | 192.168.3.100 |
192.168.3.101 |
- |
2 | enp0s8 | - |
192.168.56.100 |
192.168.56.101 |
Я установил следующие настройки netplan
ВМ1:
ВМ2:
ВМ3:
Выполним на ВМ 1 команду:
route add -net 192.168.56.0 netmask 255.255.255.0 gw 192.168.3.101
192.168.56.0
это сеть сетевого адптера ВМ 3 (ip в котором поставили всесто последнего октета нолик)192.168.3.101
это доступный нам ip от ВМ 2
Но при успешной отправке пакетов, нам нужно получить ответ => пропишем обратный путь на ВМ 3:
Выполним на ВМ 3 команду:
route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.56.100
192.168.3.0
это сеть сетевого адптера ВМ 1 (ip в котором поставили всесто последнего октета нолик)192.168.56.100
это доступный нам ip от ВМ 2
После чего попробуем пропинговать из ВМ3 из ВМ1
Подготовку мы прошли, можем приступать к основной части
На ВМ2 (маршрутизатор) настроем политику игнорирования прямых(если пакет с маршрутом, т.е преднозначен не для ВМ2, а для ВМ3, то это не будет блокироваться) входящих пакетов из ВМ 1 (плохой компуктер), для этого на ВМ2 пропишем следующее правило iptable:
iptables -A INPUT -s 192.168.3.100 -j DROP
Где 192.168.3.100
- ip(первой ВМ), на которое накладывается правило DROP
, т.е. игнорирование соединения.
а INPUT означает блокирование прямых входящих соединений (не пакетов с маршрутом)
Из ВМ1(плохой клиент) попробуем послать пакеты на ВМ2(маршрутизатор):
ping 192.168.3.101
Получаем игнор от маршрутизатора.
Однако, если мы отправим пакеты из ВМ1 в ВМ3, то всё получится. Это получится только из-за того, что мы указали значение флага A равное INPUT.
Для удаления правила, нам всего лишь следует заменить флаг A на D т.е на ВМ2 пропишем:
iptables -D INPUT -s 192.168.3.100 -j DROP
Теперь попробуем пропинговать ВМ2 из ВМ1:
ping 192.168.3.101
Все работает!
Заметки: Чтобы удалить все правила из всех цепочек, достаточно прописать:
iptables -F
На ВМ2 введем следующую команду, чтобы перенаправлять все входящие соединения по протоколу icmp
на ВМ3 (наш сервер )
iptables -t nat -A PREROUTING -p icmp -d 192.168.3.101 -j DNAT --to-destination 192.168.56.101
На ВМ2 введем следующую команду, чтобы заблокировать все входящие маршрутизир. соединения от ВМ1
iptables –A FORWARD -s 192.168.3.100 –j DROP
После ввода этой команды, все маршрут соединения с ВМ1 будут игнорироваться.
Можно еще поиграться с параметрами и настроить так, как вы хотите(порт, сеть, сетевой интерфейс и тд), параметров уйма
Из ВМ1(плохой клиент) попробуем послать пакеты на ВМ2 (маршрутизатор), для которых мы прописали правило DNAT
, чтобы они перенаправлялись на ВМ3 (Сервер типа):
ping 192.168.3.101
Получаем игнор, всё отработало правильно и маршрутизатор игнорирует входящие FORWARD соединения от ВМ1.
По сути лаба выполнена.
Внесенные в цепочки правил изменения пропадут при перезапуске iptables, так что их нужно сохранить с помощью специальной команды. В зависимости от используемого Linux-дистрибутива команда может выглядеть по-разному.
- Ubuntu:
sudo /sbin/iptables-save
- Red Hat / CentOS:
/sbin/service iptables save
- Или
/etc/init.d/iptables save
Если будут вопросы, пишие VK.