GNU/Linux >> Belajar Linux >  >> Linux

Linux NFLOG - dokumentasi, konfigurasi dari C

Apakah ada dokumentasi sialan dan di mana ia bersembunyi?

Ada contoh di situs netfilter yang membantu menjelaskan fungsionalitasnya. Ini adalah fungsi yang saya tulis dalam kode saya sendiri yang menyiapkan netfilter NFLOG.

Berikut adalah contoh yang mereka berikan: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);
  }
}

Apakah hal CONNMARK benar-benar diperlukan? Artinya, apakah ini akan berhasil juga?

Itu tidak perlu.

Apakah perlu menjalankan "ulogd" agar ini berfungsi?

Tidak -- sebenarnya saya tidak menggunakannya di aplikasi ini.

Apakah ada cara untuk memberi tahu kernel agar memilih nomor grup yang tidak terisi untuk saya dan memberi tahu saya apa itu?

Bukan itu yang saya sadari. Bagaimanapun ini akan sia-sia jika Anda memiliki pengaturan target NFLOG untuk HTTP, satu untuk mencatat paket yang dijatuhkan yang merupakan FTP dan satu yang memindai string SMTP. Dalam skenario ini Anda tidak dapat menentukan aturan mana yang terikat ke grup mana, dan dengan demikian yang mana grup harus didengarkan.

Apakah ada cara untuk memberi tahu kernel bahwa aturan filter ini harus dihapus secara otomatis saat proses X berakhir? (Proses X tidak akan berjalan sebagai uid 1000.)

Tidak, tetapi kernel mengisi buffer hanya sampai ukuran maksimum kemudian akan membuang data. Itu tidak menimbulkan dampak kinerja dalam hal menggunakan terlalu banyak memori karena aturan tidak didengarkan.

Agaknya perintah iptables membuat beberapa panggilan ioctl khusus atau sesuatu untuk mengkonfigurasi firewall. Apakah ada pustaka C yang dapat digunakan untuk melakukan hal yang sama dari dalam program (yaitu, "proses X" dari Q4)?

Tidak ada pustaka netfilter yang saya ketahui yang membantu Anda memanipulasi aturan. Ada perpustakaan yang digerakkan secara internal yang digunakan sebagai gantinya.

IPtables mewarisi metode yang agak kuno untuk berbicara ke userspace - Anda membuka soket IP SOCK_RAW untuk berkomunikasi dengannya. Ini benar-benar akan dihapus (karena tidak masuk akal) dengan nftables yang akan berbicara melalui netlink untuk melakukan hal yang sama.


Linux
  1. Bagaimana cara menambahkan pengguna ke grup di Linux

  2. Linux – Bagaimana Cara Menjalankan Bootloader Dari Linux?

  3. Daftar anggota grup di Linux

  1. Cara Menambah atau Menghapus Pengguna dari Grup di Linux

  2. Linux – Memindahkan Volume Logis Dari Satu Grup Volume ke Grup Volume Lainnya?

  3. Instal Linux dari Linux

  1. Cara Menghapus Pengguna Dari Grup di Linux [Kiat Singkat]

  2. Konsep izin file Linux

  3. Kelola grup pengguna Linux