LINUX.ORG.RU
ФорумJob

Написать несколько функций управления сетевым фильтром в ядре на С


0

0

Фирма ЗАО «РОСС» г. Москва.

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

Условия задачи:
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

в ядре

Все что вы говорите можно сделать и с помощью iptables. никакой тут gcc не нужен. ИМХО

pinachet ★★★★★
()
Ответ на: комментарий от pinachet

Ну раз они хотят чтобы это было в виде утилиты без зависимости от других утилит, то можно сделать свою сборку iptables куда сразу прописать нужные правила, вшить их в код:)

ixrws ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.