網域名稱白名單的設計與實現

2021-03-08 17:21:09 字數 4458 閱讀 8219

內容**於pppcloud官網教程

本文件描述如何實現網域名稱白名單的功能。

在閱讀本文件前建議讀者具有如下知識:

iptables 命令配置

ip_queue 機制及libipq 庫函式使用

linux 防火牆實現***filter

網域名稱:由一串用點分隔的名字組成的inter***上某一台計算機或計算機組的名稱,用於在資料傳輸時標識計算機的電子方位。

白名單:與「黑名單」相對應,預設所有資料都阻止,新增白名單的資料放行。

iptables:一種工具,它可以插入、修改和刪除包過濾表的規則。

***filter:linux核心實現資料報過濾、資料報處理、nat等的功能框架

json:是一種輕量級的資料交換格式。

預設情況下所有出口流量全部放行,入口流量全部禁止。當配置相應的網域名稱白名單之後,放行入口方向的白名單,使它可以被外部使用者訪問。網域名稱白名單只對入口方向起作用。

軟體環境:centos release 6.6 (final)。

硬體環境:x86_64。

資料流出方向結構圖

資料流入方向結構圖

物理結構說明:

其中的剪頭代表資料流的方向,host主機為物理裝置,vm代表虛擬機器,資料通過橋介面訪問網路。因為使用橋接方式,iptables在橋模式下生效需要配置相應內容。白名單阻止入方向的資料,並不阻止出方向的資料。

vm搭建web伺服器,外部訪問web伺服器需要配置白名單,否則禁止網域名稱訪問。

採用客戶端伺服器架構。客戶端下發資料,服務端配置資料並儲存資料。採用json資料格式傳輸。sqlite儲存資料。

***filter/iptables是繼2.0.x的ipfwadm、2.

2.x的ipchains之後,新一代的linux防火牆機制。***filter採用模組化設計,具有良好的可擴充性。

其重要工具模組iptables連線到***filter的架構中,並允許使用者對資料報進行過濾、位址轉換、處理等操作。

***filter提供了乙個框架,將對網路**的直接干涉降到最低,並允許用規定的介面將其他包處理**以模組的形式新增到核心中,具有極強的靈活性。

***filter主要通過表、鏈實現規則,可以這麼說,***filter是表的容器,表是鏈的容器,鏈是規則的容器,最終形成對資料報處理規則的實現。

iptables是基於***filter基本架構實現的乙個可擴充套件的資料報高階管理系統,利用table、chain、rule**來儲存資料報的各種規則。

簡單地講,tables由chains組成,而chains又由rules組成。iptables 預設有四個表filter, nat, mangle, raw,其對於的鏈如下圖。

1.filter表——三個鏈:input、forward、output

作用:過濾資料報核心模組:iptables_filter.

2.nat表——三個鏈:prerouting、postrouting、output

作用:用於網路位址轉換(ip、埠) 核心模組:iptable_nat

3.mangle表——五個鏈:prerouting、postrouting、input、output、forward

作用:修改資料報的服務型別、ttl、並且可以配置路由實現qos核心模組:iptable_mangle(別看這個表這麼麻煩,咱們設定策略時幾乎都不會用到它)

4.raw表——兩個鏈:output、prerouting

作用:決定資料報是否被狀態跟蹤機制處理核心模組:iptable_raw

(這個是rehl4沒有的,不過不用怕,用的不多)

1.input——進來的資料報應用此規則鏈中的策略

2.output——外出的資料報應用此規則鏈中的策略

3.forward——**資料報時應用此規則鏈中的策略

4.prerouting——對資料報作路由選擇前應用此鏈中的規則

(記住!所有的資料報進來的時侯都先由這個鏈處理)

5.postrouting——對資料報作路由選擇後應用此鏈中的規則

(所有的資料報出來的時侯都先由這個鏈處理)

資料報控制方式包括四種為:

accept:允許資料報通過。

drop:直接丟棄資料報,不給出任何回應資訊。

reject:拒絕資料報通過,必須時會給資料傳送端乙個響應資訊。

log:在/var/log/messages 檔案中記錄日誌資訊,然後將資料報傳遞給下一條規則。

queue:防火牆將資料報移交到使用者空間

return:防火牆停止執行當前鏈中的後續rules,並返回到呼叫鏈(the calling chain)

白名單的功能就是利用的queue。

libipq是乙個iptables使用者空間資料報排隊開發庫。

***filter提供乙個機制,將資料報送到棧外在使用者空間排隊,然後這些資料報送回核心並附帶上乙個如何處理這個資料報的決定(比如accept或drop)。這些資料報在送回核心之前還可能在使用者空間被修改。

對於每個支援的協議,。

ipv4的標準的佇列handler是ip_queue。其被作為乙個2.4核心的實驗模組提供,使用乙個***link套接字在核心/使用者空間交換資料。

一旦載入ip_queue,可以通過queue目標將ip資料報挑選出來排隊到使用者空間處理。例如,執行下面的命令:

# modprobe iptable_filter

# modprobe ip_queue

# iptables -a output -p icmp -j queue

將導致任意本地產生的icmp資料報(比如,ping的輸出)被傳送到ip_queue模組,此模組將嘗試將這些資料報遞送到使用者空間的應用。如果沒有使用者空間的應用來處理它們,它們將被丟棄。

乙個應用可以通過libipq接收和處理這些資料報。

libipq提供一組api以於ip_queue互動。下面是api用法的乙個概述,細節參看各函式的手冊頁。

為了初始化此庫,呼叫ipq_create_handle(3)。這將嘗試與ip_queue使用的***link套接字**並返回乙個上下文無關的控制代碼,此控制代碼用於接下來的庫呼叫。

ipq_set_mode(3)允許應用指定拷貝到使用者空間的資料,是僅資料報的元資料還是資料報負載和資料報元資料。這也用於告訴ip_queue乙個應用已經準備好接收排隊訊息。

ipq_read(3)等待ip_queue的佇列訊息,並將它們拷貝到指定的緩衝。佇列訊息可以是資料報訊息或錯誤訊息。

可以通過ipq_message_type(3)確定資料報型別。

如果收到乙個資料報訊息,元資料和可選的負載可以通過ipq_get_packet(3)獲取。

通過ipq_get_msgerr(3)獲取乙個錯誤訊息的值。

做出如何處理資料報的決定,可選的返回乙個修改過的資料報給核心,可以呼叫ipq_set_verdict(3)。

對應於內部錯誤變數ipq_errno的乙個錯誤字串可以通過ipq_errstr(3)獲取。

對於簡單的應用,呼叫ipq_perror(3)可以列印與ipq_errstr(3)相同的訊息,還附帶列印全域性變數errno(如果設定了的話)的資訊到stderr。

呼叫ipq_destroy_handle(3)以釋放***link套接字並銷毀上下文控制代碼相關的資源。

下面是乙個簡單應用的例子,它獲取資料報並對每個資料報下達nf_accept判決。

/* * this code is gpl.

*/#include

#include

#include

#include

#include

#define bufsize 2048

static void die(struct ipq_handle *h)

int main(int argc, char **argv) {

int status;

unsigned char buf[bufsize];

struct ipq_handle *h;

h = ipq_create_handle(0, nfproto_ipv4);

if (!h)

die(h);

status = ipq_set_mode(h, ipq_copy_packet, bufsize);

if (status < 0)

die(h);

do {

status = ipq_read(h, buf, bufsize, 0);

if (status < 0)

die(h);

switch (ipq_message_type(buf)) {

case nlmsg_error:

fprintf(stderr, "received error message %d\n", ipq_get_msgerr(buf));

break;

case ipqm_packet: {

ipq_packet_msg_t *m = ipq_get_packet(buf);

status = ipq_set_verdict(h, m->packet_id, nf_accept, 0, null);

庫存管理系統的設計與實現

1 維持銷售產品的穩定 銷售 型企業對最終銷售產品必須保持一定數量的庫存,其目的是應付市場的銷售變化。這種方式下,企業並不預先知道市場真正需要什麼,只是按對市場需求的 進行生產,因而產生一定數量的庫存是必需的。但隨著 鏈管理的形成,這種庫存也在減少或消失。2 維持生產的穩定 企業按銷售訂單與銷售 安...

住院管理系統的設計與實現

摘要 隨著計算機技術的發展和普及,醫院需要借助計算機資訊技術來提高醫院的各項管理能力和自身的工作效率。因此醫院管理資訊系統就成為各家醫院資訊化必備的工具,是醫院日常管理不可缺少的工具之一。同時系統開發工具的智慧型化,人性化,使得所開發的系統充分滿足了醫院的各種需要。關鍵詞 醫院資訊管理系統住院部結算...

社交網路平台的設計與實現

題目 網路聊天室系統設計與應用 說明,你的備選題目中有個題目是 社交網路平台的設計與實現,我的題目是這個題目更細一點的,只寫聊天室系統的設計應用,這樣範圍沒有那麼大會更好寫點,摘要 如何與別人更好地交流,是當前人們普遍關心的問題。人們通過 可以展示產品,發布最新動態,與使用者進行交流和溝通,與合作夥...