centos7的防火墙(firewalld)

Centos7中默认将原来的防火墙iptables升级为了firewalld,firewalld跟iptables比起来至少有两大好处:
  1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
  2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。

firewalld和iptables的关系

  FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。 以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而模块的卸载将会破坏状态防火墙和确立的连接。

  firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结 构以及使用方法不一样罢了。

firewalld的结构
  我们这里所说的结构并不是firewalld软件的结构,而是配置文件的结构。
  在具体介绍firewalld配置文件结构之前学生先来给大家介绍一下firewalld的配置模式,firewalld的配置模式设计的非常巧妙,而且这种设计思路也非常值得我们借鉴和学习。

firewalld的配置模式

  firewalld的配置文件以xml格式为主(主配置文件firewalld.conf例外),他们有两个存储位置

  用户配置目录 /etc/firewalld/

  系统配置目录 /usr/lib/firewalld/services

  使用时的规则是这样的:当需要一个文件时firewalld会首先到第一个目录中去查找,如果可以找到,那么就直接使用,否则会继续到第二个目录中查找。

文件和目录的作用

  firewalld的配置文件结构非常简单,主要有两个文件和三个目录:
  文件:firewalld.conf、lockdown-whitelist.xml
  目录:zones、services、icmptypes
  另外,如果使用到direct,还会有一个direct.xml文件。我们要注意,在保存默认配置的目录“/usr/lib/firewalld/”中只有我们这里所说的目录,而没有firewalld.conf、lockdown-whitelist.xml和direct.xml这三个文件,也就是说这三个文件只存在于“/etc/firewalld/”目录中。

  • firewalld.conf:firewalld的主配置文件,是键值对的格式,不过非常简单,只有五个配置项;
  • DefaultZone:默认使用的zone,默认值为public;
  • CleanupOnExit:这个配置项非常容易理解,他表示当退出firewalld后是否清除防火墙规则,默认值为yes;
  • Lockdown: 这个选项跟D-BUS接口操作firewalld有关,firewalld可以让别的程序通过D-BUS接口直接操作,当Lockdown设置为yes的 时候就可以通过lockdown-whitelist.xml文件来限制都有哪些程序可以对其进行操作,而当设置为no的时候就没有限制了,默认值为 no;
  • IPv6_rpfilter:其功能类似于rp_filter,只不过是针对ipv6版的,其作用是判断所接受到的包是否是伪造的,检查方式主要是通过路由表中的路由条目实现的,更多详细的信息大家可以搜索uRPF相关的资料,这里的默认值为yes。
  • lockdown-whitelist.xml:当Lockdown为yes的时候用来限制可以通过D-BUS接口操作firewalld的程序
  • direct.xml:通过这个文件可以直接使用防火墙的过滤规则,这对于熟悉iptables的用户来说会非常顺手,另外也对从原来的iptables到firewalld的迁移提供了一条绿色通道
  • zones:保存zone配置文件
  • services:保存service配置文件
  • icmptypes:保存和icmp类型相关的配置文件
  • zone
    firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他们都保存在“/usr/lib /firewalld/zones/”目录下。

常用命令

运行、停止、禁用firewalld

  • service firewalld restart   重启
  • service firewalld start    开启
  • service firewalld stop    关闭
  • systemctl stop firewalld   禁用

查看firewall服务状态

  • systemctl status firewall

  • firewall-cmd --state

查看防火墙规则

  • firewall-cmd --list-all

配置firewalld

  • 查看版本: firewall-cmd --version

  • 查看帮助: firewall-cmd --help

查看设置

  • 显示状态:** firewall-cmd --state**

  • 查看区域信息: firewall-cmd --get-active-zones

  • 查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0

  • 拒绝所有包:** firewall-cmd --panic-on**

  • 取消拒绝状态:firewall-cmd --panic-off

  • 查看是否拒绝:firewall-cmd --query-panic

更新防火墙规则

  • firewall-cmd --reload

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

  • firewall-cmd --zone=public --add-interface=eth0
    将接口添加到区域,默认接口都在public
    永久生效再加上 --permanent 然后reload防火墙

  • firewall-cmd --set-default-zone=public
    设置默认接口区域

立即生效无需重启

设置端口

  • 查看所有打开的端口:
    firewall-cmd --zone=dmz --list-ports

  • 加入一个端口到区域:
    firewall-cmd --zone=dmz --add-port=80/tcp
    若要永久生效再加上 --permanent

例子
开启80端口

firewall-cmd --zone=public --add-port=80/tcp --permanent

# 	出现success表明添加成功
	--zone #作用域
	--add-port=80/tcp  #添加端口,格式为:端口/通讯协议
	--permanent   #永久生效,没有此参数重启后失效

重启防火墙

systemctl restart firewalld.service
  • 打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹
    firewall-cmd --zone=work --add-service=smtp

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

firewall-cmd --zone= public --remove-port=80/tcp --permanent

CentOS切换为iptables防火墙

  切换到iptables首先应该关掉默认的firewalld,然后安装iptables服务。

-** 关闭firewall**:

service firewalld stop
systemctl disable firewalld.service #禁止firewall开机启动
  • 安装iptables防火墙
yum install iptables-services #安装
  • 编辑iptables防火墙配置
vi /etc/sysconfig/iptables #编辑防火墙配置文件
  • 下边是一个完整的配置文件:
Firewall configuration written by system-config-firewall

Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

:wq! #保存退出

service iptables start #开启
systemctl enable iptables.service #设置防火墙开机启动

原文地址:https://www.cnblogs.com/yangliguo/p/7782915.html