先说结论吧
如果你的虚拟机是centos7以上版本,且仅仅用来实验某个工具软件。那么可以在安装工具软件之前,首先关闭firewalld,继而开启iptables,并且对工具软件的端口做放行即可。
进入主题
centos7常用的软防火墙,主要是firewalld和iptables。这二者的底层实现都是使用了netfilter。
下面说说我对这二者的区别的理解。
第一:方式不同。
firewalld是通过zone的方式来过滤数据。而iptables是通过表和链的方式过滤数据
1.1:对于firewalld的zone,我理解就是把同一类的网络数据来源放到一个zone中,然后对不同的zone做不同的放行或阻止操作。
比如,我们可以把来自公网zone的数据视作不安全数据,把来自内网zone的数据视作可信数据等等。那么对于公网的数据,我们可能会全部拦截;而对于内网的数据,可以全部放行。类似的操作都是基于不同的zone进行的。
1.2:对于iptables的表和链,我理解,表是由多个不同类型的链组成的。每个链对一个端口、协议做一系列的操作,比如可以对来自80端口的http请求和udp请求做放行。然后一个表中会有多种不同类型的链。
而iptables的不同的表,各有各的职责。如filter表主要过滤数据包、nat表主要做网络地址的转换、mangle表主要修改数据包的服务类型和TTL等、raw表主要决定数据包是否被跟踪等。
第二:思路不同。
firewalld默认是zone内组织,特定说明的才会被放行;iptables默认是表内放行,只有特定说明的才会被拦截。
第三:如何选择。
如果服务器的应用场景简单,或者服务器中只安装或启动了一两种服务,那么完全可以使用iptables防火墙,这样配置简单,我们只需要对某个端口做一些特殊操作即可。
而如果服务器上的服务众多,那么我们需要提前对服务器的网络、网卡的使用做规划,同时这时使用firewalld可能会更好一些,因为这样一旦规划完毕,那么只需要把同一类的服务归入到对应的zone中,就可以省掉了后续的各种配置。
说点技术的东西
iptables相关操作
# 查看iptables状态
[root@docker01 ~]# service iptables status
#停止iptables
[root@docker01 ~]# systemctl stop firewalld.service
#禁用iptables
[root@docker01 ~]# systemctl disable firewalld.service
firewalld相关操作
#查看firewalld状态
[root@docker01 ~]# systemctl status firewalld.service
#关闭firewalld
[root@docker01 ~]# systemctl stop firewalld.service
#永久关闭firewalld
[root@docker01 ~]# systemctl disable firewalld.service
关闭selinux
# 查看状态
[root@docker01 ~]# getenforce
Disabled
[root@docker01 ~]# /usr/sbin/sestatus -v
SELinux status: disabled
# 永久关闭,设置SELINUX=disabled
[root@docker01 ~]# vim /etc/selinux/config
SELINUX=disabled
# 最后务必要重启!!!