Linux运维之防火墙之firewalld的管理

一、防火墙的介绍

防火墙是整个数据包进入主机前的第一道关卡。防火墙主要通过Netfilter与TCPwrappers两个机制来管理的。

(1)Netfilter:数据包过滤机制
(2)TCP Wrappers:程序管理机制

关于数据包过滤机制有两个软件:firewalld与iptables

 

二、firewalld介绍

动态防火墙后台程序 firewalld 提供了一个动态管理的防火墙,用以支持网络 “ zones” ,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。

 

三、firewalld和iptables的区别

 iptables和firewalld是防火墙中常用的两种程序,可以灵活运用。

  1. firewalld 和 iptables之间最本质的不同是:

    iptables service 在 /etc/sysconfig/iptables 中储存配置。

    firewalld 将配置储存在 /usr/lib/firewalld/和/etc/firewalld/中的各种xml文件里。其中/usr/lib/firewalld/目录下的文件更全。services目录中是可以为firewalld添加的各种服务;zones目录中是firewalld的各种域的相关文件Linux运维之防火墙之firewalld的管理_第1张图片Linux运维之防火墙之firewalld的管理_第2张图片

  2. iptables通过控制端口来控制服务,而firewalld则是通过控制协议来控制端口
    我们这里先对firewalld做实验。Iptables和firewalld只能开一个。

Linux运维之防火墙之firewalld的管理_第3张图片

 

四、实验环境(rhel7.0版本)

主机环境:rhel7.0

各主机信息

主机名 IP
server 172.25.254.1
desktop 172.25.254.2
物理机(rhel7.3版本) 172.25.254.7

 

五、firewalld的配置

 

安装配置

  1. "yum  install   firewalld"安装firewalld服务。
  2. "yum  insatll   firewall-config"安装firewall-config图形化管理工具。
  3. "systemctl   start  firewalld"开启firewalld服务。
  4. "systemctl   stop  firewalld"关闭firewalld服务。
  5. "systemctl   disable  firewalld"设置firewalld服务开机不自启动。
  6. "systemctl   enable  firewalld"设置firewalld服务开机自启动。
  7. "systemctl   status  firewalld"查看firewalld服务的当前状态。

系统提供了三种配置firewalld的方法:(1)图形化的配置工具 firewall-config ;(2)直接编辑xml文件;(3) 命令行工具 firewall-cmd;

这里主要介绍命令行的方式配置firewalld。

 

1、配置firewalld之图形化的方式:firewall-config

 

  1. "firewall-config"。打开firewalld的图形化界面

Linux运维之防火墙之firewalld的管理_第4张图片

 

其中左下角为软件管理的域,有以下9种(public为firewalld的默认域)

Linux运维之防火墙之firewalld的管理_第5张图片

block域(限制)和drop域(丢弃)的区别:

  • block有回应;
  • 而drop没有回应。

 

Configuration有临时设定(Runtime)和永久(Permanent)设定两种,临时设定reload后会恢复原状态,而永久不会。
每个域后有管理的服务,端口等等

Linux运维之防火墙之firewalld的管理_第6张图片

 

2、配置firewalld之直接编辑xml文件的方式

 

  1. "cd  /etc/firewalld/zones"。进入目录/etc/firewalld/zones
  2. "vim   public.html"。编辑public域的文件。删除第6行(http的设置)和第7行(ssh的设置),重新加载firewalld(或者重启firewalld服务)生效
  3. "firewall-cmd   --list-all"。可以看到刚刚删除的http服务和ssh服务消失。

Linux运维之防火墙之firewalld的管理_第7张图片

Linux运维之防火墙之firewalld的管理_第8张图片

 

  1. "cd   /usr/lib/firewalld./services"。进入目录/usr/lib/firewalld/services
  2. "cp   http.xml    http8080.xml"。复制http.xml为http8080.xml
  3. "vim  http8080.xml"。编辑http8080.xml文件,将其中的80该为8080。保存退出。重新加载firewalld(或者重启firewalld服务)生效
  4. "firewall-cmd    --get-services"。可以看到新增了一个http8080服务。

Linux运维之防火墙之firewalld的管理_第9张图片

Linux运维之防火墙之firewalld的管理_第10张图片

Linux运维之防火墙之firewalld的管理_第11张图片

此时就可以把http8080服务加入到firewalld里面了

Linux运维之防火墙之firewalld的管理_第12张图片

 

3、配置firewalld之命令行工具:firewall-cmd

 

1、

  • "firewall-cmd   --state"。查看firewalld的当前状态,查询状态还可以用"systemctl  status  firewalld"

Linux运维之防火墙之firewalld的管理_第13张图片

 

2、

  1. "firewall-cmd   --get-zones"。查看firewalld有哪些域
  2. "firewall-cmd   --get-active-zones"。查看firewalld当前生效的域
  3. "firewall-cmd   --get-default-zone"。查看firewalld默认生效的域

 

3、

  • "firewall-cmd  --get-services"。列出系统中用名称表示的服务,即firewalld可以允许的服务

Linux运维之防火墙之firewalld的管理_第14张图片

 

4、

  • "firewall-cmd  --set-default-zone=trusted"。修改firewalld的默认域,将其修改为trusted
  • 注意:此修改是永久生效,不需要加参数permanent。而且不用重新加载firewalld。

如果将firewalld的默认域修改为trusted,那么相当于所有的都能通过。此时,即使firewalld里面没有添加http,也是可以访问apache的。

Linux运维之防火墙之firewalld的管理_第15张图片

Linux运维之防火墙之firewalld的管理_第16张图片

Linux运维之防火墙之firewalld的管理_第17张图片

 

5、

  1. "firewall-cmd  --list-all"。列出firewalld当前域的规则
  2. "firewall-cmd  --list-all-zones"。列出firewalld所有域的状态

Linux运维之防火墙之firewalld的管理_第18张图片

Linux运维之防火墙之firewalld的管理_第19张图片

 

6、

  • "firewall-cmd   --zone=trusted  --list-all"。列出firewalld的trusted域的规则

Linux运维之防火墙之firewalld的管理_第20张图片

 

7、

  1. "firewall-cmd --reload"。重新加载firewalld配置
  2. "firewall-cmd --complete-reload"。重新加载firewalld配置
  • --complete-reload与--reload的区别在于:--complete-reload断开连接,而--reload不断开连接

Linux运维之防火墙之firewalld的管理_第21张图片

此时别的主机,已经通过ssh远程连接

删除ssh服务,通过--reload重新加载,发现客户端仍然可以操作

Linux运维之防火墙之firewalld的管理_第22张图片

删除ssh服务,通过--complete-reload重新加载,发现客户端已经不能继续操作了

Linux运维之防火墙之firewalld的管理_第23张图片

 

8、

  1.  "firewall-cmd --add-service=xxxx"。临时添加一个服务,例如添加http,使得这个服务的数据可以通过,但是这个添加是临时的,重新加载firewalld(或者重启firewalld服务)后就会消失
  2. "firewall-cmd   --permanent   --add-service=xxxx"。永久添加一个服务,重新加载firewalld(或者重启firewalld服务)生效

Linux运维之防火墙之firewalld的管理_第24张图片

Linux运维之防火墙之firewalld的管理_第25张图片

Linux运维之防火墙之firewalld的管理_第26张图片

 

9、

  1. "firewall-cmd   --remove-service=xxxx"。临时删除一个服务,重新加载firewalld(或者重启firewalld服务)后又会出现
  2. "firewall-cmd   --permanent  --remove-service=xxxx"。永久删除一个服务,重新加载firewalld(或者重启firewalld服务)生效

Linux运维之防火墙之firewalld的管理_第27张图片


Linux运维之防火墙之firewalld的管理_第28张图片

Linux运维之防火墙之firewalld的管理_第29张图片

 

10、

  1. "firewall-cmd --add-port=xxxx/tcp"。临时添加一个端口,添加是临时的,重新加载firewalld(或者重启firewalld服务)后就会消失
  2. "firewall-cmd   --permanent   --add-port=xxxx/tcp"。使某个端口的数据可以通过。例如在Apache配置文件中将端口改为8080,则即使firewall中添加 了htpp也无法访问,因为其设置的可以通过的端口是80。此时需要用上述命令,添加8080端口,完成后,即可使用Apache访问。重新加载firewalld(或者重启firewalld服务)生效

Linux运维之防火墙之firewalld的管理_第30张图片

Linux运维之防火墙之firewalld的管理_第31张图片

Linux运维之防火墙之firewalld的管理_第32张图片

 

11、

  1. "firewall-cmd   --remove-port=xxxx/tcp"。临时删除一个端口,重新加载firewalld(或者重启firewalld服务)后又会出现
  2. "firewall-cmd   --permanent   --remove-port=xxxx/tcp"。永久删除某tcp端口,重新加载firewalld(或者重启firewalld服务)生效

Linux运维之防火墙之firewalld的管理_第33张图片

Linux运维之防火墙之firewalld的管理_第34张图片

Linux运维之防火墙之firewalld的管理_第35张图片

 

12、

  1. "firewall-cmd    --add-source=172.25.254.83  --zone=trusted"。临时往trusted域添加一个源IP,添加是临时的,重新加载firewalld(或者重启firewalld服务)后又会消失
  2. "firewall-cmd   --permanent   --add-source=172.25.254.7  --zone=trusted"。永久往trusted域添加一个源IP。表示来自"172.25.254.7"的数据全部通过。如果开启,firewalld不添加http,且改为8080 端口后不添加到firewalld,"172.25.254.7 "主机也可以访问Apache,重新加载firewalld(或者重启firewalld服务)生效

Linux运维之防火墙之firewalld的管理_第36张图片

此时172.25.254.83可以访问172.25.254.1的apache

而172.25.254.2不可以访问172.25.254.1的apache

Linux运维之防火墙之firewalld的管理_第37张图片

 

Linux运维之防火墙之firewalld的管理_第38张图片

Linux运维之防火墙之firewalld的管理_第39张图片

 

13、

  1. "firewall-cmd   --remove-source=172.25.254.7  --zone=trusted"。临时删除trusted域的一个源IP。重新加载firewalld(或者重启firewalld服务)后又会出现
  2. "firewall-cmd   --permanent   --remove-source=172.25.254.83  --zone=trusted"。永久删除trusted域的一个源IP。重新加载firewalld(或者重启firewalld服务)生效

Linux运维之防火墙之firewalld的管理_第40张图片

Linux运维之防火墙之firewalld的管理_第41张图片

Linux运维之防火墙之firewalld的管理_第42张图片

 

14、

  1. firewall-cmd   --remove-interface=eth0"。删除默认域public中的端口eth0。注意:不需要添加参数"--permanent",也不需要重新加载firewalld(或者重启firewalld服务),立即生效。重载firewalld服务之后,不会失效,但是重启firewalld服务之后,就是失效。

  2. firewall-cmd   --permanent   --remove-interface=eth0"。此语句有错误。

Linux运维之防火墙之firewalld的管理_第43张图片

Linux运维之防火墙之firewalld的管理_第44张图片

Linux运维之防火墙之firewalld的管理_第45张图片

 

15、

  1. "firewall-cmd   --add-interface=eth0"。往默认域public中添加端口eth0。注意:不需要添加参数"--permanent",也不需要重新加载firewalld(或者重启firewalld服务),立即生效。重载firewalld(或是重启firewalld)服务之后,也不会失效。

  2. "firewall-cmd   --permanent   --add-interface=eth0"。往默认域public中添加端口eth0。注意:需要重新加载firewalld(或者重启firewalld服务),才能生效。

Linux运维之防火墙之firewalld的管理_第46张图片

Linux运维之防火墙之firewalld的管理_第47张图片

Linux运维之防火墙之firewalld的管理_第48张图片

 

16、

  1. "firewall-cmd   --change-interface=eth0  --zone=trusted"。改变端口eth0所在的域,将域改为trusted域。注意:不需要添加参数"--permanent",也不需要重新加载firewalld(或者重启firewalld服务),立即生效。重载firewalld服务之后,不会失效。但是重启firewalld服务之后,就会失效。

  2. "firewall-cmd   --permanent   --change-interface=eth0  --zone=trusted"。注意:需要重新加载firewalld(或者重启firewalld服务),才能生效。

Linux运维之防火墙之firewalld的管理_第49张图片

Linux运维之防火墙之firewalld的管理_第50张图片

Linux运维之防火墙之firewalld的管理_第51张图片

Linux运维之防火墙之firewalld的管理_第52张图片

 

17、

block域(限制)和drop域(丢弃)的区别:

  • block有回应;
  • 而drop没有回应。

 

  1. "firewall-cmd    --zone=block   --add-source=172.25.254.7  "。将172.25.254.7这个IP加入block域。此操作在IP为172.25.254.1的主机上操作。此时在IP为172.25.254.7的主机上ping172.25.254.1,是ping不通的,但是有回应。
  2. "firewall-cmd   --zone=drop   --add-source=172.25.254.7 "。将172.25.254.7这个IP加入drop域。此操作在IP为172.25.254.1的主机上操作。此时在IP为172.25.254.7的主机上ping172.25.254.1,是ping不通的,但是有没有回应的。

Linux运维之防火墙之firewalld的管理_第53张图片

 

六、firewalld设置访问权限(Direct  Rules)

 

常见服务的端口介绍:

  1. httpd服务/nginx服务:80端口
  2. ssh服务:22端口
  3. https服务:443端口
  4. mariadb/mysql服务:3306端口
  5. php:9000端口
  6. squid服务:3128端口
  7. iscsi服务:3306端口
  8. memcache服务:11211端口

 

1、假设现在我们需要设置:只允许172.25.254.7这台主机可以访问apache。

注意:不能将此IP加入trusted域,因为这样的话,IP为172.25.254.7可以访问任何东西。

此时需要做两件事:1、firewalld允许通过的服务中不能有http服务;2、设置Direct  Rules只允许172.25.254.7可以访问。

 

ACCEPT状态

 

第一步:

fireward允许通过的服务中默认没有httpsd服务,所以不用做修改

Linux运维之防火墙之firewalld的管理_第54张图片

 

第二步:

  • "firewall-cmd    --direct   --add-rule   ipv4    filter    INPUT  1  -p   tcp   --dport   80   -s    172.25.254.7  -j   ACCEPT"      #这条命令是临时的,在重启firewalld服务(重载firewalld服务之后,不会失效)之后,就会失效。

解释:

  1. filter:表示三张表中的filter表
  2. INPUT:表示五条链中的INPUT链
  3. 1:表示第一行
  4. -p:表示正在使用的协议
  5. tcp:表示tcp协议
  6. --dport:表示目的地端口
  7. 80:表示apache的端口
  8. -s:表示数据来源
  9. 172.25.254.7:表示数据来源是172.25.254.7
  10. -j:表示动作(该动作有三种状态:(1)REJECT——拒绝;(2)ACCEPT——接受;(3)DROP——丢弃。)
  11. ACCEPT:表示状态是ACCEPT
  • **注意**:对于动作DROP和REJECT两者的区别要明确;
    REJECT动作相当于是客户端对服务器发送访问请求,服务端产生回应,并拒绝当前的客户端进行访问;而,DROP动作是客户端对服务器发送请求,但是服务器是不会给予回应的,相当于丢弃;

 

第三步:

  • "firewall-cmd   --direct   --get-all-rules"。查看Direct  Rules中的规则

 

第四步:

测试:

1、首先在172.25.254.7这台主机的浏览器进行测试(成功说明不了问题,还需要在其他主机进行测试)

2、在172.25.254.2这台主机的浏览器进行测试

Linux运维之防火墙之firewalld的管理_第55张图片

 

第五步:(可做可不做)

  • "firewall-cmd    --direct   --remove-rule   ipv4    filter    INPUT  1  -p   tcp   --dport   80   -s    172.25.254.83   -j   ACCEPT"。删除Direct  Rules域中的此规则

 

2、假设现在我们需要设置:只是不允许172.25.254.7这台主机可以通过ssh连接。

此时需要做两件事:1、firewalld允许通过的服务中必须有ssh服务;2、设置Direct  Rules不允许172.25.254.7可以访问。此时有两种状态可以设置:一种是REJECT;另外一种是DROP。

 

REJECT状态

 

第一步:

  1. "firewall-cmd   --permanent   --add-service=ssh"
  2. "firewall-cmd   --reload"
  3. "firewall-cmd   --list-all"

Linux运维之防火墙之firewalld的管理_第56张图片

 

第二步:

  • "firewall-cmd    --direct   --add-rule   ipv4    filter    INPUT  1  -p   tcp   --dport   22   -s    172.25.254.7  -j   REJECT"     #这条命令是临时的,在重启firewalld服务(重载firewalld服务之后,不会失效)之后,就会失效。

 

第三步:

  • "firewall-cmd   --direct   --get-all-rules"。查看Direct  Rules中的规则

 

第四步:

测试:

1、首先对172.25.254.7这台主机进行测试:此时被拒绝有回应(成功说明不了问题,还需要在其他主机进行测试)

2、对172.25.254.2这台主机的浏览器进行测试

 

第五步:(可做可不做)

  • "firewall-cmd    --direct   --remove-rule   ipv4    filter    INPUT  1  -p   tcp   --dport   22   -s    172.25.254.7   -j   REJECT"。删除Direct  Rules中的规则

 

DROP状态

 

第一步:

  1. "firewall-cmd   --permanent   --add-service=ssh"
  2. "firewall-cmd   --reload"
  3. "firewall-cmd   --list-all"

Linux运维之防火墙之firewalld的管理_第57张图片

 

第二步:

  • "firewall-cmd    --direct   --add-rule   ipv4    filter    INPUT  1  -p   tcp   --dport   22   -s    172.25.254.7  -j   DROP"   #这条命令是临时的,在重启firewalld服务(重载firewalld服务之后,不会失效)之后,就会失效。

 

第三步:

  • "firewall-cmd   --direct   --get-all-rules"。查看Direct  Rules中的规则

 

第四步:

测试:

1、首先对172.25.254.7这台主机进行测试:此时被拒绝没有回应(成功说明不了问题,还需要在其他主机进行测试)

2、对172.25.254.2这台主机进行测试

 

第五步:(可做可不做)

  • "firewall-cmd    --direct   --remove-rule   ipv4    filter    INPUT  1  -p   tcp   --dport   22   -s    172.25.254.7   -j   DROP"。删除Direct  Rules中的规则

 

七、firewalld设置调转端口

要实现调转端口必须打开firewalld的地址伪装功能!!!!!!!!!!

调转的目的端口必须使得firewalld可以通过ssh服务!!!!!!!!!

 

第一步:

  • "firewall-cmd    --permanent   --add-masquerade"。打开firewalld的地址伪装功能,重新加载firewalld(或者重启firewalld服务)生效

Linux运维之防火墙之firewalld的管理_第58张图片

 

第二步:

  • "firewall-cmd   --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.2"。设置通过ssh连接172.25.254.1时,自动调转到172.25.254.2。      #这条命令是临时的,在重启firewalld服务(或重载firewalld服务)之后,就会失效。

Linux运维之防火墙之firewalld的管理_第59张图片

 

第三步:

  • 需要注意的是:172.25.254.2这台主机的firewalld必须允许ssh服务通过

Linux运维之防火墙之firewalld的管理_第60张图片

 

第四步:

  • 测试:通过ssh远程连接172.25.254.1这台主机时,自动调转到172.25.254.2(此时输入的密码是:IP为172.25.254.2主机的密码)

Linux运维之防火墙之firewalld的管理_第61张图片

  • 注意:此时通过"w  -i"命令看到的IP不是真正连接的IP(172.25.254.7),而是要实现调转端口的IP(172.25.254.1)

  • 注意:出现下面的错误时的解决方法

Linux运维之防火墙之firewalld的管理_第62张图片

Linux运维之防火墙之firewalld的管理_第63张图片

 

第五步:(可做可不做)

  • "firewall-cmd   --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.2"。删除上面实现自动调转的设置。

Linux运维之防火墙之firewalld的管理_第64张图片

 

八、firewalld设置地址伪装

要实现地址伪装,有两个网卡的虚拟机必须打开firewalld的地址伪装功能!!!!!!!!!!

有两个网卡的虚拟机必须打开地址转发功能!!!!!!!!!!

要通过ssh远程连接的目的主机必须使得firewalld能够通过ssh服务!!!!!!!!!

 

第一步:在这台虚拟机(server)添加第二块网卡eth1;

Linux运维之防火墙之firewalld的管理_第65张图片

Linux运维之防火墙之firewalld的管理_第66张图片

 

第二步:在含有两块网卡的主机(server虚拟机)上做如下设置;

  1. "cd   /etc/sysconfig/network-scripts"
  2. "cp   ifcfg-eth0   ifcfg-eth1"
  3. "vim  ifcfg-eth1"。编辑如下的内容
  4. "systemctl   restart   network"
  5. "ifconfig"

Linux运维之防火墙之firewalld的管理_第67张图片

Linux运维之防火墙之firewalld的管理_第68张图片

 

第三步:在含有两块网卡的主机(server虚拟机)上打开地址伪装功能;

Linux运维之防火墙之firewalld的管理_第69张图片

 

第四步:在含有两块网卡的主机(server虚拟机)上打开地址转发功能

 

第五步:在含有一块网卡(desktop虚拟机)的主机上做如下设置;

  1. "cd   /etc/sysconfig/network-scripts"
  2. "vim  ifcfg-eth0"。编辑如下的内容
  3. "systemctl   restart   network"
  4. "ifconfig"
  5. "route  -n"。查看网关

Linux运维之防火墙之firewalld的管理_第70张图片

Linux运维之防火墙之firewalld的管理_第71张图片

 

第六步:在要远程连接的目的主机上使得firewalld能够通过ssh服务

Linux运维之防火墙之firewalld的管理_第72张图片

 

第七步:在单网卡虚拟机(desktop虚拟机)上测试

Linux运维之防火墙之firewalld的管理_第73张图片

Linux运维之防火墙之firewalld的管理_第74张图片

1.1.1.2和172.25.254.7因为不在一个网段里,网络是不能连通,这里为什么可以利用ssh服务可以连接呢?实际上是172.25.254.1登陆172.25.254.7,而不是1.1.1.2登陆172.25.254.7;这里也就完成了地址伪装。
当然,我们可以利用"w -i"查询看到的是真正登陆的ip(172.25.254.1)。

1.1.1.1是可以和172.25.254.1通信的。(这是因为1.1.1.1和172.25.254.1这两个IP是同一台主机的两个网卡的IP)。1.1.1.2是可以和1.1.1.1通信的。(这是因为1.1.1.1和1.1.1.2处于同一个网络段)

那么要使得1.1.1.2和172.25.254.1通信,就需要1.1.1.1作为中间人,也就是我们所说的网关。

网关设定好之后,1.1.1.2是可以和172.25.254.1通信的。但是不可以和172.25.254.7通信。(这是因为1.1.1.1不可以和172.25.254.7通信)。那么要使1.1.1.2可以和172.25.254.7通信,就需要在172.25.254.1的主机上打开地址伪装功能(即添加masquerade),并打开地址转发功能。

你可能感兴趣的:(Linux运维之防火墙之firewalld的管理)