动态防火墙后台程序 FireWalld 提供了一个动态管理的防火墙,用以支持网络的zones,以分配对一个网络及相关连接和界面一定程度的信任;它支持以太网桥,并有分离运行时间和永久行配置选择。
一、火墙的一般策略
1、firewalld的所有网络区
1、trusted(信任) 可接受所有的网络连接
home(家庭) 用于家庭网络,仅接受ssh、mdns、ipp-cliebt、samba-client、或dhcpv6-client服务连接
internal(内部) 用于内部网络,仅接受ssh、mdns、ipp-cliebt、samba-client、或dhcpv6-client服务连接
work(工作) 用于工作区 仅接受ssh、ipp-cliebt、或dhcpv6-client服务连接
public(公共) 在公共区域内使用仅接受ssh、ipp-cliebt或dhcpv6-client服务连接 是firewalld的默认域
external(外部) 出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接
dmz(非军事区) 仅接受ssh服务连接
block(限制) 剧界所有连接
drop(丢弃) 任何接受的网络数据包都被丢弃,没有任何回复
2、firewalld的查看
firewall-config 开启图形化firewalld
systemctl start firewalld.service 打开防火墙
firewall-cmd --state 查看防火墙状态
firewall-cmd --get-active-zones 查看当前所在的域
firewall-cmd --get-default-zone 查看firewalld的默认域
firewall-cmd --get-zones 显示firewalld的所有域
firewall-cmd --zone=public --list-all 显示public域的所有信息
firewall-cmd --get-services 显示firewalld支持的服务
firewall-cmd --list-all-zones 显示所有域的所有信息
firewall-cmd --set-default-zone=dmz 修改默认域
3、接口的添加和删除
1 firewall-cmd --permanent --remove-interface=eth1 从当前域删除eth1接口
3 firewall-cmd --permanent --add-interface=eth1 添加eth1接口到当前域
4 firewall-cmd --change-interface=eth1 临时添加
4、服务的添加和删除
firewall-cmd --get-services 查看可以直接通过服务名添加的服务
firewall-cmd --remove-service=http 在当前域删除http服务
firewall-cmd --add-service=http 在当前域添加http
5、firewalld接口的添加和修改
当服务的接口修改后,firewalld也要添加服务修改后的接口
firewall-cmd --add-port=8080/tcp 添加接口
firewall-cmd --list-ports 查看接口
firewall-cmd --remove-port=8080/tcp 删除接口
6、重新加载firewalld
[root@localhost services]# firewall-cmd --reload 重新加载firewalld 但不终端当前服务
[root@localhost services]# firewall-cmd --complete-reload 重新加载firewaalld,并中断当前
7、火墙域的修改
8、火墙的图形化界面
二、firewalld高级策略
1、三大表五大链
filter:经过本机内核的数据,input,forward,ouput
nat:不经过本机内核的数据,input,ouput,prerouting,postrouting
mangle:所有经过主机上的数据,prerouting,input,forward,ouput,postrouting
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 2 -p tcp --dport 80 -s 172.25.254.16 -j ACCEPT 允许16客户端通过http(80)接口访问,其他客户按照默认规则访问
2、地址转化和伪装
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.5
地址转化,客户通过ssh(22) 通过访问,转化到172.25.254.5(转化前需要开伪装)
firewall-cmd --add-masquerade 开启伪装
[root@localhost ~]# firewall-cmd --list-all
public (default, active)
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
masquerade: yes
forward-ports: port=22:proto=tcp:toport=22:toaddr=172.25.254.5
icmp-blocks:
rich rules:
3、路由设置
当服务端有两个网卡的时候,并且这两个网卡在不同的网关,开启地址伪装后,客户端设置ip网关设置和eth1相同,可以ping通eth0
1、服务端
[root@localhost ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.25.254.102 netmask 255.255.255.0 broadcast 172.25.254.255
inet6 fe80::5054:ff:fe00:20a prefixlen 64 scopeid 0x20<link>
ether 52:54:00:00:02:0a txqueuelen 1000 (Ethernet)
RX packets 521891 bytes 4032429503 (3.7 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 515558 bytes 4039274258 (3.7 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.25.0.202 netmask 255.255.255.0 broadcast 172.25.0.255
inet6 fe80::5054:ff:fe47:d23d prefixlen 64 scopeid 0x20<link>
ether 52:54:00:47:d2:3d txqueuelen 1000 (Ethernet)
RX packets 8172 bytes 928147 (906.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 97 bytes 12909 (12.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# firewall-cmd --list-all
public (default, active)
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
masquerade: yes
forward-ports: port=22:proto=tcp:toport=22:toaddr=172.25.254.5
icmp-blocks:
rich rules:
2,在客户端
设置网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0
HWADDR=52:54:00:00:02:0B
TYPE=Ethernet
BOOTPROTO=none
IPADDR=172.25.0.102
GATEWAY=172.25.0.202 #########设置网关为服务端eth1的ip
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=03569245-7857-43fe-8891-54535e643a7a
ONBOOT=yes
重启后ping
[root@localhost ~]# ping 172.25.254.102
PING 172.25.254.102 (172.25.254.102) 56(84) bytes of data.
64 bytes from 172.25.254.102: icmp_seq=1 ttl=64 time=0.267 ms
64 bytes from 172.25.254.102: icmp_seq=2 ttl=64 time=0.284 ms