В этом случае информация будет сохранена в, /var/log/iptablesа также в /var/log/messages. Я хочу только одну копию этих данныхiptables.log
Абид
1
Я добавил свой собственный ответ, чтобы также охватить вопрос Абида, плюс отсутствующий конфигурационный файл logrotate. "stop" или "& ~" не позволяют сообщениям продолжать работу по правилам rsyslog, чтобы они также попадали в / var / log / messages.
Питер
6
Это предполагает, что ваш брандмауэр уже делает журналы, как и любой нормальный брандмауэр. Для некоторых примеров это требует идентифицируемого сообщения, такого как «NETFILTER» в примере slm.
сделать файл в rsyslog.d
vim /etc/rsyslog.d/10-firewall.conf
Это работает в CentOS 7. Я не знаю, как проверить, что оно пришло с брандмауэра, кроме как искать IN и OUT ... CentOS странно. Не используйте это, если следующая версия не работает.
# into separate file and stop their further processing
if ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
& ~
}
Это работает в CentOS 7 и также проверяет содержимое сообщения (замените «Shorewall» тем, что есть в сообщении правила -j LOG):
# into separate file and stop their further processing
if ($msg contains 'Shorewall') and \
($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
& ~
}
Это работает в других (Ubuntu, Debian, openSUSE). И это лучший способ сделать это. Нет поиска строк в сообщении:
# into separate file and stop their further processing
if ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then -/var/log/firewall
& ~
А вот то, что есть на машине openSUSE по умолчанию (которая, я думаю, должна присутствовать в каждом дистрибутиве и отсутствует) (разница, похоже, заключается только в «остановке» вместо «& ~»; не все системы поддерживают оба синтаксиса):
if ($syslogfacility-text == 'kern') and \
($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
stop
}
И для всего вышеперечисленного не забудьте также файл logrotate.d:
vim /etc/logrotate.d/firewall
содержащий:
/var/log/firewall {
rotate 7
size 500k
postrotate
# before using this, run the command yourself to make sure
# it is right... the daemon name may vary
/usr/bin/killall -HUP rsyslogd
endscript
}
Ответы:
системный журнал
Загляните в справочную страницу для
iptables
. Он показывает цель под названием,LOG
которая может делать то, что вы хотите.пример
Установите уровень регистрации для
LOG
4.Настройте
syslog.conf
запись этих сообщений в отдельный файл.Перезапустите syslogd.
Debian / Ubuntu
Fedora / CentOS / RHEL
ПРИМЕЧАНИЕ. Этот метод регистрации называется фиксированными приоритетами. Это либо числа, либо имена (1,2,3,4, ..) или (DEBUG, WARN, INFO и т. Д.).
Rsyslog
Если случайно вы используете
rsyslog
, вы можете создать фильтр на основе свойств следующим образом:Затем добавьте thils switch в ваши правила iptables, в которые вы хотите войти:
В качестве альтернативы вы можете также регистрировать сообщения, используя этот тип фильтра свойств:
ПРИМЕЧАНИЕ. Этот второй метод не требует каких-либо изменений
iptables
.Ссылки
источник
/var/log/iptables
а также в/var/log/messages
. Я хочу только одну копию этих данныхiptables.log
Это предполагает, что ваш брандмауэр уже делает журналы, как и любой нормальный брандмауэр. Для некоторых примеров это требует идентифицируемого сообщения, такого как «NETFILTER» в примере slm.
сделать файл в rsyslog.d
Это работает в CentOS 7. Я не знаю, как проверить, что оно пришло с брандмауэра, кроме как искать IN и OUT ... CentOS странно. Не используйте это, если следующая версия не работает.
Это работает в CentOS 7 и также проверяет содержимое сообщения (замените «Shorewall» тем, что есть в сообщении правила -j LOG):
Это работает в других (Ubuntu, Debian, openSUSE). И это лучший способ сделать это. Нет поиска строк в сообщении:
А вот то, что есть на машине openSUSE по умолчанию (которая, я думаю, должна присутствовать в каждом дистрибутиве и отсутствует) (разница, похоже, заключается только в «остановке» вместо «& ~»; не все системы поддерживают оба синтаксиса):
И для всего вышеперечисленного не забудьте также файл logrotate.d:
содержащий:
источник