Linux firewall防火墙

Linux firewall防火墙

firewall 指令

区域 接口
图形界面 firewall-config
命令工具 firewall-cmd

iptables 指令

四表五链
数据转发 NAT(SNAT,DNAT)

firewalld

  • 支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具
  • 支持IPv4、IPv6防火墙改设置以及以太网桥
  • 支持服务或应用程序直接添加防火墙规则接口
  • 拥有两种配置模式
    运行时配置 (临时配置,重启失效)
    永久配置

DMZ 非军事化区域

背靠背防火墙(双防火墙模式)
硬件防火墙

防火墙属于四层 传输层
也可以作用在二层 数据链路层

流量清洗 蜜罐
安骑士(防中木马) 绿网(过滤敏感信息) 云盾牌

firewalld和iptables的关系

netfilter
位于Linux内核中的包过滤功能Ixia
称为Linux防火墙的内核态
firewalld/iptables
CentOS7默认的管理防火墙规则的工具
称为Linux防火墙的用户态

在这里插入图片描述

firewalld和iptables的区别

firewalld iptables
配置文件 /user/lib/firewalld/ /etc/firewalld/ /etx/sysconfig/iptables
对规则的修改 不需要全部刷新策略,不丢失现行连接 需要全部刷新策略,丢失连接
防火墙类型 动态防火墙 静态防火墙

firewalld网络区域

区域介绍
区域如同进入主机的安全门,每个区域都具有不同限制的规则
可以使用一个或多个区域,但是任何一个活跃区域至少需要关联源地址或接口
默认情况下,public区域是默认区域,包含所有接口(网卡)
在这里插入图片描述

firewalld数据处理流程

检查数据来源的源地址
若源地址关联到特定的区域则执行该区域所指定的规则
若源地址未关联到特定的区域,则使用传入网络接口的区域
并执行该区域所指定的规则
若网络接口未关联到特定的区域,则使用默认区域并执行该区域所指定的规则

运行时配置

实行生效,并持续至firewall重新启动或重新加载配置
不中断现有连接
不能修改服务配置

永久配置

不立即生效,除非firewalld重新启动或重新加载配置
中断现有连接
可以修改服务配置

firewalld-config图形工具

firewalld-cmd命令行工具
/etc/firewalld/中的配置文件
firewalld会优先使用/etc/fiewalld/中的配置,若果不存在配置文件,则使用/usr/lib/firewalld/中的配置
/etc/firewalld/:用户自定义配置文件,需要时可通过从/usr/lib/firewalld/中拷贝
/usr/lib/firewalld/:默认配置文件,不建议修改,若恢复至默认配置,可直接删除/etc/firewalld/中的配置

运行时配置/永久配置
在这里插入图片描述

重新加载防火墙
更改永久配置并生效
在这里插入图片描述

关联网卡到指定区域
在这里插入图片描述

修改默认区域
在这里插入图片描述

连接状态
在这里插入图片描述

“区域”选项卡
“服务”子选项卡
在这里插入图片描述

“端口”子选项卡
在这里插入图片描述

“协议”子选项卡
在这里插入图片描述

“源端口”子选项卡
在这里插入图片描述

“伪装”子选项卡
在这里插入图片描述

“端口转发”子选项卡
在这里插入图片描述

“ICMP过滤器”选项卡
在这里插入图片描述

“服务”选项卡
“模块”子选项卡
在这里插入图片描述

“目标地址”子选项卡
在这里插入图片描述

实验

实验环境
在这里插入图片描述

需求描述
禁止主机ping服务器
只允许192.168.20.20主机访问ssh服务
允许所有主机访问Apache服务

分析
在这里插入图片描述

block 阻塞
dmz 非军事化区域介于高安全和低安全之间
drop 丢失区域
external 外部区域
home 家
internal 内部
public 公共
trusted 信任
work 工作

实验步骤

  • 网络参数配置
    [root@localname ~]# ifconfig ens33
    在这里插入图片描述

[root@localname ~]# systemctl status firewalld.service
在这里插入图片描述

  • 开启firewalld防火墙
    [root@localname ~]# firewall-config //运行防火墙图形化管理工具

  • 配置work区域
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

  • 配置public区域
    在这里插入图片描述

  • 验证
    [root@localhost ~]# yum install httpd -y
    [root@localhost ~]# systemctl start httpd
    在第二台192.168.20.20虚拟机
    在这里插入图片描述

在这里插入图片描述

firewall-cmd

启动、停止、查看 firewalld 服务
在安装 CentOS7 系统时,会自动安装 firewalld 和图形化工具 firewall-config。执行
以下命令可以启动 firewalld 并设置为开机自启动状态。
[root@localhost ~]# systemctl start firewalld //启动 firewalld
[root@localhost ~]# systemctl enable firewalld //设置 firewalld 为开机自启动
查看firewalld运行状态
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 五 2020-07-31 08:32:05 CST; 6h ago
Docs: man:firewalld(1)
Main PID: 8762 (firewalld)
Tasks: 2
CGroup: /system.slice/firewalld.service
└─8762 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

7月 31 08:32:05 localname systemd[1]: Starting firewalld - dynamic firewall daemon…
7月 31 08:32:05 localname systemd[1]: Started firewalld - dynamic firewall daemon.
[root@localhost ~]# firewall-cmd --state
running

禁用 firewalld
[root@localhost ~]# systemctl stop firewalld //停止 firewalld
[root@localhost ~]# firewall-cmd --state
not running
[root@localhost ~]# systemctl disable firewalld //设置 firewalld 开机不自启动
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

获取预定义信息
firewall-cmd 预定义信息主要包括三种:可用的区域、可用的服务以及可用的 ICMP 阻
塞类型
区域
[root@localhost ~]# firewall-cmd --get-zones //显示预定义的区域
block dmz drop external home internal public trusted work
服务
[root@localhost ~]# firewall-cmd --get-service //显示预定义的服务
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry docker-swarm dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls managesieve mdns minidlna mongodb mosh mountd ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
查看ICMP类型
[root@localhost ~]# firewall-cmd --get-icmptypes //显示预定义的ICMP 类型
address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option

firewall-cmd --get-icmptypes 命令的执行结果中各种阻塞类型的含义分别如下所示。
 destination-unreachable:目的地址不可达。
 echo-reply:应答回应(pong)。
 parameter-problem:参数问题。
 redirect:重新定向。
 router-advertisement:路由器通告。
 router-solicitation:路由器征寻。
 source-quench:源端抑制。
 time-exceeded:超时。
 timestamp-reply:时间戳应答回应。
 timestamp-request:时间戳请求。

区域管理
默认区域 firewall-cmd --get-default-zone
设置默认的区域 firewall-cmd --set-default-zone=
显示已经激活的所有区域 firewall-cmd --get-active-zones
显示指定接口绑定的区域firewall-cmd --get-zone-of-interface=<interface
为指定的端口绑上区域 firewall-cmd --zone= --add-interface=
为指定的区域更换端口 firewall-cmd --zone= --change-interface=
为指定的区域删除端口firewall-cmd --zone= --remove-interface=
显示所有区域及其规则firewall-cmd --list-all-zones
显示指定区域的所有规则firewall-cmd --zone= --list-all

显示当前系统中的默认区域。
[root@localhost ~]# firewall-cmd --get-default-zone
public
显示默认区域的所有规则
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
显示网络接口 ens33 对应区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
public
将网络接口 ens33 对应区域更改为 internal 区域
[root@localhost ~]# firewall-cmd --zone=internal --change-interface=ens33
The interface is under control of NetworkManager, setting zone to ‘internal’.
success
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces
ens33
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
internal

显示所有激活区域
[root@localhost ~]# firewall-cmd --get-active-zones
internal
interfaces: ens33

服务管理
显示指定区域允许访问的所服务有firewall-cmd [–zone=] --list-services
为指定区域设置允许访问的某项服务firewall-cmd [–zone=] --add-service=
删除指定区域已设置的允许访问的某项服务firewall-cmd [–zone=] --remove-service=
显示指定区域允许访问的所有端口号firewall-cmd [–zone=] --list-ports
为指定区域添加端口 firewall-cmd [–zone=] --add-port=[-]/
为指定区域删除端口 firewall-cmd [–zone=] --remove-port=[-]/
显示指定区域内拒绝访问的所有ICMP类型 firewall-cmd [–zone=] --list-icmp-blocks
为指定区域内设置拒绝访问的ICMP类型 firewall-cmd [–zone=] --add-icmp-block=
删除指定区域内拒绝访问的ICMP类型 firewall-cmd [–zone=] --remove-icmp-block=<icmptype

为默认区域设置允许访问的服务
[root@localhost ~]# firewall-cmd --list-services //显示默认区域允许访问的所有服务
You’re performing an operation over default zone (‘public’),
but your connections/interfaces are in zone ‘internal’ (see --get-active-zones)
You most likely need to use --zone=internal option.

ssh dhcpv6-client
[root@localhost ~]# firewall-cmd --add-service=http //设置默认区域允许访问http服务
You’re performing an operation over default zone (‘public’),
but your connections/interfaces are in zone ‘internal’ (see --get-active-zones)
You most likely need to use --zone=internal option.

success
[root@localhost ~]# firewall-cmd --add-service=https //设置默认区域允许访问https服务
You’re performing an operation over default zone (‘public’),
but your connections/interfaces are in zone ‘internal’ (see --get-active-zones)
You most likely need to use --zone=internal option.

success
[root@localhost ~]# firewall-cmd --list-services
You’re performing an operation over default zone (‘public’),
but your connections/interfaces are in zone ‘internal’ (see --get-active-zones)
You most likely need to use --zone=internal option.

ssh dhcpv6-client http https

为internal 区域设置允许访问的服务
[root@localhost ~]# firewall-cmd --zone=internal --add-service=mysql //设置 internal 区域允许访问 mysql 服务
success
[root@localhost ~]# firewall-cmd --zone=internal --remove-service=samba-client //设置internal区域允许访问samba-client服务
success
[root@localhost ~]# firewall-cmd --zone=internal --list-services //显示默认区域允许访问的所有服务
ssh mdns dhcpv6-client mysql

端口管理
在进行服务配置时,预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自
动打开。但是,对于非预定义的服务只能手动为指定的区域添加端口。
在internal区域打开443/tcp端口
[root@localhost ~]# firewall-cmd --zone=internal --add-port=443/tcp
success
在internal区域禁止443/tcp端口访问
[root@localhost ~]# firewall-cmd --zone=internal --remove-port=443/tcp
success

两种配置模式
运行时模式(Runtime mode)
永久(Permanent mode)
firewall-cmd --reload:重新加载防火墙规则并保持状态信息,即将永久配置应用为运行时配置。
firewall-cmd --permanent:带有此选项的命令用于设置永久性规则,这些规则只有在重新启动firewalld 或重新加载防火墙规则时才会生效;若不带有此选项,表示用于设置运行时
规则。
firewall-cmd --runtime-to-permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性

猜你喜欢

转载自blog.csdn.net/weixin_46355881/article/details/107716474
今日推荐