基于Netfilter的内核级包过滤防火墙实现(2)

下面是防火墙模块的初始化函数:

int init_firewall()   {       (&ip_allowed_in_node_head)->next = NULL;       (&ip_denied_in_node_head)->next = NULL;       (&port_allowed_in_node_head)->next = NULL;       (&port_denied_in_node_head)->next = NULL;          (&ip_allowed_out_node_head)->next = NULL;       (&ip_denied_out_node_head)->next = NULL;       (&port_allowed_out_node_head)->next = NULL;       (&port_denied_out_node_head)->next = NULL;          switch(work_mode)       {           case MODE_IP_ONLY_ALLOWED_IN:               open_ip_cfg_file(ALLOWED_IN_IP_CONF_FILE_DIR,ALLOWED_IP_IN);               break;           case MODE_IP_ONLY_DENIED_IN:               open_ip_cfg_file(DENIED_IN_IP_CONF_FILE_DIR,DENIED_IP_IN);               break;           case MODE_IP_PORT_ALLOWED_IN:               open_port_cfg_file(ALLOWED_IN_PORT_CONF_FILE_DIR,ALLOWED_PORT_IN);               open_ip_cfg_file(ALLOWED_IN_IP_CONF_FILE_DIR,ALLOWED_IP_IN);               break;           case MODE_IP_PORT_DENIED_IN:               open_port_cfg_file(DENIED_IN_PORT_CONF_FILE_DIR,DENIED_PORT_IN);               open_ip_cfg_file(ALLOWED_IN_IP_CONF_FILE_DIR,ALLOWED_IP_IN);               break;           case MODE_IP_ONLY_ALLOWED_OUT:               open_ip_cfg_file(ALLOWED_OUT_IP_CONF_FILE_DIR,ALLOWED_IP_OUT);               break;           case MODE_IP_ONLY_DENIED_OUT:               open_ip_cfg_file(DENIED_OUT_IP_CONF_FILE_DIR,DENIED_IP_OUT);               break;           case MODE_IP_PORT_ALLOWED_OUT:               open_port_cfg_file(ALLOWED_OUT_PORT_CONF_FILE_DIR,ALLOWED_PORT_OUT);               open_ip_cfg_file(ALLOWED_OUT_IP_CONF_FILE_DIR,ALLOWED_IP_OUT);               break;           case MODE_IP_PORT_DENIED_OUT:               open_port_cfg_file(DENIED_OUT_PORT_CONF_FILE_DIR,DENIED_PORT_OUT);               open_ip_cfg_file(ALLOWED_OUT_IP_CONF_FILE_DIR,ALLOWED_IP_OUT);               break;           default:break;       }                            //open_port_cfg_file(DENIED_PORT_CONF_FILE,DENIED_PORT);        nf_register_hook(&my_netfilter[0]);       nf_register_hook(&my_netfilter[1]);       printk("INIT my firewall OK!\n");       return 0;   }  

先从文件读取配置文件,加载到内核,然后注册钩子操作结构my_netfilter[0],my_netfilter[1]

下图是Netfilter的IPV4下的结构

基于Netfilter的内核级包过滤防火墙实现

上述的两个函数挂载位置NF_INET_LOCAL_IN和NF_INET_LOCAL_OUT,分别处理从本机发出和到达本机的数据包。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ppjjs.html