一、firewall
1.firewalld 和 iptables service 之间最本质的不同
- iptables service 在 /etc/sysconfig/iptables 中储存配置,而 firewalld 将配置储存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件里。
- 使 用 iptables service 每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables 里读取所有新的规则,然而使用 firewalld 却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld 可以在运行时间内,改变设置而不丢失现行连接。
- firewall使用的是区域的概念:没有iptables的四表五链。
2.区域:
| 区域 | 说明 |
|---|---|
| trusted (信任区域) | 可接收所有的网络连接,如果规则都没有匹配上,则放行 |
| public (公共区域) | 规则匹配成功,则放行,或与 ssh 或 dhcpv6-client 预定义服务匹配,否则拒绝流量传入, 在公共区域内,不能相信网络内的其他计算机不会对计算机造成危害,只能接收经过选择的连接。 并且,该区域是新添加网络接口的默认区域 |
| work (工作区域) | 规则匹配成功,则放行,或与 ssh、ipp-client、dhcpv6-client 预定义服务匹配,否则拒绝流量传入,用于工作区。 相信网络内的其他计算机不会危害计算机,仅接收经过选择的连接 |
| home (家庭区域) | 规则匹配成功,则放行,或与 ssh、ipp-client、mdns、samba-client、dhcpv6-client预定义服务匹配, 否则拒绝流量传入,用于家庭网络。 信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接 |
| internal (内部区域) | 规则匹配成功,则放行,或与 ssh、ipp-client、mdns、samba-client、dhcpv6-client预定义服务匹配, 否则拒绝流量传入,用于内部网络。 信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接 |
| external (外部区域) | 规则匹配成功,则放行,或与 ssh 预定义服务匹配,否则拒绝流量传入。 通过此区域转发的 IPv4 传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络 |
| dmz (隔离区域也称为非军事区域) | 除非与传出的流量相关,或与 ssh 预定义服务匹配,否则拒绝流量传入 |
| block (限制区域) | 规则匹配成功,则放行,否则拒绝所有传入流量 |
| drop (丢弃区域) | 规则匹配成功,则放行,否则丢弃所有传入流量, 并且不产生包含 ICMP(Internet Control Message Protocol,互联网控制报文协议)的错误响应 |
| 选项 | 说明 |
|---|---|
--get-default-zone | 显示网络连接或接口的默认区域 |
--set-default-zone=<zone> | 设置网络连接或接口的默认区域 |
--get-active-zones | 显示已激活的所有区域 |
--get-zone-of-interface=<interface> | 显示指定接口绑定的区域 |
--zone=<zone> --add-interface=<interface> | 为指定接口绑定区域 |
--zone=<zone> --change-interface=<interface> | 为指定的区域更改绑定的网络接口 |
--zone=<zone> --remove-interface=<interface> | 为指定的区域删除绑定的网络接口 |
--list-all-zones | 显示所有区域及其规则 |
[--zone=<zone>] --list-all | 显示所有指定区域的所有规则,省略--zone=<zone>时表示仅对默认区域操作 |
3.区域查看:
1.关闭iptables或者清空规则systemctl stop iptables--------------------------------------iptables -F 清空filteriptables -t nat -F 清空nat表- ``
2。开启firewalld服务systemctl start firewalld- ``
3. 查看所有的区域firewall-cmd --get-zones #查看所有区域
4、查看当前网卡所在区域:
firewall-cmd --get-active-zones #查看区域
5、查看默认区域设置:
firewall-cmd --get-default-zone
6、查看所有区域规则:
-
firewall-cmd --list-all-zones -
block -
target: %%REJECT%% -
icmp-block-inversion: no -
interfaces: -
sources: -
services: -
ports: -
protocols: -
masquerade: no -
forward-ports: -
source-ports: -
icmp-blocks: -
rich rules: -
``
-
``
-
dmz -
target: default -
icmp-block-inversion: no -
interfaces: -
sources: -
services: ssh -
ports: -
protocols: -
masquerade: no -
forward-ports: -
source-ports: -
icmp-blocks: -
rich rules: -
``
-
``
-
drop -
target: DROP -
icmp-block-inversion: no -
interfaces: -
sources: -
services: -
ports: -
protocols: -
masquerade: no -
forward-ports: -
source-ports: -
icmp-blocks: -
rich rules: -
``
-
``
-
external -
target: default -
icmp-block-inversion: no -
interfaces: -
sources: -
services: ssh -
ports: -
protocols: -
masquerade: yes -
forward-ports: -
source-ports: -
icmp-blocks: -
rich rules: -
``
-
``
-
home -
target: default -
icmp-block-inversion: no -
interfaces: -
sources: -
services: dhcpv6-client mdns samba-client ssh -
ports: -
protocols: -
masquerade: no -
forward-ports: -
source-ports: -
icmp-blocks: -
rich rules: -
``
-
``
-
internal -
target: default -
icmp-block-inversion: no -
interfaces: -
sources: -
services: dhcpv6-client mdns samba-client ssh -
ports: -
protocols: -
masquerade: no -
forward-ports: -
source-ports: -
icmp-blocks: -
rich rules: -
``
-
``
-
public (active) -
target: default -
icmp-block-inversion: no -
interfaces: ens33 ens37 -
sources: -
services: dhcpv6-client ssh -
ports: -
protocols: -
masquerade: no -
forward-ports: -
source-ports: -
icmp-blocks: -
rich rules: -
``
-
``
-
trusted -
target: ACCEPT -
icmp-block-inversion: no -
interfaces: -
sources: -
services: -
ports: -
protocols: -
masquerade: no -
forward-ports: -
source-ports: -
icmp-blocks: -
rich rules: -
``
-
``
-
work -
target: default -
icmp-block-inversion: no -
interfaces: -
sources: -
services: dhcpv6-client ssh -
ports: -
protocols: -
masquerade: no -
forward-ports: -
source-ports: -
icmp-blocks: -
rich rules:
7、修改区域:
firewall-cmd --set-default-zone=区域
8、端口添加
firewall-cmd --list-ports 显示当前已经开放的端口- ``
firewall-cmd --add-port=端口号/协议firewall-cmd --add-port=80/tcp- ``
firewall-cmd --list-all #显示当前区域的所有规则- ``
firewall-cmd --remove-port=端口号/协议 #移除已开放的端口
9、服务添加
firewall-cmd --list-services #显示已允许服务名称firewall-cmd --get-services #查看所有的服务名称- ``
firewall-cmd --add-service=服务名 #添加服务firewall-cmd --add-service=http- ``
firewall-cmd --remove-service=服务名 #移除开发的服务
10、端口转发
语法:firewall-cmd [--permanent] [--zone=zone] --add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]将本机的88端口请求转发到80端口:firewall-cmd --add-forward-port=port=88:proto=tcp:toport=8011.地址伪装:firewall-cmd --add-masquerade
11.直接规则:
在firewall中,通过firewall-cmd使用iptables语法添加规则;
firewall-cmd --direct --add-chain ipv4|ipv6 表名 链名firewall-cmd --direct --add-chain ipv4 nat INPUT-NEW- ``
firewall-cmd --direct --get-chains ipv4|ipv6 表名 查看表中的所有链firewall-cmd --direct --get-chains ipv4 nat- ``
firewall-cmd --direct --remove-chain ipv4|ipv6 表名 链名firewall-cmd --direct --remove-chain ipv4 nat INPUT-NEW- ``
firewall-cmd --direct --add-rule ipv4|ipv6 表名 链名 优先级 选项firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 80 -j DROP
12.临时规则设置:
在规则后,添加超时时间:—timeout=时间
firewall-cmd --add-port=8080/tcp --timeout=30s- ``
秒s 分m 时h
13、富语言规则:
语法:firewall-cmd --add-rich-rule='rule [family="<rule family>"][source address="<ip>/<mask>" [invert="True"]][destination address="<ip address>/<mask>" [invert="True"]][<element>][log [prefix="<prefix text>"] [level="<log level>"] [limit value="rate/duration"] ][ audit [limit value="rate/duration"][ accept|reject|drop]
任 何 已 配 置 的 富 规 则 都 会 显示在 firewall-cmd —list-all 和 firewall-cmd —list-all-zones 的输出结果中
-
:配置ipv4,ipv6,ebtables的。
-
source:限制源 IP 地址,源地址可以是一个 IPv4、IPv6 地址或者一个网络地址段。 invert 是!非的意思
-
destination:限制目标地址,目标地址使用跟源地址相同的语法。
-
element:要素,该项只能是以下几种要素类型之一:service、port 、protocol、icmp-block、masquerade 和 forward-port
-
service:服务名称是 firewalld 提供的其中一种服务。要获得支持的服务列表,输入以下命令: firewall-cmd —get-services 。如果一个服务提供了一个目标地址,它和规则中的目标地址冲突,则会导致一个错误。命令格式为:service name=ssh。
-
port:端口可以是一个独立端口数字,或者是端口范围,如 5060~5062。协议为 TCP或 UDP 。命令格式为:port port=number_or_range protocol=protocol。 port port=80-9000 protocol=tcp
-
protocol:协议,可以是一个协议 ID 号,或者一个协议名。查询可用协议,请查阅 /etc/protocols。命令格式为:protocol value=protocol_name_or_ID。 protocol value=icmp
-
icmp-block:阻断一个或多个 ICMP 类型。要获得支持的 ICMP 类型列表,输入firewall-cmd —get-icmptypes 命 令 即 可 查 看 。 命 令 格式为 : icmp-block name=icmptype_name。 icmp-block name=”Echo Request”
-
masquerade:规则里的 IP 伪装。用源地址而不是目的地址来把伪装限制在一个范围内
-
forward-port:将指定的 TCP 或 UDP 协议的数据包转发到本机的其他端口,或另一台机器,或另一台机器上的其他端口。 port 和 to-port 可以是一个单独的端口数字,或一个端口范围。而目的地址是一个简单的 IP 地址。命令格式为:
forward-port port=number_or_range protocol=protocol to-port=number_or_range to-addr=address
forward-port port=8888 protocol=tcp to-port=80 to-addr=10.20.30.40
-
-
log:注册有内核日志的连接请求到规则中,如系统日志。可以定义一个前缀文本把日志信息作为前缀加入。日志等级可以是emerg、alert、crit、error、warning、notice、info 或者 debug 中的一个。可以选择日志的用法,按以下方式限制日志:日志所在位置 /var/log/message
log [prefix=prefix text] [level=log level] limit value=rate/duration
log prefix=”blocklist-info: “ level=”info” limit value=2/s
持续时间的单位为 s、 m、 h、 d。 s 表示秒, m 表示分钟, h 表示小时, d 表示天。最大限定值是 1/d(每天最多有一条日志进入)。
-
audit:审核,审核类型可以是 accept、reject 或 drop 中的一种,但不能在 audit 命令后指定,因为审核类型将会从规则动作中自动收集。审核不包含自身参数,但可以选择性地增加限制。审核的使用是可选择的。
-
accept|reject|drop:可以是 accept、reject 或 drop 中的一个行为。命令格式为:accept | reject [type=reject type] | drop。指定 accept 时,所有新的连接请求都将被允许。指定 reject 时,连接将被拒绝,发起端将接到一个拒绝信息。指定 drop时,所有数据包会被丢弃,并且不会向发起端发送任何信息
练习:允许指定ip访问本地80端口:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.32.12 port port=80 protocol=tcp accept'