centos7下安装iptables防火墙(关闭firewalld)

说明:centos7默认使用的firewalld防火墙,由于习惯使用iptables做防火墙,所以在安装好centos7系统后,会将默认的firewall关闭,并另安装iptables进行防火墙规则设定

系统操作环境centos7

[root@serve1 ~]# cat /etc/redhat-release    
CentOS Linux release 7.4.1708 (Core)

关闭firewalld防火墙

systemctl stop firewalld    #关闭firewalld防火墙
systemctl disable firewalld    #禁止开机自启

安装iptables防火墙并开启

yum install iptables-services    #安装iptables防火墙
systemctl start iptables    #启动
systemctl enable iptables    #开机自启

关闭SELinux

vim /etc/selinux/config
SELINUX=disabled    #把enforcing改为disabled
setenforce 0     #即时生效

linux中firewalld几个使用场景

一、基础配置

查看当前配置

# firewall-cmd --get-active-zone 
public
  interfaces: eth0 eth1

改变域

# nmcli c mod eth0 connection.zone internal 
# nmcli c mod eth1 connection.zone external
# firewall-cmd --get-active-zone 
internal
  interfaces: eth0
external
  interfaces: eth1

设置IP伪装

# firewall-cmd --zone=external --add-masquerade --permanent 
success
# firewall-cmd --reload 
success

查看配置

# firewall-cmd --zone=external --query-masquerade 
yes

查看ip转发和ip伪装打开

# cat /proc/sys/net/ipv4/ip_forward 

场景1、本机端口转发

访问本机external网卡的8088端口转发到本机的22号端口

# firewall-cmd --zone=external --add-forward-port=port=8088:proto=tcp:toport=22  --permanent
success
# firewall-cmd --list-all --zone=external 
external (active)
  interfaces: eth1
  sources:
  services: ssh
  ports:
  masquerade: yes
  forward-ports: port=8088:proto=tcp:toport=22:toaddr=
  icmp-blocks:
  rich rules:  

未分类

场景2:端口映射

访问防火墙的external网卡eth1的8080端口直接转发到192.168.8.2的http端口

# firewall-cmd --zone=external --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.8.2 --permanent
# firewall-cmd --list-all --zone=external

未分类

场景3:内部服务器通过防火墙上网

设置ip伪装

# firewall-cmd --zone=internal --add-masquerade --permanent 
success
# firewall-cmd --reload 
Success

设置网卡IP的nat

# firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth1 -j MASQUERADE 

设置规则accept

# firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o eth1 -j ACCEPT 
# firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

未分类

CentOS 7系统使用firewalld管理防火墙端口

1、firewalld的基本使用

启动: systemctl start firewalld
查看状态: systemctl status firewalld 
停止: systemctl disable firewalld
禁用: systemctl stop firewalld

2、systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed

3、配置firewalld-cmd

查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息:  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 --zone=public --add-port=80/tcp --permanent    (--permanent永久生效,没有此参数重启后失效)

重新载入

firewall-cmd --reload

查看

firewall-cmd --zone= public --query-port=80/tcp

删除

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

Firewalld规则介绍及使用方法说明

Firewalld即Dynamic Firewall Manager of Linux systems,linux系统的动态防火墙管理器。Firewalld是一个服务,用于配置网络连接,从而哪些内外部网络的数据包可以允许穿过网络或阻止穿过网络。

区域规则

  • drop(丢弃)
    任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。

  • block(限制)
    任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。

  • public(公共)
    在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。

  • external(外部)
    特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。

  • dmz(非军事区)
    用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。

  • work(工作)
    用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。

  • home(家庭)
    用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。

  • internal(内部)
    用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。

  • trusted(信任)
    可接受所有的网络连接。
    指定其中一个区域为默认区域是可行的。当接口连接加入了 NetworkManager,它们就被分配为默认区域。安装时,firewalld 里的默认区域被设定为公共区域。

使用方法

查看当前的区域

firewall-cmd --get-default-zone

查询eth1网卡区域

firewall-cmd --get-zone-of-interface=eth1

查询public中相关服务是否被允许

firewall-cmd --zone=public --query-service=ssh
firewall-cmd --zone=public --query-service=http

列出所有支持的 service

firewall-cmd --get-services

查看当前zone加载的 service

firewall-cmd --list-services

让配置文件立即生效

firewall-cmd --reload

允许https服务流量通过public

firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

允许80端口通过public

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

修改eth1网卡区域为external

firewall-cmd --permanent --zone=external --change-interface=eth1
firewall-cmd --reload

拒绝172.27.10.0/22网络用户访问ssh

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="172.27.10.0/22" service name="ssh" reject"

重读防火墙

并不中断用户连接,即不丢失状态信息:

firewall-cmd --reload

中断用户连接,丢弃状态信息:

firewall-cmd --complete-reload

注意:通常在防火墙出现严重问题时,这个命令才会被使用。如防火墙规则正确,但态信息不正确和无法建立连接等。

设置默认区域

firewall-cmd --set-default-zone=work

注意:流入默认区域中配置的接口的新访问请求将被置入新的默认区域,当前活动的连接将不受影响。

获取活动的区域

firewall-cmd --get-active-zones

根据接口获取区域

firewall-cmd –get-zone-of-interface=<interface>
firewall-cmd --get-zone-of-interface=eth1

修改接口所属区域

“`firewall-cmd [–zone=] –change-interface=

列举区域中启用的服务

firewall-cmd [ –zone= ] –list-services“`

启用应急模式阻断所有网络连接

firewall-cmd --panic-on

禁用应急模式

firewall-cmd --panic-off

查询应急模式

firewall-cmd --query-panic

启用区域中的一种服务

firewall-cmd [--zone=<zone>] --add-service=<service> [--timeout=<seconds>]

使区域中的 ipp-client 服务生效60秒:

firewall-cmd --zone=home --add-service=ipp-client --timeout=60

图形管理工具firewall-config

图形化配置比较简单,这里就不赘述了。

Linux CentOS7防火墙firewalld使用说明

CentOS7防火墙已经不是iptables了而是有一个新名字了Firewalld。

  • firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念

  • firewalld有图形界面和工具界面,但一般我我都是使用字符界面; 图形界面请参照官方文档

  • firewalld的字符界面管理工具是 firewall-cmd

firewalld配置文件

firewalld默认配置文件有两个:

/usr/lib/firewalld/ (系统配置,尽量不要修改)

/etc/firewalld/ (用户配置地址)

在/etc/firewalld/zones下面只有一个public.xml,如果给另外一个zone做一些改动,并永久保存,那么会自动生成对应的配置文件

比如,给work zone增加一个端口:firewall-cmd –permanent –zone=work –add-port=1000/tcp

此时就会生成一个work.xml的配置文件

修改ftp的端口,默认ftp的端口是21,改为1121 代码如下:

cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/
vim /etc/firewalld/services/ftp.xml   #把21改为1121
vim /etc/firewalld/zones/work.xml     #work为默认zone,所以要编辑这个,增加一行<service name="ftp"/>
firewall-cmd --reload                 #重新加载

firewalld规则

假设自定义的ssh端口号为12222,使用下面的命令来添加新端口的防火墙规则:

firewall-cmd --add-port=12222/tcp --permanent

使用–permanent参数可以将更改保存到配置文件。

  • 防火墙配置文件也可以手动修改,修改后记得重新加载:firewall-cmd –reload

  • 这种情况下重新加载防火墙并不会中断用户连接,也可以彻底加载,这时候会中断用户连接,也会丢弃状态信息:firewall-cmd –complete-reload

  • 还可以添加一个端口范围:firewall-cmd –add-port=2000-4000/tcp

  • 针对指定zone添加端口:firewall-cmd –permanent –zone=home –add-port=443/tcp

  • 启动端口转发,例如把22端口转发到127.0.0.2:firewall-cmd –permanent –zone=home –add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2

  • 以下是在CentOS7系统上操作Firewalld的方法。

  • 查看firewalld是否开启

systemctl is-enabled firewalld
  • 启动firewalld
systemctl start  firewalld
  • 停止firewalld
systemctl stop firewalld
  • 查看firewalld状态
systemctl status firewalld
  • 禁止firewall开机启动
systemctl disable firewalld.service
  • 重新加载防火墙
firewall-cmd --reload
  • 查看所有打开的端口
firewall-cmd --zone=public --list-ports
  • 查看具体端口
firewall-cmd --zone= public --query-port=80/tcp

firewalld有zone和service的概念,每一个zone的规则不一样,默认有9个zone。centos7默认使用的zone是public。

firewalld的9个zone介绍

  • 丢弃 drop : 任何流入网络的包都被丢弃,不作出任何响应。只允许流出的网络连接。

  • 阻塞 block:任何进入的网络连接都被拒绝,并返回 IPv4 的 icmp-host-prohibited 报文或者 IPv6 的 icmp6-adm-prohibited 报文。只允许由该系统初始化的网络连接。

  • 公开 public:用以可以公开的部分。你认为网络中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连接接入。

  • 外部 external:用在路由器等启用伪装的外部网络。你认为网络中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连接接入。

  • 隔离区dmz:用以允许隔离区(dmz)中的电脑有限地被外界网络访问。只接受被选中的连接。

  • 工作 work:用在工作网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。

  • 家庭 home:用在家庭网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。

  • 内部 internal:用在内部网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。

  • 受信任的 trusted:允许所有网络连接。

firewalld zone相关命令的用法

  • 设置默认的zone:firewalld-cmd –set-default-zone=work

  • 查看指定网卡所在的zone:firewall-cmd –get-zone-of-interface=eno16777736

  • 设置指定网卡所在的zone:firewall-cmd –zone=public –add-interface=lo

  • 更改指定网卡所在的zone:firewall-cmd –zone=dmz –change-interface=lo

  • 删除指定网卡所在的zone:firewall-cmd –zone=dmz –remove-interface=lo

  • 查看所有网卡所在的zone:firewall-cmd –get-active-zones

firewalld service介绍

  • 在/usr/lib/firewalld/services/目录中,还保存了另外一类配置文件,每个文件对应一项具体的网络服务,如ssh服务等。

  • 与之对应的配置文件中记录了各项服务所使用的tcp/udp端口,在最新版的firewalld中默认已经定义了70多种服务供我们使用。

  • zone就是调用了不同的service而实现了不同的效果。

  • 列出所有的service:

firewall-cmd --get-services
  • 列出当前zone下加载的service:
firewall-cmd --list-services
  • 查看指定zone下面的service:
firewal-cmd --zone=public --list-services
  • 给指定zone添加service:
firewall-cmd --zone=public --ad-service=http
  • 这个改动不会保存到配置文件里,要想保存到配置文件里面,需要加上–permanent:
firewall-cmd --zone=public --add-service=http --permanent
  • 既然可以增加,同样也可以删除,下面命令会从配置文件中永久删除public zone中的http服务:
firewall-cmd --zone=public --remove-service=http --permanent

配置Firewalld防火墙防御ICMP攻击

提到ICMP大家应该都很熟悉,可能有人会说:不就是ping吗?但是说到ICMP攻击以及相关防御措施可能就有的人不是非常清楚了。

ICMP的概念

要想理解ICMP攻击以及防范我们还得从ICMP的概念说起,ICMP是“Internet Control Message Protocol”的缩写,意思是“Internet控制消息协议”,他主要用于在不同主机、路由器等设备之间传递控制消息,比如网络是否可以联通、路由 设备地址的发现、路由路径是否合理等内容。

ICMP攻击

ICMP协议被攻击的方法有很多种,比如的“Ping of Death”、使用ICMP数据包发起DDOS攻击、redirect攻击等等,下面学生简单给大家介绍一下。

“Ping of Death”的原理是当发送的数据包大小超过64KB(规定最大64KB)后接收信息的主机就会出现内存分配错误,进一步会导致TCP/IP堆栈崩溃,甚至主机死机!不过这一漏洞在新版的操作系统中已经解决了。

ICMP 的DDOS简单来说就是一直不停地发送ICMP数据包从而占满被攻击主机的带宽,当然,更进一步还可以使用一些手段将流量进行放大,比如将源地址设置为被 攻击主机的“echo-request”类型报文广播给很多第三方主机,这时这些接收到报文的主机就会给被攻击目标主机返回“echo-replay”报 文,这样流量就被放大了。

要理解redirect攻击,首先要明白redirect的作用,学生给大家举个例子大家就明白了,比如有个快递 需要从北京发往广州,结果北京发到沈阳的中转站了,这时候沈阳就觉得不对呀,要往广州发应该往南边发才对怎么能往北边发呢?所以沈阳站就会跟北京站联系, 告诉他:你发的不对,你应该往南边的XXX站发送才对。ICMP中的redirect就是起这个作用的,当路由设备发现某个数据包经过自己不是最优路径时 就会给源地址发一个redirect数据包,告诉对方发的路径不合适,并且指出应该发往的地址。这个功能是很有用的,不过如果被攻击者使用情况就完全不一 样了,他们可以使用这一功能将正常(合理)的路由地址给修改为一个不合理的甚至不存在的地址,这样就会给通讯造成问题,另外,有一些还会将目标地址设置为 他们自己可以控制的主机的地址,这样就可以截获数据了!跟redirect相关的还有router-advertisement、router- solicitation等类型的ICMP数据包。

当然,除了这三种还有很多攻击的类型,比如我们下面会说到的destination-unreachable、source-quench、time-exceeded等类型的攻击。

可能看到这里有的读者就觉得不容易理解了:echo-request、redirect、destination-unreachable等等到底是什么东西呢?其实这都是ICMP的类型,下面学生就来给大家介绍ICMP的类型。

ICMP的类型

ICMP 数据包主要包含三部分内容:类型、代码和附加数据,其中的类型和代码属于包头,代码(code)相当于类型(type)下的细分子类型,我们也可以理解为 他们共同来决定一个ICMP包的类型,比如学生上面给大家讲的redirect的type为5,不过5这个type下面还有4个code——0,、1、 2、3,他们所表示的含义如下表所示

表1:ICMP包Redirect类型表

系统管理

具体更多的代码学生就不在这里罗列了,大家很容易就可以找到。在ICMP数据包中type和code就像excel中的两个单元格,只要将相应的数据填入,主机就可以知道这个ICMP包的类型了。

这里的type和code我们当然是不需要记的,在使用的时候只需要用名字就可以了,比如type为8的数据包我们直接写Echo request、type为0的数据包我们直接写Echo Reply就行了,下面学生简单地给大家介绍几个常见的类型

  • Echo request:需要回应的请求,也就是我们常说的ping请求
  • Echo Reply:对ping的回应报文(pong)
  • Destination Unreachable:目标不可达
  • Source Quench:源地址资源紧张,正常情况下当我们要发送数据的路由设备请求过多时就会发出这种ICMP包
  • Time Exceeded:超时,比如TTL用完后就会产生这种类型的数据包

Firewalld针对ICMP攻击的防御方法

firewalld中有专门针对icmp报文的配置方法,而且使用起来也非常简单,我们只需要将firewalld所支持的icmp类型配置到所使用的zone中就可以了,要查看firewalld所支持的icmp类型可以使用下面的命令

firewall-cmd [--permanent] --get-icmptypes

默认的返回结果如下

destination-unreachable echo-reply echo-request parameter-problem redirect 
router-advertisement router-solicitation source-quench time-exceeded

这里的类型前面学生基本都给大家介绍过了,下面来学生来给大家讲怎么使用。跟icmptype相关的命令主要有四个

firewall-cmd [--permanent] [--zone=zone] --list-icmp-blocks
firewall-cmd [--permanent] [--zone=zone] --add-icmp-block=<icmptype>
firewall-cmd [--permanent] [--zone=zone] --remove-icmp-block=<icmptype>
firewall-cmd [--permanent] [--zone=zone] --query-icmp-block=<icmptype>

他们分别用于列出zone中所阻止的所有icmp类型、添加、删除和查询某个具体的icmp类型,如果指定zone则对具体zone进行操作,否则对当前活动的zone进行操作。

icmp配置文件的结构也非常简单,除了short和description外只有一个destination节点,可以设置对ipv4和ipv6的支持与否。

补充与建议

对于firewalld中的icmp设置大家要特别注意下面三点

1、firewalld只可以阻止指定类型的icmp包,没有其他更多的配置选项

2、如果使用drop、reject这些zone的话,默认所有icmp类型都会阻塞

3、默认情况下firewalld中所配置的icmp类型主要是针对入包的,而对于主机发出的包是不会拦截的。另外,在前面学生跟大家说过firewalld是一款有状态的防火墙,也就是说不同连接之间的关系firewalld在内部是有记录的,所以即使我们将echo-reply设置到zone中之后再去使用本机ping其他主机也是可以收到回复的,这是因为firewalld底层可以识别出那个echo-reply是我们发生去请求的回应。

对于具体哪个类型应该阻止,哪个应该放行大家需要根据自己的实际情况来设定,学生下面给大家提供一些思考的方向和建议。

  • destination-unreachable:当收到这种类型数据包之后相应地址的连接将会被断开,如果是攻击者伪造的数据包,那么会将我们的很多正常连接断开。当将其设置到zone中后我们本机发送的请求还是可以收到destination-unreachable类型回复的,只是直接发给我们的destination-unreachable数据包进不来了,所以建议大家可以阻止。

  • echo-request:主要用于接收ping请求,阻塞之后我们的主机将不可被ping,不过打开后又有可能被攻击,有种惯用的做法是设置开通的频率,比如1秒钟只可以被ping一次,不过这种功能直接使用学生上面给大家介绍的方法是无法设置的,不过没关系,当学习了学生下一节将要给大家介绍的firewalld中的direct之后就可以设置了。

  • echo-reply:这是回应ping信息的包,一般来说我们应该将其阻止,因为他跟destination-unreachable一样,如果是我们本机发出的即使设置了阻止也还是可以接收到的。

  • parameter-problem:当接收到的报文参数错误,无法解析时会返回这种类型的报文。

  • redirect:这种报文学生在前面已经给大家详细介绍过,这里就不再重述了。

  • router-advertisement和router-solicitation:这是一对报文,他们的作用是用来发现路由设备的地址,主机发出router-solicitation类型数据包来查找路由设备,路由设备可以发出router-advertisement类型ICMP数据包来告诉主机自己是路由设备

  • source-quench:这个学生也给大家介绍过了,当源地址设备(比如路由设备)资源紧张时就会发出这种数据包

  • time-exceeded:数据包超时。

最后还是那句话,没有最优配置方法(否则就不需要配置了),大家需要根据自己的实际情况进行配置。

firewalld规则配置介绍

在基于RHEL7的服务器上,firewalld是一个可动态管理的防火墙服务,提供IPv4和IPv6防火墙规则定义和区域的支持。它可以直接代替iptables管理服务器的网络活动,能直接作用于内核的netfilter代码。
本文简要介绍了如何通过firewall-cmd命令管理和配置防火墙,假定所有命令都以root权限执行。

一. 启动和状态

1. 查询firewalld运行状态

$ firewall-cmd --state

如果返回not running,表示服务没有启动,输入下面命令启动firewallD

$ service firewalld start

对firewalld做了修改,通过下面的命令执行

$ firewall-cmd --reload

配置好firewalld之后,通过systemd命令使服务开机启动

$ systemctl enable firewalld

二. 规则设置

1. 查询firewalld当前规则

$ firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http ssh ssh-custom
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:

2. 添加删除service规则

添加httpservice

$ firewall-cmd --permanent --zone=public --add-service=http

删除httpservice

$ firewall-cmd --permanent --zone=public --remove-service=http

3. 添加删除port规则

允许放行7777 TCP端口

$ firewall-cmd --permanent -zone=public --add-port=7777/tcp

允许放行多个端口

$ firewall-cmd --permanent -zone=public --add-port=7777-8000/tcp

删除端口

$ firewall-cmd --permanent --zone=public --remove-port=7777/tcp

查看当前打开的端口

$ firewall-cmd --zone=public --list-ports

4. 通过”RICH LANGUAGE”创建复杂规则

rich rule 命令的格式和结构如下所示

rule [family="rule family"]
[ source [NOT] [address="address"] [mac="mac-address"] [ipset="ipset"] ]
[ destination [NOT] address="address" ]
[ element ]
[ log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"] ]
[ audit ]
[ action ]

NOTE: 一条rule作用于一个特定的zone。一个zone可以包含多条rule。如果几条rule互相影响或产生冲突,第一条匹配的rule会生效。

  • 封锁一个IP
$ firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.1' reject"
  • 封锁一个IP段, 192.168.1.0 ~ 192.168.1.254
$ firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' reject"

更详细rich rule的介绍参见redhat文档:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html

5. 关于192.168.1.0/24的说明

192.168.0.0/24
表示网络码占24位,就是说该网络上可以有254个主机(2^8-2)
IP范围:192.168.0.1~192.168.0.254 192.168.0.255是广播地址,不能被主机使用

192.168.0.0/16
表示网络码占16位,也就是说该网络上可以有65534个主机(2^16-2)
IP范围:192.168.0.1~192.168.255.254 192.168.255.255是广播地址,不能被主机使用。

Firewalld常用命令介绍

Firewalld防火墙中所使用到的命令可以分为三大类:安装卸载、维护和策略操作。

安装

在Centos7中默认已经安装了firewalld,如果需要自行安装,可以直接使用yum安装

[[email protected] ~]# yum install firewalld

如果需要使用图形化配置工具还需要安装firewall-config

[[email protected] ~]# yum install firewall-config

这样firewalld就安装完成了,不过要注意firewalld跟iptables不能同时使用,所以在使用firewalld之前首先需要将iptables停用。

维护命令

firewalld的维护相对来说是非常简单的,其命令主要分为三大类:启动停止和查询状态、设置开机自动启动以及更新规则。

启动停止和查询状态

在Centos7中默认将原来的服务管理工具service升级为了systemctl,其实原来的service只是一个脚本执行工具,而systemctl的功能非常强大,关于systemctl的详细用法大家可以阅读linux中国的一篇文章,地址是:https://linux.cn/article-5926-1.html,这篇文章写的非常详细,所以学生就不再给大家做补充了,下面来说一说怎么用它来操作firewalld。

启动

[[email protected] ~]# systemctl start firewalld

停止

[[email protected] ~]# systemctl stop firewalld

重启

[[email protected] ~]# systemctl restart firewalld

查询状态

[[email protected] ~]$ systemctl status firewalld

另外,对于firewalld来说还可以使用自身的firewall-cmd工具来查询运行状态

[[email protected] ~]$ firewall-cmd --state

设置开机自动启动

设置开机自动启动也是使用systemctl来操作的,命令如下

启用开机自动启动

[[email protected] ~]$ systemctl enable firewalld

禁用开机自动启动

[[email protected] ~]$ systemctl disable firewalld

查看自动启动状态

[[email protected] ~]$ systemctl is-enabled firewalld

当然,systemctl的这些命令不只适用于firewalld,也适用于其他服务,使用时只要将firewalld换成相应服务的名称就可以了。

更新规则

直接使用firewall-cmd修改的规则是不需要更新就可以直接生效的,但是如果加了–permanent参数,或者直接编辑xml文件之后就需要我们手动reload了,firewall-cmd提供了两个更新规则的参数:–reload和–complete-reload,前者只是更新需要更新规则,而且更新的过程中不会影响现有的连接,而后者在更新时会将所有的规则清除掉然后重建,而且为了安全考虑,在更新之前首先会将策略设置为DROP,等更新完成之后再恢复为ACCEPT,这样就会对现有连接造成影响,所以如果没有特殊需求我们应该尽量使用前者。具体命令如下

[[email protected] ~]# firewall-cmd --reload
[[email protected] ~]# firewall-cmd --complete-reload

策略操作

对于firewalld来说最重要的就是策略操作了,策略操作主要有三种方法:使用firewall-config操作、使用firewall-cmd操作和直接编辑xml文件,学生在上节已经给大家介绍过了,firewall-config是图形化工具,firewall-cmd是命令行工具,我们这里主要以命令行工具为主来给大家介绍。

firewall-cmd中关于规则的命令非常多,如果在这里全部列出来再给大家解释一遍应该效果也不会太好,所以学生在后面讲到具体相关内容时再给大家讲相应的命令,比如讲到zone的时候给大家介绍跟zone相关的命令,这样大家更容易理解和记忆。

firewall-cmd中的命令虽然非常多,但是有四大类使用频率非常高的命令:–add-xxx、–remove-xxx、–query-xxx、–get-xxx以及–list-xxx,这里前两个非常容易理解,一个是添加一个是删除,而后三个从名字上就不太容易区分了,下面学生给大家解释一下。

  • –query-xxx主要用于布尔值的查询,比如
[[email protected] ~]$ firewall-cmd --zone=public --query-service=ssh

这个命令用于查询在public这个zone中是否包含ssh这个服务。

  • –get-xxx主要用于获取特定的内容,比如
[[email protected] ~]$ firewall-cmd --get-zones

这样就可以获取到预设的zones,默认情况下返回结果为

block dmz drop external home internal public trusted work
  • –list-xxx主要用于按一定条件进行查询(不过有的list命名也不需要条件),比如
[[email protected] ~]$ firewall-cmd --zone=public --list-services

这个命令可以返回public这个zone中所包含的services。

query还是比较容易理解的,但是get和list从字面上并不容易区分,刚开始学生以为get命令用于获取单个结果,list用于获取多个结果,但后来发现并不是这样。当然,我们在使用的时候按照文档中的说明来使用就可以了。

另外,在firewall-cmd中有一个比较特殊的参数:

–permanent,他表示是否将修改后的规则保存下来,如果不加这个参数,那么所做的修改当时会立即生效,但是在firewalld重启之后就会丢失,而加上这个参数后所做的修改就会永久保存下来,不过这时的修改不会立即生效而是需要reload后才可以生效。其实这个也非常容易理解,当不加–permanent修改规则时firewalld会实际修改运行时的规则,而如果加了这个参数firewalld其实是去修改的xml配置文件,和我们直接编辑xml文件一样,所以就需要reload才可以生效。

CentOS 7 firewalld防火墙简单配置介绍

学习apache安装的时候需要打开80端口,由于centos 7版本以后默认使用firewalld后,网上关于iptables的设置方法已经不管用了,想着反正iptable也不会用,索性直接搬官方文档,学习firewalld了,好像比iptables要简单点了。

官方文档地址:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html#sec-Introduction_to_firewalld

1、firewalld简介

  • firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念

  • firewalld有图形界面和工具界面,由于我在服务器上使用,图形界面请参照官方文档,本文以字符界面做介绍

  • firewalld的字符界面管理工具是 firewall-cmd

  • firewalld默认配置文件有两个:/usr/lib/firewalld/ (系统配置,尽量不要修改)和 /etc/firewalld/ (用户配置地址)

zone概念:

硬件防火墙默认一般有三个区,firewalld引入这一概念系统默认存在以下区域(根据文档自己理解,如果有误请指正):

  • drop:默认丢弃所有包
  • block:拒绝所有外部连接,允许内部发起的连接
  • public:指定外部连接可以进入
  • external:这个不太明白,功能上和上面相同,允许指定的外部连接
  • dmz:和硬件防火墙一样,受限制的公共连接可以进入
  • work:工作区,概念和workgoup一样,也是指定的外部连接允许
  • home:类似家庭组
  • internal:信任所有连接

对防火墙不算太熟悉,还没想明白public、external、dmz、work、home从功能上都需要自定义允许连接,具体使用上的区别还需高人指点

2、安装firewalld

root执行 # yum install firewalld firewall-config

3、运行、停止、禁用firewalld

  • 启动:# systemctl start firewalld
  • 查看状态:# systemctl status firewalld 或者 firewall-cmd –state
  • 停止:# systemctl disable firewalld
  • 禁用:# systemctl stop firewalld

4、配置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特性之一动态添加规则,第二个需要断开连接,类似重启服务

将接口添加到区域,默认接口都在public

# firewall-cmd --zone=public --add-interface=eth0

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

设置默认接口区域

# firewall-cmd --set-default-zone=public

立即生效无需重启

打开端口(貌似这个才最常用)
查看所有打开的端口:

# firewall-cmd --zone=dmz --list-ports

加入一个端口到区域:

# firewall-cmd --zone=dmz --add-port=8080/tcp

若要永久生效方法同上

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

# firewall-cmd --zone=work --add-service=smtp

移除服务

# firewall-cmd --zone=work --remove-service=smtp

还有端口转发功能、自定义复杂规则功能、lockdown,由于还没用到,以后再学习。