CentOS 7 firewalld配置教程

标签: none

一.Firewalld概述

1.动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙,用以支持网络 “ zones” ,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。

2.系统提供了图像化的配置工具firewall-config、system-config-firewall, 提供命令行客户端firewall-cmd, 用于配置 firewalld永久性或非永久性运行时间的改变:它依次用 iptables工具与执行数据包筛选的内核中的 Netfilter通信。

20170605144638140.png

基于用户对网络中设备和交通所给与的信任程度,防火墙可以用来将网络分割成不同的区域NetworkManager通知firewalld一个接口归属某个区域,新加入的接口被分配到默认区域。

网络区名称 默认配置

trusted(信任) 可接受所有的网络连接
home(家庭) 用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client、或dhcpv6-client服务连接
internal(内部) 用于内部网络,仅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服务连接
work(工作) 用于工作区,仅接受ssh、ipp-client或dhcpv6-client服务连接
public(公共) 在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域
external(外部) 出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接
dmz(非军事区) 仅接受ssh服务接连
block(限制) 拒绝所有网络连接
drop(丢弃) 任何接收的网络数据包都被丢弃,没有任何回复

我们知道每个zone就是一套规则集,但是有那么多zone,对于一个具体的请求来说应该使用哪个zone(哪套规则)来处理呢?这个问题至关重要,如果这点不弄明白其他的都是空中楼阁,即使规则设置的再好,不知道怎样用、在哪里用也不行。

对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:
1、source,也就是源地址 优先级最高
2、interface,接收请求的网卡 优先级第二
3、firewalld.conf中配置的默认zone 优先级最低
这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个,也就是学生在前面给大家讲过的在firewalld.conf中配置的默认zone。

二.管理防火墙

1.安装防火墙软件:

yum install firewalld firewall-config

配置firewalld

查看版本:# firewall-cmd --version
查看帮助:# firewall-cmd --help
显示状态:# firewall-cmd --state
查看所有可用区域: # firewall-cmd --get-zones
查看区域信息: # firewall-cmd --get-active-zones
查看默认网络区域: # firewall-cmd --get-default-zone
列出指定域的所有设置: 
[root@localhost ~]# firewall-cmd --zone=public --list-all
public (default, active)
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

列出所有预设服务: # firewall-cmd –-get-services (这样将列出 /usr/lib/firewalld/services/ 中的服务器名称。注意:配置文件是以服务本身命名的 
service-name. xml)

查看指定接口所属区域:# firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:# firewall-cmd --panic-on
取消拒绝状态:# firewall-cmd --panic-off
查看是否拒绝:# firewall-cmd --query-panic

打开端口(貌似这个才最常用)
查看所有打开的端口:
# firewall-cmd --zone=dmz --list-ports
加入一个端口到区域:
# firewall-cmd --zone=dmz --add-port=8080/tcp
若要永久生效方法同上

永久生效再加上 --permanent 然后reload防火墙

更新防火墙规则:# firewall-cmd --reload
# firewall-cmd --complete-reload
两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务

打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹,这个不详细说了,详情参考文档
# firewall-cmd --zone=work --add-service=smtp

移除服务
# firewall-cmd --zone=work --remove-service=smtp

三.手动编辑服务文件

firewalld的配置模式
firewalld的配置文件以xml格式为主(主配置文件firewalld.conf例外),他们有两个存储位置
1、/etc/firewalld/ 用户配置文件
2、/usr/lib/firewalld/ 系统配置文件,预置文件

例一. 限制SSH只能由特定的IP连线
修改/etc/firewalld/zones/dmz.xml档(以使用dmz zone为例)

# vim /etc/firewalld/zones/dmz.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
       <short>DMZ</short>
       <description>(文字说明省略)</description>
       <rule family="ipv4">
              <source address="211.72.188.188"/>
              <service name="ssh"/>
              <!-- <log prefix="sshlog" level="info"/> -->
              <accept/>
       </rule>
</zone>

备注:
A. 无须考虑ICMP封包的问题,除非有特别想阻挡的ICMP项目
B. 档案里,要注解某一行时,请用
C. 写在里的,只能有一个
D. 将source address换成你允许开放连线的IP
E. 上面的例子是无作用,若要记录此规则的相关连线讯息,可以将删除,它会将资料记录在/var/log/messages里
F. 若语法有错误,重新载入时,会将错误写在/var/log/firewalld里

zone 只能限制访问ip 和设置服务.
端口要在服务里面设置,也就是自定义服务至少需要两个文件.
一个区域xml 一个是要开启端口的xml




http://blog.csdn.net/a18829898663/article/details/72869923
https://www.cnblogs.com/fatt/p/6656262.html
http://www.myhome.net.tw/2015_02/p10.htm


扫描二维码,在手机上阅读!

添加新评论