一步一步搞懂Linux上firewalld防火墙的使用

目录

1. 什么是firewalld,与iptables之间的关系

2. 安装与启动firewalld

3. firewalld功能介绍

4. firewalld常用命令

5. 简单实例,使用firewalld开启nginx 80端口


1. 什么是firewalld,与iptables之间的关系

  • firewalld是iptables的前端控制器,firewalld提供一个daemon和service,底层使用iptables;
  • firewalld是基于内核Netfilter的;
  • firewalld是动态防火墙,策略变更时不需要重载所有配置,只需要将变更部分加载到iptables中,不丢失现有链接;
  • iptables是静态防火墙,任何策略变更时都不要重载(reload)所有配置,会丢失现有链接;

2. 安装与启动firewalld

安装:

yum -y install firewalld firewall-config

管理:

systemctl enable firewalld        //设置开机自启
systemctl start firewalld         //启动firewalld
systemctl status firewalld        //查看firewalld运行状态

安装完了后应该会有一个防火墙图形界面的管理工具:

3. firewalld功能介绍

我们来打开这个软件进去看看它的界面,以此来了解一下它的功能;

首先左边这块有一栏区域,这些区域定义了一些策略的模板。比如block,加入这个区域的端口或者服务,是被防火墙拦截的。

1. 具体区域的介绍

Zone 名称 Zone 描述
block 所有进入的网络连接都会被拒绝。对于 IPV4,回复 icmp-host-prohibited 消息。对于 IPV6,回复 icmp6-adm-prohibited 消息。只有由内部发起的网络连接可以通行。
dmz 对于在非军事区域的服务器,外部网络可以在受限制的情况下进入内网,只有特定的网络连接请求被接受。
drop 所有的进入的网络包都会被丢掉,并且没有任何的回应。只有向发起的连接请求可以被放行。
external 用于开始伪装的外部网络,特别是作为路由器。任务外部的网络会损坏你的计算机,只有特定的网络连接请求被接受。
home 在家使用,信任网络上的大多数计算机。只有特定的网络连接请求被接受。
internal 在内部网络使用,信任当前网络下其他的计算机。只有特定的网络连接请求被接受。
public 在公共网络使用,不信任网络上的其他计算机。只有特定的网络连接请求被接受。
trusted 所有的网络连接都会被接受。
work 在工作网络中使用,信任网络上的其他计算机。只有特定的网络连接请求被接受

 

2. 策略制定的规则

如图,我们可以根据服务的类型,端口号,协议号,源端口,接口,来源等等来设定防火墙的规则;

 

3. 策略的有效期

运行时:本次运行有效,防火墙重启后失效;

永久:永久有效;

用命令怎么实现呢?我们假设现在要添加smtp服务到public区域中:

firewall-cmd -zone=public -add-service=smtp                //运行时有效,重启失效
firewall-cmd -permanent -zone=public -add-service=stmp     //永久有效,重启后开始生效
firewall-cmd -runtime-to-permanent                         //将运行时配置转为永久配置

4. firewalld常用命令

firewalld-cmd --version        //查看firewalld版本
firewalld-cmd --help           //查看firewalld用法
man firewalld-cmd              //查看firewalld用法

systemctl status firewalld     //查看firewalld状态
firewalld-cmd --reload         //重载firewalld,当前已经生效的连接不中断
firewalld-cmd --compulete-reload    //重载firewalld,当前连接中断

firewalld-cmd --get-services   //列出所有预设服务,如上图的“3”
firewalld-cmd --list-services  //列出当前正在生效的服务
firewalld-cmd --permanent --zone=public --add-service=smtp      //在public区域中的永久配置中启用smtp服务
firewalld-cmd --permanent --zone=public --remove-service-smtp   //在public区域中的永久配置中移除smtp服务

firewalld-cmd --zone=public --list-ports    //列出public区域中已经启用的端口号
firewalld-cmd --permanent --zone=public --add-port=8080/tcp     //在public区域中的永久配置中启用8080端口
firewalld-cmd --permanent --zone=public --remove-port=8080/tcp  //在public区域中的永久配置中移除8080端口

firewalld-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=90    //将本机的80端口流量转发到90端口,区域为public

//将本机80端口的流量转发到192.168.1.1这台主机的8080端口上
firewall-cmd --zone=public --add-masquerade       //不同服务器端口转发,要先开启 masquerade
firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.1

firewall-cmd --get-zones                          //查看所有可用区域
firewall-cmd --get-active-zones                   //查看当前活动的区域
firewall-cmd --list-all-zones                     //列出所有区域的所有配置
firewall-cmd --zone=work --list-all               //列出指定区域(如:work区域)的所有配置
firewall-cmd --get-default-zone                   //查看默认区域
firewall-cmd --set-default-zone=public            //设定默认区域

//设定某一网段为内网段(然后可以创建策略为只允许内网访问呀)
firewall-cmd --permanent --zone=internal --add-source=192.168.122.0/24
firewall-cmd --permanent --zone=internal --remove-source=192.168.122.0/24    //移除

富规则:

firewall-cmd –list-rich-rules         //列出所有规则

复杂规则配置案例:

//允许来自主机 192.168.0.14 的所有 IPv4 流量
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'

//拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject' 

//允许来自主机 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,并将流量转发到 6532 端口上
firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532' 

//将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在区域上激活 masquerade)
firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2' 

//允许192.168.122.0/24主机所有连接
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0" accept' 

//每分钟允许2个新连接访问ftp服务
firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept' 

//同意新的IPv4和IPv6连接FTP ,并使用审核每分钟登录一次
firewall-cmd --add-rich-rule='rule service name=ftp log limit value="1/m" audit accept' 

//允许来自1192.168.122.0/24地址的新IPv4连接连接TFTP服务,并且每分钟记录一次
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0/24" service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept' 

//丢弃所有icmp包
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop' 

//当使用source和destination指定地址时,必须有family参数指定ipv4或ipv6。如果指定超时,规则将在指定的秒数内被激活,并在之后被自动移除
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 reject' --timeout=10 

//拒绝所有来自2001:db8::/64子网的主机访问dns服务,并且每小时只审核记录1次日志
firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300 

//允许192.168.122.0/24网段中的主机访问ftp服务
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 service name=ftp accept' 

//转发来自ipv6地址1:2:3:4:6::TCP端口4011,到1:2:3:4:7的TCP端口4012
firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:4:6::" forward-portto-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"' 

5. 简单实例,使用firewalld开启nginx 80端口

说了那么多理论和命令,我们小小的实验一下:

1. 现在我没有在防火墙上开启任何端口,到另外一台电脑上访问nginx试试

2. 我们到防火墙上开启80端口,区域呢,直接放到public区域,永久开启

开启后别忘了重载防火墙使其生效

3. 我们在用另一台电脑浏览器访问一下试试

4. 我们再打开图形界面的防火墙看看

 

 

欧了,以后有什么使用感受再更。

命令参考文章:https://blog.csdn.net/xiazichenxi/article/details/80169927

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章