Включить логирование iptables centos
Во время настройки правил iptables очень часто возникает необходимость посмотреть, какие из соединений отбрасываются (дропаются, фильтруются). В этой статье мы рассмотрим настройки для iptables, чтобы отфильтрованные фаерволом пакеты, сохранялись в отдельный лог файл для дальнейшего анализа.
Информация в данной статье написана для случая, когда политика по-умолчанию для цепочек INPUT и OUTPUT установлена на DROP. Т.е. любые соединения, для которых не указаны разрешающие правила - будут блокироваться фаерволом. Команды, которые приведены ниже, просто позволяют прежде чем заблокировать такое соединение/пакет, сначала записать информацию о нем в лог-файл, а уже потом заблокировать. Если же у вас политика по-умолчанию установлена на ACCEPT, то описанные ниже команды вам не подойдут, т.к. введя их, вы просто заблокируете доступ себе и другим.Описание
Чтобы это работало, мы должны создать конфигурационный файл для rsyslog (считаем, что он у вас уже установлен в системе).
Открываем его любым текстовым редактором, например, nano и вносим туда следующие строчки:
Сохраняем изменения в файле. Первая строчка говорит rsyslog, что нужно искать в логе фразу "IPTables-Dropped: ", и когда он её находит, то переносит в файл /var/log/iptables.log
Вторая строчка просто дает понять rsyslog, чтобы найденные строки, подходящие под условия, не дублировались в основной лог /var/log/messages.
Перезапускаем rsyslog:
Все, подготовительный этап, позволяющий писать лог iptables в отдельный файл мы сделали. Можно его не делать и тогда все записи будут появляться в /var/log/messages, но ИМХО это не очень удобно.
Переходим ко второму этапу, непосредственной настройке iptables.
Если у вас уже есть написанные правила для iptables, то все настройки, приведенные ниже, необходимо дописывать в самый низ конфигурации.Возможны три варианта настройки:
Вариант 1 - Записываем в лог (логируем) только входящие отброшенные соединения/пакеты:
Разберем что же означает каждая из команд в примере выше:
iptables -N LOGGING: Создаем новую цепочку LOGGING
iptables -A INPUT -j LOGGING: Все входящие пакеты (для которых не сработало ни одно из ваших собственных правил и которые из-за политики DROP все-равно должны заблокироваться) попадают в цепочку LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4: Логируем все входящие пакеты в syslog (/var/log/messages).
iptables -A LOGGING -j DROP: Отбрасываем все пакеты, которые пришли в цепочку LOGGING.
Вариант 2 - Записываем в лог только исходящие отброшенные соединения/пакеты:
Все тоже самое, что и в примере выше, за исключением цепочки, теперь используем OUTPUT вместо INPUT.
Вариант 3 - Записываем в лог все исходящие и входящие отброшенные соединения/пакеты:
Была ли эта статья Вам полезна?
Что в статье не так? Пожалуйста, помогите нам её улучшить!Комментарии к статье (16)
Спасибо! Очень помогло, хорошая статья!
В последнем примере после iptables -A LOGGING -j DROP намертво завешивается хост
Ну ты и умник. У меня специально прописано правило, разрешающее соединение по SSH. Но один хрен у меня соединение обрезается после последней волшебной команды. Ладно еще хоть сервак под рукой.
Статью надо читать дальше заголовка и головой думать, когда команды вводишь, тогда и проблем будет гораздо меньше.
Статью читал вдумчиво и несколько раз. После ввода правила дропа - все соединения обрубаются несмотря на разрешающее правило по порту 22. Тебе как еще это донести? Вроде русским языком уже написано, а по китайски я не умею.
В статье жирным красным и желтым цветом выделено, что данный вариант подходит
1) Только для конфигураций, где политика по-умолчанию установлена на Drop
2) Что данные команды надо прописывать в самый низ конфига, после всех остальных правил (например, разрешающих соединение по ssh).
Если не соблюдать очередность (например, просто ввести команды в консоли не в том порядке, а не внести в конфиг) - то до разрешающих правил просто не дойдет очередь (т.к. предложенные команды логирования - отбрасывают все пакеты, после записи в лог, как оно и должно происходить, при политике Drop), а если соблюдать, то там уже лишнего нечего блокировать, т.к. из-за политики Drop, все, что дошло до правил логирования (они ведь в самом низу, после всех других), предложенных в статье, итак должно быть отброшено.
Мне кажется, что ты не понимаешь о чем пишешь. Вот мой кусок iptables-save:
:INPUT DROP [1060:84267]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [727:191642]
:LOGGING - [0:0]
-A INPUT -j LOG --log-prefix "Iptables INPUT " --log-level 7
-A INPUT -s 192.168.163.0/24 -i enp1s0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.163.0/24 -i enp1s0 -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.163.0/24 -p tcp -m multiport --ports 3128 -j ACCEPT
-A INPUT -s 192.168.163.0/24 -p tcp -m multiport --ports 3129 -j ACCEPT
-A INPUT -j LOGGING
-A FORWARD -j LOG --log-prefix "Iptables FORWARD " --log-level 7
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -p tcp -m multiport --ports 53 -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -p udp -m multiport --ports 53 -j ACCEPT
-A OUTPUT -j LOGGING
-A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: "
COMMIT
Политика по умолчанию INPUT - DROP. Разрешающее правило для подключения к ссш порту есть и оно выше. И как только я ввожу ту волшебную команду "iptables -A LOGGING -j DROP" - все, консоль обрубается. Что я делаю не так?
Да, выше уже есть логирование инпут и форвард, я просто для твоего примера убирать не стал, т.к. оно влиять не должно.
Я конечно далеко не эксперт по iptables, но:
Политика для цепочки OUTPUT установлена в ACCEPT, хотя и в статье, и в комментариях я писал, что описанные в статье действия применимы ТОЛЬКО для политики DROP.
И как только я ввожу ту волшебную команду "iptables -A LOGGING -j DROP" - все, консоль обрубается
Ну так что ему сказано, то он и делает, все пакеты из цепочки OUTPUT он отправляет в LOGGING. Из-за вот этого правила:
А после ввода "волшебной команды":
Все пакеты в цепочке LOGGING (а в приведенном конфиге в нем оказываются пакеты из цепочек INPUT и OUTPUT) пишутся в лог и блокируются.
Т.е. Все исходящие соединения с сервера включая ssh отправляем в цепочку LOGGING и блокируем. Поэтому доступ и пропадает.
Вот этого правила " -A OUTPUT -j LOGGING " не должно вообще быть с такими настройками политик, иначе все исходящие соединения будут писаться в лог и блокироваться, в том числе обрубая доступ по ssh.
Только разрещающие правила OUTPUT и INPUT смешаются в параллели LOGGING и правила разрешающие писать надо типа:
iptables -A LOGGING -s -i -p -dport -j ACCEPT
То есть вот такой код примерно:
Имейте ввиду, что и FORWARD и INPUT и OUTPUT чейны попадут в слитый LOGGING, поэтому это точно не best practice
Вообще то когда я писал предыдущий ответ, у меня были подозрения насчет OUTPUT:ACCEPT. Но к этому времени я уже достаточно много провозился с этим iptables. А когда я наткнулся на эту статью, у меня ветер в голове гулял и я нихрена не знал. Поэтому большинство комментов подобно моим - ничего не работает, афтар дятел. Так что может стоит твой последний коммент с разбором в саму статью поместить, чтобы поменьше ошибок было.
А лучше задать для примера общий рабочий набор правил:
iptables -P INPUT -j DROP
iptables -P OUTPUT -j DROP
iptables - P FORWARD -j DROP
и далее как в статье:
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
ага, мат_удален какая-то, логируем все входящие, а потом дропаем все входящие и получаем логирование дропуных входящих, шутка юмора
Если, прежде чем писать комментарий, прочитать хотя бы первый абзац в статье, а если сил на это не хватает, то хотя бы заголовок, то можно сильно удивиться и узнать, что бывают ситуации, когда надо писать в лог именно дропнутые входящие/исходящие соединения, а данной статье - описан один из способов, как это можно сделать.
Не вздумайте выполнять эти команды. Заблокируете себе и всем остальным доступ к сайту
Читайте также: