久久精品天天爽夜夜爽,欧美日韩一区二区综合,亚洲欧美偷拍另类,亚洲视频在线一区

歡迎來到學術參考網

Linux下基于iptables 防火墻的設計實現

發布時間:2015-06-23 09:25

  1 引言

  隨著網絡技術的發展, 人們的生活已經和網絡密不可分, 網絡的安全問題也就自然成為人們關注的焦點, 防火墻作為一種最為有效地網絡安全產品得到了廣泛的應用。Linux 操作系統性能優異、功能強大, 現在已經擁有大量的用戶。

  2 防火墻的結構與功能分析

  防火墻系統網絡結構,防火墻就是內部網絡與外部網絡之間的一道安全防護系統。 通過對經過的網絡數據包的掃描與分析, 過濾掉一些網絡攻擊并阻止非授權用戶訪問內部網絡。 從而大大提高內部網絡的安全(見圖1)。

  (圖1) 中的防火墻就是采用了Netfilter iptables機制的Linux服務器, 服務器配置有兩塊網卡, 其中一塊連接到外網, 另一塊與交換機(集線器)相連。這樣內部的多臺主機就可以通過交換機(集線器)訪問外網。

  3 防火墻系統實現

  3.1 Netfilter架構原理

  Netfilter通過5個鉤子函數,就可以實現內核防火墻的基本框架了,NF_ IP_PRE_ROUTI NG表示從網卡進入系統的數據包首先到達的掛載點。此時數據包需要進行完版本號,校驗和等檢測。之后他們會進入一個路由模塊,路由模塊決定此數據包是要被轉發給另一塊網卡接口還是要被發給本機用戶進程。NF_ IP_LOCAL_ I N表示如果數據包的目的地是本機,那么它將被注冊了的鉤子函數處理以后再傳給上層協議,對于所有進入本機的數據包 (包括使用網絡套接字的IPC),都是在此掛載點完成的過濾工作之后再被交給上層用戶進程。掛載點 NF_ IP_FORWARD表示所有經過本機轉發的數據包的途經地,針對轉發數據包的過濾工作可以在此進行。掛載點NF_ IP_POST_ROUTI NG表示數據包通過本機網卡接口發送到網絡上之前的最后一個掛載點。掛載點表示NF_ IP_LOCAL_OUT是所有本機進程發出的數據包的必經之路。在圖中可看到數據包通過此掛載點之后會進入一個路由模塊以決定它是被發往外部網絡還是發給本機其他進程。

  IP層在數據包處理過程中,會檢查相應的鉤子函數在鏈表中是否有鉤子函數注冊,如果注冊了該鉤子函數則監聽 IP數據包,調用該鉤子函數,并根據鉤子函數返回的結果決定下一步的動作。

  3.2 Netfilter的實現模擬仿真

  下面是構建模擬內核防火墻仿真環境平臺 ,目前在操作系統 Fedora Core release 4

  #ifndef _KERNEL_

  #define _KERNEL_

  #endif

  #ifndefMODULE

  #defineMODULE

  #endif

  #include < linux/module . h >

  #include < linux/ sched . h >

  #include < linux/kernel . h >

  #include < linux/netdevice . h >

  #include < linux/ i p. h >

  #include < linux/ tcp. h >

  #include < linux/ skbuff . h >

  #include < linux/p r oc_fs . h >

  #include < linux/ if . h >

  #include < linux/ in . h >

  #include < linux/netfilter_ipv4. h >

  /*定義鉤子函數*/

  static unsigned int kill_port (unsigned int hooknum, struct sk_buff * skb, const struct net_device * in, const struct net_device 3 out, int (* okfn) ( struct sk_buff * ) )

  {

  struct tcphdr * tcph;

  struct iphdr * iph;

  iph=(*skb) -> ;

  /*解析 ip和 tcp協議棧*/

  if ( iph->protocol == IPPROTO_TCP)

  {

  tcph=(* skb) -> ;

  if (ntohs( tcph->source)==23)

  {

  printk ("" nftp service refused"" ) ;

  return NF_DROP;

  }

  }

  return NF_ACCEPT;

  }

  /*該結構完整定義在 include / linux/netfilter . h里面* /

  Struct nf_hook_op skill = {

  . hook = kill_port,

  . owner = TH IS_MODULE,

  . pf = PF_ I NET,

  . hooknum = NF_ IP_LOCAL_OUT,

  . priority = NF_ IP_PR I_FI LTER,

  };

  /*模塊的初始化*/

  int init_module () {

  /*Hook鉤子函數的注冊函數*/

  nf_register_hook (&kill) ;

  return 0;

  }

  /*模塊的清除*/

  void cleanup_module () {

  /*銷毀鉤子函數* /

  nf_unregister_hook (&kill) ;

  }

  編寫 Makefile文件:

  obj - m + = netf . o

  編譯模塊:

  make2 C /usr / src /kernels/2.6.112 1.1369 _ FC42i686 / S UBD I RS =MY MPWD modules

  編譯的時候一定是以 root身份進行編譯。

  測試模塊:

  首先以 root用執行命令: ins mod . /動態加載該模塊 ,假設 Linux系統的 IP地址是 192.168.0.191。telnet 192.168.0.191則會出現“正在連接到 192.168.0.191 . . . 不能打開到主機的連接 , 在端口23: 連接失敗”的提示 ,如果利用rmmod 命令就刪除該內核 ,則就可以從本地 telnet到Linux系統上。另外 ,可以利用命令 lsmod查看該模塊是否加載到內核里面去,同時可以執行命令dmesg tail查看該模塊加載的信息。

  4結束語

  利用Linux操作系統下的iptables編寫功能強大的防火墻,iptables全新的Netfilter架構采用可加載的模塊化結構,可以動態擴展系統功能。同時iptables提供動態NAT、基于MAC以及用戶的過濾和狀態過濾等全新的包過濾方法。iptables是Linux系統下面功能非常全面和強大的防火墻。

  參考文獻:

  [1] 閻慧,防火墻原理與技術[M ]。北京:機械工業出版社, 2004。

  [2] 王則林, 王彬, 陸建德。 基于Linux內核的防火墻技術分析與進一步開發[J]。科技信息, 2006 (10) : 17219 。

上一篇:Java的發展前景與就業方向探討

下一篇:LTE室內局部覆蓋技術