Firewalld基础
firewalld是centos7的一大特性,最大的好处有两个: 支持动态更新,不用重启服务;另外firewalld增加了"zone"概念
firewalld 将所有incoming 流量划分成zone,每个zone都有自己的一套规则
firewalld 在判断incoming 流量使用那一个zone,使用以下规则
1.如果incoming packets 的源地址与zone 的某一个源规则相匹配,则使用该区域
2.如果incoming packets 的接口与zone的filter设置相匹配,则使用该区域
3.否则使用 default zone. 如果没有配置, default zone 为public
trusted // 允许所有incoming/outgoing taiffic(允许多有进站和出站的流量)
home // 除非与outgoing taiffic 相关,或与ssh,mdns,ipp-client,samba-client,dhcpv6-client这些预定义服务匹配,否则拒绝incoming taiffic
internal // 开始时与home zone相同
work // 除非与outgoing taiffic 相关,或与ssh,ipp-client,dhcpv6-client 这些预定义服务匹配,否则拒绝incoming taiffic
public //除非与outgoing taiffic 相关,或与ssh,dhcpv6-client这些预定义服务匹配否则拒绝incoming taiffic(新添加的网络接口默认为此zone)
external //除非与outgoing taiffic 相关,或与ssh预定义服务匹配,否则拒绝incoming taiffic .将通过此zone转发的ipv4 outgoing taiffic 的源地址伪装成outgoing 网络接口的ipv4地址
dmz //除非与ouggoing taiffic 相关,或与ssh 预定义服务匹配,否则拒绝incoming taiffic
block //除非与outgoing taiffic 相关,否则拒绝所有incoming taiffic
drop //除非与outgoing taiffic相关,否则丢弃所有incoming taiffic(不产生包含ICMP错误的响应)
Firewalld配置
使用三种方式来管理firewalld
1.使用命令行工具 firewall-cmd
2.使用图形工具 firewall-config
3.使用 /etc/firewalld/中的配置文件(不建议直接编辑配置文件,但使用配置管理工具时,配置配置会很有用)
使用 firewall-cmd ,几乎所有命令都对当前状态生效(除非指定 -permanent),如果没有使用 --zone, 使用默认zone
配置防火墙,通常会是使用 --permanent 配置所有更改,然后使用 firewall-cmd --reload 激活这些更改,
测试可能有危险的新规则时,可省略 --permanent 并添加 --timeout=添加时间 一定时间后会自动删除某个规则,防止意外锁定某个系统
firewall-cmd --get-default-zone //查看当前默认zone
列出所有可用区域
firewall-cmd --get-zones
work drop internal external trust home dmz public block
firewall-cmd --set-default-zone=work //设置默认zone
success
列出所有预定义服务
firewall-cmd --get-services
列出当前正在使用的zone以及接口的信息
firewall-cmd --get-active-zones
public
interfaces:eth0
列出zone下所有已配置interface,source,service,port
firewall-cmd --list-all 当前所有zone
firewall-cmd --list-all-zones
firewall-cmd --list-all --zone=work
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --list-all
firewall-cmd --list-all
firewall-cmd --reload
firewall-cmd --add-port=3000/tcp
firewall-cmd --add-source=192.168.251.0/24
firewall-cmd --add-protocol=tcp
firewall-cmd --remove-protocol=tcp
firewalld富规则
man 5 firewall.richlanguage
firewalld 的rich rule 提供了一种表达性语言,通过这种语言可以表达firewalld基本语法中为涵盖的自定义防火墙规则。
例如:仅允许某个特定ip(而非通过某个zone路由的所有ip地址)连接到服务
rule
source
destination
service|port|protocol|icmp-block|masquerade|forward-port|source-port
log
audit
accept|reject|drop|mark
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.251.105 port port=8080 prptocol=tcp accept'
firewall-cmd --get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect routeradvertisement router-solicitation source-quench time-exceeded timestamp-reply timestamprequest
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.251.105 icmp-block name="echo-request"'
firewall-cmd --list-rich-rules
Allow all IPv4 traffic from host 192.168.0.14.
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'
Deny IPv4 traffic over TCP from host 192.168.1.10 to port 22.
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'
Allow IPv4 traffic over TCP from host 10.1.0.3 to port 80, and forward it locally to port
6532.
sudo 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'
Forward all IPv4 traffic on port 80 to port 8080 on host 172.31.4.2 (masquerade should beactive on the zone).
sudo 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'
firewalld 伪装和端口转发
vlnx251106 vlnx251105 vlnx251104
192.168.251.106 192.168.251.105 172.17.1.104 172.16.1.104
client gateway internet
server
ip route add default via 192.168.251.105
echo 1 > /proc/sys/net/ipv4/ip_forward
ip route add default via 172.16.1.105firewall-cmd --add-masquerade
or
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.251.0/24 masquerade'
vlnx251106 vlnx251105 vlnx251104
192.168.251.106 192.168.251.105 172.17.1.104 172.16.1.104
internal webserver gateway client
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.251.106
firewall-cmd --add-rich-rule='rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.251.106
firewalld是centos7的一大特性,最大的好处有两个: 支持动态更新,不用重启服务;另外firewalld增加了"zone"概念
firewalld 将所有incoming 流量划分成zone,每个zone都有自己的一套规则
firewalld 在判断incoming 流量使用那一个zone,使用以下规则
1.如果incoming packets 的源地址与zone 的某一个源规则相匹配,则使用该区域
2.如果incoming packets 的接口与zone的filter设置相匹配,则使用该区域
3.否则使用 default zone. 如果没有配置, default zone 为public
trusted // 允许所有incoming/outgoing taiffic(允许多有进站和出站的流量)
home // 除非与outgoing taiffic 相关,或与ssh,mdns,ipp-client,samba-client,dhcpv6-client这些预定义服务匹配,否则拒绝incoming taiffic
internal // 开始时与home zone相同
work // 除非与outgoing taiffic 相关,或与ssh,ipp-client,dhcpv6-client 这些预定义服务匹配,否则拒绝incoming taiffic
public //除非与outgoing taiffic 相关,或与ssh,dhcpv6-client这些预定义服务匹配否则拒绝incoming taiffic(新添加的网络接口默认为此zone)
external //除非与outgoing taiffic 相关,或与ssh预定义服务匹配,否则拒绝incoming taiffic .将通过此zone转发的ipv4 outgoing taiffic 的源地址伪装成outgoing 网络接口的ipv4地址
dmz //除非与ouggoing taiffic 相关,或与ssh 预定义服务匹配,否则拒绝incoming taiffic
block //除非与outgoing taiffic 相关,否则拒绝所有incoming taiffic
drop //除非与outgoing taiffic相关,否则丢弃所有incoming taiffic(不产生包含ICMP错误的响应)
Firewalld配置
使用三种方式来管理firewalld
1.使用命令行工具 firewall-cmd
2.使用图形工具 firewall-config
3.使用 /etc/firewalld/中的配置文件(不建议直接编辑配置文件,但使用配置管理工具时,配置配置会很有用)
使用 firewall-cmd ,几乎所有命令都对当前状态生效(除非指定 -permanent),如果没有使用 --zone, 使用默认zone
配置防火墙,通常会是使用 --permanent 配置所有更改,然后使用 firewall-cmd --reload 激活这些更改,
测试可能有危险的新规则时,可省略 --permanent 并添加 --timeout=添加时间 一定时间后会自动删除某个规则,防止意外锁定某个系统
firewall-cmd --get-default-zone //查看当前默认zone
列出所有可用区域
firewall-cmd --get-zones
work drop internal external trust home dmz public block
firewall-cmd --set-default-zone=work //设置默认zone
success
列出所有预定义服务
firewall-cmd --get-services
列出当前正在使用的zone以及接口的信息
firewall-cmd --get-active-zones
public
interfaces:eth0
列出zone下所有已配置interface,source,service,port
firewall-cmd --list-all 当前所有zone
firewall-cmd --list-all-zones
firewall-cmd --list-all --zone=work
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --list-all
firewall-cmd --list-all
firewall-cmd --reload
firewall-cmd --add-port=3000/tcp
firewall-cmd --add-source=192.168.251.0/24
firewall-cmd --add-protocol=tcp
firewall-cmd --remove-protocol=tcp
firewalld富规则
man 5 firewall.richlanguage
firewalld 的rich rule 提供了一种表达性语言,通过这种语言可以表达firewalld基本语法中为涵盖的自定义防火墙规则。
例如:仅允许某个特定ip(而非通过某个zone路由的所有ip地址)连接到服务
rule
source
destination
service|port|protocol|icmp-block|masquerade|forward-port|source-port
log
audit
accept|reject|drop|mark
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.251.105 port port=8080 prptocol=tcp accept'
firewall-cmd --get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect routeradvertisement router-solicitation source-quench time-exceeded timestamp-reply timestamprequest
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.251.105 icmp-block name="echo-request"'
firewall-cmd --list-rich-rules
Allow all IPv4 traffic from host 192.168.0.14.
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'
Deny IPv4 traffic over TCP from host 192.168.1.10 to port 22.
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'
Allow IPv4 traffic over TCP from host 10.1.0.3 to port 80, and forward it locally to port
6532.
sudo 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'
Forward all IPv4 traffic on port 80 to port 8080 on host 172.31.4.2 (masquerade should beactive on the zone).
sudo 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'
firewalld 伪装和端口转发
vlnx251106 vlnx251105 vlnx251104
192.168.251.106 192.168.251.105 172.17.1.104 172.16.1.104
client gateway internet
server
ip route add default via 192.168.251.105
echo 1 > /proc/sys/net/ipv4/ip_forward
ip route add default via 172.16.1.105firewall-cmd --add-masquerade
or
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.251.0/24 masquerade'
vlnx251106 vlnx251105 vlnx251104
192.168.251.106 192.168.251.105 172.17.1.104 172.16.1.104
internal webserver gateway client
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.251.106
firewall-cmd --add-rich-rule='rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.251.106