欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux防火墙|Linux

程序员文章站 2022-03-19 23:44:11
...

文章目录


前言:在Internet中,企业通过架设各种应用系统来为用户提供各种网络服务,如Web网站、电子邮件系统、FTP服务器、数据库系统等。为了能够保护这些服务器,过滤企业不需要的访问甚至是恶意的入侵,我们便需要防火墙的功能。

一、Firewalld概述

1.Firewalld简介

1)支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具
2)支持IPv4、IPv6防火墙设置以及以太网桥
3)支持服务或应用程序直接添加防火墙规则接口
4)拥有两种配置配置模式
——运行时配置
——永久配置

二、Firewalld和iptables的关系

1.什么是iptables

iptables是Linux的防火墙管理工具而已,真正实现防火墙功能的是Netfilter,我们配置了iptables规则后Netfilter通过这些规则来进行防火墙过滤等操作
Netfilter模块:
它是主要的工作模块,位于内核中,在网络层的五个位置(也就是防火墙四表五链)注册了一些函数,用来抓取数据包;把数据包的信息拿出来匹配各个链位置在对应表中的规则:匹配之后,进行相应的处理ACCEPT、DROP等等。

1.1 Firewalld和iptables的区别

Linux防火墙|Linux

2. 四表五链

链就是位置:共有五个 进路由(PREROUTING)、进系统(INPUT)、转发(FORWARD)、出系统(OUTPUT)、出路由(POSTROUTING);
表就是存储的规则;数据包到了该链处,会去对应表中查询设置的规则。然后决定是否放行、丢弃、转发还是修改等等操作。

2.1 具体的四表

fileer表——过滤数据包
Nat表——用于网络地址转换(ip、端口)
Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS
Raw表——决定数据包是否被状态跟踪机制处理

2.2 五链

INPUT链——进来的数据包应用此规则链中的策略
OUTPUT链——外出的数据包应用此规则链中的策略
FORWARD链——转发数据包时应用此规则链中的策略
PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时候都先由这个链处理)
POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时候都先由这个链处理)

2.3 四表五链之间的关系

Linux防火墙|Linux

3.iptables语法格式

iptables [-t 表名] 选项 [链名][条件][-j 控制类型]

iptables常用参数:

-p 设置默认策略:iptables
-p INPUT(DROP|ACCEPT)
-L 清空规则链
-A 在规则链的末尾加入新规则
-I num在规则链的头部加入新规则
-D num删除某一条规则
-S 匹配来源地址IP/MASK,加叹号“!”表示除这个IP外
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的出局
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
--dport num 匹配目标端口号
--sport num 匹配来源端口号

三、Firewalld网络区域

1. 区域介绍

——区域如同进入主机的安全门,每个区域都具有不同限制程度的规则
——可以使用一个或多个区域,但是任何一个活跃区域至少需要关联源地址或接口
——默认情况下,public区域是默认区域,包含所有接口(网卡 )
Linux防火墙|Linux

2. Firewalld数据处理流程

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

四、Firewalld防火墙的配置方法

1. 运行时配置

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

2. 永久配置

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

五、Firewall-config图形工具

5.1 /etc/firewalld中的配置文件

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

5.2 运行时配置/永久配置

5.3 Firewall-cmd命令行工具

5.4 重新加载防火墙

——更改永久配置并生效

5.5 关联网卡到指定区域

5.6 修改默认区域

Linux防火墙|Linux

5.7 连接状态

‘区域’选项卡

——‘服务’子选项卡
——‘端口’子选项卡
——‘协议’子选项卡
——‘源端口’子选项卡
——‘伪装’子选项卡
——‘端口转发’子选项卡
——‘ICMP过滤器’子选项卡

‘服务’选项卡

——‘模块’子选项卡
——‘目标地址’子选项卡

六、Firewalld防火墙维护命令

6.1 防火墙进程操作

[aaa@qq.com /]# systemctl 选项 firewalld

选项:start stop restart status

6.2 防火墙管理操作

—firewall-cmd命令
—— 支持全部防火墙特性
—— 对于状态和查询模式,命令只返回状态,没有其他输出
—— --permanent参数:携带该参数表示永久配置,否则表示运行时配置对指定区域操作

6.3 查询Firewalld状态

[aaa@qq.com ~]# 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 一 2019-12-09 19:29:38 CST; 3h 46min ago
     Docs: man:firewalld(1)
 Main PID: 780 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─780 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

12月 09 19:29:35 localhost.localdomain systemd[1]: Starting firewalld - dynamic fi....
12月 09 19:29:38 localhost.localdomain systemd[1]: Started firewalld - dynamic fir....
12月 09 19:29:41 localhost.localdomain firewalld[780]: WARNING: ICMP type 'beyond-....
12月 09 19:29:41 localhost.localdomain firewalld[780]: WARNING: beyond-scope: INVA....
12月 09 19:29:41 localhost.localdomain firewalld[780]: WARNING: ICMP type 'failed-....
12月 09 19:29:41 localhost.localdomain firewalld[780]: WARNING: failed-policy: INV....
12月 09 19:29:41 localhost.localdomain firewalld[780]: WARNING: ICMP type 'reject-....
12月 09 19:29:41 localhost.localdomain firewalld[780]: WARNING: reject-route: INVA....
Hint: Some lines were ellipsized, use -l to show in full.

[aaa@qq.com ~]# firewall-cmd --state 
running

6.4 重新加载Firewall的配置

—— firewall-cmd -reload

[aaa@qq.com ~]# firewall-cmd --reload 
success

—— firewall-cmd --complete -reload
状态信息将会丢失,多用于处理防火墙出现问题时

[aaa@qq.com ~]# firewall-cmd --complete-reload 
success

systemctl restart firewalld

[aaa@qq.com ~]# systemctl restart firewalld

七、查询预定义信息命令

7.1 获取预定义信息

[aaa@qq.com ~]# firewall-cmd --get-zones  //查看预定义的区域
block dmz drop external home internal public trusted work

[aaa@qq.com ~]# firewall-cmd --get-services //查看预定义的服务
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-
rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync 
elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-
availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap
ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-
storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio
puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap
spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm
vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

[aaa@qq.com ~]# 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

7.2 显示网络连接或接口的默认区域

[aaa@qq.com ~]# firewall-cmd --get-default-zone 
public
[aaa@qq.com

7.3 设置网络连接或接口的默认区域为internal

[aaa@qq.com ~]# firewall-cmd --set-default-zone=internal 
success

7.4 显示已**的所有区域

[aaa@qq.com ~]# firewall-cmd --get-active-zones 
internal
  interfaces: ens33

**的条件:区域至少关联一个接口或一个源地址/网段

八、Firewalld区域操作命令

8.1 显示ens33接口绑定的区域

[aaa@qq.com ~]# firewall-cmd --get-zone-of-interface=ens33 
internal

8.2 为ens33接口绑定work区域

[aaa@qq.com ~]# firewall-cmd --zone=work --add-interface=ens33 
The interface is under control of NetworkManager, setting zone to 'work'.
success

8.3 为work区域更改绑定的网络接口ens33

[aaa@qq.com ~]# firewall-cmd --zone=work --change-interface=ens33 
The interface is under control of NetworkManager and already bound to 'work'
The interface is under control of NetworkManager, setting zone to 'work'.
success

8.4 为work区域删除绑定的网络接口ens33

[aaa@qq.com ~]# firewall-cmd --zone=work --remove-interface=ens33 
The interface is under control of NetworkManager, setting zone to default.
success

8.5 查询work区域中是否包含接口ens33

[aaa@qq.com ~]# firewall-cmd --zone=work --query-interface=ens33 
no

8.6 显示区域及其规则

——显示所有区域及其规则

[aaa@qq.com ~]# 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: ssh mdns samba-client dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	

internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh mdns samba-client dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	

public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh dhcpv6-client
  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: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

—— 显示internal区域的所有规则

[aaa@qq.com ~]# firewall-cmd --zone=internal --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh mdns samba-client dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

——显示默认区域的所有规则

[aaa@qq.com ~]# firewall-cmd --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh mdns samba-client dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Linux防火墙|Linux

九、Firewalld端口操作命令

9.1 显示internal区域内允许访问的所有服务

[aaa@qq.com ~]# firewall-cmd --zone=internal --list-services 
ssh mdns samba-client dhcpv6-client

9.2 为public区域设置允许访问SMTP服务

[aaa@qq.com ~]# firewall-cmd --zone=public --add-service=smtp 
success

9.3 删除internal区域中的SSH服务

[aaa@qq.com ~]# firewall-cmd --zone=internal --remove-service=ssh
success

9.4 查询internal区域中是否启用了SSH服务

[aaa@qq.com ~]# firewall-cmd --zone=internal --query-service=ssh
no

Linux防火墙|Linux

十、Firewalld端口操作命令

10.1 显示internal区域内允许访问的所有端口号

[aaa@qq.com ~]# firewall-cmd --zone=internal --list-ports

10.2 启用internal区域22端口的TCP协议组合

[aaa@qq.com ~]# firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
success

–timeout=5m:表示5分钟后删除该端口,多用于测试目的

10.3 禁用internal区域22端口的TCP协议组合

[aaa@qq.com ~]# firewall-cmd --zone=internal --remove-port=22/tcp
Warning: NOT_ENABLED: '22:tcp' not in 'internal'
success

10.4 查询internal区域中是否启用了22端口和TCP协议组合

[aaa@qq.com ~]# firewall-cmd --zone=internal --query-port=22/tcp
no

Linux防火墙|Linux

十一、Firewalld阻塞ICMP操作命令

11.1 显示work区域内阻塞的所有ICMP类型

[aaa@qq.com ~]# firewall-cmd --zone=work --list-icmp-blocks


11.2 为work区域设置阻塞echo-reply类型的ICMP

[aaa@qq.com ~]# firewall-cmd --zone=work --add-icmp-block=echo-reply
success

11.3 删除work区域已阻塞的echo-reply类型的ICMP

[aaa@qq.com ~]# firewall-cmd --zone=work --remove-icmp-block=echo-reply
success

11.4 查询work区域的echo-request类型的ICMP是否阻塞

[aaa@qq.com ~]# firewall-cmd --zone=work --query-icmp-block=echo-reply
no

十二、Firewalld防火墙案例

12.1 实验环境

Linux防火墙|Linux

12.2 需求描述

——禁止主机ping服务器
——只允许192.168.9.130主机访问Apache服务
——只允许192.168.9.132主机访问TCP/22端口

12.3 绑定区域

[aaa@qq.com ~]# firewall-cmd --get-active-zone 
public                        //默认情况下,只有public区域处于**状态
  interfaces: ens33
[aaa@qq.com ~]# firewall-cmd --permanent --zone=work --add-source=192.168.9.130
success                      //将来源地址192.168.8.130和work区域关联
[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --add-source=192.168.9.132
success
[aaa@qq.com ~]# firewall-cmd --reload
success                      //永久配置需要重新加载才能生效
[aaa@qq.com ~]# firewall-cmd --get-active-zone
work
  sources: 192.168.9.130
internal
  sources: 192.168.9.132
public
  interfaces: ens33

12.4 配置服务(work区域配置)

work区域配置:

[aaa@qq.com ~]# firewall-cmd --zone=work --list-services
ssh dhcpv6-client
[aaa@qq.com ~]# firewall-cmd --permanent --zone=work --remove-service=ssh
success
[aaa@qq.com ~]# firewall-cmd --permanent --zone=work --remove-service=dhcpv6-client
success
[aaa@qq.com ~]# firewall-cmd --permanent --zone=work --add-service=http
success
[aaa@qq.com ~]# firewall-cmd --permanent --zone=work --list-services
http

12.5 配置服务(internal区域配置)

[aaa@qq.com ~]# firewall-cmd --zone=internal --list-services
ssh mdns samba-client dhcpv6-client
[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --remove-service=mdns
success
[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --remove-service=dhcpv6-client
success
[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --remove-service=ssh
success
[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --remove-service=samba-client
success
[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --list-services

12.6 配置端口

[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --list-ports
[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --add-port=22/tcp
success
[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --list-ports
22/tcp

12.7 配置ICMP阻塞(配置work区域)

[aaa@qq.com ~]# firewall-cmd --permanent --zone=work --list-icmp-blocks
[aaa@qq.com ~]# firewall-cmd --permanent --zone=work --add-icmp-block=echo-request
success
[aaa@qq.com ~]# firewall-cmd --permanent --zone=work --list-icmp-blocks
echo-request

12.8 配置ICMP阻塞(配置internal区域)

[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --list-icmp-blocks
[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --add-icmp-block=echo-request
success
[aaa@qq.com ~]# firewall-cmd --permanent --zone=internal --list-icmp-blocks
echo-request

12.9 配置ICMP阻塞(配置public区域)

[aaa@qq.com ~]# firewall-cmd --permanent --zone=public --list-icmp-blocks
[aaa@qq.com ~]# firewall-cmd --permanent --zone=public --add-icmp-block=echo-request
success
[aaa@qq.com ~]# firewall-cmd --permanent --zone=public --list-icmp-blocks
echo-request

12.10 重新加载配置

[aaa@qq.com ~]# firewall-cmd --reload
success

12.11 验证配置

只允许192.168.9.130主机访问Apache服务
Linux防火墙|Linux
Linux防火墙|Linux

禁止主机ping服务器
//192.168.9.131的客户机
Linux防火墙|Linux
//192.168.9.131的客户机
Linux防火墙|Linux
只允许192.168.9.132主机访问TCP/22端口

	
[aaa@qq.com ~]# ssh 192.168.9.130        '//IP地址为192.168.9.131的主机'
ssh: connect to host 192.168.9.130 port 22: No route to host
	
[aaa@qq.com ~]# ssh 192.168.9.130         '//IP地址为192.168.9.132的主机'
The authenticity of host '192.168.9.130(192.168.9.130)' can't be established.
ECDSA key fingerprint is SHA256:UhiQeQeIoKaH1ogewTdbaZIldXmr3dxKoD0/RN0jhcU.
ECDSA key fingerprint is MD5:95:ac:b8:fe:9e:01:50:3c:56:c9:e3:aa:28:ee:1c:24.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.9.130' (ECDSA) to the list of known hosts.
aaa@qq.com192.168.9.130s password: 
Last failed login: Mon Dec  9 17:40:09 CST 2019 from 192.168.9.130 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Mon Dec  9 16:39:50 2019
[aaa@qq.com ~]# exit
logout
Connection to 192.168.9.130 closed.
相关标签: 实验