FirewallD 是 iptables 的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面,在大多数 Linux 发行版的仓库中都有。与直接控制 iptables 相比,使用 FirewallD 有两个主要区别:
- FirewallD 使用区域和服务而不是链式规则。
- 它动态管理规则集,允许更新规则而不破坏现有会话和连接
注意:FirewallD 是 iptables 的一个封装,可以让你更容易地管理 iptables 规则 - 它并不是 iptables 的替代品。虽然 iptables 命令仍可用于 FirewallD,但建议使用 FirewallD 时仅使用 FirewallD 命令。
这篇我们主要讲firewalld服务
系统提供了图像化的配置工具firewall-config、
提供命令行客户端firewall-cmd,
用于配置 firewalld永久性或非永久性运行时间的改变
一.概述
1.启动服务,并在系统引导时启动该服务
2.配置文件
firewalld将配置储存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种XML文件里,除非是非常特殊的配置,你不必处理它们,而应该使用
firewall-cmd
。
/usr/lib/FirewallD
下保存默认配置,如默认区域和公用服务。 避免修改它们,因为每次 firewall 软件包更新时都会覆盖这些文件。/etc/firewalld
下保存系统配置文件。 这些文件将覆盖默认配置。
3.图形管理
-
二.使用图形管理firewalld
- 0.准备
- (1)打开图形化管理火墙界面,并打入后台不影响终端使用
- (2)动态监控配置火墙时的动态情况
- 1.临时更改:在runtime下是临时生效,并且是立刻生效
- (1)可以看到初始化支持的服务有dhcpv6-client ssh
- (2)在public区域下勾选http服务,可以看到已经立即生效
- 2.永久更改:permanent下,更改配置文件,重新加载后永久生效
- (1)在public区域下勾选http服务,可以看到并没有生效
- (2)重新加载
- (3)加载后,可以看到已经生效
- 3.更改默认指定区域:修改默认区域
- (1)一般情况下,默认的区域是public
- (2)选择Change Default Zone
- (3)以选择trusted为例,点击ok
- (4)可以看到默认区域已经是trusted
-
三.命令行参数解析
-
source
指定源地址,可以是一个ipv4/ipv6的地址或网段,不支持使用主机名。
-
destination
-
指定目的地址,用法和source相同。
-
service
-
服务名称是 f irewalld 提供的其中一种服务。要获得被支持的服务的列表,输入以下命令:
-
firewall-cmd --get-services
-
命令为以下形式: service name=service_name
-
port
-
端口既可以是一个独立端口数字,又或者端口范围,例如,5060-5062。协议可以指定为 tcp 或 udp 。命令为以下形式: port port=number_or_range protocol=protocol
-
protocol
-
协议值可以是一个协议 ID 数字,或者一个协议名。预知可用协议,请查阅 /etc/protocols。命令为以下形式: protocol value=protocol_name_or_ID
-
icmp-block
-
用这个命令阻绝一个或多个ICMP类型。IC MP 类型是 firewalld支持的ICMP类型之一。要获得被支持的ICMP类列表,输入以下命令: firewall-cmd --get-icmptypes
-
icmp-block在内部使用 reject 动作,因此不允许指定动作。命令为以下形式: icmp-block name=icmptype_name
-
masquerade
-
打开规则里的 IP 伪装。用源地址而不是目的地址来把伪装限制在这个区域内。不允许指定动作。
-
forward-port
-
从一个带有指定为 tcp 或 udp 协议的本地端口转发数据包到另一个本地端口,或另一台机器,或另一台机器上的另一个端口。port 和 to-port 可以是一个单独的端口数字,或一个端口范围。而目的地址是一个简单的 IP 地址。不允许指定动作,命令使用内部动作
-
accept
-
命令为以下形式: forward-port port=number_or_range protocol=protocol /
-
-
to-port=number_or_range to-addr=address
-
log
-
注册含有内核记录的新连接请求到规则中,比如系统记录。你可以定义一个前缀文本,
-
记录等级可以是 emerg、alert、crit、error、warning、notice、info 或者 debug 中的一个。命令形式: log [prefix=prefix text] [level=log level] limit value=rate/duration (等级用正的自然数 [1, ..] 表达,持续时间的单位为 s 、 m 、 h 、 d 。 s 表示秒, m 表示 分钟, h表示小时, d 表示天。最大限定值是 1/d ,意为每天最多有一条日志进入。)
-
audit
-
审核为发送到 aud i td 服务的审核记录来注册提供了另一种方法。审核类型可以是 ACCEPT、REJECT或DROP中的一种,但不能在 audit命令后指定,因为审核类型将会从规 则动作中自动收集。审核不包含自身参数,但可以选择性地增加限制。审核的使用是可选 择的。选择 accept 所有新的连接请求都会被允许。选择 reject ,连接将被拒绝,连接来源 将接到一个拒绝信息。拒绝的类型可以被设定为使用另一种值。选择 drop , 所有数据 包会被丢弃,并且不会向来源地发送任何信息
-
四.使用命令行接口配置防火墙
- 1.基本配置
-
查看防火墙管理的设备
[root@route ~]# firewall-cmd --get-active-zones
查看防火墙生效的区域
[root@route ~]# firewall-cmd --get-default-zone
查看防火墙所有的区域
[root@route ~]# firewall-cmd --get-zones
列出关于public区域的服务设置
[root@route ~]# firewall-cmd --zone=public --list-all
列出关于trusted区域的服务设置
[root@route ~]# firewall-cmd --zone=trusted --list-all
列出可使用的服务
[root@route ~]# firewall-cmd --get-services
修改默认区域为trusted
[root@route ~]# firewall-cmd --set-default-zone=trusted
修改默认区域为public
[root@route ~]# firewall-cmd --set-default-zone=public
- 2.高级配置
-
临时添加服务(默认的区域)
[root@route ~]# firewall-cmd --add-service=https
临时删除服务(默认的区域)
[root@route ~]# firewall-cmd --remove-service=https
永久添加服务(默认的区域)
[root@route ~]# firewall-cmd --add-service=https --permanent
永久删除服务(默认的区域)
[root@route ~]# firewall-cmd --remove-service=https --permanent
临时添加端口(默认的区域)
[root@route ~]# firewall-cmd --add-port=8080/tcp
临时删除端口(默认的区域)
[root@route ~]# firewall-cmd --remove-port=8080/tcp
永久添加端口(默认的区域)
[root@route ~]# firewall-cmd --add-port=8080/tcp --permanent
永久删除端口(默认的区域)
[root@route ~]# firewall-cmd --remove-port=8080/tcp --permanent
添加接口(默认的区域)
[root@route ~]# firewall-cmd --add-interface=eth1
删除接口(默认的区域)
[root@route ~]# firewall-cmd --remove-interface=eth1
临时拒绝主机172.25.254.99的所有网络连接
[root@route ~]# firewall-cmd --add-source=172.25.254.99 --zone=block
永久拒绝主机172.25.254.99的所有网络连接
[root@route ~]# firewall-cmd --add-source=172.25.254.99 --zone=block --permanent
不中断连接,重启防火墙策略
[root@route ~]# firewall-cmd --reload
中断连接,重启防火墙策略
[root@route ~]# firewall-cmd --complete-reload
关闭上述
[root@route ~]# firewall-cmd --remove-source=172.25.254.99 --zone=block
[root@route ~]# firewall-cmd --remove-source=172.25.254.99 --zone=block --permanent
-
服务端:临时只拒绝主机99到本机的ssh服务
-
[root@route ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.99 -p tcp --dport 22 -j REJECT
-
服务端:恢复主机99到本主机的ssh服务
-
方式一:[root@route ~]# firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.99 -p tcp --dport 22 -j REJECT
-
方式二:[root@route ~]# systemctl restart firewalld
-
服务端:临时只允许主机99使用lftp服务
-
[root@route ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.99 -p tcp --dport 21 -j REJECT
- 3.临时:直接将eth1从原来的区域转到trusted这个区域
- 检验eth1是否在trusted这个区域写入配置
- [root@router-server zones]# vim trusted.xml
- 4.永久:直接将eth1从原来的域转到trusted这个区域
- 检验eth1已经在trusted这个区域
- [root@router-server zones]# vim trusted.xml
- 重启服务i使永久配置生效
- [root@router-server zones]# systemctl restart firewalld
- 确认两块网卡的IP 再次进行测试
- [root@router-server zones]# yum install links -y
- [root@router-server yum.repos.d]# links http://172.25.99.1
[root@router-server yum.repos.d]# links http://172.25.254.100
-
五. 伪装和端口转发
-
地址伪装:
将172.25.99.100主机使用sshd访问172.25.254.100主机时访问的是172.25.254.14主机
-
思想:
1、需要一个双网卡的主机充当路由器,此路由器必须与172.25.99.100和172.25.254.99可以进行通信
2、172.25.99.100主机将可以与他进行通信的路由器的端口设置成网关(172.25.99.1)
-
路由
-
-
[root@router-server yum.repos.d]# firewall-cmd --add-masquerade ##添加火墙伪装功能
-
[root@router-server yum.repos.d]# firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.14 ##将连接到本机的主机转接到14主机
- 测试