Asplinux 12 настроить интернет через межсетевой экран

Обновлено: 06.07.2024

Для новичков и продвинутых пользователей операционный системы Линукс был разработан специальный межсетевой экран (так называемый «файрвол») для защиты от угроз извне, который носит имя Iptables. Ниже в инструкции мы объясним, как его установить и настроить на любых машинах под ОС Linux.

Что представляет собой Iptables

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

Файрвол предусмотрен стандартно во всех операционных системах Линукс. Для установки, если его внезапно не оказалось в сборке, или обновления следует применить такую команду:

sudo apt-get install iptables

Альтернативой данной утилите может послужить Firestarter – он имеет графический интерфейс и разработан специально для пользователей, которые испытывают трудности с работой через командную строку.

В случае настроек Iptables по удаленному SSH-соединению, пользователю следует проявлять аккуратность: одно ошибочное правило способно прервать подключение и запретить юзеру доступ к удаленной машине.

Какие бывают правила

Для легкой работы с файрволом разработана тройка основных правил (команд):

1.Input.

Правило применяется, когда необходимо контролировать входящий трафик. Например, когда юзер подключается к удаленному серверу по протоколу Secure Shell, файрвол начнет сравнивать его айпи с другими айпи из своего списка. В зависимости от результата, то есть от наличия в списке запретов, доступ пользователю будет открыт или закрыт.

2.Forward.

3.Output.

Правило применяется к исходящим соединениям. Например, юзер хочет проверить пинг к одному из заданных сайтов – утилита вновь сверится со своими правилами из списка и определит, как поступить при пинге веб-сайта: разрешить или запретить.

Делая ping к внешнему хосту, машина не только отправляет пакет, но и дожидается обратного ответа. Поэтому, настраивая Iptables, не нужно забывать о наличии двухсторонних коммуникаций и запрещать подключение к серверам через протокол SSH.

Как определиться с назначением файрвола

Перед тем, как заниматься настройкой утилиты, потребуется разобраться с ее предназначением, а именно – действующими цепочками правил, то есть то, что она будет делать по умолчанию. Как отреагировать, когда запрашиваемые соединения не подходят ни к одному правилу?

Для начала потребуется понять, какие из настроек межсетевого экрана уже установлены. Для этого применяется команда –L:

Настройки межсетевого экрана

Скриншот №1. Настройки межсетевого экрана

Для четкого и понятного вывода информации можно воспользоваться дополнительной командой «grep». В итоге мы получаем тройку цепочек, у каждой из которых стоит разрешение приема трафика. Подобные правила предпочитают устанавливать при стандартной настройке.

Если в процессе эксплуатации Iptables конфигурация была кем-то изменена, значения могут стоять другие. Проверить это можно за пару секунд, достаточно ввести команды:

iptables --policy INPUT ACCEPT iptables --policy OUTPUT ACCEPT iptables --policy FORWARD ACCEPT

Правильнее будет заблаговременно разрешить все входящие/исходящие подключения, после чего выставлять запреты под конкретный порт и айпи-адрес.

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

iptables --policy INPUT DROP iptables --policy OUTPUT DROP iptables --policy FORWARD DROP

Что делать с соединением

Настроив поведение утилиты, которое будет происходить автоматически, следует приступать к правилам, обрабатывающим входящий/исходящий трафик. Основные способы взаимодействия с трафиком:

Accept – разрешение определенного соединения;

Drop – игнорирование запросов (межсетевой экран продолжает свое функционирование, будто никакого запроса не происходило, а запрашивающие ресурсы не узнают об игнорировании);

Пример того, как будет выглядеть ping для

Разрешенного соединения (Accept):

Ping для разрешенного соединения

Скриншот №2. Ping для разрешенного соединения

Проигнорированного трафика (Drop):

Ping для проигнорированного трафика

Скриншот №3. Ping для проигнорированного трафика

Отклоненного подключения (Reject):

Ping для отклоненного подключения

Скриншот №4. Ping для отклоненного подключения

Разрешение и блокировка указанных соединений Iptables

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

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

В случае, когда необходимо разместить правила в определенное место (перед каким-то определенным), следует воспользоваться командой:

iptables -I [цепочка] [номер позиции по списку для нового правила]

Что делать с соединениями от одного айпи

Для блокировки трафика, поступающего из одного и того же источника (например, айпи 120.120.120.120) подойдет команда:

iptables -A INPUT -s 120.120.120.120 -j DROP

Для блокировки трафика, поступающего с нескольких айпишников в определенном диапазоне, следует воспользоваться стандартной записью масок посредством слэша:

iptables -A INPUT -s 120.120.120.0/24 -j DROP

Либо записью необходимого диапазона:

iptables -A INPUT -s 120.120.120.0/255.255.255.0 -j DROP

Подключения к определенному порту

Следующая команда сделает блокировку соединений типа Secure Shell с хостом 120.120.120.120:

iptables -A INPUT -p tcp --dport ssh -s 120.120.120.120 -j DROP

На месте Secure Shell допустимо применение любого протокола. После команды –р указывается тип подключений, в данном случае – TCP. В случае, когда используется другой тип, следует указывать его.

Любому айпишнику будет запрещено подключаться к машине по Secure Shell соединению, если выполнить:

iptables -A INPUT -p tcp --dport ssh -j DROP

О состояниях соединения

Существует множество протоколов, которым требуется двусторонняя коммуникация. К примеру, пользователю понадобилось поработать с SSH-соединением, ему придется внести правило сразу и в Output, и в Input.

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

Разрешим соединение типа SSH, приходящее через хост 120.120.120.120. Система будет отправлять данные по этому протоколу только, если сессия установлена.

iptables -A INPUT -p tcp --dport ssh -s 120.120.120.120 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -d 120.120.120.120 -m state --state ESTABLISHED -j ACCEPT

Как сохранить изменения в конфигурации файрвола

После всех изменений, которые мы внесли в цепочку межсетевого экрана, понадобится их сохранение. Иначе перезапуск утилиты удалит проделанные нами настройки. Команда сохранения будет различаться от дистрибутива к дистрибутиву Линукс.

Для Убунту команда выглядит так:

Для Red Hat и CentOS:

=/sbin/service iptables save

Дополнительно

Чтобы вывести сконфигурированное ранее правило:

Чтобы просмотреть данные о входящих/исходящих пакетах и трафике, достаточно добавить ключ –v.

Данные об имени хоста, протоколах, сетях появятся в цифровом виде, если дописать в команду –n.


Проект iptables, разработанный Расти Расселом (Rusty Russell) в 1999 году для управления netfilter и заменивший в ядре 2.4 ipchains и ряд других инструментов вроде ipnatctl, предлагает более расширяемый способ фильтрации пакетов, обеспечивающий сисадмину больший контроль при упрощении самих правил. Так, в ipchains нужно было создавать правило в каждой цепочке, прослеживая весь маршрут пакета, теперь достаточно одного. Появление модулей позволяло очень просто расширять возможности. В процессе развития проекта iptables был портирован для IPv6 (в 2011 году, ip6tables), добавлялись дополнительные модули (ULOG, nf_conntrack), он научился производить разные манипуляции с пакетами, классифицировать трафик (до седьмого уровня OSI), балансировать нагрузку и многое другое. С ростом количества функций усложнились и настройки. При этом, даже несмотря на некоторую унификацию, каждое расширение имеет свой синтаксис, одни поддерживают диапазоны, отрицание, префиксы, другие — нет. Поначалу каждое изменение правил требовало полного перезапуска брандмауэра, включая выгрузку модулей, что приводило к разрыву установленных соединений. Сейчас такой проблемы нет.

Для простых случаев настройка при помощи iptables — дело нехитрое, но в сложных сетях управлять большим количеством правил становится тяжело; чтобы изучить все настройки и понять, как оно работает, нужно потратить время. Трудно с ходу разобраться, что делают все цепочки, правила начинают повторяться, их становится сложно обслуживать, обновлять и переносить на другие системы.

Неудивительно, что для решения этих проблем были придуманы разные надстройки. Так, в Ubuntu для простой настройки правил используется ufw (Uncomplicated Firewall — несложный файрвол). Например, чтобы открыть доступ к SSH-порту, достаточно ввести

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

Под капотом FERM находится обычный Perl-скрипт, который конвертирует конфигурационные файлы в правила iptables.

В Fedora 18 был анонсирован демон firewalld, ставший официальным приложением для управления настройками netfilter в RHEL 7 / CentOS 7. Последние становятся все популярнее на VDS, а значит, придется столкнуться с их особенностями.

Возможности firewalld

Firewalld запускается как демон, новые правила добавляются без перезапуска и без сброса установленного файрвола. Изменения в конфигурации могут быть сделаны в любое время и применяются мгновенно: сохранять или применять изменения не требуется. Поддерживается IPv4, IPv6, автоматическая загрузка модулей ядра и сетевые зоны, определяющие уровень доверия соединений. Предоставляется простой интерфейс добавления правил для служб и приложений, белый список приложений, имеющих право менять правила. В настоящее время такую возможность поддерживает libvirt, Docker, fail2ban, Puppet, скрипт установки Virtuozzo и многие другие проекты. В репозитории YUM уже есть пакеты fail2ban-firewalld и puppet-firewalld, поэтому подключить их можно одной командой.

Firewalld предоставляет информацию о текущих настройках брандмауэра через D-Bus API, а также принимает изменения через D-Bus с использованием методов аутентификации PolicyKit. В качестве бэкенда используются iptables, ip6tables, ebtables, ipset и планируется nftables. Но сами правила, созданные непосредственно этими утилитами, firewalld не может разобрать, поэтому оба метода использовать нельзя.

Управление производится при помощи утилит командной строки firewall-cmd или графической firewall-config, позволяющей настроить все правила в удобной среде. Для помощи в миграции текущих правил iptables на firewalld используется утилита firewall-offline-cmd, по умолчанию считывающая /etc/sysconfig/system-config-firewall . В последних релизах появилась утилита firewallctl, имеющая простой синтаксис и позволяющая получать информацию о состоянии службы, конфигурации брандмауэра и изменять правила.

Графическая firewall-config поддерживает firewalld

Параметры firewall-cmd

Разрешить соединение на определенный порт очень просто:

Чтобы любые изменения вступили в силу, всегда после правок должна быть запущена команда

Для удаления порта из правил используется параметр --remove-port :

Вообще, многие команды --add-* имеют значения для проверки статуса --query-* , --list-* — список, изменения --change-* или удаления --remove соответствующего значения. Для краткости на этом не будем дальше заострять внимание. После релоада правил проверяем:

В firewalld предусмотрен режим, позволяющий одной командой заблокировать все соединения:

Для проверки, в каком режиме находится файрвол, есть специальный ключ:

Отключается panic mode:

В firewalld необязательно знать, какой порт привязан к сервису, достаточно указать название сервиса. Все остальное утилита возьмет на себя.

После установки firewalld знает настройки более 50 сервисов, получаем их список.

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

Firewalld хранит все настройки в XML-файлах в каталогах в /usr/lib/firewalld. В частности, сервисы лежат в services. Внутри файла описание: название, протокол и порт.

Это каталог системный, и менять там ничего нельзя. Если нужно переопределить настройки или создать свой сервис, то копируем любой файл в качестве шаблона в /etc/firewalld/services , правим под свои условия и применяем настройки.

Для настройки ICMP используется отдельный набор правил. Получаем список поддерживаемых типов ICMP:


Все настройки firewalld хранит в XML-файлах

Firewalld знает о почти 50 сервисах

Управление зонами

Для определения уровня доверия сетевому соединению в firewalld используются зоны. Зона может содержать несколько сетевых подключений, но сетевое соединение может входить только в одну зону. Список всех зон получаем командой firewall-cmd --get-zones .

Получаем список зон

Получаем список зон

После установки создается девять зон, в зависимости от назначения может быть использована одна или несколько зон:

Описания зон также представлены в XML-файлах в /usr/lib/firewalld/zones .

После установки системы обычно используется зона public. Если имеющихся зон недостаточно, то можно создавать новые зоны при помощи

Настройки зон по умолчанию

Настройки зон по умолчанию

Все пакеты, не попадающие под определенные зоны, обрабатываются в зоне по умолчанию.

Теперь — какие зоны сейчас активны и какие интерфейсы к ним привязаны.

Также можем получить обратную информацию — к какой зоне привязан интерфейс.

Смотрим настройки зоны (сервисы, порты, протоколы. ).

Если параметр пуст, то это значит, что настройки не установлены. При необходимости переназначаем интерфейс зоне:

Если сейчас проверить вывод firewall-cmd --zone=public --list-all , то увидим, что из списка установок пропал сетевой интерфейс. Разрешим подключение сервиса:

Удаляется он так же:

К зонам можно привязывать и другие источники, определяемые по MAC, отдельному IP или адресу сети. Пакет, пришедший из такого источника, будет обрабатываться по правилам зоны.

Список всех source смотрим при помощи --zone=trusted --list-sources . NAT, позволяющий нескольким компьютерам подключаться к сети, в firewalld включается одной командой. Смотрим текущие настройки маскарадинга:

Если в ответ получим no , то включаем:

Это все. Для доступа извне настроим форвардинг порта в один из компьютеров. Например, нам нужен доступ по SSH к внутреннему серверу:

Удаляется правило форвардинга при помощи --remove-forward-port .

Сложные правила

Для отдельного ПК или небольших сетей базовых возможностей вполне хватает, для настройки сложных правил в firewalld изначально предлагался так называемый direct-синтаксис, чуть позже появился собственный язык Rich Language. В первом варианте достаточно знать синтаксис iptables, рекомендуется использовать в крайнем случае, так как правила не сохраняются после перезагрузки.

Синтаксис direct правила такой:

Добавляем правило, разрешающее соединение по 25-му порту:

Пробросим соединение по 22-му на другой сервер:

Большой плюс Rich Language в том, что все параметры можно описать в XML в файле зоны. Формат файла очень простой и повторяет названия параметров:

Настройка файрвола — дело привычки. Часто удобнее вбить команду, которой пользуешься уже не один год, чем осваивать новую утилиту. Поэтому иногда все-таки хочется вернуть классический инструмент. Это не проблема. Iptables в CentOS 7 не ставится, поэтому его нужно вернуть:

Чтобы не настраивать все повторно, лучше сохранить текущие правила, сгенерированные firewalld.

Останавливаем firewalld и запускаем iptables:

Проверяем текущие правила:

Запрещаем автозапуск firewalld при загрузке ОС:

Выводы

Как видишь, ничего сложного! Firewalld очень упрощает установки, особенно если учесть, что настройки легко перенести.

Все пакеты пропускаются через определенные для них последовательности цепочек. При прохождении пакетом цепочки, к нему последовательно применяются все правила этой цепочки в порядке их следования. Под применением правила понимается: во-первых, проверка пакета на соответствие критерию, и во-вторых, если пакет этому критерию соответствует, применение к нему указанного действия. Под действием может подразумеваться как элементарная операция (встроенное действие, например, ACCEPT, MARK), так и переход в одну из пользовательских цепочек. В свою очередь, действия могут быть как терминальными, то есть прекращающими обработку пакета в рамках данной базовой цепочки (например, ACCEPT, REJECT), так и нетерминальными, то есть не прерывающими процесса обработки пакета (MARK, TOS). Если пакет прошел через всю базовую цепочку и к нему так и не было применено ни одного терминального действия, к нему применяется действие по умолчанию для данной цепочки (обязательно терминальное).

ACCEPT, DROP и REJECT — базовые операции фильтрации

Данная таблица предназначена для операций по классификации и маркировке пакетов и соединений, а также модификации заголовков пакетов (поля TTL и TOS).

Предназначена для операций stateful-преобразования сетевых адресов и портов обрабатываемых пакетов.

Предназначена для фильтрации трафика, то есть разрешения и запрещения пакетов и соединений.

Таблица filter содержит следующие цепочки:

Правила стоит располагать по возможности в порядке от наиболее частых попаданий к наиболее редким.

При отсутствии правил вывод будет примерно таким:

Если вывод отличается, то сброс настроек можно сделать командой

При отсутствии правил вывод будет примерно таким:

Для цепочки "проходящая" устанавливаем блокировку, для цепочки "выходная" устанавливаем разрешение, для цепочки "входная" устанавливаем блокировку. Далее будут правила, определяющие исключения для этих политик.

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

2. Разрешим локальный интерфейс

3. Запретим "неправильный" трафик (не открывающий новое соединение и не принадлежащий никакому установленному соединению).

4. Разрешим новые ICMP запросы (ping). Остальные запросы ping будут обработаны первым правилом.

5. Разрешим новые входные соединения по портам

Если установлен веб-сервер

Если необходима связь по SSH

Если установлен DNS-сервер

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

6. Все новые входящие соединения, не обработанные предыдущими цепочками, запретим.

Решил написать статью по следам курса, который я делал в прошлом семестре в институте. Конечно, тут я опишу лишь самые главные основы и максимально все упрощу. Постараюсь дать немного теоритической информации, но в основном больше ссылок, картинок и практики.

Итак, речь пойдет о написании firewall в среде Linux. Всю статью я поделю на несколько частей. То, что вы читаете сейчас – первая часть, она поделена еще на три части. Некоторые темы хорошо известны и задокументированы, поэтому я постараюсь отдельно давать минимум теории по ним и отдельно практику. Чтобы всем было интересно. А также ссылки для углубления (часто это будут английские статьи).

Содержание первой части:

Содержание второй части:

2.1 — Введение во вторую часть. Смотрим на сеть и протоколы. Wireshark.
2.2 — Таблицы Firewall. Transport Layer. Структуры TCP, UDP. Расширяем Firewall.
2.3 — Расширяем функциональность. Обарабатываем данные в user space. libnetfilter_queue.
2.4 — (*Опиционально) Изучаем реальную Buffer Overflow атаку и предотвращаем с помощью нашего Firewall'а.


Часть 2. Еще не готова, но думаю затронуть следующие темы: краткое введение в таблицы firewall. Stateless vs statefull firewall. Добавление еще одного модуля для загрузки таблиц правил (через виртуальную файловую систему sysfs из первой части, может быть тут я просто дам исходный код, потому что принципиально ничего нового тут нет). Добавим небольшую прокси-программу в user space и пошлем нужный траффик из kernel в прокси, поработаем с содержанием траффика и на этой основе примем решения о его дальнейшей судьбе (добавим возможность блокировать отдельные сайты). А так же возьмем реальную известную атаку основанную на buffer overflow, захватим управление над удаленным компьютером с ее помощью и посмотрим как наш firewall может защитить от этого.

Возможно вторая часть будет разбита на две, или изменена. Буду очень рад вашим комментариям и пожеланиям как по первой части так и по второй.

Введение

Наша цель в этой части – написание программы, которая будет на очень простом уровне контролировать весь траффик. А именно – мы определим какие пакеты можно пропускать, а какие удалять. Создадим простую систему логов, для отслеживания результатов, а так же программу для конечно пользователя, через которую можно будет читать эти результаты и немного управлять программой. Такой вот тривиальный firewall или на русском языке — Межсетево́й экра́н, сетево́й экра́н — это комплекс аппаратных и программных средств в компьютерной сети, осуществляющий контроль и фильтрацию проходящих через негосетевых пакетов в соответствии с заданными правилами. (Wikipedia).

В нашем случае, функцию firewall будет выполнять отдельный компьютер. Выглядить это будет так:


Давайте смотреть. Мы сделаем сеть, в которой будет три виртуальных компьютера – host1, host2, fw и соединим их как на картинке выше.


В двух словах про DHCP (англ. Dynamic Host Configuration Protocol — протокол динамической настройки узла) —сетевой протокол, позволяющий компьютерам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP. (Wikipedia).

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

Создание виртуальной среды. Теория

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

Мы воспользуемся бесплатной программой VirtualBox, которая позволяет создавать виртуальные сети на одном компьютере. Конечно же не принципиально чем именно пользоваться, главное иметь возможность сконфигурировать сеть. Программа бесплатна, ищем, качаем, ставим.
Следующим шагом будет добавить виртуальные машины. Я буду работать с Linux Ubuntu 12, по «историческим причинам». Вы можете скачать последнюю версию. Тем более если ваш копьютер достаточно мощный. Образ Ubuntu можно найти тут.

Я надеюсь, что читающий справится с добавление образа в virtualbox и теперь у вас есть что-то похожее на картинку. Я советую воспользоваться функцией “clone” в virtualbox, для быстрого создания еще двух машин. У меня в роли host1, host2 специально урезанные «легкие» версии ubuntu, без графического интерфейса (не хватает RAM для полноценных).

Примерно так это должно выглядеть в конце


Создание виртуальной среды. Практика

И так, я предполагаю, что у Вас уже есть три виртуальных linux машины, которые мы сейчас сконфигурирует в одну сеть и проверим, что все работает, прежде чем начать писать программу.

Идем в settings и конфигурируем как на фото:


Добавляем сетевое устройство:


Теперь, linux «будет думать», что у нашего компьютера, есть сетевая карта, а если вы посмотрите в Advanced, то увидите, что в нее еще и вставлен кабель. Отлично. Теперь надо сконфигурировать этк карту в операционной системе. Для этого запускаем host1.

На данном этапе, я предполагаю, что читателю ивестно, что такое IP адресс как он выгледит и зачем он нужен. Я буду редактировать в vi, вы можете в любом другом редакторе, но не забываем давать права администратора (запускать с sudo), чтобы иметь возможность сохранить.


«Просим» систему заново прочитать файл конфигурации (чтобы не перезагружать машину):


Запускаем ifconfig и проверяем, что у нас есть сетевая карта под именем eth0, с IP == 10.0.1.1, маской и тд и тп.


То же самое делаем с host2, только IP установить в 10.0.2.2, gateway 10.0.2.3 и не забыть «добавить» сетевую карту в настройках машины в virtualbox (у меня после изменений настроек в virtualbox, машина при загрузке подвисала на пару минут и писала waiting for network configuration… Это связано с тем, что по умолчанию, сетевой интерфейс сконфигурирован как dhcp, то есть, операционная система ждет динамически получить сетевые настройки, но в virtualbox, для этого она должна быть сконфигурирована как NAT, но мы это поменяли, поэтому ОС пытается понять, что не так. Можно сначало загрузить ОС, отредактировать interfaces, потом выключить компьютер, изменить настройки и запустить заново).


Теперь пришла очередь главной машины, которая будет выполнять роль firewall. Напоминаю, что нам понадобятся три сетевые карты, через одну мы сможем выходить в интернет в случае необходимости поэтому она будет определена как NAT. Остальные две будут ответственны пересылать трафик с host1 -> host2 и обратно с host2 -> host1.


Adapter1 – должен быть выставлен как NAT. Настройки Adapter2, Adapter3, такие же как и в предыдущих примерах (Internal network). Запускаем, начинаем конфигурировать сетевые карты. Так должен выглядеть файл interfaces.


А вот – конечный результат конфигурации, после перезапуска:


Последнее, что осталось сделать — это разрешить packet forwarding, для того чтобы компьютер мог брать пакеты с одного сетевого интерфейса(10.0.2.3) на который приходят пакеты от host2 и передать их на другой сетевой интерфейс 10.0.1.3 связннаый соответственно с host1.

Тут все подробно описано. Чтобы настройка была постоянной, нужно изменить следующую строчку в /etc/sysctl.conf:


Сделать это можно любым удобным способом, не забываем sudo. Много информации про конфигурацию интерфесов можно почитать тут.

Проверка

Осталось проверить, что все связно друг с другом и работает. Проверять будем классическим ping


Как видно на картинке, ping «прошел» с host1 -> host2, host2 -> host1, fw -> host1, fw -> host2. Готово, «лаборатория» для будущих экспериментов настроена.

Читайте также: