Linux下双网卡Firewalld的配置流程
实验室拟态存储的项目需要通过LVS-NAT模式通过LVS服务器来区隔内外网的服务,所以安全防护的重心则落在了LVS服务器之上。笔者最终选择通过firewalld放行端口的方式来实现需求,由于firewall与传统Linux使用的iptable工具有不小的区别,接下来通过博客来记录一下firewalld的配置流程。
1.Firewall服务的简介:
firewalld提供了一个 动态管理的防火墙,用以支持不同网络区域的规则,分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IPv4 和 IPv6 防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。
上述内容是来自RetHat官方文档的说明,看起来不知所云。所以笔者在这里简单介绍一下firewalld的定位与传统的iptable存在什么样的不同:
动态防火墙
firewalld 提供的是动态的防火墙服务。配置的改变可以随时随地立刻执行,不再需要保存或者执行这些改变。而iptable的部分,每一个单独更改意味着要清除所有旧有的规则和从 里读取所有新的规则,相对来说firewalld的方式会更加灵活。区域隔离
firewalld 提供了区域隔离的服务,也就是说类似于window之中的公共网络与内部网络的区别,可以通过不同的区域的配置对应的规则来实现不同的网络规则服务。通过区域规则的方式,可以让防火墙的工作更加的灵活。
如图所示,firewalld的防火墙本质上是建立在原生的iptable防火墙之上的抽象层,通过定制规则的方式来利用iptable的功能,所以两个防火墙是上下级并行工作的关系,最终都需要落地到内核之中的netfilter来实现网络包的过滤,来简化防火墙的工作流程。(传统iptable的“四表五链”实在是有够复杂~~囧rz)

2.系统环境:
如下图所示,这里需要在LVS的服务器需要部署firewall的防火墙,这里笔者仅简要梳理一下一台LVS服务器的工作:

系统平台:Centos 7
LVS服务器: 双网卡
- 外网地址:219.223.199.154
- 内网地址:192.168.1.17
对外服务器:
- 服务器A:192.168.1.11
- 服务器B:192.168.1.14
在这里,外网地址之上需要开放的端口为10086端口,通过该端口进行转发。而内网地址之上并不设置限制,我们认为是安全的网络环境。
3.配置流程:
Firewalld的配置可通过三种方式:
firewall-config
一个图形化的用户接口的配置工具firewall-cmd
一个命令行的用户接口的配置工具静态xml文件配置
firewalld 的配置设定存储在/etc/firewalld/ 目录下的 xml 文件里。可以通过查看和编辑这些 xml 文件,来实现firewall的配置。
之后笔者的配置流程主要是基于firewall-cmd命令展开,首先启动firewall服务:
systemctl start firewalld.service //启动firewalld服务
接下来,开放外网网卡的对应的TCP端口,这里笔者选择public区域,也就是双网卡同时开放端口。
firewall-cmd --zone=public --add-port=10086/tcp --permanent
该命令的配置了public区域添加10086的端口,后续的参数--permannet则代表永久添加。也就是一次写入,后续重启之后依然生效。在firewall之中支持如下不同的区域区隔与过滤规则,之后不同的配置可以参考下面的内容:
区域
drop: 丢弃所有进入的包,而不给出任何响应
block: 拒绝所有外部发起的连接,允许内部发起的连接
public: 允许指定的进入连接
external: 同上,对伪装的进入连接,一般用于路由转发
dmz: 允许受限制的进入连接
work: 允许受信任的计算机被限制的进入连接,类似 workgroup
home: 同上,类似 homegroup
internal: 同上,范围针对所有互联网用户
trusted: 信任所有连接
过滤规则
source: 根据源地址过滤
interface: 根据网卡过滤
service: 根据服务名过滤
port: 根据端口过滤
icmp-block: icmp 报文过滤,按照 icmp 类型配置
masquerade: ip 地址伪装
forward-port: 端口转发
rule: 自定义规则
之后通过LVS配置好下图是通过ipvsadm配置好的转发机制:

通过外网尝试连接外网的ip地址,219.223.199.154:10086,发现并无法联通后端服务器的服务,也就是运行在192.168.1.11与192.168.1.14的服务器。
调用ipvsadm -lcn命令之后,发现内网的转发出现了问题:

通过抓包发现LVS服务器在内网网卡192.168.1.17上的通信包被拦截,于是继续通过firewalld-cmd命令开发内网网卡的端口,将内网网卡加入trusted区域:
firewall-cmd --zone=trusted --add-interface=enp3s0
接下来可以看到开放了对应内网网卡到trusted,trusted区域允许所有通信包放行,因为内网是相对安全的环境,所以并不存在很大的影响,调用:
firewall-cmd --list-all-zones
命令展示firewall的配置结果,public与trusted区域都出于active状态,外网服务能够正常连接内网的端口服务了。

可以看到上述public的设置之中涉及到了对应的ssh服务于dhcpv6-client的服务,在Firewalld之中是可以直接通过服务来放行对应的内容,也就是上文参数service,详细的配置参数需要在目录/usr/lib/firewalld/services之中进行配置,我们尝试打开上文ssh服务的内容:

由上文的配置内容可见:所谓的服务配置防火墙,本身也是通过标注协议与端口的方式进行的,只不过是用服务的逻辑进行包装了。至于使用哪种形式,各位见仁见智了。
小结
梳理了一下在LVS下双网卡Firewalld的配置流程。Debian系列的发行版也是大同小异,只不过Firewalld工具需要自行使用apt-get进行安装。上述内容若有疏漏,望各位指点斧正。
Linux下双网卡Firewalld的配置流程的更多相关文章
- Linux下双网卡绑定bond配置实例详解
本文源自:http://blog.itpub.net/31015730/viewspace-2150185/ 一.什么是bond? 网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡冗余,带宽 ...
- Linux下双网卡绑定(bonding技术)
Linux网卡绑定探析 2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的 ...
- Linux下双网卡绑定bond0
一:原理: linux操作系统下双网卡绑定有七种模式.现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑 ...
- Linux下双网卡绑定bond0【转】
一:原理: linux操作系统下双网卡绑定有七种模式.现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑 ...
- (转)深度分析Linux下双网卡绑定七种模式
现在一般的企业都会 使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑定模式,当然现在 网卡产商也会出一些针对window ...
- 深度分析Linux下双网卡绑定七种模式
现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑定模式,当然现在网卡产商也会出一些针对windows操 ...
- linux下双网卡双网关配置
要求: eth0:192.168.100.203 连接内网,网关为192.168.100.1.需要和192.168.10.0.192.168.12.0.192.168.100.0.10.2.2.0.1 ...
- 深度分析Linux下双网卡绑定七种模式 多网卡的7种bond模式原理
http://blog.csdn.net/abc_ii/article/details/9991845多网卡的7种bond模式原理 Linux网卡绑定mode共有七种(~) bond0.bond1.b ...
- linux下双网卡的绑定
如果服务器上有两快网卡就可以把它绑定为一块虚拟的网卡,如果一块网卡坏了另一块还可以继续工作,增加了冗余度和负载,具体做法如下: 新建一个虚拟的网卡,命令如下: iv /etc/sysconfig/ne ...
随机推荐
- H5新特性之webWorker
众所周知javascript是单线程语言,这就是js开发难度较低的原因了,因为不需要解决多线程的资源共享问题(例如死锁),但是单线程性能并不好,因此多了一个webWorker实现js的多进程来提升js ...
- 源码解析Flask的配置文件
在flask里,我们常在主文件中定义某些配置,比如: app.debug = True app.secret_key = 'helloworld!!' 实际上,flask中默认可以进行可选的配置项有很 ...
- vuex在项目中使用的一点总结
以下为vue后台管理项目中使用vuex的一点总结,截取了其中部分代码,如有什么错误,还望指出. 1. token 存储 登陆成功之后,需要把获取到的 token 存储到 vuex 中,配合 axios ...
- leetcode算法:Reshape the Matrix
In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...
- RxJava系列1(简介)
RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...
- JSON的简单书写(初学),使用Java语言反序列化
这个适合初学者:刚刚我学习的 1.基础的"JSON" 对象是用一对大括号: 例如: { "name":"xiaohua", ...
- Python操作SQLAchemy
如果对代码不懂就看这个:http://www.cnblogs.com/jixuege-1/p/6272888.html 本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql O ...
- mysql安装及常见问题
下载了MySQL的压缩包,开始配置的时候遇到一大堆问题,下面记录下,也希望对遇到同样问题的你有帮助 开始将压缩包解压到指定文件夹,然后建立一个txt文件命名为my.ini,写入下面的内容 [mysql ...
- ACE入门——ACE构建
ACE(ADAPTIVE Communication Environment),ACE入门的第一课就是要学习怎么在自己的系统上构建ACE. ACE是跨平台的,这是它的一个很重要的特性,ACE支持很多的 ...
- Java 嵌套类基础详解
目录 1. 什么是嵌套类? 2. 为什么要使用嵌套类? 3. 嵌套类的类型 4. 静态嵌套类 5. 非静态嵌套类 5.1 成员内部类 5.2 局部内部类 5.3 匿名内部类 6. 嵌套接口 1. 什么 ...