• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 學習電腦 > 電腦安全 > 防火墻知識 >

    利用Iptables實現網絡黑白名單防火墻怎么設置

    時間: 加城1195 分享

      防火墻主要由服務訪問規則、驗證工具、包過濾和應用網關4個部分組成,防火墻就是一個位于計算機和它所連接的網絡之間的軟件或硬件。這篇文章主要介紹了詳解Android 利用Iptables實現網絡黑白名單(防火墻),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

      具體步驟

      二、Iptables網絡黑白名單(防火墻)實現細節

      因為考慮到一些權限的問題所以在實現方法上采用的是創建一個systemserver來運行這些方法。并提供出manager到三方應用,這樣在調用時可以排除一些權限的限制。同時本文只是做一個簡單的參考概述,所以在后文中只提供了增加黑白名單的方法和iptables規則,并沒有提供相應的刪除規則等,原理類似大家可自行補充添加。

      2.1、創建systemserver

      2.1.1、 在/system/sepolicy/service.te中添加

      type fxjnet_service, system_api_service, system_server_service, service_manager_type;

      2.2.2、在/system/sepolicy/service_contexts中添加如下,

      fxjnet u:object_r:fxjnet_service:s0

      2.2.3、在frameworks/base/core/java/android/content/Context.java中添加

      也可以不添加這個,只不過為了后面調用方便所以添加了。如果跳過此步,那么后面出現Context.FXJNET_SERVICE的地方都用字串代替即可。

      public static final String FXJNET_SERVICE="fxjnet";

      2.2.4、在/frameworks/base/core/java/android/app/SystemServiceRegistry.java的靜態代碼塊中添加如下代碼注冊service。

      registerService(Context.FXJNET_SERVICE, FXJNETManager.class,

      new CachedServiceFetcher() {

      @Override

      public FXJNETManager createService(ContextImpl ctx) {

      IBinder b = ServiceManager.getService(Context.FXJNET_SERVICE);

      IFXJNETService service = IFXJNETService.Stub.asInterface(b);

      return new FXJNETManager(ctx, service);

      }});

      2.2.5、在frameworks/base/services/java/com/android/server/SystemServer.java中添加如下代碼,將service加入systemserver中。

      ServiceManager.addService(Context.FXJNET_SERVICE, new FXJNETService());

      2.2.6 、AIDL文件

      package android.os;

      interface IFXJNETService{

      void addNetworkRestriction(List ipName,int type);

      }

      2.2.7、提供給外部的FXJNETManager

      package android.app;

      import android.os.IFXJNETService;

      import android.os.RemoteException;

      import android.content.Context;

      public class FXJNETManager{

      IFXJNETService mService;

      public FXJNETManager(Context ctx,IFXJNETService service){

      mService=service;

      }

      public void addNetworkRestriction(List ipName,int type) {

      try{

      mService.addNetworkRestriction(ipName,type);

      }catch (RemoteException e){

      }

      }//end addNetworkRestriction

      }

      2.2.8、系統服務即AIDL的實現server

      package com.android.server;

      import android.os.IFXJNETService;

      import java.io.File;

      import java.io.FileOutputStream;

      import java.io.IOException;

      public class FXJNETService extends IFXJNETService.Stub {

      final File file = new File("/data/fxj/", "firewall.sh");

      /**

      * 增加{網絡IP訪問}黑白名單數據

      */

      public void addNetworkRestriction(List ipName,int type) {

      String str= getIPlist(type,ipName);

      setiptablesRestriction();

      }

      //構建Iptables的規則,1-黑名單 ;2-白名單

      private String getIPlist(int type,List iplist){

      StringBuilder sb = new StringBuilder();

      sb.append("echo runscript start\n");

      sb.append("iptables -F OUTPUT\n");

      if (type == 1){

      if (iplist != null && iplist.size() > 0){

      for (int i = 0 ; i < iplist.size() ;i++){

      String ipname = iplist.get(i);

      sb.append("echo blacklist mode\n");

      sb.append("iptables -I OUTPUT -d ");

      sb.append(ipname);

      sb.append(" -j DROP\n");

      }

      }

      }else if (type == 2){

      if (iplist != null && iplist.size() > 0){

      for (int i = 0 ; i < iplist.size() ; i++){

      String ipname =iplist.get(i);

      sb.append("echo whitelist mode\n");

      sb.append("iptabless -P OUTPUT DROP\n");

      sb.append("iptables -I OUTPUT -d ");

      sb.append(ipname);

      sb.append(" -j ACCEPT\n");

      }

      }

      }

      sb.append("run script end\n");

      return sb.toString();

      }

      private void setiptablesRestriction(String ipName){

      final FXJScriptRunner runner = new FXJScriptRunner(file,ipName,new StringBuilder());

      new Thread(new Runnable() {

      @Override

      public void run() {

      runner.run();

      }

      }).start();

      }

      }

      2.2.9、運行IPTABLES腳本命令的工具類

      package com.android.server;

      import java.io.File;

      import java.io.FileOutputStream;

      import java.io.IOException;

      import java.io.InputStream;

      import java.io.OutputStreamWriter;

      import android.os.FileUtils;

      import android.os.SystemProperties;

      import android.util.Log;

      public class FXJScriptRunner extends Thread{

      private final File file;

      private final String script;

      private final StringBuilder res;

      public int exitcode = -1;

      private final String TAG = "ScriptRunner" ;

      public ScriptRunner(File file, String script, StringBuilder res,

      boolean asroot) {

      this.file = file;

      this.script = script;

      this.res = res;

      }

      @Override

      public void run() {

      // TODO Auto-generated method stub

      try {

      file.delete();

      file.createNewFile();

      final String abspath = file.getAbsolutePath();

      // make sure we have execution permission on the script file

      FileUtils.setPermissions(abspath, 00700, -1, -1);

      Runtime.getRuntime().exec("chmod 777 " + abspath).waitFor();//給創建的sh文件設置權限

      // Write the script to be executed

      final OutputStreamWriter out = new OutputStreamWriter(

      new FileOutputStream(file));

      if (new File("/system/bin/sh").exists()) {

      out.write("#!/system/bin/sh\n");

      }

      out.write(script);

      if (!script.endsWith("\n"))

      out.write("\n");

      out.write("exit 0\n");

      out.flush();

      out.close();

      //通過 SystemProperties.set("ctl.start", "fxjmotnitor")執行service,來運行腳本,

      //fxjmotnitor為service名稱,可以根據自己的愛好隨便叫

      SystemProperties.set("ctl.start", "fxjmotnitor");

      } catch (Exception ex) {

      if (res != null)

      res.append("\n" + ex);

      } finally {

      //destroy();

      }

      }

      }

      補充閱讀:防火墻主要使用技巧

      一、所有的防火墻文件規則必須更改。

      盡管這種方法聽起來很容易,但是由于防火墻沒有內置的變動管理流程,因此文件更改對于許多企業來說都不是最佳的實踐方法。如果防火墻管理員因為突發情況或者一些其他形式的業務中斷做出更改,那么他撞到槍口上的可能性就會比較大。但是如果這種更改抵消了之前的協議更改,會導致宕機嗎?這是一個相當高發的狀況。

      防火墻管理產品的中央控制臺能全面可視所有的防火墻規則基礎,因此團隊的所有成員都必須達成共識,觀察誰進行了何種更改。這樣就能及時發現并修理故障,讓整個協議管理更加簡單和高效。

      二、以最小的權限安裝所有的訪問規則。

      另一個常見的安全問題是權限過度的規則設置。防火墻規則是由三個域構成的:即源(IP地址),目的地(網絡/子網絡)和服務(應用軟件或者其他目的地)。為了確保每個用戶都有足夠的端口來訪問他們所需的系統,常用方法是在一個或者更多域內指定打來那個的目標對象。當你出于業務持續性的需要允許大范圍的IP地址來訪問大型企業的網絡,這些規則就會變得權限過度釋放,因此就會增加不安全因素。服務域的規則是開放65535個TCP端口的ANY。防火墻管理員真的就意味著為黑客開放了65535個攻擊矢量?

      三、根據法規協議和更改需求來校驗每項防火墻的更改。

      在防火墻操作中,日常工作都是以尋找問題,修正問題和安裝新系統為中心的。在安裝最新防火墻規則來解決問題,應用新產品和業務部門的過程中,我們經常會遺忘防火墻也是企業安全協議的物理執行者。每項規則都應該重新審核來確保它能符合安全協議和任何法規協議的內容和精神,而不僅是一篇法律條文。

      四、當服務過期后從防火墻規則中刪除無用的規則。

      規則膨脹是防火墻經常會出現的安全問題,因為多數運作團隊都沒有刪除規則的流程。業務部門擅長讓你知道他們了解這些新規則,卻從來不會讓防火墻團隊知道他們不再使用某些服務了。了解退役的服務器和網絡以及應用軟件更新周期對于達成規則共識是個好的開始。運行無用規則的報表是另外一步。黑客喜歡從來不刪除規則的防火墻團隊。


    利用Iptables實現網絡黑白名單防火墻怎么設置相關文章:

    1.vmware 防火墻如何設置

    2.linux怎么關閉iptables linux如何關閉防火墻

    3.阿里云防火墻如何設置

    4.linux如何關閉防火墻

    5.suse linux 防火墻如何設置

    4042548 主站蜘蛛池模板: 日本不卡高字幕在线2019| 亚洲永久精品ww47| 亚洲精品二三区伊人久久| 两个人看www免费视频| 天天躁日日躁aaaaxxxx| 亚洲人成人无码网www国产| 男生和女生一起差差差很痛视频| 国产午夜三级一区二区三| 20岁chinese魅男gay| 天堂资源在线中文| 中文乱码人妻系列一区二区| 欧美国产日韩a在线视频| 国产在线午夜卡精品影院| 国内精品视频一区二区三区| 天天综合色一区二区三区| 坐公交车弄了2个小时小视频| 玖玖资源站无码专区| 波多野结衣作品大全| 激情综合色综合啪啪开心| 瑟瑟网站在线观看| 欧美激情在线播放一区二区三区| 色狠狠久久av五月综合| 精品国产乱码久久久久软件| 欧美卡一卡2卡三卡4卡在线| 天天干天天色天天| 国产MD视频一区二区三区| 亚洲aⅴ无码专区在线观看q | 日韩一卡二卡三卡四卡| 太深了灬太大了灬舒服| 国产乱人伦精品一区二区| 亚洲国产精品一区二区九九| 一个人免费视频观看在线www| eeuss草民免费| 亚洲www在线| 精品国产天堂综合一区在线| 日韩人妻系列无码专区| 国产高清在线精品一区| 免费无遮挡肉动漫在线观看| 久久中文字幕无码专区| A级国产乱理论片在线观看| 成人禁在线观看|