Как понять, почему пакет был признан недействительным в iptables?

11

Я установил некоторые iptablesправила, чтобы он регистрировал и сбрасывал пакеты, которые являются недействительными ( --state INVALID). Читая логи, как я могу понять, почему пакет был признан недействительным? Например, следующее:

Nov 29 22:59:13 htpc-router kernel: [6550193.790402] ::IPT::DROP:: IN=ppp0 OUT= MAC= SRC=31.13.72.7 DST=136.169.151.82 LEN=40 TOS=0x00 PREC=0x00 TTL=242 ID=5104 DF PROTO=TCP SPT=80 DPT=61597 WINDOW=0 RES=0x00 ACK RST URGP=0
mbaitoff
источник

Ответы:

25

Пакеты могут находиться в различных состояниях при использовании проверки пакетов с отслеживанием состояния.

  • Новое : Пакет не является частью какого-либо известного потока или сокета, и флаги TCP имеют бит SYN.
  • Установлено : пакет соответствует отслеживаемому потоку или сокету CONNTRACKи имеет все флаги TCP. После того, как начальное TCP-квитирование завершено, бит SYN должен быть выключен, чтобы пакет находился в установленном состоянии.
  • Связанный : пакет не соответствует ни одному известному потоку или сокету, но ожидается, что пакет существует, поскольку существует существующий сокет, который предсказывает его (примерами этого являются данные на порту 20, когда существует существующий сеанс FTP на порту 21, или данные UDP для существующего соединения SIP через TCP-порт 5060). Это требует ассоциированного ALG.
  • Неверно : если ни одно из предыдущих состояний не применяется, пакет находится в состоянии INVALID. Это может быть вызвано различными типами скрытых сетевых тестов, или это может означать, что у вас заканчиваются CONNTRACKзаписи (что вы также должны увидеть в журналах). Или это может быть просто доброкачественным.

В вашем случае пакет, который вы цитируете, показывает, что флаги TCP ACKи RST, и что порт источника 80. Это означает, что веб-сервер 31.13.72.7(который является Facebook) отправил вам пакет сброса. Совершенно невозможно сказать почему, не видя пакетов, которые были до него (если есть). Но, скорее всего, он отправляет вам сброс по той же причине, по которой ваш компьютер считает его недействительным.

bahamat
источник
Таким образом, нет способа попросить ядро ​​(или iptables) добавить своего рода «подпись» в пакет, который будет содержать причину того, что он является недействительным?
mbaitoff
2
По определению нет. Неверный означает, что он не соответствует ни одному из известных состояний. Другими словами, это ядро ​​говорит: «Я не знаю, почему я получил этот пакет».
Багамат
Для отладки определенных пакетов INVALID, просмотр их в Wireshark из дампа может работать ... Я видел пакеты с полями SACK (на самом деле нормальные порядковые номера меняются брандмауэром, а те, что в опции SACK - нет, что приводит к SACK значения являются недействительными) , что было нарушено существо брандмауэра упал как недействительный ...
Герт ван ден Берг