GNU/Linux >> Linux Esercitazione >  >> Linux

Linux NFLOG - documentazione, configurazione da C

C'è qualche dannata documentazione e dove si nasconde?

Ci sono esempi sul sito netfilter che aiutano a spiegare la funzionalità. Ecco una funzione che ho scritto nel mio codice che imposta netfilter NFLOG.

Ecco gli esempi forniti: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);
  }
}

La cosa CONNMARK è davvero necessaria? Cioè, funzionerebbe altrettanto bene?

Non è necessario.

È necessario che "ulogd" sia in esecuzione perché funzioni?

No -- infatti non lo uso in questa applicazione.

C'è un modo per dire al kernel di scegliere un numero di gruppo non allocato per me e dirmi di cosa si tratta?

Non che io sappia. In ogni caso questo sarebbe inutile se si dispone di obiettivi NFLOG impostati per HTTP, uno per registrare i pacchetti scartati che erano FTP e uno che stava scansionando le stringhe SMTP. In questo scenario non è possibile determinare quale regola è associata a quale gruppo e quindi quale dovrebbe essere ascoltato.

C'è un modo per dire al kernel che queste regole di filtro dovrebbero essere cancellate automaticamente quando il processo X termina? (Il processo X non verrebbe eseguito come uid 1000.)

No, ma il kernel riempie un buffer solo fino a una dimensione massima, quindi eliminerà i dati. Non comporta un impatto sulle prestazioni in termini di utilizzo di troppa memoria con regole non ascoltate.

Presumibilmente il comando iptables effettua alcune chiamate ioctl speciali o qualcosa per configurare il firewall. Esiste una libreria C che può essere utilizzata per fare lo stesso dall'interno di un programma (vale a dire, "processo X" da Q4)?

Non esiste alcuna libreria netfilter di cui sono a conoscenza che ti aiuti a manipolare le regole. Esiste invece una libreria gestita internamente che viene utilizzata.

IPtables eredita un metodo piuttosto arcaico per parlare allo spazio utente:apri un socket IP SOCK_RAW per comunicare con esso. Questo verrà completamente rimosso (poiché non ha senso) con nftables che parlerà su netlink per fare la stessa cosa.


Linux
  1. Linux:spostare un volume logico da un gruppo di volumi a un altro?

  2. Come rimuovere l'utente dal gruppo in Linux [Suggerimento rapido]

  3. Concetti di autorizzazione dei file Linux

  4. Gestisci i gruppi di utenti Linux

  5. Installa Linux da Linux

Comando Chgrp in Linux (Cambia gruppo)

Passaggio da Windows a Linux

Come configurare una VLAN in Linux

Comandi di gestione dei gruppi in Linux

Installa Linux Mint da USB

Come aggiungere un utente al gruppo su Linux