iptables - утилита командной строки, межсетевого экрана (брандмауэра)

Процесс установки zabbix а так же дополнительных различных вспомогательных программ
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 802
Стаж: 5 лет
Откуда: Вологодская область
Поблагодарили: 32 раза
Контактная информация:

iptables - утилита командной строки, межсетевого экрана (брандмауэра)

Сообщение Артём Мамзиков »

Настроим блокировки и разрешения для Zabbix Server с помощью iptables

Сперва теория:

СИНТАКСИС:
iptables [-t ТАБЛИЦА] -A ЦЕПОЧКА ПАРАМЕТРЫ [опция]ДЕЙСТВИЕ

Таблица:
-t
raw - с сырыми пакетами, пока они еще не прошли обработку;
mangle - для модификации пакетов;
nat - работа nat, в качестве маршрутизатора;
nat - таблица, предназначенная целиком по функции трансляции сетевых адресов
filter - основная таблица для фильтрации пакетов, используется по умолчанию.
security - используется для назначения пакетам или соединениям неких меток, которые в дальнейшем может интерпретировать SElinux

ЦЕПОЧКА ПАРАМЕТРЫ:
-A - добавить правило в цепочку (в самое начало);
- проверить все правила;
-D - удалить правило;
-I - <номер> вставить правило с нужным номером;
-L - вывести все правила в текущей цепочке;
-S - вывести все правила;
-F - удалить все правила из цепочки, если цепочка не указана, удаляются все правила;
-N - создать цепочку;
-X - удалить цепочку;
-P - установить действие по умолчанию, действие будет выполняться на все пакеты, которые не подошли по каким-либо параметрам в другие правила.
-R <цепочка> <номер> - заменяет определенные критерии цепочки с номером
-Z <цепочка> - обнуляет все счётчики пакетов и байтов в цепочке

БАЗОВЫЕ ЦЕПОЧКИ:
INPUT - входящие пакеты и подключения
OUTPUT - исходящих пакетов и соединений
FORWARD - проходящих соединения
PREROUTING - правила в этой цепочке применяются ко всем пакетам, которые поступают на сетевой интерфейс извне
POSTROUTING - применяются к пакетам, которые должны покинуть сетевой интерфейс

ПАРАМЕТРЫ:
-p - указать протокол, один из all,tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh;
-m - включает дополнительные модули, явно задающимися данным ключём (например -m limit --limit 3/min - установит лимит на количество пакетов в минуту, -m tcp)
-s - указать ip/dns адрес устройства-отправителя пакета;
-d - указать ip/dns адрес получателя;
-i <имя интерфейса> - входной сетевой интерфейс;
-o <имя интерфейса> - исходящий сетевой интерфейс;
–-sport - порт источника
-–dport - порт назначения

ОПЦИИ ДЛЯ ДЕЙСТВИЙ:
-j (--jump) - применяет одно из действий accept, drop, reject и другие, если правило подошло.
-g (--goto) - переходит к другой цепочке правил

Действия:
ACCEPT - разрешить прохождение пакета
DROP - отбросить пакет не сообщая причины(более приоритетный вариант, нежели REJECT, т.к для блокируемого ip адреса(или диапазонов) будет аналогичный эффект тому, когда сервер находится в дауне)
REJECT - выбрасывает пакет и возвращает причину в виде ошибки, например: icmp unreachable
QUEUE - отправляет пакет за пределы логики iptables, в стороннее приложение. Это может понадобиться, когда нужно обработать пакет в рамках другого процесса в другой программе
RETURN - остановить обработку правила и вернуться на одно правило назад. Это действие подобно break'у в языке программирования
LOG - просто делает запись в логе, если пакет соответствует критериям правила;
DNAT - правило используется в NAT-ировании и меняет Destination IP пакета. Используется только в таблице nat и цепочках OUTPUT и PREROUTING
SNAT - правило используется в NAT-ировании и меняет Source IP пакета. Используется только в таблице nat и цепочке POSTROUTING
MASQUERADE - делает то же самое что SNAT, только применяется на выходном интерфейсе, когда IP адрес может меняться, например, когда назначается по DHCP

Как вы уже наверняка заметили, в пространстве ядра, в зависимости от типа протокола, пакеты могут иметь несколько различных состояний. Однако, вне ядра пакеты могут иметь только 4 состояния. В основном состояние пакета используется критерием --state. Допустимыми являются состояния NEW, ESTABLISHED, RELATED и INVALID. В таблице, приводимой ниже, рассматриваются каждое из возможных состояний.
--state
Состояние Описание
NEW - Признак NEW сообщает о том, что пакет является первым для данного соединения. Это означает, что это первый пакет в данном соединении, который увидел модуль трассировщика. Например если получен SYN пакет являющийся первым пакетом для данного соединения, то он получит статус NEW. Однако, пакет может и не быть SYN пакетом и тем не менее получить статус NEW. Это может породить определенные проблемы в отдельных случаях, но может оказаться и весьма полезным, например когда желательно "подхватить" соединения, "потерянные" другими брандмауэрами или в случаях, когда таймаут соединения уже истек, но само соединение не было закрыто.
ESTABLISHED - Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении. Схема установки состояния ESTABLISHED достаточна проста для понимания. Единственное требование, предъявляемое к соединению, заключается в том, что для перехода в состояние ESTABLISHED необходимо чтобы узел сети передал пакет и получил на него ответ от другого узла (хоста). После получения ответа состояние соединения NEW или RELATEDбудет изменено на ESTABLISHED.
RELATED - Состояние RELATED одно из самых "хитрых". Соединение получает статус RELATED если оно связано с другим соединением, имеющим признак ESTABLISHED. Это означает, что соединение получает признак RELATED тогда, когда оно инициировано из уже установленного соединения, имеющего признак ESTABLISHED. Хорошим примером соединения, которое может рассматриваться как RELATED, является соединение FTP-data, которое является связанным с портом FTP control, а так же DCC соединение, запущенное из IRC. Обратите внимание на то, что большинство протоколов TCP и некоторые из протоколов UDP весьма сложны и передают информацию о соединении через область данных TCP или UDP пакетов и поэтому требуют наличия специальных вспомогательных модулей для корректной работы.
INVALID - Признак INVALID говорит о том, что пакет не может быть идентифицирован и поэтому не может иметь определенного статуса. Это может происходить по разным причинам, например при нехватке памяти или при получении ICMP-сообщения об ошибке, которое не соответствует какому либо известному соединению. Наверное наилучшим вариантом было бы применение действия DROP к таким пакетам.
Эти четыре состояния могут использоваться в критерии --state. Механизм определения состояния позволяет строить чрезвычайно мощную и эффективную защиту. Раньше приходилось открывать все порты выше 1024, чтобы пропустить обратный трафик в локальную сеть, теперь же, при наличии механизма определения состояния, необходимость в этом отпала, поскольку появилась возможность "открывать" доступ только для обратного (ответного) трафика, пресекая попытки установления соединений извне.

Варианты просмотра
iptables -L - просмотр текущих правил
iptables -L INPUT - просмотр правил входящие пакеты и подключения
iptables -L INPUT --line-numbers - вывод с номерами правил
iptables -L -t nat - покажет правила таблицы nat
iptables -L –line-numbers - узнать номер правила
iptables -D INPUT 5 - удалить правило номер 5 из цепочки INPUT
iptables -L -n
iptables -L -n -v --line-numbers - параметр -v показывает детальную статистику по правилам, -n не резолвит ip
iptables -F - полностью очищаем список со всеми правилами
iptables -F -t nat - удаляем правила таблицы nat

iptables -h - вызвать справку

Более подробно можно почитать Руководство по iptables (Iptables Tutorial)
Руководство в архиве
iptables-rus-1.1.19.zip
iptables-rus-1.1.19.zip
(496.24 КБ) 23 скачивания
# Удаление всех правил
iptables -F
# Очистка правил для входящих
iptables -F Input
# На Дефолт
iptables-restore
# Разрешить всё
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

prerouting - в эту цепочку пакет попадает перед обработкой iptables, система еще не знает куда он будет отправлен, в input, output или forward;
postrouting - сюда попадают все проходящие пакеты, которые уже прошли цепочку forward.

Примеры:

# ПОРТ 22 SSH (SFTP)
# Разрешить для
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 22 -j ACCEPT
# Блокируем для всех остальных 22 порт
iptables -A INPUT -p tcp --dport 22 -j DROP

# ПОРТ 80 Вебка
# Разрешить для
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 80 -j ACCEPT
# Блокируем для всех остальных 80 порт
iptables -A INPUT -p tcp --dport 80 -j DROP

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

Заблокировать все порты, кроме разрешенных
# ЗАКРЫТЬ ВСЕ ОСТАЛЬНЫЕ ВХОДЯЩИЕ ПОРТЫ (если для пакета не подходит ни одно правило)
iptables -P INPUT DROP

Тут мы получаем интересную ситуацию, с данного узла где производим настройки, у нас идут OUTPUT исходящие подключения на 80 и 22 (проверка доступности сайтов и 22 порта). OUTPUT - у нас разрешен запрос уходит, но обратно пакет не принимается правилом INPUT.
Ситуация аналогична всем остальным портам.
Получается что нужно прописать правило еще и для исходящих подключение ? Это как то не правильно.
В данном случае нужно задать правило все исходящие пакеты, разрешить на прием. Если узел на котором мы производим настройку делает запрос на 80 порт то и ответ он должен принять, если он запрос не делал то пакеты не пройдут.


#Разрешаем исходящие соединения, в целях, например, использования ping и других внутренних приложений
#если не собираетесь использовать, то можно не указывать, но тогда есть вероятность того, что не будут работать, скажем, обновления из интернета
#установленные соединения пропускаются, иначе каждый (а не только инициирующий) пакет в tcp-соединении будет проходить через эти цепочки правил
# Приём пакетов для установленных соединений:
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

По умолчанию все порты которые не запрещены они разрешены.
iptables -P INPUT ACCEPT

#разрешает трафик на локальный интерфейс. localhost часто используется для размещения, например, базы данных, к которой подключаются веб-сайт и почтовый сервер, т.е таким образом, сервер имеет доступ к базе данных, но взломать её через интернет сложно
# Разрешить loopback интерфейс
iptables -I INPUT -i lo -j ACCEPT

# разрешаем исходящие соединения c сервера
iptables -P OUTPUT ACCEPT

НЕКОТОРЫЕ ПОРТЫ ZABBIX:
21 FTP
22 SSH (SFTP)
80 Вебка http
443 Вебка https (ssl)
3000 Grafana web
3306 MySql
53 dns
123 ntp время
25 SMTP Почта
465 SMTP Почта
143 imap
993 imap

НА ПОДСЕТИ
10050 Заббикс Агент Пассивный
10051 Заббикс Агент Активный
10052 JMX
12345 JMX
161 SNMP
162 Trap SNMP
166 SNMP ИБП
623 IPMI

Для ограничения доступа подключения к заббикс серверу нужно выбрать только те порты, на которые будет выполнятся подключение со стороны узлов, если заббикс сервер будет сам опрашивать узел такой порт не нужно включать в правило!
например порт 10050 - опрашивается с заббикс сервера его можно не включать в правило, а порт
10051 - он сам передает информацию на заббикс сервер такой порт нужно включать в правило.
порты Trap так же не обходимо включать в правило так как они передают данные сами на сервер
.

Можно сделать скрипт с 2 циклами 2 списка ip/dns и порты, первый перебирает IP а второй под цикл подставляет порты.
порты можно указать в одной строке через двоеточие 10051:162

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

Код: Выделить всё

#!/bin/bash

# Инфо https://www.opennet.ru/docs/RUS/iptables/

# Удаление всех правил
iptables -F
# На Дефолт
#iptables-restore
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# ДЛЯ АДМИНИСТРАТОРОВ И СЛУЖЕБНЫЕ ПОРТЫ
# ПОРТ 21 FTP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 21  -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p tcp --dport 21 -j ACCEPT
# Блокируем для всех остальных 21 порт
iptables -A INPUT -p tcp --dport 21 -j DROP

# ПОРТ 22 SSH (SFTP)
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 22  -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p tcp --dport 22 -j ACCEPT
#  Блокируем для всех остальных 22 порт
iptables -A INPUT -p tcp --dport 22 -j DROP
#Пресечь попытки взлома
#iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --udpate --seconds 3600 --hitcount 8 -j REJECT
#iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --set
#iptables -A INPUT -p tcp --dport 22 -m recent --name ssh ! --rcheck --seconds 15 --hitcount 2 -j REJECT

# ПОРТ 80 Вебка
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 80  -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p tcp --dport 80 -j ACCEPT
# Блокируем для всех остальных 80 порт
iptables -A INPUT -p tcp --dport 80 -j DROP

# ПОРТ 443 Вебка
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 443  -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p tcp --dport 443 -j ACCEPT
# Блокируем для всех остальных 443 порт
iptables -A INPUT -p tcp --dport 443 -j DROP

# ПОРТ 3000 Grafana web
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 3000  -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp --dport 3000 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p tcp --dport 3000 -j ACCEPT
# Блокируем для всех остальных 3000 порт
iptables -A INPUT -p tcp --dport 3000 -j DROP

# ПОРТ 3306  MySql
iptables -I INPUT -s 192.168.175.111 -p tcp --dport 3306 -j ACCEPT
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT
# Блокируем для всех остальных 3306 порт
iptables -A INPUT -p tcp --dport 3306 -j DROP

# ПОРТ 53 dns
# Блокируем для всех остальных 53 порт
iptables -A INPUT -p tcp --dport 53 -j DROP

# ПОРТ 123 ntp время
iptables -I INPUT -s 192.168.175.111 -p tcp --dport 123 -j ACCEPT
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 123 -j ACCEPT
# Блокируем для всех остальных 123 порт
iptables -A INPUT -p tcp --dport 123 -j DROP

# ПОРТ 25 SMTP Почта
# Разрешить для
iptables -I INPUT -s 192.168.175.110 -p tcp --dport 25 -j ACCEPT
#  Блокируем для всех остальных 25 порт
iptables -A INPUT -p tcp --dport 25 -j DROP

#разрешает smtp-трафик (если сервер не выступает как почтовый, то можно не разрешать):
#iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
#iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

#разрешает pop-трафик
#iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
#iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

#разрешает imap-трафик
#iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
#iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT



# НАШИ ПОДСЕТИ
# ПОРТ 10050 Заббикс Агент Пассивный 
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 10050  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 10050  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 10050  -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 10050  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 10050  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 10050  -j ACCEPT
# Блокируем для всех остальных 10050 порт
iptables -A INPUT -p tcp --dport 10050 -j DROP

# ПОРТ 10051 Заббикс Агент Активный
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 10051  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 10051  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 10051 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 10051  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 10051  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 10051  -j ACCEPT
# Блокируем для всех остальных 10051 порт
iptables -A INPUT -p tcp --dport 10051 -j DROP

# ПОРТ 10052 JMX
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 10052  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 10052  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 10052 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 10052  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 10052  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 10052  -j ACCEPT
# Блокируем для всех остальных 10052 порт
iptables -A INPUT -p tcp --dport 10052 -j DROP

# ПОРТ 12345 JMX
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 12345  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 12345  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 12345 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 12345  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 12345  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 12345  -j ACCEPT
# Блокируем для всех остальных 12345 порт
iptables -A INPUT -p tcp --dport 12345 -j DROP

# ПОРТ 161 SNMP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 161  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 161  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 161 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 161  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 161  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 161  -j ACCEPT
# Блокируем для всех остальных 161 порт
iptables -A INPUT -p tcp --dport 161 -j DROP

# ПОРТ 162 Trap SNMP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 162  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 162  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 162 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 162  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 162  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 162  -j ACCEPT
# Блокируем для всех остальных 162 порт
iptables -A INPUT -p tcp --dport 162 -j DROP

# ПОРТ 166 SNMP ИБП
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 166  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 166  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 166 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 166  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 166  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 166  -j ACCEPT
# Блокируем для всех остальных 166 порт
iptables -A INPUT -p tcp --dport 166 -j DROP

# ПОРТ 623 IPMI
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 623  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p tcp --dport 623  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p tcp --dport 623 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p tcp --dport 623  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p tcp --dport 623 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p tcp --dport 623  -j ACCEPT
# Блокируем для всех остальных 623 порт
iptables -A INPUT -p tcp --dport 623 -j DROP

#*****udp*****
# ДЛЯ АДМИНИСТРАТОРОВ И СЛУЖЕБНЫЕ ПОРТЫ
# ПОРТ 21 FTP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 21  -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p udp --dport 21 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p udp --dport 21 -j ACCEPT
# Блокируем для всех остальных 21 порт
iptables -A INPUT -p udp --dport 21 -j DROP

# ПОРТ 22 SSH (SFTP)
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 22  -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p udp --dport 22 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p udp --dport 22 -j ACCEPT
#  Блокируем для всех остальных 22 порт
iptables -A INPUT -p udp --dport 22 -j DROP
#Пресечь попытки взлома
#iptables -A INPUT -p udp --dport 22 -m recent --name ssh --udpate --seconds 3600 --hitcount 8 -j REJECT
#iptables -A INPUT -p udp --dport 22 -m recent --name ssh --set
#iptables -A INPUT -p udp --dport 22 -m recent --name ssh ! --rcheck --seconds 15 --hitcount 2 -j REJECT

# ПОРТ 80 Вебка
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 80  -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p udp --dport 80 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p udp --dport 80 -j ACCEPT
# Блокируем для всех остальных 80 порт
iptables -A INPUT -p udp --dport 80 -j DROP

# ПОРТ 443 Вебка
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 443  -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p udp --dport 443 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p udp --dport 443 -j ACCEPT
# Блокируем для всех остальных 443 порт
iptables -A INPUT -p udp --dport 443 -j DROP

# ПОРТ 3000 Grafana web
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 3000  -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p udp --dport 3000 -j ACCEPT
iptables -I INPUT -s 192.168.175.23 -p udp --dport 3000 -j ACCEPT
# Блокируем для всех остальных 3000 порт
iptables -A INPUT -p udp --dport 3000 -j DROP

# ПОРТ 3306  MySql
iptables -I INPUT -s 192.168.175.111 -p udp --dport 3306 -j ACCEPT
iptables -I INPUT -s 127.0.0.1 -p udp --dport 3306 -j ACCEPT
# Блокируем для всех остальных 3306 порт
iptables -A INPUT -p udp --dport 3306 -j DROP

# ПОРТ 53 dns
# Блокируем для всех остальных 53 порт
iptables -A INPUT -p udp --dport 53 -j DROP

# ПОРТ 123 ntp время
iptables -I INPUT -s 192.168.175.111 -p udp --dport 123 -j ACCEPT
iptables -I INPUT -s 127.0.0.1 -p udp --dport 123 -j ACCEPT
# Блокируем для всех остальных 123 порт
iptables -A INPUT -p udp --dport 123 -j DROP

# ПОРТ 25 SMTP Почта
# Разрешить для
iptables -I INPUT -s 192.168.175.110 -p udp --dport 25 -j ACCEPT
#  Блокируем для всех остальных 25 порт
iptables -A INPUT -p udp --dport 25 -j DROP

#разрешает smtp-трафик (если сервер не выступает как почтовый, то можно не разрешать):
#iptables -A INPUT -p udp -m udp --dport 25 -j ACCEPT
#iptables -A INPUT -p udp -m udp --dport 465 -j ACCEPT

#разрешает pop-трафик
#iptables -A INPUT -p udp -m udp --dport 110 -j ACCEPT
#iptables -A INPUT -p udp -m udp --dport 995 -j ACCEPT

#разрешает imap-трафик
#iptables -A INPUT -p udp -m udp --dport 143 -j ACCEPT
#iptables -A INPUT -p udp -m udp --dport 993 -j ACCEPT



# НАШИ ПОДСЕТИ
# ПОРТ 10050 Заббикс Агент Пассивный 
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 10050  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 10050  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 10050  -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 10050  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 10050  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 10050  -j ACCEPT
# Блокируем для всех остальных 10050 порт
iptables -A INPUT -p udp --dport 10050 -j DROP

# ПОРТ 10051 Заббикс Агент Активный
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 10051  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 10051  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 10051 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 10051  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 10051  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 10051  -j ACCEPT
# Блокируем для всех остальных 10051 порт
iptables -A INPUT -p udp --dport 10051 -j DROP

# ПОРТ 10052 JMX
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 10052  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 10052  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 10052 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 10052  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 10052  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 10052  -j ACCEPT
# Блокируем для всех остальных 10052 порт
iptables -A INPUT -p udp --dport 10052 -j DROP

# ПОРТ 12345 JMX
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 12345  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 12345  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 12345 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 12345  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 12345  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 12345  -j ACCEPT
# Блокируем для всех остальных 12345 порт
iptables -A INPUT -p udp --dport 12345 -j DROP

# ПОРТ 161 SNMP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 161  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 161  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 161 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 161  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 161  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 161  -j ACCEPT
# Блокируем для всех остальных 161 порт
iptables -A INPUT -p udp --dport 161 -j DROP

# ПОРТ 162 Trap SNMP
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 162  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 162  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 162 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 162  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 162  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 162  -j ACCEPT
# Блокируем для всех остальных 162 порт
iptables -A INPUT -p udp --dport 162 -j DROP

# ПОРТ 166 SNMP ИБП
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 166  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 166  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 166 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 166  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 166  -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 166  -j ACCEPT
# Блокируем для всех остальных 166 порт
iptables -A INPUT -p udp --dport 166 -j DROP

# ПОРТ 623 IPMI
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p udp --dport 623  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p udp --dport 623  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p udp --dport 623 -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p udp --dport 623  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p udp --dport 623 -j ACCEPT
iptables -I INPUT -s 192.168.101.0/24 -p udp --dport 623  -j ACCEPT
# Блокируем для всех остальных 623 порт
iptables -A INPUT -p udp --dport 623 -j DROP

# ПОРТ icmp Проверка пинга
# Разрешить для
iptables -I INPUT -s 127.0.0.1 -p  icmp  -j ACCEPT
iptables -I INPUT -s 192.168.175.0/24 -p  icmp  -j ACCEPT
iptables -I INPUT -s 172.16.37.0/24 -p icmp  -j ACCEPT
iptables -I INPUT -s 172.16.35.0/24 -p  icmp  -j ACCEPT
iptables -I INPUT -s 172.16.78.0/24 -p  icmp  -j ACCEPT
# ВНЕШНИЕ ПРОВЕРКИ
iptables -I INPUT -s 110.10.182.34/24 -p  icmp  -j ACCEPT
# Блокируем для всех остальных icmp порт
iptables -A INPUT -p  icmp -j DROP

#Разрешаем исходящие соединения, в целях, например, использования ping и других внутренних приложений
#если не собираетесь использовать, то можно не указывать, но тогда есть вероятность того, что не будут работать, скажем, обновления из интернета
#установленные соединения пропускаются, иначе каждый (а не только инициирующий) пакет в tcp-соединении будет проходить через эти цепочки правил
# Приём пакетов для установленных соединений:
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


#разрешает трафик на локальный интерфейс. localhost часто используется для размещения, например, базы данных, к которой подключаются веб-сайт и почтовый сервер, т.е таким образом, сервер имеет доступ к базе данных, но взломать её через интернет сложно
# Разрешить loopback интерфейс
iptables -I INPUT -i lo -j ACCEPT

# разрешаем исходящие соединения c сервера
iptables -P OUTPUT ACCEPT

# ЗАКРЫТЬ ВСЕ ОСТАЛЬНЫЕ ВХОДЯЩИЕ ПОРТЫ (если для пакета не подходит ни одно правило)
iptables -P INPUT DROP

# Разрешить
#iptables -P INPUT ACCEPT


#блокирует нулевые пакеты
#iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

#сброс пакетов XMAS
#iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

#защита от syn-flood
#iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP



# Сохранить правила
iptables-save
service iptables save

# Показать правила
#prav=`iptables -S`
# вывести все правила в текущей цепочке
prav=`iptables -L INPUT --line-numbers`
echo -e "${prav}"
echo "Готово"


Другие различные примеры

Блокировка пакетов
iptables -A INPUT -s 10.10.10.10 -j DROP
iptables -A OUTPUT -s 10.10.10.10 -j DROP

Блокировка диапазона
iptables -A INPUT -s 10.10.10.0/24 -j DROP
или
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

заблокировать все входящие соединения ssh
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Удаление правил вместо A пишем D
iptables -A OUTPUT -s 10.10.10.10 -j DROP

iptables -F - Очистка всех правил
iptables -F Input - Очистка правил для входящих
таблицы по умолчанию - filter

Сохранить правила
iptables-save
или
service iptables save
если пропадают у меня писало что все сохранено выдавало список что сохранено, но после перезагрузки все правила слетали
добавить в /etc/network/interfaces post-up iptables-restore < /etc/iptables/iptables.rules
Или можно добавить в Крон при включении запускать скрипт с правилами.

Еще пример: для 1 ip сразу несколько портов, для определенного сегмента ip адресов

Код: Выделить всё

#!/bin/bash
# Удаление всех правил
iptables -F
#iptables-restore
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# ПОРТ 25  (SMTP) Разрешить для всех
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
# Разрешает трафик на локальный интерфейс. localhost часто используется для размещения, например, базы данных, к которой подключаются веб-сайт и почтовый сервер, т.е таким образом, сервер имеет доступ к базе данных, но взломать её через интернет сложно. Разрешить loopback интерфейс
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -s 127.0.0.0 -j ACCEPT
iptables -I INPUT -s 127.0.0.1 -j ACCEPT
iptables -I INPUT -s 127.0.0.2 -j ACCEPT
#Разрешаем исходящие соединения, в целях, например, использования ping и других внутренних приложений. Если не собираетесь использовать, то можно не указывать, но тогда есть вероятность того, что не будут работать, скажем, обновления из интернета. Установленные соединения пропускаются, иначе каждый (а не только инициирующий) пакет в tcp-соединении будет проходить через эти цепочки правил Приём пакетов для установленных соединений:
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ДЛЯ АДМИНИСТРАТОРОВ И СЛУЖЕБНЫЕ ПОРТЫ Разрешить для

# multiport максимум 15 портов, так же можно указать диапазонами c 1 по 5 порт 1:5(диапазон занимает два слота) и (+ 1) отдельный порт 7 будет 1:5,7
# Eсли нужно использовать большой диапазон портов можно использовать --sport (--source-port) 513:65535, s-Источник(ip отправителя) d-Пункт назначения(ip получателя) --dport (--destination-port) без указания -s или -d,
# --port тогда будут и входящие и исходящие. Важный момент! в какой секции иптейблс(INPUT/OUTPUT) стоит правило, и важно понимать кто будет Источник и кто Пункт назначения. То же самое и с портами. https://losst.ru/nastrojka-iptables-dlya-chajnikov
# Важен порядок правил! Если первым правилом запретить, а после разрешить пакет уже будет отбит первым правилом и не дойдет до второго, поэтому запрещающие правила ставятся после разрешающихся!
# TCP
iptables -I INPUT -s 127.0.0.1 -p tcp -m multiport --port 21,22,80,443,1311,3000,3306,123,10050:10052,12345,161,162,166,623 -j ACCEPT

iptables -I INPUT -s 192.168.175.36 -p tcp -m multiport --port 21,3306,123 -j ACCEPT
iptables -I INPUT -s 192.168.175.8 -p tcp -m multiport --port 21,3306,123,22,80,443 -j ACCEPT
iptables -I INPUT -s 192.168.175.111 -p tcp -m multiport --port 21,3306,123,10050,10051 -j ACCEPT
# ПОРТ 443 Веб Разрешить для
iptables -I INPUT -s 10.0.0.211 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 192.168.125.3/28 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s 172.16.39.0/24 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -m iprange --src-range 172.16.101.0-172.16.128.255 -p tcp -m multiport --port 80,443 -j ACCEPT
# разрешаем исходящие соединения c сервера
iptables -P OUTPUT ACCEPT
# ЗАКРЫТЬ ВСЕ ОСТАЛЬНЫЕ ВХОДЯЩИЕ ПОРТЫ (если для пакета не подходит ни одно правило)
iptables -P INPUT DROP
# Сохранить правила
iptables-save
service iptables save
# Показать правила
#prav=`iptables -S`
# вывести все правила в текущей цепочке
prav=`iptables -L INPUT --line-numbers`
echo -e "${prav}"
echo "Готово"

Multiport
Расширение multiport позволяет указывать в тексте правила несколько портов и диапазонов портов.

Вы не сможете использовать стандартную проверку портов и расширение -m multiport (например –sport 1024:63353 -m multiport –dport 21,23,80) одновременно. Подобные правила будут просто отвергаться iptables. Выделяет не один порт, как –dport или –sport, а несколько по списку (до 15 штук). Можно задавать диапазоны как первый_порт:последний_порт. Может быть использовано только вместе с -p udp или -p tcp.

Отправитель -–source-ports порт1,порт2,порт3:порт4

Код: Выделить всё

iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110
Служит для указания списка исходящих портов. С помощью данного критерия можно указать до 15 различных портов. Названия портов в списке должны отделяться друг от друга запятыми, пробелы в списке не допустимы. Данное расширение может использоваться только совместно с критериями -p tcp или -p udp. Главным образом используется как расширенная версия обычного критерия –source-port.

Полкучатель -–destination-ports порт1,порт2,порт3:порт4

Код: Выделить всё

iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110
Служит для указания списка входных портов. Формат задания аргументов полностью аналогичен -m multiport –source-port.

-–ports порт1,порт2,порт3:порт4

Код: Выделить всё

iptables -A INPUT -p tcp -m multiport --port 22,53,80,110
Данный критерий проверяет как исходящий так и входящий порт пакета. Формат аргументов аналогичен критерию –source-port и –destination-port. Обратите внимание на то что данный критерий проверяет порты обеих направлений, т.е. если вы пишете -m multiport –port 80, то под данный критерий подпадают пакеты, идущие с порта 80 на порт 80.


iprange
iprange — позволяет указать диапазон IP-адресов, не являющийся подсетью. Поддерживает следующие параметры:

-–src-range адрес[-адрес] — позволяет указать диапазон исходных адресов. Например,

Код: Выделить всё

iptables -I INPUT -m iprange --src-range 192.168.0.8-192.168.0.25 -j DROP
заблокирует все пакеты, исходный адрес которых лежит в диапазоне с 192.168.0.8 по 192.168.0.25 включительно.

-–dst-range адрес[-адрес] — позволяет указать диапазон адресов назначения.

https://wiki.dieg.info/iptables

Порядок работы:
ЛОГИРОВАТЬ
ПРИНЯТЬ
ОТБРАСЫВАТЬ
количество слов: 3737
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 802
Стаж: 5 лет
Откуда: Вологодская область
Поблагодарили: 32 раза
Контактная информация:

iptables - утилита командной строки, межсетевого экрана (брандмауэра)

Сообщение Артём Мамзиков »

Эксперементы с ulogd
apt-get install ulogd
apt-get install ulogd2

start|stop|reload|restart|condstop|condrestart|condreload|status
systemctl status ulogd.service
service ulogd status

Конфигурация
/etc/ulogd.conf
Логи
/var/log/ulogd/
Путь на базы
/var/lib/ulogd/ulogd.sqlite3db
Служба
/etc/rc.d/init.d/ulogd
/lib/systemd/system/ulogd.service
/etc/logrotate.d/ulogd
/usr/lib64/
/usr/lib64/ulogd/
/usr/sbin/ulogd


iptables -A INPUT -p tcp --dport 22 -j ULOG --ulog-prefix "Port 22 Connection: "
iptables -A INPUT -p tcp --dport 22 -j NFLOG --nflog-prefix "Port 22 Connection: "
iptables -A INPUT -p tcp --dport 22 -j NFLOG --nflog-group 1 --nflog-prefix "Port 22 Connection: "
iptables -A INPUT -p tcp --dport 22 -j NFLOG --nflog-group <group_number>

iptables -I INPUT -j NFLOG --nflog-group 1
iptables -I INPUT -p tcp -j NFLOG --nflog-group 1
iptables -I INPUT -p tcp --dport 80 -j NFLOG --nflog-group 1

iptables -A INPUT -p tcp --dport 22 -j NFLOG --nflog-prefix "Port 22 Connection: " --nflog-exec /etc/zabbix/scripts/portmonitor.sh
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j

Настройка

Конфигурация
/etc/ulogd.conf

Код: Выделить всё

# Пример конфигурации для ulogd
# Адаптировано для Debian Ахиллеасом Котсисом <achille@debian.gr>

[global]
######################################################################
# ГЛОБАЛЬНЫЕ ПАРАМЕТРЫ
######################################################################


# файл журнала для сообщений о состоянии
logfile="/var/log/ulogd/ulogd.log"

# уровень журнала: отладка(1), информация(3), уведомление(5), ошибка(7) или фатальный исход(8) (по умолчанию 5)
loglevel=1

######################################################################
# ПАРАМЕТРЫ ПЛАГИНА
######################################################################

# Нам нужно настроить и загрузить все плагины, которые мы хотим использовать

# общие правила:
#
# 0. не указывайте какой-либо плагин для ulogd, чтобы загрузить их все
# 1. сначала загрузите плагины из глобального раздела
# 2. параметры для каждого плагина в отдельном разделе ниже


# ВХОД Начало получения/обработки

# Старый добрый плагин ввода ipt_ULOG. Это в основном эмулирует ulogd-1.x, у которого не было плагинов ввода.
#plugin="/usr/lib64/ulogd/ulogd_inppkt_ULOG.so"

# Он взаимодействует с новым интерфейсом nfnetlink_log. Для компиляции вам необходимо, чтобы в вашей системе был установлен libnetfilter_log.
#plugin="/usr/lib64/ulogd/ulogd_inppkt_NFLOG.so"

#plugin="/usr/lib64/ulogd/ulogd_inpflow_NFCT.so"

#plugin="/usr/lib64/ulogd/ulogd_inpflow_NFACCT.so"

#plugin="/usr/lib64/ulogd/ulogd_inppkt_UNIXSOCK.so"


# ФИЛЬТР

# Базовый плагин интерпретатора для nfmark, timestamp, mac-адреса, ip-заголовка, tcp-заголовка, udp-заголовка, icmp-заголовка, ah/esp-заголовка... Большинство людей захотят загрузить этот очень важный плагин.
#plugin="/usr/lib64/ulogd/ulogd_raw2packet_BASE.so"

# Этот плагин преобразует аппаратный заголовок в строку. В случае ethernet-пакета он в основном преобразует mac-адрес в представление строки.
#plugin="/usr/lib64/ulogd/ulogd_filter_HWHDR.so"

# Плагин фильтра, который обеспечивает перевод из числового ifindex (например, '1') в имя сетевого интерфейса (например, 'eth4').
#plugin="/usr/lib64/ulogd/ulogd_filter_IFINDEX.so"

# Этот плагин преобразует IP-адреса в двоичную форму, используемую базами данных, такими как MySQL.
#plugin="/usr/lib64/ulogd/ulogd_filter_IP2BIN.so"

# Этот плагин преобразует IP-адреса в двоичную форму в порядке расположения узлов, используемую базами данных, такими как MySQL.
#plugin="/usr/lib64/ulogd/ulogd_filter_IP2HBIN.so"

# Этот плагин преобразует IP-адреса в строку.
#plugin="/usr/lib64/ulogd/ulogd_filter_IP2STR.so"

# Когда этот плагин помещается в стек, будут регистрироваться только те сообщения, метка которых (метка пакета или метка соединения) соответствует заданной метке/маске.
#plugin="/usr/lib64/ulogd/ulogd_filter_MARK.so"

# Преобразуйте ключи относительно потока в строку, читаемую человеком.
#plugin="/usr/lib64/ulogd/ulogd_filter_PRINTFLOW.so"

# Преобразуйте ключи относительно пакета в строку, читаемую человеком. Этот плагин должен использоваться для печати пакета в формате, аналогичном целевому формату ЖУРНАЛА.
#plugin="/usr/lib64/ulogd/ulogd_filter_PRINTPKT.so"

# Пример плагина-интерпретатора для регистрации текстовых паролей, используемых с FTP и POP3. Не вините меня за написание этого плагина! Протоколы по своей сути небезопасны, и существует множество других инструментов для перехвата паролей...
#plugin="/usr/lib64/ulogd/ulogd_filter_PWSNIFF.so"


# ВЫХОД вывод информации

#plugin="/usr/lib64/ulogd/ulogd_output_GPRINT.so"

#plugin="/usr/lib64/ulogd/ulogd_output_GRAPHITE.so"

#plugin="/usr/lib64/ulogd/ulogd_output_JSON.so"

# Модуль вывода, который пытается эмулировать старый целевой журнал на основе системного журнала, насколько это возможно. Однако ведение журнала выполняется в отдельный текстовый файл, а не в системный журнал.
# Модуль определяет следующие директивы конфигурации:
# Файл
# Имя файла, в который он должен войти. Значение по умолчанию - /var/log/ulogd.syslogemu
# Синхронизация
# Установите значение 1, если вы хотите, чтобы ваш файл журнала записывался синхронно. Это может снизить производительность, но строки журнала будут отображаться немедленно. Значение по умолчанию равно 0
#plugin="/usr/lib64/ulogd/ulogd_output_LOGEMU.so"

#plugin="/usr/lib64/ulogd/ulogd_output_NACCT.so"

#plugin="/usr/lib64/ulogd/ulogd_output_OPRINT.so"

#plugin="/usr/lib64/ulogd/ulogd_output_SYSLOG.so"

#plugin="/usr/lib64/ulogd/ulogd_output_XML.so"

#plugin="/usr/lib64/ulogd/ulogd_output_DBI.so"

#plugin="/usr/lib64/ulogd/ulogd_output_IPFIX.so"

#plugin="/usr/lib64/ulogd/ulogd_output_MYSQL.so"

#plugin="/usr/lib64/ulogd/ulogd_output_PCAP.so"

#plugin="/usr/lib64/ulogd/ulogd_output_PGSQL.so"

#plugin="/usr/lib64/ulogd/ulogd_output_SQLITE3.so"


# stack= За этим параметром следует список экземпляров плагина, который начинается с плагина ввода, содержит плагин дополнительной фильтрации и заканчивается плагином вывода. Этот параметр может отображаться несколько раз.

# это стек для ведения журнала на основе пакетов ULOG через LOGEMU
#stack=ulog1:ULOG,base1:BASE,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU

# это стек для протоколирования пакетов, отправляемых системой через LOGEMU
stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU
#stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,pwsniff1:PWSNIFF,print1:PRINTPKT,emu1:LOGEMU

# Тесты
#stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,mac2str1:HWHDR,print1:PRINTPKT,emu1:LOGEMU
#stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,mac2str1:HWHDR,pws1:PWSNIFF,print1:PRINTPKT,emu1:LOGEMU
#stack=log1:NFCT,ip2str1:IP2STR,print1:PRINTFLOW,emu1:LOGEMU
#stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,hwhdr1:HWHDR,print1:PRINTPKT,script1:ZABBIXSCRIPT

#stack=log1:NFLOG,base1:BASE,mac1:HWHDR,print1:PRINTPKT,emu1:LOGEMU
#plugin="/var/log/ulogd/ulogd_zabbix2.so"

# это стек для ведения журнала на основе пакетов с помощью GPRINT
#stack=log1:NFLOG,gp1:GPRINT

# это стек для входа в систему в формате XML
#stack=log1:NFLOG,xml1:XML

# это стек для регистрации пакета в SQLITE3
#stack=log1:NFLOG,sqlite3_pkt:SQLITE3

# это стек для ведения журнала на основе пакетов через LOGEMU
#stack=log2:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU

# это стек для ведения журнала на основе пакетов через LOGEMU с фильтрацией по методу
#stack=log2:NFLOG,base1:BASE,mark1:MARK,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU

# это стек для ведения журнала на основе пакетов NFLOG в PCAP
#stack=log2:NFLOG,base1:BASE,pcap1:PCAP

# это стек для регистрации пакетов в MySQL
#stack=log2:NFLOG,base1:BASE,ifi1:IFINDEX,ip2bin1:IP2BIN,mac2str1:HWHDR,mysql1:MYSQL

# это стек для регистрации пакета в PGsql после сбора через NFLOG
#stack=log2:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,mac2str1:HWHDR,pgsql1:PGSQL

# это стек для записи пакета в файл в формате JSON после сбора через NFLOG
#stack=log2:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,mac2str1:HWHDR,json1:JSON

# это стек для записи пакетов в системный журнал после сбора через NFLOG
#stack=log3:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,sys1:SYSLOG

# это стек для ведения журнала на основе потока через LOGEMU
#stack=ct1:NFCT,ip2str1:IP2STR,print1:PRINTFLOW,emu1:LOGEMU

# это стек для ведения журнала на основе потока с помощью GPRINT
#stack=ct1:NFCT,gp1:GPRINT

# это стек для ведения журнала на основе потока через XML
#stack=ct1:NFCT,xml1:XML

# это стек для ведения журнала на основе потока в MySQL
#stack=ct1:NFCT,ip2bin1:IP2BIN,mysql2:MYSQL

# это стек для ведения журнала на основе потока в PGSQL
#stack=ct1:NFCT,ip2str1:IP2STR,pgsql2:PGSQL

# это стек для потокового ведения журнала в PGSQL без локального хэша
#stack=ct1:NFCT,ip2str1:IP2STR,pgsql3:PGSQL

# это стек для ведения журнала на основе потока в SQLITE3
#stack=ct1:NFCT,sqlite3_ct:SQLITE3

# это стек для ведения журнала на основе потока в формате, совместимом с NACCT
#stack=ct1:NFCT,ip2str1:IP2STR,nacct1:NACCT

# это стек для ведения журнала на основе бухгалтерского учета с помощью XML
#stack=acct1:NFACCT,xml1:XML

# это стек для ведения журнала на основе бухгалтерского учета на сервере Graphite
#stack=acct1:NFACCT,graphite1:GRAPHITE

# это стек для ведения журнала на основе бухгалтерского учета с помощью GPRINT
#stack=acct1:NFACCT,gp1:GPRINT

# это стек для записи пакетов в системный журнал после сбора через NuFW
#stack=nuauth1:UNIXSOCK,base1:BASE,ip2str1:IP2STR,print1:PRINTPKT,sys1:SYSLOG



# ВВОД данных фильтрация***************************************************************************
[ulog1]
# группа многоадресной рассылки netlink (такая же, как у iptables --ulog-nlgroup param)
nlgroup=1
#numeric_label=0 # optional argument

[log1]
# Протоколирование системного пакета через NFLOG группы 0
# группа многоадресной рассылки netlink (совпадает с параметром iptables --nflog-group)
# Группа O используется ядром для регистрации недопустимого сообщения об отслеживании соединения
group=0

#netlink_socket_buffer_size=217088
#netlink_socket_buffer_maxsize=1085440
# установите количество пакетов для постановки в очередь внутри ядра
#netlink_qthreshold=1
# установите задержку перед сбросом пакета в очередь внутри ядра (в 10 мс)
#netlink_qtimeout=100

[log2]
# регистрация пакетов через NFLOG для группы 1
# группа многоадресной рассылки netlink (такая же, как iptables --nflog-group param)
group=1 # Группа должна отличаться от той, которая используется в log1
#netlink_socket_buffer_size=217088
#netlink_socket_buffer_maxsize=1085440
# Если ваше ядро старше 2.6.29 и если плагин ввода NFLOG с
# group 0 не используется ни в одном стеке, вам необходимо иметь по крайней мере один плагин ввода NFLOG
# с привязкой, установленной на 1. Если вы этого не сделаете, вы можете не получить никакого сообщения от ядра.
#
#bind=1

#group=1
#group_name=emu1_logs
#nflog_prefix=emu1_
#exec="/etc/zabbix/scripts/portmonitor.sh"
#file="/var/log/ulogd/ulogd_test.log"
#file_mode=0644
#file_group=ulog
#base="MARK, TIMESTAMP, NFPROTO_IPV4, NFPROTO_IPV6"

[log3]
# регистрация пакетов через NFLOG для группы 2, numeric_label равна
# set to 1
# группа многоадресной рассылки netlink (такая же, как у iptables --nflog-group param)
group=2 # Группа должна отличаться от той, которая используется в log1/log2
numeric_label=1 # вы можете пометить информацию журнала на основе вердикта по пакету
#netlink_socket_buffer_size=217088
#netlink_socket_buffer_maxsize=1085440
#bind=1

[ct1]
#netlink_socket_buffer_size=217088
#netlink_socket_buffer_maxsize=1085440
#netlink_resync_timeout=60 # секунды ожидания для выполнения повторной синхронизации
#pollinterval=10 # используйте ведение журнала на основе опроса вместо управляемого событиями
# Если значение pollinterval не задано, плагин NFCT будет работать в режиме события
# В этом случае вы можете использовать следующие фильтры для событий:
#accept_src_filter=192.168.1.0/24,1:2::/64 # ip-адрес источника подключения должен принадлежать этим сетям
#accept_dst_filter=192.168.1.0/24 # конечный ip-адрес подключения должен принадлежать этим сетям
#accept_proto_filter=tcp,sctp # уровень 4 - прототип соединений

[ct2]
#netlink_socket_buffer_size=217088
#netlink_socket_buffer_maxsize=1085440
#reliable=1 # включить надежное ведение журнала на основе потока (возможно отбрасывание пакетов)
hash_enable=0

[acct1]
pollinterval = 2
# Если установлено значение 0, мы не сбрасываем счетчики для каждого опроса (по умолчанию - 1).
#zerocounter = 0
# Установите временную метку (по умолчанию 0, что означает, что не установлено). Эта временная метка может быть
# интерпретирована плагином вывода.
#timestamp = 1

[nuauth1]
socket_path="/tmp/nuauth_ulogd2.sock"


# ВЫВОД**********************************************************************************
[emu1]
#file="/var/log/ulogd/ulogd_syslogemu.log"
file="/var/log/ulogd/NFLOG.log"
sync=1
# Запуск скрипта
#exec="/etc/zabbix/scripts/portmonitor.sh"
exec="/bin/echo 12345 >> /var/log/ulogd/utest.log"

[gp1]
file="/var/log/ulogd/ulogd_gprint.log"
sync=1
timestamp=1

[xml1]
directory="/var/log/ulogd/"
sync=1

[sqlite3_pkt]
table="ulog_pkt"
db="/var/lib/ulogd/ulogd.sqlite3db"
buffer=200

[sqlite3_ct]
table="ulog_ct"
db="/var/lib/ulogd/ulogd.sqlite3db"
buffer=200

[pcap1]
#файл по умолчанию - это /var/log/ulogd/ulogd.pcap
file="/var/log/ulogd/ulogd.pcap"
sync=1

[mysql1]
db="ulogd2"
host="localhost"
user="ulogd2"
table="ulog"
pass="ulogd2"
procedure="INSERT_PACKET_FULL"
# конфигурация журнала невыполненных работ:
# установите backlog_memcap на размер памяти, который будет
# выделен для хранения событий в памяти, если данные временно недоступны
# и вставьте их, когда база данных вернется.
#backlog_memcap=1000000
# количество событий, которые нужно вставить одновременно, если журнал невыполненных работ не пуст
#backlog_oneshot_requests=10

[mysql2]
db="ulogd2"
host="localhost"
user="ulogd2"
table="conntrack"
pass="ulogd2"
procedure="INSERT_CT"

[pgsql1]
db="nulog"
host="localhost"
user="nupik"
table="ulog"
#schema="public"
pass="changeme"
procedure="INSERT_PACKET_FULL"
# connstring может использоваться для определения строки подключения PostgreSQL, которая
# содержит все параметры соединения. Если задано, это значение имеет
# приоритет над другими переменными, используемыми для построения строки подключения.
# Смотрите http://www.postgresql.org/docs/9.2/static/libpq-connect.html#LIBPQ-CONNSTRING
# для получения полного описания опций.
#connstring="host=localhost port=4321 dbname=nulog user=nupik password=changeme"
#backlog_memcap=1000000
#backlog_oneshot_requests=10
# Если значение больше 1, создается поток, предназначенный для выполнения SQL-запроса.
# Значение сохраняет номер SQL-запроса, который необходимо сохранить
# в кольцевом буфере
#ring_buffer_size=1000

[pgsql2]
db="nulog"
host="localhost"
user="nupik"
table="ulog2_ct"
#schema="public"
pass="changeme"
procedure="INSERT_CT"

[pgsql3]
db="nulog"
host="localhost"
user="nupik"
table="ulog2_ct"
#schema="public"
pass="changeme"
procedure="INSERT_OR_REPLACE_CT"

[pgsql4]
db="nulog"
host="localhost"
user="nupik"
table="nfacct"
#schema="public"
pass="changeme"
procedure="INSERT_NFACCT"

[json1]
sync=1
file="/var/log/ulogd/ulogd.json"
#timestamp=0
# имя устройства, которое будет использоваться в сообщении JSON
device="Мой потрясающий брандмауэр Netfilter"
# Если значение boolean_label равно 1, то числовая метка, добавленная к пакету
# плагином ввода, кодирует действие с пакетом: если 0, то
# пакет был заблокирован, а если не null, то он был принят.
boolean_label=1
# Раскомментируйте следующую строку, чтобы использовать формат событий JSON версии 1, который
# может обеспечить лучшую совместимость с некоторыми программами чтения файлов JSON.
#eventv1=1

[json1]
sync=1
file="/var/log/ulogd/ulogd1.json"
timestamp=0
device="Мой потрясающий брандмауэр Netfilter"
boolean_label=1
eventv1=1

[sys1]
facility=LOG_LOCAL1

[sys2]
facility=LOG_LOCAL2

[nacct1]
sync = 1
file = /var/log/ulogd/ulogd_nacct.log

[graphite1]
host="127.0.0.1"
port="2003"
# Префикс имени данных, отправляемых на сервер graphite
prefix="netfilter.nfacct"

[op1]
file="/var/log/ulogd/ulogd_oprint.log"
sync=1

[dbi1]
db="ulog2"
dbtype="pgsql"
host="localhost"
user="ulog2"
table="ulog"
pass="ulog2"
procedure="INSERT_PACKET_FULL"

[mark1]
mark = 1

[log1]
file="/var/log/ulogd.log"

plugin="/usr/lib/ulogd/ulogd_inppkt_NFLOG.so"
plugin="/usr/lib/ulogd/ulogd_raw2packet_BASE.so"
plugin="/usr/lib/ulogd/ulogd_pkt2packet_SIMPLE.so"
plugin="/usr/lib/ulogd/ulogd_output_LOGEMU.so"

stack=log1:NFLOG,base1:BASE,pkt1:SIMPLE,emu1:LOGEMU

[emu1]
exec="/etc/zabbix/scripts/portmonitor.sh"


service ulogd restart

#!/bin/bash
echo "Connection to port 88 detected" >> /var/log/connection.log

Теперь при каждом подключении к порту 88 будет запускаться ваш скрипт script.sh
и запись об этом будет добавлена в файл /var/log/connection.log.


ULOGD 2.x - the Netfilter Userspace Logging Daemon
Харальд Вельте <laforge@netfilter.org>, Эрик Леблонд <eric@inl.fr>
Редакция 2009/04/18
Это документация для ulogd-2.x, демона ведения журнала в пользовательском пространстве Netfilter второго поколения. ulogd использует подсистемы Linux >= 2.6.14 nfnetlink_log и nfnetlink_conntrack, но также обеспечивает обратную совместимость для Linux >= 2.4.0 ipt_ULOG.
1. ДИЗАЙН
КОНЦЕПЦИЯ 1.1
ulogd-2.x хочет предоставить гибкий, почти универсальный демон ведения журнала для ведения журнала netfilter. Это включает в себя как ведение журнала на основе пакетов (регистрация нарушений политики), так и ведение журнала на основе потоков, например, для целей бухгалтерского учета.

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

Плагины ввода
Плагины ввода действуют как источник данных. Они получают данные откуда-то за пределами ulogd и преобразуют их в список ключей ulogd.

Плагины для фильтрации
Плагины фильтрации интерпретируют и / или фильтруют данные, полученные от плагина ввода. Хорошим примером является синтаксический анализ необработанного пакета в IPv4 / TCP / ... информация заголовка.

Плагины для вывода
Плагины вывода описывают, как и куда помещать информацию, полученную плагином ввода и обработанную одним или несколькими плагинами фильтрации. Самый простой способ - построить строку для каждого пакета и распечатать ее в файл. Некоторые люди могут захотеть войти в базу данных SQL или получить выходные данные, соответствующие языку IETF IPFIX.

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

1.2 ПОДРОБНОСТИ
Основная подсказка заключается в предоставлении максимально гибкой платформы. Никто не знает, какие странные сетевые протоколы существуют :) Но в то же время ведение журнала пакетного фильтра часто очень важно для производительности. Как и все версии ulogd начиная с 0.3.x, ядро ulogd-2.x не выполняет никаких динамических распределений во время выполнения. Да, очевидно, что во время запуска файл конфигурации анализируется и производятся распределения. Но после этого все распределяется заранее. В качестве дополнительного улучшения по сравнению с ulogd-1.x также отсутствует поиск по хэш-таблице для разрешения ключа. Все ключи ввода / вывода плагинов в каждом стеке разрешаются во время синтаксического анализа файла конфигурации и напрямую связаны указателями.

2. УСТАНОВКА
2.1 Ядро Linux
Для использования плагина ввода NFCT или NFLOG вам понадобится ядро 2.6.14 или более поздней версии. Для ведения журнала ULOG в старом стиле вам понадобится ядро >= 2.4.18.

2.2 Библиотеки пользовательского пространства
Если вы планируете использовать NFCT и плагин ввода NFLOG, вам нужно будет скомпилировать библиотеки libnfnetlink, libnetfilter_conntrack и libnetfilter_log, которые можно загрузить с http://ftp.netfilter.org/pub/. Простого './configure; make; make install' будет достаточно, чтобы библиотека была установлена в вашей системе.

2.3 ulogd
Перекомпиляция исходного кода
Загрузите пакет ulogd с http://ftp.netfilter.org/pub/ulogd / и распакуйте его.

Если вы хотите создать ulogd с поддержкой MySQL, введите './configure --with-mysql' . Возможно, вам также придется указать путь к библиотекам mysql, используя '--with-mysql =path' . Чтобы создать ulogd без поддержки MySQL, просто используйте '. /configure'.

Чтобы скомпилировать и установить программу, вызовите "make install".

3. Конфигурация
3.1 iptables NFLOG target
Быстрая настройка
Просто добавьте правила, используя целевой файл NFLOG, в свою цепочку брандмауэра. Очень простой пример.:

iptables -A FORWARD -j NFLOG --nflog-group 32 --nflog-prefix foo
Чтобы повысить производительность ведения журнала, попробуйте использовать

--nflog-qthreshold N
опция (где 1 < N <= 50). Указанное вами число представляет собой количество пакетов, объединенных в одно составное сообщение netlink. Если вы установите значение 20, ядро назначит ulogd только один раз через каждые 20 пакетов. Затем все 20 пакетов обрабатываются ulogd. Это уменьшает количество переключений контекста между ядром и пользовательским пространством.
Конечно, вы можете комбинировать целевой файл NFLOG с различными модулями сопоставления netfilter. Для получения более подробного описания ознакомьтесь с инструкциями netfilter, доступными на домашней странице netfilter.

Целевая ссылка на NFLOG
--nflog-группа N
Номер группы многоадресной рассылки netlink, в которую отправляются пакеты NFLOG'ed. Вам придется использовать один и тот же номер группы в цели NFLOG и ulogd, чтобы протоколирование работало.

--nflog-диапазон N
Copyrange . Это работает аналогично параметру 'snaplen' в tcpdump . Вы можете указать количество байт, до которого копируется пакет. Если вы скажете "40", вы получите первые сорок байт каждого пакета. Оставьте значение 0 для сброса всего пакета.

--nflog-пороговое значение N
Пороговое значение очереди. Если пакету соответствует правило iptables, и в очереди уже находится N пакетов, очередь сбрасывается в пространство пользователя. Вы можете использовать это для реализации политики, подобной: используйте большую очередь, чтобы добиться высокой производительности, но при этом определенные пакеты все равно будут немедленно регистрироваться в пользовательском пространстве.

--nflog-СТРОКА префикса
Строка, связанная с каждым пакетом, зарегистрированным по этому правилу. Вы можете использовать эту опцию, чтобы позже указать, по какому правилу был зарегистрирован пакет.

3.2 цель ведения журнала iptables
Быстрая настройка
Просто добавьте правила, используя цель ULOG, в свою цепочку брандмауэра. Очень простой пример.:

iptables -A FORWARD -j ULOG --ulog-nlgroup 32 --ulog-prefix foo
Чтобы повысить производительность ведения журнала, попробуйте использовать

--ulog-qthreshold N
опция (где 1 < N <= 50). Указанное вами число представляет собой количество пакетов, объединенных в одно составное сообщение netlink. Если вы установите значение 20, ядро назначит ulogd только один раз через каждые 20 пакетов. Затем все 20 пакетов обрабатываются ulogd. Это уменьшает количество переключений контекста между ядром и пользовательским пространством.
Конечно, вы можете комбинировать целевой модуль ULOG с различными модулями сопоставления netfilter. Для получения более подробного описания ознакомьтесь с инструкциями netfilter, доступными на домашней странице netfilter.

Ссылка на цель ULOG
--ulog-nlgroup N
Номер группы многоадресной рассылки netlink, в которую отправляются загруженные пакеты. Вам нужно будет использовать один и тот же номер группы в цели ULOG и ulogd, чтобы протоколирование работало.

--ulog-cprange N
Copyrange . Это работает аналогично параметру 'snaplen' в tcpdump . Вы можете указать количество байт, до которого копируется пакет. Если вы скажете "40", вы получите первые сорок байт каждого пакета. Оставьте это для 0

--ulog-qthreshold N
Пороговое значение очереди. Если пакету соответствует правило iptables, и в очереди уже находится N пакетов, очередь сбрасывается в пространство пользователя. Вы можете использовать это для реализации политики, подобной: используйте большую очередь, чтобы добиться высокой производительности, но при этом определенные пакеты все равно будут немедленно регистрироваться в пользовательском пространстве.

--СТРОКА префикса ulog
Строка, связанная с каждым пакетом, зарегистрированным по этому правилу. Вы можете использовать эту опцию, чтобы позже указать, по какому правилу был зарегистрирован пакет.

Параметры модуля ipt_ULOG
Модуль ядра ipt_ULOG имеет пару параметров времени загрузки модуля, которые могут (и должны) быть настроены для удовлетворения потребностей приложения:

nlbufsiz N
Размер буфера Netlink. Буфер указанного размера N выделяется для каждой используемой группы netlink. Пожалуйста, обратите внимание, что из-за ограничений распределителя памяти ядра у нас не может быть размера буфера > 128 Кб. Больший размер буфера увеличивает производительность, поскольку для того же количества пакетов требуется меньше переключений контекста ядра / пользовательского пространства. Обратной стороной такого увеличения производительности является потенциально большая задержка. Значение по умолчанию равно 4096 байтам, что довольно мало.

flushtimeout N
flushtimeout определяет, через сколько тактов (на alpha: 1 мс, на x86 и большинстве других платформ: 10 мс единиц времени) буфер / очередь должны быть очищены, даже если они не заполнены. Это может использоваться для получения преимущества в виде большого буфера, но при этом все равно вводится конечная максимальная задержка. Значение по умолчанию установлено равным 10 секундам.

Пример:
modprobe ipt_ULOG nlbufsiz=65535 flushtimeout=100
Для этого потребуется размер буфера 64 КБ и время сброса 100 тактов (1 секунда на x86).
3.3 ulogd
ulogd - вот что это такое, поэтому давайте опишем его конфигурацию...

ссылка на синтаксис конфигурационного файла ulogd
Все настраиваемые параметры ulogd находятся в файле конфигурации, обычно расположенном по адресу '/etc/ulogd.conf'.

Доступны следующие параметры конфигурации:

файл журнала
Основной файл журнала, в котором ulogd сообщает о любых ошибках, предупреждениях и других непредвиденных условиях. Помимо обычного имени файла, могут использоваться следующие специальные значения; `syslog" для входа через механизм системного журнала unix (3). `stdout" для входа в stdout.

уровень журнала
Это указывает, насколько подробным является ведение журнала в logfile. В настоящее время определены следующие уровни журнала: 1 = отладочная информация, 3 = информационные сообщения, 5 = заметные исключительные условия, 7 = условия ошибки, 8 = неустранимые ошибки, прерывание программы.

плагин
За этим параметром следует имя файла плагина ulogd, который ulogd должен загрузить при инициализации. Этот параметр может отображаться несколько раз.

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

ссылка на параметр командной строки ulogd
Помимо файла конфигурации, в ulogd есть несколько параметров командной строки:

-h --справка
Выведите справочное сообщение о параметрах командной строки.

-V --версия
Версия для печати информации об ulogd.

-d --daemon
Для перехода в режим демона. Если вы не занимаетесь отладкой, вам захочется использовать это большую часть времени.

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

-i --info
Отображает информацию о плагине, имя файла которого указано в качестве аргумента.

4. Сигналы / Logrotate
ulogd понимает два типа сигналов:

SIGHUP
Закройте и повторно откройте все файлы журналов. В основном это предназначено для сценариев logrotate. Также закрывает и повторно открывает подключения к базе данных.

SIGUSR1
Перезагрузите файл конфигурации. Это пока реализовано не полностью.

5. Доступные плагины
Важно понимать, что ulogd без плагинов ничего не делает. Он будет получать пакеты и ничего с ними не делать.

Существует два вида плагинов, плагины интерпретатора и плагины вывода. Плагины интерпретатора анализируют пакет, плагины вывода записывают интерпретированную информацию в некоторый файл журнала / базу данных /...

Вы можете получить информацию о плагинах, запустив

ulogd -i путь /к/плагину/файлу.so
5.1 Плагины ввода
ulogd поставляется со следующими плагинами ввода:

ulogd_inppkt_NFLOG.so
Он использует новый интерфейс nfnetlink_log. Для компиляции в вашей системе должен быть установлен libnetfilter_log.

Группа
Номер группы многоадресной рассылки netlink, в которую отправляются NFLOG'ed пакеты. Вам нужно будет использовать один и тот же номер группы в цели NFLOG (--nflog-group) и в плагине ввода.

семейство адресов
Вам нужно будет указать значение протокола, если вы не регистрируете пакет IPv4. семейство адресов равно 7 для пакета bridged и 10 для пакета IPv6.

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

netlink_socket_buffer_size
Укажите базовый размер буфера сокета. При необходимости это начальное значение будет увеличено до netlink_socket_buffer_maxsize .

netlink_socket_buffer_maxsize
Укажите максимальный размер буфера базового сокета.

ulogd_inpflow_NFCT.so
Он взаимодействует с подсистемой ядра nfnetlink_conntrack и обеспечивает ведение журнала на основе потока. Для компиляции в вашей системе должна быть установлена libnetfilter_conntrack.

pollinterval
Измените интервал дампа отслеживания соединений.

hash_enable
Если установлено значение 1 (по умолчанию), внутренний хэш будет сохранен, и только событие уничтожения достигнет выходного плагина. При значении 0 все события восстанавливаются выходным плагином.

hash_buckets
Размер внутренней корзины хэша.

hash_max_entries
Максимальное количество записей во внутреннем хэше подключения.

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

Событие создания: 0x00000001
Событие обновления: 0x00000002
Событие уничтожения: 0x00000004
netlink_socket_buffer_size
Укажите базовый размер буфера сокета. При необходимости это начальное значение будет увеличено до netlink_socket_buffer_maxsize .

netlink_socket_buffer_maxsize
Укажите максимальный размер буфера базового сокета.

ulogd_inppkt_ULOG.so
Старый добрый плагин ввода ipt_ULOG. По сути, он эмулирует ulogd-1.x, в котором не было плагинов ввода.

nlgroup
Номер группы многоадресной рассылки netlink, в которую отправляются загруженные пакеты. Вам нужно будет использовать тот же номер группы в целевом адресе ULOG и nin в плагине ввода.

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

5.2 Плагины интерпретатора
ulogd поставляется со следующими плагинами интерпретатора:

ulogd_raw2packet_BASE.so
Базовый плагин интерпретатора для nfmark, метки времени, mac-адреса, IP-заголовка, tcp-заголовка, udp-заголовка, icmp-заголовка, ah / esp-заголовка... Большинство людей захотят загрузить этот очень важный плагин.

ulogd_filter_PWSNIFF.so
Пример плагина-интерпретатора для регистрации паролей открытым текстом, используемого с FTP и POP3. Не вините меня за написание этого плагина! Протоколы по своей сути небезопасны, и существует множество других инструментов для отслеживания паролей... это просто пример.

ulogd_filter_IFINDEX.so
Плагин фильтрации, который обеспечивает преобразование числового ifindex (например, '1') в имя сетевого интерфейса (например, 'eth4').

ulogd_LOCAL.so
Это "виртуальный интерпретатор". На самом деле он не возвращает никакой информации о самом пакете, скорее локальное системное время и имя хоста. Пожалуйста, обратите внимание, что время - это время на момент ведения журнала, а не время получения пакетов.

ulogd_filter_HWHDR.so
Этот плагин преобразует аппаратный заголовок в строку. В случае пакета Ethernet он в основном преобразует mac-адрес в строковое представление.

ulogd_filter_IP2BIN.so
Этот плагин преобразует IP-адреса в двоичную форму, доступную для таких баз данных, как MySQL.

ulogd_filter_IP2HBIN.so
Этот плагин преобразует IP-адреса в двоичную форму в порядке расположения узлов, который может быть использован такими базами данных, как MySQL.

ulogd_filter_IP2STR.so
Этот плагин преобразует IP-адреса в строку.

ulogd_filter_PRINTFLOW.so
Преобразуйте ключи относительно потока в строку, читаемую человеком.

ulogd_filter_PRINTPKT.so
Преобразуйте ключи относительно пакета в строку, читаемую человеком. Этот плагин должен использоваться для печати пакета в формате, аналогичном целевому формату журнала.

ulogd_filter_MARK.so
Когда этот плагин помещается в стек, будут регистрироваться только сообщения, отметка которых (метка пакета или метка подключения) соответствует заданной метке / маске.

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

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

5.3 Плагины вывода
ulogd поставляется со следующими плагинами вывода:

ulogd_output_OPRINT.so
Очень простой модуль вывода, сбрасывающий все пакеты в формате

===>PACKET BOUNDARY
key=value
key=value
...
===>PACKET BOUNDARY
...
в файл. Единственное полезное приложение - отладка.
Модуль определяет следующие директивы конфигурации:

файл дампа
Имя файла, в которое он должен входить. По умолчанию /var/log/ulogd.pktlog

ulogd_output_LOGEMU.so
Модуль вывода, который пытается максимально эмулировать старый журнал на основе системного журнала. Однако ведение журнала выполняется в отдельный текстовый файл, а не в системный журнал.

Модуль определяет следующие директивы конфигурации:

файл
Имя файла, в которое он должен входить. По умолчанию /var/log/ulogd.syslogemu

синхронизация
Установите это значение равным 1, если вы хотите, чтобы ваш файл журнала записывался синхронно. Это может снизить производительность, но заставит строки журнала отображаться немедленно. По умолчанию 0

ulogd_output_MYSQL.so
Выходной плагин для входа в базу данных mysql. Он компилируется, только если у вас установлены библиотеки mysql, и скрипт configure смог их обнаружить. (то есть для ./configure было указано: --with-mysql)

Плагин автоматически запускает процедуру с аргументами, взятыми из настраиваемой таблицы; Он подключается к mysql на этапе запуска ulogd и получает список столбцов в таблице. Затем он пытается сопоставить имена столбцов с ключами плагинов интерпретатора. Таким образом, вы можете легко выбрать, какую информацию вы хотите зарегистрировать - просто по расположению таблицы.

Если, например, ваша таблица содержит поле с именем 'ip_saddr', ulogd разрешит это с помощью ключа 'ip.saddr' и поместит ip-адрес в виде 32-битного целого числа без знака в соответствующий аргумент table.

Файл "doc/mysql-ulogd2.sql" содержит схему для ведения журнала как пакетов, так и потоков.

Модуль определяет следующие директивы конфигурации:

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

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

"INSERT": классический SQL-запрос INSERT выполняется в таблице, на которую указывает переменная "table".
начните с "INSERT": в конфигурации должно быть указано начало запроса INSERT, который будет использоваться. Например, типичным значением является "ВСТАВИТЬ В ulog2".
начните с "ВЫЗОВА": именованная хранимая процедура выполняется командой MySQL "CALL".
В противном случае именованная хранимая функция выполняется командой MySQL "SELECT".
db
Имя базы данных mysql.

хост
Имя узла базы данных mysql.

порт
Номер TCP-порта сервера базы данных mysql.

пользователь
Имя пользователя mysql.

пройти
Пароль для mysql.

переподключение
Количество попыток повторного подключения до объявления выходного плагина неработоспособным.

connect_timeout
Время ожидания подключения к базе данных.

ulogd_output_PGSQL.so
Выходной плагин для входа в базу данных postgresql. Он компилируется, только если у вас установлены библиотеки pgsql, и скрипт configure смог их обнаружить. (то есть для ./configure было указано: --with-pgsql)

Плагин автоматически запускает процедуру с аргументами, взятыми из настраиваемой таблицы; Он подключается к pgsql на этапе запуска ulogd и получает список столбцов в таблице. Затем он пытается сопоставить имена столбцов с ключами плагинов интерпретатора. Таким образом, вы можете легко создать свою собственную процедуру и выбрать ее аргументы, просто изменив макет таблицы.

Если, например, ваша таблица содержит поле с именем 'ip_saddr', ulogd разрешит это поле с помощью ключа 'ip.saddr' и поместит ip-адрес в виде 32-битного целого числа без знака в таблицу.

Файл "doc/pgsql-ulogd2.sql" содержит схему для ведения журнала как пакетов, так и потоков.

Модуль определяет следующие директивы конфигурации:

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

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

схема
Используемая схема PGSQL.

db
Имя базы данных.

хост
Имя узла базы данных mysql.

порт
Номер TCP-порта сервера базы данных.

пользователь
Имя пользователя sql.

пройти
Пароль для пользователя sql.

переподключение
Количество попыток повторного подключения до объявления выходного плагина неработоспособным.

connect_timeout
Время ожидания подключения к базе данных.

ulogd_output_PCAP.so
Плагин вывода, который можно использовать для генерации файлов журнала пакетов в стиле libpcap. Это может быть полезно для последующего анализа журнала пакетов с помощью таких инструментов, как tcpdump или ethereal.

Модуль определяет следующие директивы конфигурации:

файл
Имя файла, в которое он должен входить. По умолчанию: /var/log/ulogd.pcap

синхронизация
Установите для этого значение 1, если вы хотите, чтобы файл журнала pcap записывался синхронно. Это может снизить производительность, но ваши пакеты будут сразу отображаться в файле на диске. Значение по умолчанию равно 0

ulogd_output_SQLITE3.so
Плагин вывода для входа в базу данных SQLITE v3. Он компилируется, только если у вас установлены библиотеки sqlite, и скрипт configure смог их обнаружить. (то есть для ./configure было указано: --with-sqlite3)

Плагин автоматически вставляет данные в настроенную таблицу; Он открывает базу данных sqlite на этапе запуска ulogd и получает список столбцов в таблице. Затем он пытается сопоставить имена столбцов с ключами плагинов интерпретатора. Таким образом, вы можете легко выбрать, какую информацию вы хотите зарегистрировать - просто по расположению таблицы.

Если, например, ваша таблица содержит поле с именем 'ip_saddr', ulogd разрешит это поле с помощью ключа 'ip.saddr' и поместит ip-адрес в виде 32-битного целого числа без знака в таблицу.

Возможно, вы захотите взглянуть на файл 'doc/sqlite3.table' в качестве примера таблицы, включающей поля для регистрации всех ключей ulogd_BASE.so. Просто удалите поля, которые вас не интересуют, и создайте таблицу. Этот файл содержит две таблицы, одну для ведения журнала на основе пакетов, а другую для ведения журнала на основе потоков.

Чтобы создать файл базы данных с таблицами, вы должны вызвать следующую команду: sqlite3 ulogd.sqlite3db < sqlite3.table

Чтобы проверить, что мы правильно вводим в него данные: sqlite3 ulogd.sqlite3db "SELECT * from ulog_ct"

Модуль определяет следующие директивы конфигурации:

таблица
Имя таблицы, в которую ulogd должен входить.

db
Имя базы данных.

буфер
Размер буфера sqlite.

ulogd_output_SYSLOG.so
Плагин вывода, который действительно ведет журнал через syslogd. Строки будут выглядеть точно так же, как напечатанные с помощью традиционного целевого журнала.

Модуль определяет следующие директивы конфигурации:

средство
Средство ведения системного журнала (LOG_DAEMON, LOG_KERN, LOG_LOCAL0 .. LOG_LOCAL7, LOG_USER)

Уровень
Уровень системного журнала (LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUG)

6. ВОПРОСЫ / КОММЕНТАРИИ
Все комментарии / вопросы / ... приветствуются.

Просто напишите записку по адресу netfilter-devel@vger.kernel.org.

Предпочтительным методом сообщения об ошибках является система netfilter bugzilla, доступная по адресу http://bugzilla.netfilter.org / .
количество слов: 2089
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 802
Стаж: 5 лет
Откуда: Вологодская область
Поблагодарили: 32 раза
Контактная информация:

iptables - утилита командной строки, межсетевого экрана (брандмауэра)

Сообщение Артём Мамзиков »

передалать под скрипт sh (передача всех данных и запуск скрипата) вместо файла лога

Вид настройки
/etc/ulogd.conf
stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,hwhdr1:HWHDR,print1:PRINTPKT,script1:ZABBIXSCRIPT

# ВЫВОД**********************************************************************************
[script1]
# Путь на скрипт
pathscript="/etc/zabbix/scripts/iptablesulogmonitor.sh"
# Синхронизация значение 1 синхронно
sync=1
# Штамп времени 0 выключен, 1 включен
timestamp=1
# Данные для zabbix_sender
# IP/DNS zabbix сервера
ipzabbix=192.168.175.111
# Порт zabbix
portzabbix=10051
# Имя узла сети, текущее имя хоста
namehost=имя-узла
# Ключ куда передаем данные
zabbixkey=iptablesulog

iptablesulogmonitor.sh
#!/bin/bash
# Для теста
echo "Передача всех аргументов: $@" >> /var/log/ulogd/test.txt
# Передача в zabbix
ipzabbix=$1
portzabbix=${2:-10051}
namehost=$3
zabbixkey=$4
# Данные ulog передаваемые zabbix
data=$5
zabbix_sender -z $ipzabbix -p $portzabbix -s "$namehost" -k zabbixkey -o "${data}"

переделать LOGEMU под работу скрипта ZABBIXSCRIPT
/ulogd-2.0.8/output/ulogd_output_LOGEMU.c
переделываем под
/ulogd-2.0.8/output/ulogd_output_ZABBIXSCRIPT.c

gcc -shared -fPIC -o ulogd_ZABBIXSCRIPT.so ulogd_output_ZABBIXSCRIPT.c

Готовый плагин закидываем .so
/usr/lib64/ulogd/

Проверяем
service ulogd restart
service ulogd status
количество слов: 126
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 802
Стаж: 5 лет
Откуда: Вологодская область
Поблагодарили: 32 раза
Контактная информация:

iptables - утилита командной строки, межсетевого экрана (брандмауэра)

Сообщение Артём Мамзиков »

Сборка из исходного кода

netfilter ulogd
Git netfilter 2.0.8
netfilter.org ulogd2
Для ALTLinux rpm
Исходники ALTLinux

Если нет configure
в файле configure.ac или configure.in
apt-get install autoconf
autoreconf -i
autoreconf
обновит файлы настройки, включая configure.ac, на основе макросов Autoconf, и создаст скрипт configure После этого вы сможете выполнить
./configure

./configure --enable-ulog --enable-nflog --enable-nfct --enable-nfacct --enable-pgsql --enable-mysql --enable-sqlite3 --enable-dbi --enable-pcap --enable-json
make
mae install

autoreconf
configure --disable-static --with-dbi-lib=%_libdir --with-jansson
make DESTDIR=%buildroot
make -C doc

./configure --help
Описание параметров в configure --help
Показать
`configure' настраивает ulogd 2.0.8 для адаптации ко многим типам систем.

Использование: ./configure [ОПЦИЯ]... [VAR=ЗНАЧЕНИЕ]..

Чтобы назначить переменные окружения (например, CC, CFLAGS...), укажите их как
VAR=ЗНАЧЕНИЕ. Смотрите ниже описания некоторых полезных переменных.

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

Конфигурация:
-h, --help отобразите эту справку и выйдите
--help=short параметры отображения, характерные для данного пакета
--help=recursive отобразите краткую справку по всем включенным пакетам
-V, --version отобразите информацию о версии и выйдите
-q, --quiet, --silent не печатайте сообщения `проверка..."
--cache-file=FILE кэшировать результаты теста в ФАЙЛЕ [отключено]
-C, --config-cache alias/псевдоним для `--cache-file=config.cache'
-n, --no-create не создавайте выходные файлы
--srcdir=DIR найдите исходники в каталоге [настроить каталог или `..']

Установочные каталоги:
--prefix=PREFIX установите архитектурно-независимые файлы в PREFIX
[/usr/local]
--exec-prefix=EPREFIX установите файлы, зависящие от архитектуры, в PREFIX
[PREFIX]

По умолчанию, `make install' установит все файлы в
`/usr/local/bin', `/usr/local/lib' etc. Вы можете указать
способ установки префикс, отличный от `/usr/local' с помощью `--prefix',
например `--prefix=$HOME'.

Для лучшего контроля используйте приведенные ниже опции.

Точная настройка установочных каталогов:
--bindir=DIR пользовательские исполняемые файлы [EPREFIX/bin]
--sbindir=DIR исполняемые файлы системного администратора [EPREFIX/sbin]
--libexecdir=DIR исполняемые файлы программы [EPREFIX/libexec]
--sysconfdir=DIR данные для одной машины, доступные только для чтения [PREFIX/etc]
--sharedstatedir=DIR изменяемые данные, не зависящие от архитектуры [PREFIX/com]
--localstatedir=DIR изменяемые данные для одной машины [PREFIX/var]
--libdir=DIR библиотеки объектного кода [EPREFIX/lib]
--includedir=DIR Заголовочные файлы C [PREFIX/include]
--oldincludedir=DIR Заголовочные файлы C для не-gcc [/usr/include]
--datarootdir=DIR только для чтения arch.-independent/независимые данные root [PREFIX/share]
--datadir=DIR данные, не зависящие от архитектуры, доступны только для чтения [DATAROOTDIR]
--infodir=DIR информационная документация [DATAROOTDIR/info]
--localedir=DIR данные, зависящие от языка [DATAROOTDIR/locale]
--mandir=DIR документация [DATAROOTDIR/man]
--docdir=DIR документация администраторов/root [DATAROOTDIR/doc/ulogd]
--htmldir=DIR html документация [DOCDIR]
--dvidir=DIR dvi документация [DOCDIR]
--pdfdir=DIR pdf документация [DOCDIR]
--psdir=DIR ps документация [DOCDIR]

Названия программ:
--program-prefix=PREFIX добавляйте ПРЕФИКС к именам установленных программ
--program-suffix=SUFFIX добавляйте СУФФИКС к названиям установленных программ
--program-transform-name=PROGRAM запустите программу sed по именам установленных программ

Типы систем:
--build=BUILD настроить для сборки при сборке [guessed]
--host=HOST перекрестная компиляция для создания программ для запуска на хосте [BUILD]

Дополнительные функции:
--disable-option-checking игнорировать непризнанное --enable/--with options
--disable-FEATURE не включать ФУНКЦИЮ (такую же, как --enable-FEATURE=no)
--enable-FEATURE[=ARG] включить ФУНКЦИЮ [ARG=yes]
--enable-silent-rules менее подробный вывод сборки (отмена: "make V=1")
--disable-silent-rules подробный вывод сборки (отменить: "make V=0")
--enable-dependency-tracking не отвергайте медленные средства извлечения зависимостей
--disable-dependency-tracking ускоряет одноразовую сборку
--enable-static[=PKGS] создавайте статические библиотеки [default=no]
--enable-shared[=PKGS] создавайте общие библиотеки [default=yes]
--enable-fast-install[=PKGS] оптимизация для быстрой установки [default=yes]
--disable-libtool-lock избегайте блокировки (может нарушить параллельную сборку)
--disable-largefile исключить поддержку больших файлов
--enable-ulog Включить модуль ulog [по умолчанию=да]
--enable-nflog Включить модуль nflog [по умолчанию=да]
--enable-nfct Включить модуль nfct [по умолчанию=да]
--enable-nfacct Включить модуль nfacct [по умолчанию=да]
--enable-pgsql Включить плагин вывода PostgreSQL [по умолчанию=тест]
--enable-mysql Включить плагин вывода MySQL [по умолчанию=тест]
--enable-sqlite3 Включить плагин вывода SQLITE3 [по умолчанию=тест]
--enable-dbi Включить плагин вывода DBI [по умолчанию=тест]
--enable-pcap Включить плагин вывода PCAP [по умолчанию=тест]
--enable-json Включить плагин вывода JSON [по умолчанию=тест]

Дополнительные пакеты:
--with-PACKAGE[=ARG] использовать ПАКЕТ [ARG=yes]
--without-PACKAGE не используйте ПАКЕТ (такой же, как --with-PACKAGE=no)
--with-pic[=PKGS] старайтесь использовать только объекты PIC/non-PIC [по умолчанию=use both]
--with-aix-soname=aix|svr4|both вариант управления версиями разделяемой библиотеки (он же "SONAME"), предоставляемый в AIX, [по умолчанию=aix].
--with-gnu-ld предположим, что компилятор C использует GNU ld [по умолчанию=нет]
--with-sysroot[=DIR] Выполните поиск зависимых библиотек в каталоге (или в системном корне компилятора, если он не указан).
--with-pg-config=PATH Путь к скрипту pg_config
--with-mysql-config=PATH Путь к скрипту mysql_config
--with-pcap-config=PATH Путь к скрипту pcap-config
--with-ulogd2libdir=PATH Каталог по умолчанию для загрузки плагина ulogd2 из [[LIBDIR/ulogd]]

Некоторые влиятельные переменные среды:
CC Команда компилятора C
CFLAGS Флаги компилятора C
LDFLAGS флаги компоновщика, например -L<lib dir>, если у вас есть библиотеки в нестандартном каталоге <lib dir>
LIBS библиотеки для передачи компоновщику, например -l<библиотека>
CPPFLAGS (Objective) Флаги препроцессора C/C++, например -I<включить каталог>, если у вас есть заголовки в нестандартном каталоге <включить каталог>
LT_SYS_LIBRARY_PATH Определенный пользователем путь поиска библиотеки во время выполнения.
CPP C препроцессор
PKG_CONFIG путь к утилите pkg-config
PKG_CONFIG_PATH каталоги для добавления в путь поиска pkg-config
PKG_CONFIG_LIBDIR путь, переопределяющий встроенный путь поиска pkg-config
LIBNFNETLINK_CFLAGS Флаги компилятора C для LIBNFNETLINK, переопределяющие pkg-config
LIBNFNETLINK_LIBS флаги компоновщика для LIBNFNETLINK, переопределяющие pkg-config
LIBNETFILTER_LOG_CFLAGS Флаги компилятора C для LIBNETFILTER_LOG, переопределяющие pkg-config
LIBNETFILTER_LOG_LIBS флаги компоновщика для LIBNETFILTER_LOG, переопределяющие pkg-config
LIBNETFILTER_CONNTRACK_CFLAGS Флаги компилятора C для LIBNETFILTER_CONNTRACK, переопределяющие pkg-config
LIBNETFILTER_CONNTRACK_LIBS флаги компоновщика для LIBNETFILTER_CONNTRACK, переопределяющие pkg-config
LIBMNL_CFLAGS Флаги компилятора C для LIBMNL, переопределяющие pkg-config
LIBMNL_LIBS флаги компоновщика для LIBMNL, переопределяющие pkg-config
LIBNETFILTER_ACCT_CFLAGS Флаги компилятора C для LIBNETFILTER_ACCT, переопределяющие pkg-config
LIBNETFILTER_ACCT_LIBS флаги компоновщика для LIBNETFILTER_ACCT, переопределяющие pkg-config
libpq_CFLAGS Флаги компилятора C для libpq, переопределяющие pkg-config
libpq_LIBS флаги компоновщика для libpq, переопределяющие pkg-config
libmysqlclient_CFLAGS Флаги компилятора C для libmysqlclient, переопределяющие pkg-config
libmysqlclient_LIBS флаги компоновщика для libmysqlclient, переопределяющие pkg-config
libsqlite3_CFLAGS Флаги компилятора C для libsqlite3, переопределяющие pkg-config
libsqlite3_LIBS флаги компоновщика для libsqlite3, переопределяющие pkg-config
libdbi_CFLAGS Флаги компилятора C для libdbi, переопределяющие pkg-config
libdbi_LIBS флаги компоновщика для libdbi, переопределяющие pkg-config
libpcap_CFLAGS Флаги компилятора C для libpcap, переопределяющие pkg-config
libpcap_LIBS флаги компоновщика для libpcap, переопределяющие pkg-config
libjansson_CFLAGS Флаги компилятора C для libjansson, переопределяющие pkg-config
libjansson_LIBS флаги компоновщика для libjansson, переопределяющие pkg-config

Используйте эти переменные, чтобы переопределить выбор, сделанный "configure", или помочь ему найти библиотеки и программы с нестандартными именами/расположениями.

Сообщайте об ошибках поставщику пакетов.

Пример файла ulogd.spec
переменные пути ulogd.spec
Показать
#! /bin/sh

apt-get install rpm-build-licenses libpcap-devel zlib-devel libMySQL-devel postgresql-devel libsqlite3-devel libdbi-devel libnfnetlink-devel libmnl-devel libnetfilter_log-devel libnetfilter_conntrack-devel libnetfilter_acct-devel libjansson-devel linuxdoc-tools OpenSP


%def_disable nfacct

%define _unpackaged_files_terminate_build 1

Summary: ulogd - The userspace logging daemon for netfilter
Url: http://www.netfilter.org/projects/ulogd/
License: %gpl2plus
Group: System/Servers


%prep
%setup
ulogd-2.0.7-alt1.patch -p1


build
#export CFLAGS="$RPM_OPT_FLAGS -fPIC"
autoreconf
configure --disable-static --with-dbi-lib=/usr/lib64 --with-jansson


make DESTDIR=
make -C doc
#rm -f ulogd
#export LDFALGS="-pie"
#make ulogd

install
mkdir -p /var/log/ulogd
mkdir -p /etc
mkdir -p /usr/lib64/ulogd
mkdir -p /usr/sbin
makeinstall_std
mkdir -p /etc/rc.d/init.d
install ulogd.init /etc/rc.d/init.d/ulogd
install -pDm644 ulogd.service /lib/systemd/system/ulogd.service
install -pDm644 ulogd.logrotate /etc/logrotate.d/ulogd
mkdir -p /usr/share/ulogd
install -pm644 doc/*.sql /usr/share/ulogd/
install -pm644 doc/sqlite3.table /usr/share/ulogd/
mkdir -p /var/lib/ulogd/
mkdir -p /usr/share/man/man8
install -pm644 ulogd.8 /usr/share/man/man8/ulogd.8
install -Dm0640 ulogd.conf /etc/ulogd.conf

if_disabled nfacct
sed -i -r 's;^(plugin="/usr/lib64/ulogd/ulogd_inpflow_NFACCT\.so");#\1;' /etc/ulogd.conf
endif

%pre
/usr/sbin//groupadd -r -f ulogd >/dev/null 2>&1
/usr/sbin//useradd -r -n -g ulogd -d /dev/null -s /dev/null ulogd >/dev/null 2>&1 ||:

%preun
%preun_service ulogd

%files
%attr(0755,root,root) /usr/sbin//ulogd
%attr(0640,root,ulogd) %config(noreplace) /etc/ulogd.conf
/etc/rc.d/init.d/ulogd
lib/systemd/system/ulogd.service
%config(noreplace) /etc/logrotate.d/ulogd
%dir /usr/lib64/ulogd
%attr(1770,root,ulogd) var/log/ulogd/ulogd
/usr/lib64/ulogd/*.so
/usr/share/doc/ COPYING AUTHORS README
/usr/share/doc/ulogd.txt /usr/share/doc/ulogd.html
/usr/share/man/man8/*
%attr(1770,root,ulogd) var/lib/ulogd/
%dir /usr/share/ulogd/

%exclude /usr/lib64/ulogd/*.la
%exclude /usr/lib64/ulogd/ulogd_output_MYSQL.so
%exclude /usr/lib64/ulogd/ulogd_output_PGSQL.so
%exclude /usr/lib64/ulogd/ulogd_output_SQLITE3.so
%exclude /usr/lib64/ulogd/ulogd_output_DBI.so

%files mysql
/usr/lib64/ulogd/ulogd_output_MYSQL.so
/usr/share/ulogd/mysql-*.sql

%files pgsql
/usr/lib64/ulogd/ulogd_output_PGSQL.so
/usr/share/ulogd/pgsql-*.sql

%files sqlite3
/usr/lib64/ulogd/ulogd_output_SQLITE3.so
/usr/share/ulogd/sqlite3.table

%files dbi
/usr/lib64/ulogd/ulogd_output_DBI.so

%changelog

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib/ulogd --libdir=/usr/lib64 --libexecdir=/usr/lib64/ulogd --sbindir=/usr/sbin --datadir=/usr/share/ulogd --docdir=/usr/share/doc/ulogd --mandir=/usr/share/man/man8 --with-logrotate=/etc/logrotate.d --with-initdir=/etc/rc.d/init.d --with-systemdsystemunitdir=/lib/systemd/system --disable-static --with-dbi-lib=/usr/lib64 --with-jansson --enable-ulog --enable-nflog --enable-nfct --enable-nfacct --enable-pgsql --enable-mysql --enable-sqlite3 --enable-dbi --enable-pcap --enable-json
make
mae install
количество слов: 1068
Ответить Вложения 1 Пред. темаСлед. тема

Вернуться в «Установка Заббикс и Дополнений»