Вопрос или проблема
Я хочу записывать весь трафик, который входит и выходит через порт X. Я выполнил следующие шаги.
- Отредактировал файл
/etc/syslog.conf
,/etc/rsyslog.conf
,/etc/systemd/system/rsyslog.service.d/rsyslog.conf
для измененияkern.warning /var/log/iptables.log
sudo systemctl daemon-reload
iptables -I INPUT -p tcp --dport **X** -j LOG --log-level 7
iptables -I OUTPUT -p tcp --dport **X** -j LOG --log-level 7
tail -f /var/log/iptables.log
- Я попытался подключиться к порту x с другого сервера.
Но мне не удалось получить никаких логов в /var/log/iptables.log
.
После быстрого воспроизведения этой настройки, я думаю, ваша проблема связана с небольшой недоразумением.
Ваша команда iptables -I INPUT -p tcp --dport **X** -j LOG --log-level 7
не устанавливает уровень логирования на WARNING
, а на уровень логирования DEBUG
. Чтобы установить уровень предупреждения, используйте --log-level 4
.
Это приводит к использованию неправильного уровня логирования в вашей конфигурации syslog. Используя --log-level 7
в команде iptables
, вам нужно использовать kern.debug
в /etc/rsyslog.conf
. Используйте kern.warning
в rsyslog
, когда используете --log-level 4
в iptables
.
Убедитесь, что вы перезапустили сервис rsyslog
(systemctl restart rsyslog
) после изменения /etc/rsyslog.conf
. Также обратите внимание, что файл /var/log/iptables.log
не будет создан, пока не появится входящий трафик на нужный порт для записи.
Ответ или решение
Конечно, давайте подробно разберем вашу проблему с логированием в iptables на CentOS 7 и предложим возможные пути ее решения.
Теоретическая часть (Теория)
Для логирования сетевого трафика с помощью iptables необходимо правильно настроить несколько элементов, включая правила iptables, системное журналирование (rsyslog) и структуру каталогов, где будут храниться логи. В iptables для записи логов используется специфическое правило с указанием уровня логирования, а rsyslog обрабатывает эти сообщения и записывает их в указанный файл лога.
Настройка iptables и уровней логирования: В iptables можно использовать разные уровни логирования, которые соответствуют уровням приоритета syslog. Наиболее часто используемые уровни включают:
0
(emerg) – аварийное сообщение1
(alert) – сообщение тревоги2
(crit) – критическое сообщение3
(err) – ошибка4
(warning) – предупреждение5
(notice) – заметка6
(info) – информационный уровень7
(debug) – отладочная информация
Пример (Example)
В вашем случае вы установили уровень 7
(debug) в правилах iptables:
iptables -I INPUT -p tcp --dport X -j LOG --log-level 7
iptables -I OUTPUT -p tcp --dport X -j LOG --log-level 7
В то же время вы настроили файл /etc/rsyslog.conf
на прием сообщений уровня kern.warning
, что соответствует уровню 4
. Это означает, что ваш конфигурационный файл rsyslog ориентирован на прием более высокого уровня сообщений, чем вы отправляете.
Применение (Application)
Чтобы устранить вашу проблему, следуйте следующим шагам:
-
Измените уровень логирования в файлах конфигурации: Поскольку вы используете
--log-level 7
в iptables, необходимо убедиться, что rsyslog тоже настроен на прием сообщений уровня debug.В файле
/etc/rsyslog.conf
убедитесь, что у вас есть следующая строка:kern.debug /var/log/iptables.log
Если вы хотите использовать
kern.warning
, измените уровень логирования в iptables на--log-level 4
:iptables -I INPUT -p tcp --dport X -j LOG --log-level 4 iptables -I OUTPUT -p tcp --dport X -j LOG --log-level 4
-
Обновите и перезапустите систему логирования: После внесения изменений, выполните:
sudo systemctl restart rsyslog
Это позволит применить изменения в конфигурации rsyslog.
-
Проверка работы правил iptables: Убедитесь, что ваши правила добавлены правильно. Используйте:
iptables -L -n -v
Это даст вам список всех текущих правил с указанием статистики.
-
Создание файла лога: Убедитесь, что файл
/var/log/iptables.log
может быть создан. Проверьте права доступа к каталогу/var/log
, чтобы политике безопасности SELinux или другие ограничения не препятствовали созданию файла. -
Тестирование: Попробуйте снова отправить трафик на порт X с другого сервера и проверьте, появляются ли записи в
/var/log/iptables.log
.
Дополнительные рекомендации
-
SELinux: В случае, если SELinux включен, он может блокировать создание лога. Выполните в командной строке:
sudo setenforce 0
Это временно отключит SELinux. Протестируйте, работает ли логирование. Если работает, возможно, потребуется настроить контексты SELinux.
-
Поток трафика: Убедитесь, что действительно есть сетевой трафик на заданный порт. Можно использовать инструменты вроде
nc
(netcat) для генерации трафика. -
Мониторинг и отладка: Используйте инструменты мониторинга системных журналов для анализа возможных ошибок конфигурации или других сбоев.
Следуя вышеуказанным инструкциям, вы должны успешно разрешить проблему с логированием посредством iptables на CentOS 7. Таким образом вы не только устраните конкретную неполадку, но и улучшите свои навыки управления системным журналированием в Linux-системах.