firewall服务配置
Firewalld
firewalld通过firewalld.service systemd 服务来启动,可使用低级别的iptables、ip6tables 和 ebtables 命令来管理Linux内核netfilter子系统
注意*
firewalld.service 和 iptables.service 以及 ip6tables.service 和 ebtables.service 服务彼此冲突。 为了防止意外启动其中一个 *tables.service服务(并擦除流程中任何正在运行的防火墙配置),使用systemctl将其屏蔽 [root@server ~]# for SERVICE in iptables ebtables;do > systemctl mask ${SERVICE}.service > done
firewalld将所有传入流量划分成区域,每个区域都具有自己的一套规则。为检查哪个区域用于传入连接,firewalld使用以下逻辑,第一个匹配的规则胜出:
1.如果传入包的源地址与区域的某个源规则设置相匹配,该包将通过该区域进行路由 2.如果包的传入接口与区域的过滤器设置匹配,则使用该区域 3.否则将使用默认区域。默认区域不是单独的区域,而是指向系统上定义的某个其它区域。 除非被管理员NetworkManager配置所覆盖,否则,任何新网络接口的默认区域都将设置为public区域
区域 | 规则 |
---|---|
trusted | 允许所有传入流量 |
home | 除非与传出流量相关,或与ssh、mdns、ipp-client或dhcpv6-client预定义服务匹配,否则拒绝传入流量 |
internal | 除非与传出流量相关,或与ssh、ipp-client或dhcpv6-client预定义服务匹配,否则拒绝传入流量 |
public | 除非与传出流量相关,或与ssh或dhcpv6-client预定义服务匹配,否则拒绝传入流量。新添加的网络接口的默认区域 |
external | 除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝传入流量。通过此区域转发的IPv4传入流量将进行伪装,以便其看起来像是来自传出网络接口的IPv4地址 |
dmz | 除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝传入流量 |
block | 除非传出流量相关,否则拒绝所有传入流量 |
drop | 除非传出流量相关,否则丢弃所有传入流量(甚至不产生包含ICMP错误的响应) |
命令 | 作用 |
---|---|
--get-default-zone | 查询当前默认区域 |
--set-default-zone | 设置默认区域。此命令会同时更改运行时配置和永久配置 |
--get-zones | 列出所有可用区域 |
--get-services | 列出所有预定义服务 |
--get-active-zones | 列出当前正在使用的所有区域(具有关联的接口或源)及其接口源信息 |
--add-source=<CIDR> [--zone=<ZONE>] | 将来自IP地址或网络/子网掩码<CIDR>的所有流量路由到指定区域。如果未提供--zone=选项,则将使用默认区域 |
--remove-source=<CIDR> [--zone=<ZONE>] | 从指定区域中删除用于路由来自IP地址或网络/子网掩码的所有流量的规则。如果未提供--zone=选项,则将使用默认区域 |
--add-interface=<INTERFACE> [--zone=<ZONE>] | 将来自<INTERFACE>的所有流量路由到指定区域。如果未提供--zone=选项,则将使用默认区域 |
--change-interface=<INTERFACE> [--zone=<ZONE>] | 将接口与<ZONE>而非其当前区域关联。如果未提供--zone=选项,则将使用默认区域 |
--list-all [--zone=<ZONE>] | 列出<ZONE>的所有已配置接口、源、服务和端口。如果未提供--zone=选项,则将使用默认区域 |
--list-all-zones | 检索所有区域的所有信息(接口、源、端口、服务等等) |
--add-service=<SERVICE> | 允许到<SERVICE>流量。如果未提供--zone=选项,则将使用默认区域 |
--add-port=<PORT/PROTOCOL> | 允许到<PORT/PROTOCOL>端口的流量。如果未提供--zone=选项,则将使用默认区域 |
--remove-service=<SERVICE> | 从区域的允许列表中删除<SERVICE>。如果未提供--zone=选项,则将使用默认区域 |
--remove-port=<PORT/PROTOCOL> | 从区域的允许列表中删除<PORT/PROTOCOL>。如果未提供--zone=选项,则将使用默认区域 |
--add-rich-rule | 配置富规则,默认富规则优先级高 |
--permanent | 如果配置过滤规则时没有加上此条,默认配置为运行时规则,重启主机或firewalld.service失效 |
--reload | 配置添加新的防火墙规则后要使用此条命令,让配置信息立即生效 |
SSH访问配置
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 service name="ssh" accept' firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.2.0/24 service name="ssh" reject' firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.3.0/24 service name="ssh" drop' firewall-cmd --reload
配置端口转发
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 forward-port port=5423 protocol=tcp to-port=80' firewall-cmd --reload
配置端口伪装
通过伪装,系统会将并非直接寻址到自身的包转发到指定接收方,同时将通过的包的源地址更改为其自己的公共IP地址。 防火墙对这些传入的包应答时,会将目标地址修改为原始主机的地址并发送包。 1.当内网地址为10.0.0.100地址的主机要访问外网200.0.0.100的IP地址时 2.由于目标地址不在本地子网中,包将路由到源计算机上配置的默认网关10.0.0.1 3.这里10.0.0.1可以是防火墙,它将源地址更改为防火墙持有的外网IP 100.0.0.100,并将连接的引用存储在其连接状态表中,然后根据其路由表传递到Internet上的路由器 4.数据包返回时,再从连接状态表中查找连接,将其目标地址更改为10.0.0.100 5.原始发送方接收对其请求的应答 firewall-cmd --permanent --zone=<ZONE> --add-masquerade 对该区域上的任意数据包做转换 firewall-cmd --permanent --zone=<ZONE> --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 masquerade' 对指定区域做伪装(NAT)