文档管理中心
我的
您当前正在浏览新版开发者文档中心,目录分类和层级有所调整。点击左侧当前文档分类名称前的“☰”图标,可切换文档分类。 了解新版目录
指南与API参考指南系统网络Network Kit(网络服务)管理网络使用网络防火墙

使用网络防火墙

简介

网络防火墙提供如下功能:

  • 防火墙的基础能力,包括防火墙的使能、规则的启用与禁用、审计能力。
  • 防火墙规则的配置能力,包括规则的名称、描述、操作、生效应用、协议类型、地址、端口、出站/入站方向等。
  • DNS策略的配置能力,包括配置禁止/允许解析的域名、解析使用的DNS服务器(主选/备选)(应用级)。
说明

为了保证应用的运行效率,所有API调用都是异步的,对于异步调用的API均提供了Promise的方式,以下示例均采用Promise方式,更多方式可以查阅@ohos.net.netFirewall (网络防火墙)。

场景介绍

防火墙的典型场景有:

  • 针对特定IP联网访问控制
  1. 支持限制特定应用访问网络。
  2. 支持限制对特定IP、特定协议、特定端口、特定物理网卡的网络通信。
  3. 支持限制特定应用对特定IP、特定协议、特定端口、特定物理网卡的网络通信。
  4. 支持拦截规则下发后立即生效(此点针对TCP协议:需断开已有被拦截的TCP连接)。
  • 针对域名联网访问控制支持拦截
  1. 支持限制应用对特定域名的DNS解析能力(仅限制非加密标准DNS协议,不限制加密、私有DNS协议)。
  2. 支持限制特定应用对特定域名的DNS解析能力(仅限制非加密标准DNS协议,不限制加密、私有DNS协议)。
  3. 支持拦截规则下发后立即生效(此点针对TCP协议:需断开已有被拦截的TCP连接)。

以下分别介绍具体开发方式。

针对特定IP联网访问控制

  1. 设备通过硬件接口,插入网线。

  2. 从@kit.NetworkKit中导入netFirewall命名空间。

    收起
    自动换行
    深色代码主题
    复制
    1. // 从@kit.NetworkKit中导入netFirewall命名空间。
    2. import { netFirewall } from '@kit.NetworkKit';
    3. import { BusinessError } from '@kit.BasicServicesKit';
    4. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. 用户调用setNetFirewallPolicy方法,打开防火墙。

    收起
    自动换行
    深色代码主题
    复制
    1. // IP类型
    2. interface IpType{
    3. family:number;
    4. type:number;
    5. address?:string;
    6. mask?:number;
    7. startIp?:string;
    8. endIp?:string;
    9. }
    10. // IP端口
    11. interface IpPort{
    12. startPort:number;
    13. endPort:number;
    14. }
    15. // ...
    16. // 定义防火墙策略:打开,入站阻止,出站允许。
    17. let policy: netFirewall.NetFirewallPolicy = {
    18. isOpen: true,
    19. inAction: netFirewall.FirewallRuleAction.RULE_DENY,
    20. outAction: netFirewall.FirewallRuleAction.RULE_ALLOW
    21. };
    22. // 给用户100设置防火墙策略。
    23. netFirewall.setNetFirewallPolicy(100, policy).then(() => {
    24. hilog.info(0x0000, 'testTag', `set firewall policy success.`);
    25. }).catch((error : BusinessError) => {
    26. hilog.error(0x0000, 'testTag', `error: set firewall policy failed: ${JSON.stringify(error)}`);
    27. });
  4. 用户通过addNetFirewallRule方法,添加防火墙规则。

    收起
    自动换行
    深色代码主题
    复制
    1. // 初始化具体的防火墙ip类型规则。
    2. let ipRule: netFirewall.NetFirewallRule = {
    3. name: 'rule1',
    4. description: 'rule1 description',
    5. direction: netFirewall.NetFirewallRuleDirection.RULE_IN,
    6. action: netFirewall.FirewallRuleAction.RULE_DENY,
    7. type: netFirewall.NetFirewallRuleType.RULE_IP,
    8. isEnabled: true,
    9. appUid: 20001,
    10. localIps: [
    11. {
    12. family: 1,
    13. type: 1,
    14. address: '10.10.1.1',
    15. mask: 32
    16. },{
    17. family: 1,
    18. type: 2,
    19. startIp: '10.20.1.1',
    20. endIp: '10.20.1.10'
    21. }] as IpType[],
    22. remoteIps:[
    23. {
    24. family: 1,
    25. type: 1,
    26. address: '20.10.1.1',
    27. mask: 32
    28. },{
    29. family: 1,
    30. type: 2,
    31. startIp: '20.20.1.1',
    32. endIp: '20.20.1.10'
    33. }] as IpType[],
    34. protocol: 6,
    35. localPorts: [
    36. {
    37. startPort: 1000,
    38. endPort: 1000
    39. },{
    40. startPort: 2000,
    41. endPort: 2001
    42. }] as IpPort[],
    43. remotePorts: [
    44. {
    45. startPort: 443,
    46. endPort: 443
    47. }] as IpPort[],
    48. userId: 100,
    49. interface:'wlan0' // 从API版本26.0.0开始支持
    50. };
    51. // 添加防火墙规则。
    52. netFirewall.addNetFirewallRule(ipRule).then((result: number) => {
    53. // ...
    54. hilog.info(0x0000, 'testTag', `rule Id: ${result}`);
    55. }, (reason: BusinessError) => {
    56. // ...
    57. hilog.error(0x0000, 'testTag', `error: add firewall rule failed: ${JSON.stringify(reason)}`);
    58. });

针对域名联网访问控制支持拦截

  1. 设备通过硬件接口,插入网线。

  2. 从@kit.NetworkKit中导入netFirewall命名空间。

    收起
    自动换行
    深色代码主题
    复制
    1. // 从@kit.NetworkKit中导入netFirewall命名空间。
    2. import { netFirewall } from '@kit.NetworkKit';
    3. import { BusinessError } from '@kit.BasicServicesKit';
    4. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. 调用setNetFirewallPolicy方法,打开防火墙。

    收起
    自动换行
    深色代码主题
    复制
    1. interface domain{
    2. isWildcard: boolean;
    3. domain: string;
    4. }
    5. // ...
    6. // 定义防火墙策略:打开,入站阻止,出站允许。
    7. let policy: netFirewall.NetFirewallPolicy = {
    8. isOpen: true,
    9. inAction: netFirewall.FirewallRuleAction.RULE_DENY,
    10. outAction: netFirewall.FirewallRuleAction.RULE_ALLOW
    11. };
    12. // 给用户100设置防火墙策略
    13. netFirewall.setNetFirewallPolicy(100, policy).then(() => {
    14. hilog.info(0x0000, 'testTag', `set firewall policy success.`);
    15. }).catch((error : BusinessError) => {
    16. hilog.error(0x0000, 'testTag', `error: set firewall policy failed: ${JSON.stringify(error)}`);
    17. });
  4. 通过addNetFirewallRule方法,添加防火墙规则。

    收起
    自动换行
    深色代码主题
    复制
    1. // 初始化具体的防火墙域名类型规则。
    2. let domainRule: netFirewall.NetFirewallRule = {
    3. name: 'rule2',
    4. description: 'rule2 description',
    5. direction: netFirewall.NetFirewallRuleDirection.RULE_IN,
    6. action: netFirewall.FirewallRuleAction.RULE_DENY,
    7. type: netFirewall.NetFirewallRuleType.RULE_DOMAIN,
    8. isEnabled: true,
    9. appUid: 20002,
    10. domains: [
    11. {
    12. isWildcard: false,
    13. domain: 'www.HarmonyOS.cn'
    14. },{
    15. isWildcard: true,
    16. domain: '*.HarmonyOS.cn'
    17. }] as domain[],
    18. userId: 100,
    19. interface:'wlan0' // 从API版本26.0.0开始支持
    20. };
    21. // 添加防火墙规则。
    22. netFirewall.addNetFirewallRule(domainRule).then((result: number) => {
    23. // ...
    24. hilog.info(0x0000, 'testTag', `rule Id: ${result}`);
    25. }, (reason: BusinessError) => {
    26. // ...
    27. hilog.error(0x0000, 'testTag', `error: add firewall rule failed: ${JSON.stringify(reason)}`);
    28. });