12. 修改防火墙规则和统计信息的函数

对于那些稍微大胆的人,libiptc 提供了一组函数来直接修改防火墙规则和统计信息(使用 iptables 实际上是最安全的方式)

本 HOWTO 未涵盖这些函数,我将仅限于展示从 libiptc.hRusty Russell 编写的 Linux netfilter Hacking HOWTO 中提取的改进信息。

12.1. iptc_commit

名称: iptc_commit

用法: 执行实际更改。

原型: int iptc_commit(iptc_handle_t *handle)

描述: 您所做的表更改不会写回,直到调用 iptc_commit() 函数。这意味着两个库用户在同一链上操作可能会互相竞争;需要锁定来防止这种情况,但目前尚未完成。然而,计数器不存在竞争;计数器以这样一种方式添加回内核,即表中读取和写入之间的计数器增量仍然会显示在新表中。为了保护系统状态,您必须提交您的更改

参数: handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.2. iptc_insert_entry

名称: iptc_insert_entry

用法: 在链中插入新规则。

原型: int iptc_insert_entry(const ipt_chainlabel chain, const struct ipt_entry *e, unsigned int rulenum, iptc_handle_t *handle)

描述: 此函数在链 chain 中由整数值 rulenum 定义的位置插入结构类型 ipt_entry 中定义的规则。规则编号从 1 开始,表示第一个规则。

参数: chain 是指向要修改的链的名称的 char 指针;e 是指向 ipt_entry 类型结构的指针,该结构包含有关要插入的规则的信息。程序员必须在使用该指针作为函数参数之前,使用定义其规则所需的值填充此结构的字段。rulenum 是一个整数值,定义了新规则将插入的规则链中的位置。规则编号从 1 开始,表示第一个规则。handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.3. iptc_replace_entry

名称: iptc_replace_entry

用法: 用新规则替换链中的旧规则。

原型: int iptc_replace_entry(const ipt_chainlabel chain, const struct ipt_entry *e, unsigned int rulenum, iptc_handle_t *handle)

描述: 此函数使用结构类型 ipt_entry 中定义的规则替换链 chain 中位于 rulenum 位置的条目规则。规则编号从 1 开始,表示第一个规则。

参数: chain 是指向要修改的链的名称的 char 指针;e 是指向 ipt_entry 类型结构的指针,该结构包含有关要插入的规则的信息。程序员必须在使用该指针作为函数参数之前,使用定义其规则所需的值填充此结构的字段。rulenum 是一个整数值,定义了新规则将替换旧规则的规则链中的位置。规则编号从 1 开始,表示第一个规则。handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.4. iptc_append_entry

名称: iptc_append_entry

用法: 在链中追加新规则。

原型: int iptc_append_entry(const ipt_chainlabel chain, const struct ipt_entry *e, iptc_handle_t *handle)

描述: 此函数在链 chain 中追加结构类型 ipt_entry 中定义的规则(相当于插入,规则编号 = 链的长度)。

参数: chain 是指向要修改的链的名称的 char 指针;e 是指向 ipt_entry 类型结构的指针,该结构包含有关要追加的规则的信息。程序员必须在使用该指针作为函数参数之前,使用定义其规则所需的值填充此结构的字段。handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.5. iptc_delete_num_entry

名称: iptc_delete_num_entry

用法: 删除链中的规则。

原型: int iptc_delete_num_entry(const ipt_chainlabel chain, unsigned int rulenum, iptc_handle_t *handle)

描述: 此函数删除链 chain 中位于 rulenum 位置的条目规则。规则编号从 1 开始,表示第一个规则。

参数: chain 是指向要修改的链的名称的 char 指针;rulenum 是一个整数值,定义了要删除的规则在规则链中的位置。handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.6. iptc_flush_entries

名称: iptc_flush_entries

用法: 清空链。

原型: int iptc_flush_entries(const ipt_chainlabel chain, iptc_handle_t *handle)

描述: 此函数清空给定链中的规则条目(即,清空链)。

参数: chain 是指向要清空的链的名称的 char 指针;handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.7. iptc_zero_entries

名称: iptc_zero_entries

用法: 将链计数器置零。

原型: int iptc_zero_entries(const ipt_chainlabel chain, iptc_handle_t *handle)

描述: 此函数将给定链中的计数器置零。

参数: chain 是指向要将其计数器置零的链的名称的 char 指针;handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.8. iptc_create_chain

名称: iptc_create_chain

用法: 创建新链。

原型: int iptc_create_chain(const ipt_chainlabel chain, iptc_handle_t *handle)

描述: 此函数在表中创建新链。

参数: chain 是指向要创建的链的名称的 char 指针;handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.9. iptc_delete_chain

名称: iptc_delete_chain

用法: 删除链。

原型: int iptc_delete_chain(const ipt_chainlabel chain, iptc_handle_t *handle)

描述: 此函数删除表中由 char 指针 chain 标识的链。

参数: chain 是指向要删除的链的名称的 char 指针;handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.10. iptc_rename_chain

名称: iptc_rename_chain

用法: 重命名链。

原型: int iptc_rename_chain(const ipt_chainlabel oldname, const ipt_chainlabel newname, iptc_handle_t *handle)

描述: 此函数将表中由 char 指针 oldname 标识的链重命名为新名称 newname

参数: oldname 是指向要重命名的链的名称的 char 指针,newname 是新名称;handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.11. iptc_set_policy

名称: iptc_set_policy

用法: 在内建链中设置策略。

原型: int iptc_set_policy(const ipt_chainlabel chain, const ipt_chainlabel policy, struct ipt_counters *counters, iptc_handle_t *handle)

描述: 此函数将链 chain 中的策略设置为由 char 指针 policy 表示的值。如果您想同时设置链的计数器,请将这些值填充到 ipt_counters 类型的结构中,并将指向它的指针作为参数 counters 传递。请注意:该链必须是一个内建链。

参数: chain 是指向要修改的链的名称的 char 指针;policy 是指向要设置的策略名称的 char 指针。counters 是指向 ipt_counters 结构的指针,用于设置链的计数器。handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.12. iptc_zero_counter

名称: iptc_zero_counter

用法: 将链中规则的计数器置零。

原型: int iptc_zero_counter(const ipt_chainlabel chain, unsigned int rulenum, iptc_handle_t *handle)

描述: 此函数将链 chain 中位于 rulenum 位置的条目规则的数据包和字节计数器置零。规则编号从 1 开始,表示第一个规则。

参数: chain 是指向要修改的链的名称的 char 指针;rulenum 是一个整数值,定义了要将其计数器置零的规则在规则链中的位置。handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。

12.13. iptc_set_counter

名称: iptc_set_counter

用法: 设置链中规则的计数器。

原型: int iptc_set_counter(const ipt_chainlabel chain, unsigned int rulenum, struct ipt_counters *counters, iptc_handle_t *handle)

描述: 此函数使用在 ipt_counters 类型结构中传递的值,设置链 chain 中位于 rulenum 位置的条目规则的数据包和字节计数器。规则编号从 1 开始,表示第一个规则。

参数: chain 是指向要修改的链的名称的 char 指针;rulenum 是一个整数值,定义了要设置其计数器的规则在规则链中的位置。counters 是指向 ipt_counters 结构的指针,用于设置规则的计数器;程序员必须使用要设置的值填充此结构的字段。handle 是指向 iptc_handle_t 类型结构的指针,该结构是通过先前调用 iptc_init 获得的。

返回值: 如果成功,则返回整数值 1(真);如果失败,则返回整数值 0(假)。在这种情况下,errno 被设置为生成的错误号。使用 iptc_strerror 获取关于问题的有意义的信息。如果 errno == 0,则表示存在版本错误(即,升级 libiptc)。