Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

24 KiB

Лабораторная работа 2

Часть 1. Настройка межсетвеого экрана в Linux-системах

Цель работы

Получить практические навыки настройки межсетевого экрана (фаервола), а также настройки переадресации сетевых соединений и трансляции адресов (NAT).

1. Теоретическая часть

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

1.1 Работа IPTABLES. Основные понятия

При описании выполняемых команд приняты следующие обозначения:

  • # - если перед командой стоит данный знак, это означает, что команда должна выполняться от имени пользователя root (суперпользователь)
  • $ - если перед командой стоит данный знак, это означает, что команда должна выполняться от имени обычного пользователя.

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

# iptables [-t table] command [match] [target/jump]         

Если в правило не включается спецификатор [-t table], то по умолчанию предполагается использование таблицы filter, если же предполагается использование другой таблицы, то это требуется указать явно. Спецификатор таблицы так же можно указывать в любом месте строки правила, однако более или менее стандартом считается указание таблицы в начале правила. Можно использовать следующие таблицы:

  • Таблица nat используется главным образом для преобразования сетевых адресов (Network Address Translation). Через эту таблицу проходит только первый пакет из потока. Преобразования адресов автоматически применяется ко всем последующим пакетам;
  • Таблица mangle используется для внесения изменений в заголовки пакетов. Примером может служить изменение поля TTL, TOS или MARK;
  • Таблица filter используется главным образом для фильтрации пакетов. Для примера, здесь мы можем выполнить DROP, LOG, ACCEPT или REJECT без каких либо ограничений, которые имеются в других таблицах;

Далее, непосредственно за именем таблицы, должна стоять команда. Если спецификатора таблицы нет, то команда всегда должна стоять первой. Команда определяет действие iptables, например: вставить правило, или добавить правило в конец цепочки, или удалить правило и т.п. Ниже перечислены команды iptables:

  • -A, --append - добавление нового правила в конец заданной цепочки;
  • -D, --delete - удаление правила из цепочки. Команда имеет два формата записи, первый - когда задается критерий сравнения с опцией -D, второй - порядковый номер правила;
  • -R, --replace - замена одного правила другим;
  • -I, --insert - вставка нового правила в цепочку. Число, следующее за именем цепочки, задает номер для вставляемого правила;
  • -L, --list - вывод списка правил в заданной цепочке. Если имя цепочки не указывается, то выводится список правил для всех цепочек;
  • -F, --flush - сброс (удаление) всех правил из заданной цепочки (таблицы). Если имя цепочки и таблицы не указывается, то удаляются все правила, во всех цепочках;
  • -Z, --zero - обнуление всех счетчиков в заданной цепочке. Если имя цепочки не указывается, то подразумеваются все цепочки;
  • -N, --new-chain - создание новой цепочки с заданным именем в заданной таблице;
  • -X, --delete-chain - удаление заданной цепочки из заданной таблицы. Удаляемая цепочка не должна иметь правил, а также ссылок на нее из других цепочек. Если имя цепочки не указано, то будут удалены все цепочки заданной таблицы кроме встроенных;
  • -P, --policy - определение политики «по-умолчанию» для заданной цепочки. Политика «по-умолчанию» определяет действие, применяемое к пакетам, не попавшим под действие ни одного из правил в цепочке;
  • -E, --rename-chain - переименование пользовательской цепочки.

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

  • -p, --protocol - тип протокола. Примерами протоколов могут быть TCP, UDP и ICMP (список протоколов можно посмотреть в файле /etc/protocols), а также ключевое слово ALL;
  • -s, -src, --source - IP-адрес(а) источника пакета. Может указываться как единственный IP-адрес, так и в виде address/mask, например как 192.168.0.0/255.255.255.0,или 192.168.0.0/24. Символ !, установленный перед адресом, означает логическое отрицание;
  • -d, -dst, --destination - IP-адрес(а) получателя. Имеет синтаксис схожий с критерием -source;
  • -i, --in-interface - интерфейс, с которого получен пакет. При отсутствии этого критерия предполагается любой интерфейс;
  • -o, --out-interface - имя выходного интерфейса. Критерий допускается использовать только в цепочках OUTPUT, FORWARD и POSTROUTING, в противном случае будет генерироваться сообщение об ошибке;
  • -f, --fragment - правило распространяется на все фрагменты фрагментированного пакета, кроме первого;
  • -m limit - устанавливает предельное число пакетов в единицу времени, которое способно пропустить правило;
  • --dport, ¬-destination-port - порт или диапазон портов, на который адресован пакет;

Значение target указывает, какое действие должно быть выполнено при условии выполнения критериев в правиле. Здесь можно заставить ядро передать пакет в другую цепочку правил, «сбросить» пакет и забыть про него, выдать на источник сообщение об ошибке и т.п. Ниже приведен список действий:

  • ACCEPT - пакет прекращает движение по цепочке (и всем вызвавшим цепочкам, если текущая цепочка была вложенной) и считается принятым;
  • DNAT - используется для преобразования адреса места назначения в IP заголовке пакета.Если пакет подпадает под критерий правила, выполняющего DNAT, то этот пакет, и все последующие пакеты из этого же потока, будут подвергнуты преобразованию адреса назначения и переданы на требуемое устройство, хост или сеть;
  • DROP - действие «сбрасывает» пакет. "Сброшенные" пакеты прекращают свое движение полностью;
  • LOG служит для журналирования отдельных пакетов и событий. В журнал могут заноситься заголовки IP пакетов и другая интересующая информация;
  • MARK используется для установки меток на определенные пакеты. Действие может выполняться в пределах таблицы mangle;
  • QUEUE - ставит пакет в очередь на обработку пользовательскому процессу. Оно может быть использовано для нужд учета, проксирования или дополнительной фильтрации пакетов;
  • REDIRECT - выполняет перенаправление пакетов и потоков на другой порт той же ЭВМ;
  • REJECT - используется, как правило, в тех же самых ситуациях, что и DROP, но в отличие от нее, команда 'REJECT` выдает сообщение об ошибке на хост, передавший пакет;
  • RETURN - прекращает движение пакета по текущей цепочке правил и производит возврат в вызывающую цепочку, если текущая цепочка была вложенной, или, если текущая цепочка лежит на самом верхнем уровне (например, INPUT), то к пакету будет применена политика «по-умолчанию»;
  • SNAT - используется для преобразования сетевых адресов, т.е. изменение исходящего IP адреса в IP заголовке пакета;
  • TOS используется для установки битов в поле Type of Service IP заголовка. Поле TOS содержит 8 бит, которые используются для маршрутизации пакетов;
  • TTL используется для изменения содержимого поля Time To Live в IP заголовке;
  • ULOG предоставляет возможность журналирования пакетов в пользовательское пространство. Оно заменяет традиционное действие LOG, базирующееся на системном журнале.

2. Практическая часть

Описание задачи: требуется защитить web-сервер. Необходимо разрешить доступ к портам 80 и 22 и сделать перенаправление вызова с порта 8080 на 80. При попытке обратится к портам сервера, не описанным в операционной системе (ОС) как сервис, следует отказывать в обслуживании. При попытке обратится к портам, описанным в системе как сервисы, следует отказывать в обслуживании и заносить данные об этом в журнал. Для выполнения задания необходима следующая последовательность действий.

2.1 Определение политики по умолчанию

Определение политики по умолчанию для цепочек с учетом того, что все порты системы для должны быть закрыты для внешнего пользователя. Поскольку осуществляется фильтрация пакетов, их обработка будет производится в таблице filter. Используем ключ –P чтобы задать политику по умолчанию. Зададим правило для входящих пакетов (цепочка INPUT). Действие для обработки политики по умолчанию LOG (журналирование запроса). Поскольку политика по умолчанию определяется для всех портов, критерии проверки опускаются.

# iptables -P INPUT ACCEPT
# iptables -A INPUT -j LOG

Определим также политику «по-умолчанию» для исходящих пакетов с разрешением всем исходящим IP-пакетам беспрепятственно проходить фильтрацию. Для определения заданной политики по умолчанию необходимо выполнить в консоли

# iptables –P OUTPUT ACCEPT         

2.2 Добавление правил для портов 22 и 80

Осуществляется командой, в которой для заданных критериев применено действие ACCEPT, то есть пакет будет пропущен брэндмауэром.

# iptables –A INPUT –p tcp ––dport 22 –j ACCEPT
# iptables –A INPUT –p tcp ––dport 80 –j ACCEPT

2.3 Добавление правила для порта 8080. Переадресация с порта 8080 на порт 80

Поскольку происходит преобразование адреса назначения, используем таблицу nat. Критерии для применения этого правила: –p tcp ––dport 8080. Изменение получателя осуществляется в цепочке PREROUTING. Правило для переадресации – REDIRECT, которое имеет дополнительный ключ для определения порта переадресации ––to-ports. Зададим перенаправление на порт 80. Таким образом для определения последнего правила, необходимо ввести в командной строке:

# iptables -t nat -I PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

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

# iptables –S
# iptables –t nat -S

*Скриншот

Пример первой выполненной команды:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -j LOG
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT

Проверка правильности настройки защиты web-сервера на основе iptables осуществляется проведением проверки доступных для подключения портов на сервере. Для получения открытых для подключения портов следует воспользоваться сканером портов nmap и выполнить следующую инструкция в командной строке.

Проверьте, что на компьютере установлен nmap, выполнив команду:

$ nmap

Если система выдала ошибку, что такой программы нет, необходимо установить nmap:

# apt-get update
# apt-get install nmap

Запуск команды сканирования портов:

$ nmap localhost

Вывод команды покажет какие порты на данный момент открыты в системе. Пример:

Starting Nmap 7.01 ( https://nmap.org ) at 2017-10-10 04:54 PDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000065s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh

Для сброса настроек iptables в изначальное состояние:

# iptables –F
# iptables –t nat -F

3. Задание

Необходимо сделать перенаправление вызова с соответствующих портов.

Для начала потребуется установить дополнительные пакеты

apt-get update
apt install -y screen python3-pip net-tools
pip install simple-http-server

Утилита screen позволяет создавать независимые окна терминала:

  • screen -S name - создание окна терминала с идентификатором name и переход в него;
  • screen -r name - переход в окно терминала name;
  • screen kill name - удаление окна терминала name;
  • screen -ls - список созданных окон.

Комбинация клавиш Ctrl+A+D выйти в главное окно терминала.

Для проверки доступа по указанному порту, в новом окне терминала выполните следующую команду (вместо слова port укажите номер порта)

"port" port задается в формате 8GVV, где G - номер группы, а VV - вариант из первой лабораторной работы
$ screen -S server
$ python3 –m http.server port

После запуска команды, в браузере необходимо проверить доступность вашего сервера, для этого наберите строку ip_adress:port.

*узнать свой ip-адрес можно с помощью команды ifconfig

В браузере вы увидите страничку с файловой системой: *Скриншот

Это означает, что порт открыт и вы можете получить доступ к запущенному Web-server. После запуска запустите команду nmap и посмотрите, какие порты открыты сейчас.

После внесения правила перенаправления, проверьте доступность вашего сервера в браузере, перейдя по адресу: ip_adress:redirect_port *Скриншот

"redirect_port" redirect_port задается в формате 80 + VV, где VV - вариант из первой лабораторной работы (VV = 01 -> redirect_port = 81)

Повторно запустите команду nmap и проверьте вывод.

*Скриншот # iptables –t nat -S

Часть 2. Настройка межсетвеого экрана в Linux-системах

Цель работы

Лабораторная работа разделена на две части:

  1. Подсистема разграничения доступа в ОС Linux
  2. Создание криптографических ключей и управление ими

Выполняются лабораторные работы на сервере:

10.5.143.103:PORT

Порт подключения у каждого студента индивидуальный:

*алгоритм выполнения пункта 2.1 из второй части лабораторной работы

Содержание отчёта:

  • Титульный лист
  • "Выполнение 1 части"
    • Краткое описание проделанной работы
    • Скриншоты результатов выполнения нижеперечисленных команд в домашнем каталоге пользователя student и их описание
      ps aux
      find ~ -ls
      
  • "Выполнение 2 части"
    • Скриншот успешной авторизации с помощью PuTTY (ПК -> Сервер) и описание к нему
    • Скриншот успешной авторизации с помощью SSH (Свой сервер -> Сервер соседа) и описание к нему