构建内核级防火墙

叁叁肆2018-10-25 11:39

此文已由作者刑博武授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。


iptables是linux内核集成的ip包过滤机制防火墙,因为开源,它可以替代昂贵的商业防火墙解决方案,完成封包过滤,重定向,网络地址和端口的转换等功能。

通过iptables可以对内核数据包过滤表进行规则定制,内核根据规则对数据包的源地址,目标地址,协议,服务等做匹配,进行accept,reject,drop等处理。数据包匹配时按照规则表顺序逐条检查,当匹配到符合的规则时,直接执行该条规则处理方式,如果没有匹配到符合的规则,则根据默认策略处理该数据包。  

iptables数据包过滤处理流程:

命令语法:

iptables [-t table] command [NO.] [match] [-j target]

iptables参数表:(网络神图)

 

常用iptables命令参数:

Table:默认为filter表。也可指定nat、mangle表。

Command:

-A : 链尾添加一条规则。

-D : 指定链删除该编号规则。

-P : 配置链默认规则。

-F : 清空该链所有规则。

-L : 列出链中所有规则。

Match:指定协议,源地址,目标地址等。

-p : 指定icmp,tcp,udp等协议。

-s : 指定源地址。

-d : 指定目标地址。

Target: 对命中的数据表指定处理方式。

ACCEPT :允许数据包通过

DROP : 直接丢弃该数据包

REJECT : 拒绝并返回错误信息

 

配置文件iptables-config 参数详解:

IPTABLES_MODULES=""

-------------在防火墙被激活时,指定一组空间独立的额外 iptables 模块来加载。这可以包括 connection tracking和 NAT helper

IPTABLES_MODULES_UNLOAD="yes"

-------------在重新启动和停止时卸载的模块。
    yes — (默认)这个选项必须被设置来在启动和停止一个防火墙时达到一个正确的状态。 
    no — 这个选项只有在卸载 netfilter 模块出现问题时才应该设置。

IPTABLES_SAVE_ON_STOP="no"

------------- 当防火墙停止时,保存当前防火墙规则。

yes :当防火墙停止时把现存的规则保存到 /etc/sysconfig/iptables,旧版本被保存为/etc/sysconfig/iptables.save。

no :(默认)当防火墙停止时不保存当前的规则。

IPTABLES_SAVE_ON_RESTART="no"

-------------当防火墙重新启动时,保存当前防火墙规则。

yes:当防火墙重新启动时,保存现存的规则到/etc/sysconfig/iptables,旧版本被存为/etc/sysconfig/iptables.save。

no: (默认)防火墙重新启动时,不保存现存的规则。

IPTABLES_SAVE_COUNTER="no"

 -------------保存并恢复所有chain 和规则中的数据包和字节计数器。

yes:保存计数器的值。

no:(默认)不保存计数器值。

IPTABLES_STATUS_NUMERIC="yes"

   -------------输出的IP地址是数字的格式,而不是域名和主机名的形式。

yes:(默认)在状态输出中只包括IP地址。

no:在状态输出中返回域名或主机名。

IPTABLES_STATUS_VERBOSE="no"

   -------------输出iptables状态时,是否包含输入输出设备。

yes:是

no: 否

IPTABLES_STATUS_LINENUMBERS="yes"

   -------------输出iptables状态时,是否同时输出每条规则的匹配数。

yes: 是

no : 否


防火墙配置实例(以SSH的22端口为例):

显示现有规则:

iptables –L -n

清空现有规则表:

iptables -F

黑名单:先允许所有数据包通过,后逐条添加黑名单规则。

iptables –A INPUT–p tcp --dport 22 –j ACCEPT

白名单:先逐条添加白名单规则,后禁止所有数据包通过。

iptables –A INPUT–p tcp --dport 22 –j DROP

添加规则细节:增加可信任来源,增加到规则表末尾

iptables –A INPUT–s 192.168.100.1 –p tcp --dport 22 –j ACCEPT

iptables –A INPUT–s 192.168.200.1 –p tcp --dport 22 –j DROP

插入规则:指定规则添加位置,默认增加到规则表首

iptables –I INPUT–s 192.168.100.1 –p tcp --dport 22 –j ACCEPT

iptables –I INPUT2 –s 192.168.100.1 –p tcp --dport 22 –j ACCEPT

删除规则:删除指定规则:

iptables –D INPUT3

修改规则:修改指定行的规则,INPUT的第3行规则修改为DROP处理方式

iptables –R INPUT3 –j DROP

修改默认规则:

iptables –P INPUTDROP

指定物理接口:

iptables -A INPUT -i eth0 –j DROP

静ping:

iptables –A INPUT-p icmp --icmp-type 8 –j DROP


运行故障案例:

  1.  应用 iptables 防火墙规则:Badargument `COMMIT'

  Error occurred at line: 25

  Try `iptables-restore -h' or 'iptables-restore--help' for more information.  

  ----------- 在iptables配置文件最后一行必须已COMMIT结尾。不能注释掉。  

  2.  如果 iptables save 时报错

  iptables:saving firewall rules to/etc/sysconfig/iptables: /etc/init.d/iptables: line 268: restorecon:command notfound

  ----------需要安装policycoreutils软件包。

  3.  Setting chains to policy ACCEPT : raw nat mangle filter[FAILED]

  -------------需要修改内核版本 如:Latest 2.6Paravirt改成Latest 2.6 Stable(2.6.18.8-linode 22)

  4.  iptables v1.3.8: Couldn't load target`ACCET':/lib/iptables

  /libipt_ACCET.so: cannot open shared object file: No suchfile or directory

  ------------编译内核,使iptable Enable

  5.  iptables: No chain/target/match by that name

  ------------iptables缺少模块,需重新编译。


网易云免费体验馆,0成本体验20+款云产品! 

更多网易技术、产品、运营经验分享请点击




相关文章:
【推荐】 Android输入法弹出时覆盖输入框问题