Linux防火墙设置之FirewallD

1 min read

centos从7.0 开始将原先的防火墙iptables换成了FirewallD。FirewallD支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项,被称作动态管理防火墙,也就是说不需要重启整个防火墙便可应用更改。centos7默认安装了firewalld,若没有安装,执行 yum install firewalld firewalld-config 安装,其中firewalld-config是GUI工具。FirewallD与iptables关系:

firewalld-iptables

firewalld底层仍旧是基于iptables的,但还是有很多不同的地方:

  • iptables在 /etc/sysconfig/iptables 中储存配置,而 firewalld 将配置储存在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件里,其中前者是默认的配置,请不要修改。可以在/etc/firewalld/中编辑自己的配置,firewalld优先使用/etc/firewalld/中的配置。
  • 使用 iptables,每一个单独更改意味着清除所有旧有的规则和从 /etc/sysconfig/iptables里读取所有新的规则,然而使用 firewalld 却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld 可以在运行时间内,改变设置而不丢失现行连接。

firewalld中zone概念(区域)

RHEL7中的不过貌似其实现方式还是和iptables一样的,但是不像mariaDB那样兼容MySQL命令,FirewallD无法解析由 ip*tables 和 ebtables 命令行工具添加的防火墙规则

FirewallD使用区域(zone)的概念来管理,每个网卡对应一个zone,这些zone的配置文件可在/usr/lib/firewalld/zones/下看到,默认的是public.由firewalld 提供的区域按照从不信任到信任的顺序排序:

  • drop(丢弃)任何流入网络的包都被丢弃,不作出任何响应。只允许流出的网络连接。
  • block(阻塞)任何进入的网络连接都被拒绝,并返回 IPv4 的 icmp-host-prohibited 报文或者 IPv6 的 icmp6-adm-prohibited 报文。只允许由该系统初始化的网络连接。
  • public(公开) 在用以可以公开的部分。你认为网络中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连接接入。
  • external(外部)用在路由器等启用伪装的外部网络。你认为网络中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连接接入。
  • dmz(隔离区)用以允许隔离区(dmz)中的电脑有限地被外界网络访问。只接受被选中的连接。
  • work(工作)用在工作网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。
  • home(家庭)用在家庭网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。
  • internal(内部)用在内部网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。
  • trusted(信任)允许所有网络连接。

firewalld中的过滤规则

  • source: 根据源地址过滤
  • interface: 根据网卡过滤
  • service: 根据服务名过滤
  • port: 根据端口过滤
  • icmp-block: icmp 报文过滤,按照 icmp 类型配置
  • masquerade: ip 地址伪装
  • forward-port: 端口转发
  • rule: 自定义规则

其中,过滤规则的优先级遵循如下顺序

  • source
  • interface
  • conf

firewalld常用命令

fierwalld可以直接修改配置文件进行配置,也可以通过配置工具的命令,这里因为是远程操作为了确保开启后ssh端口是开放的,所以直接修改配置文件。

先查看/etc/firewalld/firewalld.conf中DefaultZone的值,默认是DefaultZone=public,这时/etc/firewalld/zones/目录下应该有个public.xml文件,vi打开它修改成:

这就代表在public zone中开放ssh(22)、http(80)、https(443)端口,其中对应每一个在/usr/lib/firewalld/services/下*.xml文件定义好的服务类型,比如http.xml文件如下:

所以也可以直接在public.xml中这样:

每次改配置文件还是比较麻烦的,firewalld可以使用firewall-config和firewall-cmd进行配置,前者是由于GUI模式下,后者为命令行下工具,一些常用命令如下:

部分命令共同的参数说明:

  • –zone=ZONE 指定命令作用的zone,省缺的话命令作用于默认zone
  • –permanent 有此参数表示命令只是修改配置文件,需要reload才能生效;无此参数则立即在当前运行的实例中生效,不过不会改动配置文件,重启firewalld服务就没效果了。
  • –timeout=seconds 表示命令效果持续时间,到期后自动移除,不能和–permanent同时使用。例如因调试的需要加了某项配置,到时间自动移除了,不需要再回来手动删除。也可在出现异常情况时加入特定规则,过一段时间自动解除。

参考连接:

拓展知识:Linux中的防火墙

netfilter

iptables、firewalld这些软件本身其实并不具备防火墙功能,他们的作用都是在用户空间中管理和维护规则,只不过规则结构和使用方法不一样罢了,真正利用规则进行过滤是由内核的netfilter完成的。netfilter是Linux 2.4内核引入的包过滤引擎。由一些数据包过滤表组成,这些表包含内核用来控制信息包过滤的规则集。iptables、firewalld等等都是在用户空间修改过滤表规则的便捷工具。

linux内部结构可以分为三部分,从最底层到最上层依次是:硬件–>内核空间–>用户空间

linux

netfilter在数据包必须经过且可以读取规则的位置,共设有5个控制关卡。这5个关卡处的检查规则分别放在5个规则链中:

  • PREROUTING 数据包刚进入网络接口之后,路由之前
  • INPUT 数据包从内核流入用户空间
  • FORWARD 在内核空间中,从一个网络接口进入,到另一个网络接口去。转发过滤。
  • OUTPUT 数据包从用户空间流出到内核空间。
  • POSTROUTING 路由后,数据包离开网络接口前。

链其实就是包含众多规则的检查清单,每一条链中包含很多规则。当一个数据包到达一个链时,系统就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则就继续检查下一条规则,如果该数据包不符合链中任一条规则,系统就会根据该链预先定义的默认策略来处理数据包。

当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出

netfilter

可以看出,刚从网络接口进入的数据包尚未进行路由决策,还不知道数据要走向哪里,所以进出口处没办法实现数据过滤,需要在内核空间设置转发关卡、进入用户空间关卡和离开用户空间关卡。

iptables

iptablses按照用途和使用场合,将5条链各自切分到五张不同的表中。也就是说每张表中可以按需要单独为某些链配置规则。例如,mangle表和filter表中都能为INPUT链配置规则,当数据包流经INPUT位置(进入用户空间),这两个表中INPUT链的规则都会用来做过滤检查。

iptables

五张表,每张表侧重于不同的功能

  • filter 数据包过滤功能。只涉及INPUT, FORWARD, OUTPUT三条链。是iptables命令默认操纵的表。
  • nat 地址转换功能。NAT转换只涉及PREROUTING, OUTPUT, POSTOUTING三条链。可通过转发让局域网机器连接互联网
  • mangle 数据包修改功能。每条链上都可以做修改操作。修改报文元数据,做防火墙标记等。
  • raw 快速通道功能。为了提高效率,优先级最高,符合raw表规则的数据包会跳过一些检查。
  • security 需要和selinux结合使用,内置规则比较复杂,通常都会被关闭。

iptables还支持自定义规则链。自定义的链必须和某个特定的链关联起来。可在某个链中设定规则,满足一定条件的数据包跳转到某个目标链处理,目标链处理完成后返回当前链中继续处理后续规则。因为链中规则是从头到尾依次检查的,所以规则的次序是非常重要的。越严格的规则应该越靠前。

iptablse服务管理

iptables命令参考

省缺表名为filter。命令中用到的序号(RULENUM)都基于1。

COMMAND 命令选项

CRETIRIA 条件匹配 

分为基本匹配和扩展匹配,扩展匹配又分为隐式匹配和显示匹配。

基本匹配:(可使用 ! 可以否定一个子句,如-p !tcp)

扩展匹配:(如: -p tcp  -m tcp  –dport 80)

隐式扩展匹配

对-p PROTO的扩展,或者说是-p PROTO的附加匹配条件,-m PROTO 可以省略,所以叫隐式

显示扩展匹配

ACTION 目标策略(TARGET)

辅助选项:

state  TCP链接状态

使用示例:

参考资料:

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

C语言学习:size_t

在学习C语言的时候,遇到了一个新的数据类型size_t,截止目前也没有完全理清这个类似的具体场景及出现的原因。
44 sec read

C语言学习:main()函数的正确写法

C语言虽然是一门古老的语言,但是其标准一直在完善,所以很多以前支持的语法在到当前已经不能在使用了。 C语言的版
41 sec read

Scipy数学函数的Scala实现

最近在推进项目的时候,遇到需要将线下的Python代码转化成线上的集群代码,由于机器代码环境是Scala,所以
4 min read

发表评论

电子邮件地址不会被公开。 必填项已用*标注