Bagaimana cara memahami mengapa paket itu dianggap INVALID oleh `iptables`?

11

Saya mengatur beberapa iptablesaturan sehingga log dan menjatuhkan paket-paket yang INVALID ( --state INVALID). Membaca log, bagaimana saya bisa mengerti mengapa paket itu dianggap tidak valid? Misalnya, berikut ini:

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
sumber

Jawaban:

25

Paket dapat di berbagai negara saat menggunakan inspeksi paket stateful.

  • Baru : Paket ini bukan bagian dari aliran atau soket yang diketahui dan flag TCP mengaktifkan bit SYN.
  • Didirikan : Paket cocok dengan aliran atau soket dilacak oleh CONNTRACKdan memiliki bendera TCP. Setelah jabat tangan TCP awal selesai, bit SYN harus dimatikan untuk paket dalam keadaan ditetapkan.
  • Terkait : Paket tidak cocok dengan aliran atau soket yang diketahui, tetapi paket tersebut diharapkan karena ada soket yang ada yang memprediksikannya (contohnya adalah data pada port 20 ketika ada sesi FTP yang ada di port 21, atau data UDP untuk koneksi SIP yang ada pada port TCP 5060). Ini membutuhkan ALG terkait.
  • Tidak Valid : Jika tidak ada status sebelumnya yang berlaku maka paket tersebut dalam status INVALID. Ini bisa disebabkan oleh berbagai jenis probe jaringan tersembunyi, atau itu bisa berarti Anda kehabisan CONNTRACKentri (yang juga harus Anda lihat dinyatakan dalam log Anda). Atau mungkin hanya sepenuhnya jinak.

Dalam kasus Anda, paket yang Anda kutip menunjukkan bahwa TCP menandai ACKdan RST, dan bahwa port sumbernya 80. Artinya adalah server web di 31.13.72.7(yang kebetulan adalah Facebook) mengirim paket reset kepada Anda. Sama sekali tidak mungkin untuk mengatakan mengapa tanpa melihat paket yang datang sebelumnya (jika ada). Tetapi kemungkinan besar mengirimkan Anda reset karena alasan yang sama komputer Anda menganggap itu tidak valid.

bahamat
sumber
Jadi tidak ada cara untuk meminta kernel (atau iptables) untuk menambahkan semacam "tanda tangan" ke sebuah paket yang akan menganggap alasannya tidak valid?
mbaitoff
2
Menurut definisi, tidak. Valid berarti tidak cocok dengan status yang diketahui. Dengan kata lain, itulah kernel yang mengatakan "Saya tidak tahu mengapa saya menerima paket ini".
bahamat
Untuk debugging paket INVALID spesifik, melihatnya di Wireshark dari dump mungkin berfungsi ... Saya telah melihat paket dengan bidang SACK (sebenarnya nomor urut normal diubah oleh firewall dan yang di opsi SACK tidak, menghasilkan SACK nilai tidak valid) yang rusak oleh firewall yang dibatalkan tidak valid ...
Gert van den Berg