一、firewalld
firewalld有规则两种状态
- 运行时(runtime):修改规则马上生效,但是临时生效
- 持久配置(permanent): 修改后需要重载才会生效
- firewall-cmd --permanent RULE
- firewall-cmd --reload
1、firewalld的预定义区域说明
区域 | 说明 |
---|---|
trusted(信任区域) | 可接收所有的网络连接 |
public(公共区域) | 允许指定的进入链接 |
work(工作区域) | 允许受信任的计算机被限制的进入链接 |
home(家庭区域) | 同work,如果流量和ssh,dhcpv6-client等服务相关,则允许 |
internal(内部区域) | 同work,范围针对所有互联网用户 |
external(外部区域) | 同public,处理伪装的进入链接,一般用于路由转发 |
dmz(隔离区域也称为军事区域) | 允许受限制的进入链接 |
block(限制区域) | 拒绝所有外部发起的链接,允许内部发起的链接 |
drop(丢弃区域) | 丢弃所有进入的包,而不给出任何回应 |
2、firewall的状态
# firewall-cmd --state # 查看防火墙的状态
# firewall-cmd --reload # 重新加载防火墙,中断用户的连接,将临时配置清掉,加载配置文件中的永久配置
# firewall-cmd --complete-reload # 重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)
# firewall-cmd --panic-on # 紧急模式,强制关闭所有网络连接,--panic-off是关闭紧急模式
# firewall-cmd --panic-off # 取消应急模式,但需要重启firewalld后才可以远程ssh
# firewall-cmd --query-panic # 查看是否为应急模式
3、firewall命令
1、基本命令
查看firewalld服务当前所使用的区域
# firewall-cmd --get-default-zone
public
显示默认区域的所有规则
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client https ssh
ports: 8080-8081/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
查询ens33网卡在firewalld服务中的区域
# firewall-cmd --get-zone-of-interface=ens33
public
将网络接口ens33对应区域更改为internal区域
# firewall-cmd --zone=public --change-interface=ens33
success
# firewall-cmd --zone=internal --list-interfaces
# firewall-cmd --get-zone-of-interface=ens33
public
显示所有激活区域
# firewall-cmd --get-active-zones
public
interfaces: ens33
2、服务管理
显示默认区域内允许访问的所有服务
# firewall-cmd --list-services
dhcpv6-client ssh
设置默认区域允许访问服务
# firewall-cmd --add-service=<service name>
success
# firewall-cmd --remove-service=<service name> #移除服务
查询public区域是否允许请求SSH和HTTPS协议的流量
# firewall-cmd --zone=public --query-service=ssh
yes
# firewall-cmd --zone=public --query-service=https
no
把firewalld服务中请求HTTPS协议的流量设置为永久允许,并立即生效
# firewall-cmd --zone=public --add-service=https
success
# firewall-cmd --zone=public --add-service=https --permanent
success
# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
禁止ping
# firewall-cmd --add-icmp-block=echo-request --zone=dmz --permanent
success
3、端口管理
在internal区域打开443/TCP 端口
# firewall-cmd --zone=internal --add-port=443/tcp
success
把在firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅限当前生效
# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
# firewall-cmd --zone=public --list-ports
8080-8081/tcp
把原本访问本机888端口的流量转发到22端口,要且求长期有效且立即生效
# firewall-cmd --zone=public --add-forward-port=port=888:proto=tcp:toport=22 --permanent
success
4、协议管理
# firewall-cmd --add-protocol=<protocol> # 允许协议 (例:icmp,即允许ping)
# firewall-cmd --remove-protocol=<protocol> # 取消协议
# firewall-cmd --list-protocols # 查看允许的协议
5、IP管理
允许指定ip的所有流量
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" accept" # 表示允许来自192.168.2.1的所有流量
允许指定ip的指定协议
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" protocol value="<protocol>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" protocol value="icmp" accept" # 允许192.168.2.208主机的icmp协议,即允许192.168.2.208主机ping
允许指定ip访问指定服务
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" service name="<service name>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="ssh" accept" # 允许192.168.2.208主机访问ssh服务
允许指定ip访问指定端口
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" port protocol="<port protocol>" port="<port>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" port protocol="tcp" port="22" accept" # 允许192.168.2.1主机访问22端口
将指定ip改为网段
命令都支持 source address
设置为网段,即这个网段的ip都是适配这个规则:
例如:
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" accept"
表示允许192.168.2.0/24网段的主机访问22端口 。
禁止指定ip/网段
将 accept
设置为 reject
表示拒绝,设置为 drop
表示直接丢弃(会返回timeout连接超时)
例如:
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" reject"
表示禁止192.168.2.0/24网段的主机访问22端口 。
4、富规则
rule [family="<rule family>"]
[ source address="<address>" [invert="True"] ]
[ destination address="<address>" [invert="True"] ]
[ <element> ]
[ log [prefix="<prefix text>"] [level="<log level>"] [limit value="rate/
duration"] ]
[ audit ]
[ accept|reject|drop ]
参数 | 解释 |
---|---|
source | 限制源IP地址,源地址可以是—个IPv4,IPv6地址或者一个网络地址段 |
destination | 限制目标地址,目标地址使用跟源地址相同的语法 |
log | 注册有内核曰志的连接请求到规则中。如系统曰志 |
audit | 审核,审核类型可以是accept, reject或drop中的一种 |
accept reject drop | 指定accept时所有新的连接请求都将被允许。指定reject时连接将被拒绝,发起端将接到—个拒绝信息。指定drop时所有数据包会被丢弃并且不会向发起端发送任何信息 |
element | 要素 |
service | 服务名称。命令格式为service name = service_name |
port | 端口。命令格式为port port = number _or _range protocoI = protocoI |
protocol | 协议。命令格式为 protocol value = protocol_name_or _ID |
icmp-block | 阻断—个或多个 ICMP类型。命令格式为icmp-block name = icmptype_name |
masquerade | 规则里的IP伪装。 |
forward-port | 将指定的TCP或UDP协议的数据包转发到本机的其他端口。 |
评论区