ip_conntrack NAT script

Egy olyan szkriptet szeretnék írni, ami egy átjárón kiírja a {S,D}NAT-olt IP kapcsolatokat.Idáig jutottam (előre elnézést a hossza miatt):


#!/bin/bash

# The conntrack file
conntrack="/proc/net/ip_conntrack"

# Is connection tracking enabled?
if [ ! -r "${conntrack}" ]; then
  echo "${conntrack} is not readable. Is connection tracking enabled?" >&2
  exit 1
fi

# A packet description consists of the following:
packet_re='src=\([[:digit:]\.]\+\)[[:blank:]]\+'               # src addr
packet_re="${packet_re}"'dst=\([[:digit:]\.]\+\)[[:blank:]]\+' # dst addr
packet_re="${packet_re}"'sport=\([[:digit:]]\+\)[[:blank:]]\+' # src port
packet_re="${packet_re}"'dport=\([[:digit:]]\+\)'              # dst port

# An assured connection consists of the following:
conn_re='\([[:alnum:]]\+\)[[:blank:]].\+'                      # proto
conn_re="${conn_re}${packet_re}"'[[:blank:]].\+'               # packet desc
conn_re="${conn_re}${packet_re}"'[[:blank:]].\+'               # packet desc
conn_re="${conn_re}"'\[ASSURED\].*'                            # ASSURED flag

# Read conntrack file
sed -n 's/^'"${conn_re}"'$/\1 \2 \4 \3 \5 \6 \8 \7 \9/p' "${conntrack}" |
while read line; do
  conn=(${line})
  if [ "${conn[1]}" = "${conn[7]}" ]; then continue; fi        # ***
  echo "[${conn[0]} ->] src: ${conn[1]}:${conn[2]} dst: ${conn[3]}:${conn[4]}"
  echo "[${conn[0]} <-] src: ${conn[5]}:${conn[6]} dst: ${conn[7]}:${conn[8]}"
  echo ""
done

exit 0

Kérdéseim:

  • Igaz-e, hogy egy NAT-olt kapcsolatot arról lehet felismerni, hogy a kapcsolat kimenő csomagjainak forrás IP-je és a kapcsolat válasz csomagjainak cél IP-je különböző (lásd ***-os sor)?
  • Igaz-e mindig, hogy egy kapcsolat kimenő csomagjainak forrás portja és a kapcsolat válasz csomagjainak cél portja ugyanaz?

Előre is köszönöm mindenkinek, aki válaszol.

Hozzászólások

hali
nem válasz de esetleg jól jöhet.

nekem is van egy hasonló scriptem a cél az volt hogy monitorozzam a kimenő natolt kapcsolatok számát
a conntrack tábla megfelelő méretben tartásához.

kb 10mbit/s es kapcsolatnál és sok kliensnél a
script futása már nagyon sokáig tartott és ez a forgalmat is befolyásolta!
próbáltam hogy kidumpolom és azt a file-t elemzem de a dump is lassú volt tehát nem az elemzés volt lassú.
végül kivettem a scriptet mivel veszteségeket produkált a kimenő vonalon.

Üdv Robit

Köszönöm a válaszokat. A szkripttől függetlenül az elméleti jellegű kérdésekben tud valaki segíteni?

Az elsőre a válasz igen azaz kicsit kötekedve nem teljesen SNAT esetében igen.

A másodigra sem egyértelmű a válasz:
Vannak olyan foltok amelyek ezt randomizálják+
ha azon az ip-n amelyre maszkolsz(SNAT) az adott port már foglalt akkor lépteti a következő portra.