Lupinus

Re:从零开始的go学习生活(`・ω・´)

0%

[Firewalld防火墙]

Firewall防火墙

概述

在CentOS7系统中集成了多款防火墙管理工具,默认启用的是firewalld(动态防火墙管理器)防火墙管 理工具,Firewalld支持CLI(命令行)以及GUI(图形)的两种管理方式。

对于接触Linux较早的人员对Iptables比较熟悉,但由于Iptables的规则比较的麻烦,并且对网络有一定 要求,所以学习成本较高。但firewalld的学习对网络并没有那么高的要求,相对iptables来说要简单不 少,所以建议刚接触CentOS7系统的人员直接学习Firewalld。

防火墙的一个规则

  • 入站

  • 出站

防火墙默认是全部拒绝

区域选项 默认规则策略
trusted 允许所有的数据包流入流出
home 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、 amba-client与dhcpv6-client服务相关,则允许流量
internal 等同于home区域
work 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client、dhcpv6- client服务相关,则允许流量
public 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相 关,则允许流量
external 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
dmz 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
block 拒绝流入的流量,除非与流出的流量相关
drop 拒绝流入的流量,除非与流出的流量相关
  • trusted 允许所有的数据包流入流出,允许任何流量进入可以访问我的任何服务,任何端口
  • puiblic 下载默认的防火墙
  • drop 无论什么端口加到drop都会被拒绝

防火墙命令

区域相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 获取当亲默认区域
firewall-cmd --get-default-zone public

# 设置默认区域
firewalld-cmd --set-default-zone=drop

# 显示区域和网卡名称
firewall-cmd --get-active-zones

# 显示总共可用的区域
firewall-cmd --get-zones
block dingding dmz drop external home internal public trusted work

# 新增区域
firewall-cmd --new-zone=dingding --permanent firewall-cmd --reload
firewall-cmd --get-zones
block dingding dmz drop external home internal public trusted work

服务相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 列出所有可用的服务 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

# 添加服务http服务允许入站,是临时生效,重启防火墙会失效
firewall-cmd --add-service=http

# 删除服务http服务允许入站,是临时生效,重启防火墙会失效
firewall-cmd --remove-service=http

# 添加服务http服务允许入站,是永久生效,重启防火墙后才可以生效
firewall-cmd --add-service=htt --permanent

# 删除服务http服务允许入站,是永久生效,重启防火墙后才可以生效
firewall-cmd --remove-service=htt --permanent

端口先关

1
2
3
4
5
# 添加端口
firewall-cmd --add-port=80/tcp

# 删除端口
firewall-cmd --remove-port=80/tcp

防火墙添加网卡命令

1
2
3
# 将eth0添加到drop区域
firewall-cmd --add-interface=eth0 --zone=drop
firewall-cmd --list-all --zone=drop

其他先关命令

1
2
3
4
5
# 显示当前区域的网卡配置参数、资源、端口以及服务等信息 
firewall-cmd --list-all

# 重启防火墙
firewall-cmd --reload

讲解–list-all

1
2
3
4
5
6
7
8
9
10
11
12
13
public (active) # 当前正在使用的区域 
target: default # 当前默认的区域
icmp-block-inversion: no # icmp块没有开启
interfaces: eth1 eth0 # 当前区域监听的网卡
sources: # 来源 10.0.0.1
services: ssh dhcpv6-client # 允许访问服务
ports: # 允许访问的端口
protocols: # 允许访问的协议
masquerade: no # ip伪装
forward-ports: # 端口转发,端口映射
source-ports: # 来源的锻炼
icmp-blocks: # icmp块
rich rules: # 富规则

使用firewall配置,调整默认public区域拒绝所有的流量,但是如果 来源是10.0.0.0/24网段则允许

1
2
3
4
5
6
7
8
9
10
11
# 一处public区域的所有流量
firewall-cmd --remove-service=ssh --remove-service=dhcpv6-client

# 将来源IP网段加入到trusted区域
firewall-cmd --add-source=10.0.0.0/24 --zone=trusted

# 查看正在使用的区域
firewall-cmd --get-active-zone public
interfaces: eth1 eth0
trusted
sources: 10.0.0.0/24

查询public区域是否语序请求SSH HTTPS协议的流量

1
2
3
4
5
0 ✓ 11:29:09 root@web01,172.16.1.7:/opt # firewall-cmd --zone=public --query- service=ssh
yes

0 ✓ 11:29:09 root@web01,172.16.1.7:/opt # firewall-cmd --zone=public --query- service=ssh
no

防火墙的放行自定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 查看多有的服务
firewall-cmd --get-services

# 添加不存在的服务
firewall-cmd --add-services=sersync

# 增加配置文件
cp /usr/lib/firewalld/services/{ssh,sersync}.xml

# 修改配置文件
vim /usr/lib/firewalld/services/sersync.xml <?xml version="1.0" encoding="utf-8"?> <service>
<short>sersync</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing
commands on remote machines. It provides secure encrypted communications. If you
plan on accessing your machine remotely via SSH over a firewalled interface,
enable this option. You need the openssh-server package installed for this
option to be useful.</description>
<port protocol="tcp" port="874"/>
</service>

# 重启防火墙
firewall-cmd --reload

# 再次查看服务
firewall-cmd --get-services

# 添加服务
firewall-cmd --add-services=sersync

firewall做端口转发

1
2
3
4
5
6
7
8
9
10
11
12
13
# 端口转发公式
firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协 议>:toport=<目标端口号>:toaddr=<目标IP地址>
# web02
firewall-cmd --permanent --zone=public --add-forward-port=port=8888:proto=tcp:toport=80:toaddr=10.0.0.7

# 重启firewall
firewall-cmd --reload

# ip伪装
firewall-cmd --add-masquerade

# 访问
10.0.0.8:8888

防火墙富语言规则策略

firewalld中的富语言规则表示更细致,更详细的防火墙策略配置,他可以针对系统服务、端口号、原地 址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙策略中也是最高的,下面 为firewalld富语言规则帮助手册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@m01 ~]# man firewall-cmd
[root@m01 ~]# man firewalld.richlanguage
rule
[source]
[destination]
service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port
[log]
[audit]
[accept|reject|drop|mark]

rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
service name="service name"
port port="port value" protocol="tcp|udp"
protocol value="protocol value"
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-
addr="address"
accept | reject [type="reject type"] | drop

允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能够访问 ssh/22端口

1
2
3
4
5
#xshell连接不上服务器,但是我的172.16.1.0/24网段可以访问22
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.1"
service name="http" accept'
firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.16.1.0/24"
service name="ssh" accept'