Фирма ЗАО «РОСС» г. Москва.
Требуется написать несколько функций для управления сетевм фильтром в ядре из собственной программы.
Условия задачи:
Linux ядро 2.6.x с включенным сетевым фильтром, два интерфейса, IPv4, маршрутизация между интерфейсами запрещена.
На интерфейсе 0 может быть только 1 статический IP адрес
На интерфейсе 1 может быть до 4х различных статических IP адресов.
Работает сетевой демон с 6 сервисами.
Сервис 1 – интерфейс 1, TCP, порт 1
Сервис 2 – интерфейс 1, TCP, порт 2
Сервис 3 – интерфейс 1, UDP, порт 3, размер пакета «3»
Сервис 4 – интерфейс 0, TCP, порт 4
Сервис 5 – интерфейс 0, TCP, порт 5
Сервис 6 – интерфейс 0, UDP, порт 6
Ведутся два списка IP адресов – «черный» (запрещенные IP адреса) и «белый» (разрешенные IP адреса).
По умолчанию:
- все входящие пакеты на интерфейс 0 запрещаются;
- все исходящие пакеты с интерфейса 0 запрещаются;
- все входящие пакеты на интерфейс 1 отбрасываются;
- все исходящие пакеты с интерфейса 1 запрещаются;
- маршрутизация между интерфейсами запрещена.
Фильтрация пакетов интерфейса 0:
- все входящие пакеты на интерфейс 0, на IP адрес интерфейса 0, по протоколу UDP, на порт 6 – разрешены;
- все исходящие пакеты с интерфейса 0, по протоколу UDP, с порта 6 – разрешены;
- все входящие пакеты на интерфейс 0, на IP адрес интерфейса 0, по протоколу TCP, на порт 4 – разрешены;
- все исходящие пакеты с интерфейса 0, по протоколу TCP, с порта 4 – разрешены;
- все входящие пакеты на интерфейс 0, на IP адрес интерфейса 0, по протоколу TCP, на порт 5 – разрешены;
- все исходящие пакеты с интерфейса 0, по протоколу TCP, с порта 5 – разрешены;
- все входящие пакеты на интерфейс 0, по протоколу ICMP – разрешены;
- все исходящие пакеты с интерфейса 0, по протоколу ICMP – разрешены.
Фильтрация пакетов интерфейса 1:
все входящие пакеты на интерфейс 1, на IP адреса интерфейса 1, по протоколу TCP, с IP адресов входящих в «белый» список, на порт 3, имеющие размер «3» – разрешены;
все исходящие пакеты с интерфейса 1, по протоколу UDP, с порта 3 – разрешены;
- все входящие пакеты на интерфейс 1, на IP адреса интерфейса 1, по протоколу TCP, с IP адресов не входящих в «черный» список, на порт 1 – разрешены;
- все исходящие пакеты с интерфейса 1, по протоколу TCP, с порта 1 – разрешены;
все входящие пакеты на интерфейс 1, на IP адреса интерфейса 1, по протоколу TCP, с IP адресов входящих в «белый» список, на порт 2 – разрешены;
все исходящие пакеты с интерфейса 1, по протоколу TCP, с порта 2 – разрешены;
- все входящие пакеты на интерфейс 1, на IP адреса интерфейса 1, по протоколу ICMP – разрешены;
- все исходящие пакеты с интерфейса 1, по протоколу ICMP – разрешены;
Количество отброшенных входящих пакетов на интерфейс 1 должно подсчитываться.
Количество входящих ICMP пакетов на интерфейс 1 должно подсчитываться
Не обходимо написать:
1 – функцию инициализирующую сетевой фильтр на оговоренную конфигурацию;
2 – функцию добавления «белого» IP адреса к списку;
3 – функцию удаления «белого» IP адреса из списка;
4 – функцию добавления «черного» IP адреса к списку;
5 – функцию удаления «черного» IP адреса из списка;
6 – функцию получения списка «белых» IP адресов;
7 – функцию получения списка «черных» IP адресов;
8 – функцию получения количества отброшенных пакетов на интерфейсе 1 с одновременным обнулением счетчика;
9 – функцию получения количества входящих ICMP пакетов на интерфейсе 1 с одновременным обнулением счетчика.
На основе данных функцию необходимо создать (для тестирования) консольную утилиту по управлению сетевым фильтром (добавить, удалить IP адреса, инициализировать и т.д.).
Исходные коды должны быть написаны на языке «С» (gcc) без использования запуска сторонних программ (через API ядра сетевого фильтра).
Код должен быть написан с условием портирования на различные архитектуры ( бигендиан, литтлеендиан, 32 битное выравниевание и тд.)
Свои предложения по срокам и ценам, а также все вопросы по уточнению задания, прошу высылать на адрес: p_igorek@ross-jsc.ru
в ядре