GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux NFLOG - Dokumentation, Konfiguration von C

Gibt es irgendeine verdammte Dokumentation und wo versteckt sie sich?

Es gibt Beispiele auf der Netfilter-Site, die helfen, die Funktionalität zu erklären. Hier ist eine Funktion, die ich in meinen eigenen Code geschrieben habe, die den Netzfilter NFLOG einrichtet.

Hier sind die Beispiele, die sie bereitstellen:http://www.netfilter.org/projects/libnetfilter_log/doxygen/files.html

void setup_netlogger_loop(
    int groupnum,
    queue_t queue)
{
  int sz;
  int fd = -1;
  char buf[BUFSZ];
  /* Setup handle */
  struct nflog_handle *handle = NULL;
  struct nflog_g_handle *group = NULL;

  memset(buf, 0, sizeof(buf));

  /* This opens the relevent netlink socket of the relevent type */
  if ((handle = nflog_open()) == NULL){
    sd_journal_perror("Could not get netlink handle");
    exit(EX_OSERR);
  }

  /* We tell the kernel that we want ipv4 tables not ipv6 */
  if (nflog_bind_pf(handle, AF_INET) < 0) {
    sd_journal_perror("Could not bind netlink handle");
    exit(EX_OSERR);
  }

  /* Setup groups, this binds to the group specified */
  if ((group = nflog_bind_group(handle, groupnum)) == NULL) {
    sd_journal_perror("Could not bind to group");
    exit(EX_OSERR);
  }
  if (nflog_set_mode(group, NFULNL_COPY_PACKET, 0xffff) < 0) {
    sd_journal_perror("Could not set group mode");
    exit(EX_OSERR);
  }
  if (nflog_set_nlbufsiz(group, BUFSZ) < 0) {
    sd_journal_perror("Could not set group buffer size");
    exit(EX_OSERR);
  }
  if (nflog_set_timeout(group, 1500) < 0) {
    sd_journal_perror("Could not set the group timeout");
  }

  /* Register the callback */
  nflog_callback_register(group, &queue_push, (void *)queue);

  /* Get the actual FD for the netlogger entry */
  fd = nflog_fd(handle);

  /* We continually read from the loop and push the contents into
     nflog_handle_packet (which seperates one entry from the other),
     which will eventually invoke our callback (queue_push) */    
  for (;;) {
    sz = recv(fd, buf, BUFSZ, 0);
    if (sz < 0 && errno == EINTR)
      continue;
    else if (sz < 0)
      break;

    nflog_handle_packet(handle, buf, sz);
  }
}

Ist das CONNMARK-Ding wirklich nötig? Das heißt, würde das genauso gut funktionieren?

Es ist unnötig.

Muss "ulogd" laufen, damit das funktioniert?

Nein - tatsächlich verwende ich es in dieser Anwendung nicht.

Gibt es eine Möglichkeit, den Kernel anzuweisen, eine nicht zugeordnete Gruppennummer für mich auszuwählen und mir mitzuteilen, was das ist?

Nicht dass ich wüsste. In jedem Fall wäre dies nutzlos, wenn Sie NFLOG-Ziele für HTTP eingerichtet haben, eines zum Protokollieren von verworfenen FTP-Paketen und eines zum Scannen nach SMTP-Zeichenfolgen. In diesem Szenario können Sie nicht feststellen, welche Regel an welche Gruppe und somit an welche gebunden ist Gruppe gehört werden sollte.

Gibt es eine Möglichkeit, dem Kernel mitzuteilen, dass diese Filterregeln automatisch gelöscht werden sollen, wenn Prozess X beendet wird? (Prozess X würde nicht als uid 1000 laufen.)

Nein, aber der Kernel füllt einen Puffer nur bis zu einer maximalen Größe und verwirft dann Daten. Es wirkt sich nicht auf die Leistung aus, da zu viel Speicher verbraucht wird, wenn Regeln nicht überwacht werden.

Vermutlich macht der iptables-Befehl einige spezielle ioctl-Aufrufe oder so etwas, um die Firewall zu konfigurieren. Gibt es eine C-Bibliothek, die dazu verwendet werden kann, dasselbe innerhalb eines Programms zu tun (nämlich "Prozess X" aus Q4)?

Mir ist keine Netfilter-Bibliothek bekannt, mit der Sie die Regeln manipulieren können. Es gibt jedoch eine intern gesteuerte Bibliothek, die stattdessen verwendet wird.

IPtables erbt eine ziemlich archaische Methode, mit dem Userspace zu sprechen – Sie öffnen einen SOCK_RAW IP-Socket, um mit ihm zu kommunizieren. Dies wird vollständig entfernt (da es keinen Sinn macht) mit nftables, die über Netlink sprechen, um dasselbe zu tun.


Linux
  1. Linux – Ein logisches Volume von einer Volume-Gruppe in eine andere verschieben?

  2. Mitglieder einer Gruppe in Linux auflisten

  3. So entfernen Sie Benutzer aus der Gruppe in Linux [Kurztipp]

  4. Linux-Dateiberechtigungskonzepte

  5. Linux-Benutzergruppen verwalten

Chgrp-Befehl in Linux (Gruppe ändern)

Umstieg von Windows auf Linux

So konfigurieren Sie ein VLAN unter Linux

Gruppenverwaltungsbefehle in Linux

Installieren Sie Linux Mint von USB

So fügen Sie einen Benutzer zu einer Gruppe unter Linux hinzu