您现在的位置是:首页 > 文章详情

centos7/rhel7新特性详解(1)

日期:2017-04-13点击:410

RHEL7/CENTOS7新特性:

1、身份管理

kerberos的跨平台信任机制:kerberos将完全兼容微软活动目录,实现完全使用活动目录进行认证。

REALMD:该功能简化了RHEL 加入微软活动目录的配置,支持自动发现域信息。

RHEL 7增加了两个关键性的新特征改善了RHELAD的处理方式。现在,RHEL7AD之间建立了跨域信任(Cross-realm trusts),因此AD用户可以在Linux端无需登录就能访问资源。RHEL 7增加的另外一个AD相关的功能是realmd,实现自动化查询与添加AD(或其他红帽认证服务)DNS信息。

2、性能管理

性能辅助工具:RHEL7 提供了一个新的框架和一个新的通用图形界面来×××能辅助管理。可以收集、分析系统瓶颈。

调优和调优配置:RHEL7 提供了动态调优方案,来解决系统性能瓶颈问题。系统管理员也可以手动修改系统预置的方案来达到调优的效果

3、虚拟化

增强RHEL7虚拟机:完全兼容vmwarevshpere架构,RHEL7 自带 open vmtool 3D图形驱动和OpenGLX11 的支持。使得RHEL7 部署在vmware平台更加方便。RHEL 7 同时支持vmware esxi 之间快速通信。

虚拟I/O:为每台虚拟机提供了调用底层PCI 设备的接口,实现内核级别的隔离。提高了机器的安全性和兼容性
虚拟机USB3.0接口支持
QCOW2格式文件型快照支持
嵌套虚拟化支持,可以在KVM中安装配置OpenStack
加强了对VMWARE的技术支持,自带open-vm-tools替换vm-tools
支持最热的技术Docker
Docker是基于目前流行的应用虚拟化技术。应用被打包在Docker中,与系统和其他应用完全隔离,因此可以在系统之间迁移并正常运行。

4、文件系统

RHEL7 选择XFS作为其默认的文件系统,

RHEL7.0在安装的时候就默认使用了XFS,并不是说原有的EXT文件系统不再使用,RHEL7仍然是支持ext4.而是面对未来爆炸式增长的数据量,ext文件系统已经显得原来越力不从心。XFS文件系统完全为大数据而生,单个文件系统最大可以支持到8EB大小,单个文件的大小最大可达到16T,并且提供了丰富的日志系统,是应对大数据存储的强大的文件系统。

XFS是扩展性高、高性能的文件系统。也是rhel7/centos7的默认文件系统。

可通过工具xfsdumpxfsrestore来备份和恢复xfs文件系统,

6、网络管理

新增网络管理接口NMCLI

7、服务管理

使用systemctl 调用服务脚本

RHEL7中使用systemd取代了原有的sysV,由systemd来管理系统中的服务。Systemd定义了与原来sysV init进程完全不同的方式对服务和系统进程进行管理。使得系统中的服务可以自动解决服务之间的依赖关系,并且可以支持服务的并行启动!也就是说,RHEL7.0比原有的sysV操作系统启动速度更快,更稳定,同时也可以完美的支持Docker

8RHEL7桌面

使用最新的Gnome 3为默认桌面环境,使用最新的KDE 4.10为备选桌面环境。

一、RHEL7安装体验:

生产服务器如果是大内存(4G以上内存),建议安装64位版本rhel-server-7.0-x86_64-dvd.iso

启动加载后如下图:

   

wKiom1ju4s_AgZEbAAARlUDdim8086.png-wh_50

                        

界面说明:

InstallRed Hat Enterprise Linux 7.0   安装RHEL7系统

Testthis media & install Red Hat Enterprise Linux 7.0  测试安装介质及安装RHEL7系统 (相对于RHEL6来,将检测媒介提前到初始安装页面中)

Troubleshooting 故障排除

选择Troubleshooting可以从下面界面看到:

wKiom1ju4t-DslDQAAAK4pwiKr8773.png-wh_50

安装基本的图形模式

安装救援系统

从本地驱动器启动

内存测试

返回菜单

返回菜单,选择第一项Install Red HatEnterprise Linux 7.0 按回车,系统开始安装见下图:

wKiom1ju4wigK0qsAACdwSScKBk556.png-wh_50

安装过程语言的选择,正式生产服务器建议安装英文版本,这里保持默认英文点击下一步

wKioL1ju4xWTKtD1AABOwNOvF4k274.png-wh_50

单击continue

进入到了安装汇总页面,从此页面显示三大块分别为:

LOCALIZATION 本地化:可以看在此下面配置时间时区,键盘设置以及语言

SOFTWARE 软件:SOFTWARE下面可以到安装来源和自定义软件安装,默认系统选择最小化的安装

SYSTEM  系统:安装目标设备和网络配置

wKiom1ju4yWhmo8FAABa7nTMbdg087.png-wh_50

附:

可以在system系统中的installation destination进行磁盘分区管理:自动分区和手动分区

这里我创建如下分区:

/boot 分区     500MB

swap分区      4096MB(一般设置为内存的2倍)

/分区剩余全部空间

备注:生产服务器建议单独再划分一个/data分区存放数据

wKiom1ju4zbQnhzXAABehVOJ0Sg628.png-wh_50

点击左上角的done,进入下面的界面

wKioL1ju40KhcLfmAABa6eS_Z_M397.png-wh_50

点击accept changes,回到安装汇总页面,点击begin installation,进入下面界面:

wKioL1ju43CxupUVAAAt4ak75OM421.png-wh_50

选择user settingsroot password,设置root账户的口令。

wKiom1ju44HT6TsRAABZiD37v90784.png-wh_50

安装完成之后,点击reboot重启

在用U盘装完CentOS后,重新开机启动后显示:
Initialsetup of CentOS 
Linux 7 (core)
1) [x]Creat user 2) [!] License information
(no userwill be created) (license not accepted)
Pleasemake your choice from above [‘q’ to quit | ‘c’to continue | ‘r’ to refresh]:
解决方法:
输入“1”,按Enter键
输入“2”,按Enter键
输入“q”,按Enter键
输入“yes”,按Enter键

重启后进入到初始安装界面,配置license 及注册设置。

系统首次初始化后,就进入了启动界面

wKiom1ju45DwfEEEAAAc8xCbLk4956.png-wh_50

第一项是正常启动系统,第二项是以恢复启动系统。

1:系统默认编码设置文件,由/etc/sysconfig/i18n 更改为 /etc/locale.conf该文件主定义你当前系统的语言环境变量设置,这里是LANG=”en_US.UTF-8”、系统预置了那些

语言支持,

2:常用命令安装:查看anaconda-ks.cfg,确定是否装base软件组

wKiom1ju49TR27c2AAAB12QHSkM242.png

显示部份信息如下:

wKiom1ju4-jiDxztAAAGzEvDhzc359.png-wh_50

若没安装base软件组,则一些常规命令如ifconfig等就无法使用。可以使用yumgroupinstall base安装base软件组。


二、rhel7默认运行级别和终端分辨率修改

修改默认运行级别:

rhel7.0 做了很多大的改变,打开inittab看下

wKiom1ju4_qT3i3cAAA142XxU6s962.png-wh_50

# inittab is no longer used whenusing systemd.      

/etc/inittab 这个文件已经不再使用,systemd对linux来说就是一个init程序,可以作为sysVinit和Upstat的替代。

systemd使用比sysvinit的运行级别更为自由的target概念作为替代

第三运行级:multi-user.target

第五运行级:graphical.target

#前者是符号链接指向了后面的target

runlevel3.target-> multi-user.target

runlevel5.target-> graphical.target

如下图所示:

wKiom1ju5AjibSNUAAA3y6q8cCM940.png-wh_50


修改开机默认运行级别:

方法1

默认级别转换为3(文本模式)

ln -sf /lib/systemd/system/multi-user.target/etc/systemd/system/default.target

或者默认级别转换为5(图形模式)

ln -sf /lib/systemd/system/graphical.target/etc/systemd/system/default.target

重启:reboot

方法2

systemctl set-default multi-user.target

用这个systemctl命令来查看默认目标。

systemctl get-default

切换运行级别:

方法1

切换到:运行级3

这两种都可以

systemctlisolate multi-user.target systemctlisolate runlevel3.target

切换到:运行级5

这两种都可以

systemctlisolate graphical.target systemctlisolate runleve5.target

方法2

init  [0123456]

#查看当前运行的级别

runlevel //仍然可用

修改安字符终端分辨率:

由于是在VM里面安装的,完了之后终端界面的分辨率非常高,很难操作

因为RHEL7用了grub2,而不再是grub了,在grub2中要修改的文件是/boot/grub2/grub.cfg;

这里有一张分辨率的对照表(在grub.cfg中添加vga=ask,系统重启后就会询问要设置的分辨率。)

wKiom1ju5Gnz36CFAADoYQINyns538.jpg-wh_50

修改前:

wKioL1ju5JWSgR0kAAASqnvLS9U297.jpg

修改后,在后面添加vga=0x???(问号代表分辨率代码)

wKiom1ju5KaRdccMAAAfN7kvM5o460.jpg

附:如何实现rhel7图形界面自动登陆:

首先找到/etc/gdm/custom.conf文件

然后在custom.conf文件里在daemon下加入下面的内容:

AutomaticLoginEnable=true  AutomaticLogin=root

三、设置主机名

rhel7不再使用/etc/sysconfig/network设置主机名,而是使用/etc/hostname文件,下面就介绍有关rhel7设置主机名的几种方法。

方法:1

修改/etc/hostname文件设置主机名。

方法:2

执行hostnamectl命令

使用hostnamectl命令, hostnamectl set-hostname name,再通过hostname或者hostnamectl status 命令查看更改是否生效。

方法:3

执行nmtui命令

使用nmtui命令会弹出一工具界面

wKiom1ju5PHCc1eNAAAE89YZ5J0544.png-wh_50

选择第三项"set system hostname"修改主机名

wKiom1ju5QuxFOnfAAADiKn1LJI597.png-wh_50

修改后选择"ok"退出nmtui工具。

执行systemctl restart systemd-hostnamed 执行hostname或hostnamectl查看。

方法:4

执行nmcli命令

nmcli general hostname查看主机名 nmcli general hostnamemy-server 设置主机名 执行systemctl restartsystemd-hostnamed使修改生效

四、设置IP地址、网关和DNS

RHEL7里面的网卡命名方式从eth0,1,2的方式变成了enoXXXXX的格式。 en 代表的是enthernet (以太网),o 代表的是onboard (内置),那一串数字是主板的某种索引编号自动生成,以便保证其唯一性。和原先的命名方式对比,这种新的方式比较长,难以记忆,不过优点在于编号唯一,做系统迁移的时候不容易出错。

说明:RHEL 7.0默认安装好之后是没有自动开启网络连接的!

方法1、进入网络置配文件目录,修改网卡配置文件,如下图所示:

TYPE="Ethernet|Bridge"网络接口类型 BOOTPROTO="static|none"  #启用静态IP地址(BOOTPROTO=dhcp启用动态获取IP) DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes|no"  是否支持IPV6 USERCTL="yes|no"   是否允许普通用户控制此接口 PEERDNS="yes|no"  是不是接受DHCP服务器指派的DNS服务器地址 IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" NAME="eno16777736" UUID="8071cc7b-d407-4dea-a41e-16f7d2e75ee9" 设备标识号 ONBOOT="yes"  #开启自动启用网络连接(默认值为no) IPADDR0="192.168.21.128"  #设置IP地址   只有在BOOTPROTO={none|static}设置才有效 PREFIX0="24"  #设置子网掩码   此设置也可用 PREFIX=n (n为掩码位数) GATEWAY0="192.168.21.2"  #设置网关      要与IP地址属于同一网段 DNS1="8.8.8.8"  #设置主DNS DNS2="8.8.4.4"  #设置备DNS HWADDR="00:0C:29:EB:F2:B3" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" service networkrestart   #重启网络

查看ip信息:

Ifconfig命令或 ip  addr  show 或 ip  addr show dev 网络设备名或 ip addr查看所有网卡信息。

#ip  addr show dev eno16777736

wKioL1ju5ejxptwuAAAfKg1CD-g514.png-wh_50

1.接口状态 

2.硬件

3.IPv4地址与子网

4.广播地址,范围,设备名称

5.IPv6信息

ip 命令现实关于网络性能的统计信息,接收(RX)发送(TX)数据包。

wKioL1ju5fXQJvYZAAAg3jyBQdI767.png-wh_50

nmcli connection show网卡信息

wKioL1ju5gXDZcUkAAAbaPGT1K0959.png-wh_50

测试网络是否正常:

ping www.baidu.com  #测试网络是否正常

traceroute 和 mtr 显示出我们到达一个网络所经过的路由信息

yum -y install traceroute

yum -y install mtr

traceroutewww.baidu.com

mtrRed Hat自带的工具,结合了"traceroute""ping"功能于一身诊断工具

wKiom1ju5hzxrxdMAAAUqGRA3z0759.png-wh_50

第一列:显示的是IP地址和本机域名,这点和tracert很像

第二列:是显示的每个对应IP的丢包率
第三列:snt设置每秒发送数据包的数量,默认值是10 可以通过参数 -c来指定

第四列:显示的最近一次的返回时延
第五列:是平均值这个应该是发送ping包的平均时延
第六列:是最好或者说时延最短的
第七列:是最差或者说时延最常的
第八列:是标准偏差

ethtool:查看网路接口设备本身的属性

ethtool  网卡接口名称

方法2:执行nmtui命令

使用nmtui命令会弹出一工具界面

wKiom1ju5iyBmkGeAABqnkXRuVI892.png-wh_50

重启network服务。

方法3通过nm-connection-editor来配置连接(注:必须在图形界面下运行)

wKioL1ju5j2jXR26AAAdBtznx38555.png-wh_50

配置好了,重启网络服务,执行ifconfigip addr发现已经获取了新的地址。

一旦该连接建立成功,在/etc/sysconfig/networks-scripts下面就会自动创建同名的配置文件

方法4nmcli命令

nmcli是个很强大的命令,后面一大堆选项和对象可以配置。看看帮助文档,对象可以是综合信息,网络,信号和连接。这里我们主要是学习连接的配置使用

wKioL1ju5k7j8V0JAABObFdEu1M605.png-wh_50

如何配置连接,还是先看看帮助,他后面可以跟showup, down, add, modify, edit, delete, reload,

wKioL1ju5l3QtGWwAAA-7YLCu9w369.png-wh_50

看看device有哪些参数

wKiom1ju5nTwXKqDAAAnMstPjeI512.png-wh_50

wKioL1ju5oChorfUAAA4qJ67V2Q332.png-wh_50

查看具体的设备信息可以通过 nmcli connection show 设备名来查看

wKiom1ju5pmC2B5MAAAmlZxIqDY360.png-wh_50

添加一个新连接,先先看看帮助

修改现有连接,可以先先看看帮助

nmcliconnection modify --help

 附:修改RHEL7的网卡名称

RHEL7安装完成之后,默认的网卡名称是eno16777736

输入如下命令,进入对应目录,编辑文件:

vim /etc/sysconfig/grub

然后,往这个文件中添加“net.ifnames=0biosdevname=0”内容,作用是禁用该可预测命名规则,如下图所示:

wKiom1ju5yqh9i-NAAAket1AxJM176.png-wh_50

接着执行下面的命令,效果如下:

wKiom1ju57KgHPP-AAA3GKH96MI979.png-wh_50

然后,重启系统后查看网卡名称

wKioL1ju58Gyt5h7AAA4jJsesT4055.png-wh_50

五、服务控制

Systemdlinux来说,就是一个init程序,可以作为sysVinitUpstat的替代

RHEL7监视和控制systemd的主要命令是systemctl,该命令可以用于查看系统状态和管理系统及服务。

RHEL7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system目录下。每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]

wKioL1ju59CgbjCCAAAjw0XB-Jk372.png-wh_50

[Unit]部分主要是对这个服务的说明,内容包括Description和After,Description用于描述服务,After用于描述服务类别

 

[Service]部分是服务的关键,是服务的一些具体运行参数的设置,这里Type=forking是后台运行的形式,PIDFile为存放PID的文件路径,ExecStart为服务的具体运行命令,ExecReload为重载命令,ExecStop为停止命令,注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!

 

[Install]部分是服务安装的相关设置,可设置为多用户的.

注意: 如果服务没有Install段落,一般意味着应该通过其它服务自动调用它们

使用systemd时,可通过正确编写单元配置文件来解决其依赖关系。典型的情况是,服务A要求服务B在A启动之前运行。在此情况下,向服务A配置文件中的 [Unit] 段添加Requires=B 和 After=B 即可

 

我们对servicechkconfig两个命令都不陌生,RHEL7系统中systemctl 是管制服务的主要工具,它整合了chkconfig service功能于一体。

systemctl命令的基本操作格式是:

systemctl   动作服务名.service

查看一下--help的信息

systemd提供更优秀的框架以表示系统服务间的依赖关系实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,systemd的目标是尽可能启动更少进程;尽可能将更多进程并行启动。

 

分析系统状态:

systemctl 或systemctl list-units  #输出激活的单元 systemctl list-units--type=service #列出active状态的服务 systemctl list-unit-files列出所有已安装服务 systemctl --failed #显示启动失败的服务 systemd-cgls以树形列出正在运行的进程

所有可用的单元文件存放在 /usr/lib/systemd/system/ /etc/systemd/system/ 目录(后者优先级更高)

使用单元:

一个单元可以是系统服务(.service)、挂载点(.mount)、sockets.sockets)。

使用 systemctl 控制单元时,通常需要使用单元文件的全名,包括扩展名(例如sshd.service)。但是有些单元可以在systemctl中使用简写方式。如果无扩展名,systemctl 默认把扩展名当作 .service。例如sshdsshd.service 是等价的。

挂载点会自动转化为相应的 .mount 单元。例如 /home 等价于 home.mount

设备会自动转化为相应的 .device 单元,所以 /dev/sda2 等价于 dev-sda2.device

systemctl start <单元>      #立即启动单元 systemctl stop <单元>      #立即停止单元 systemctl restart <单元>    #重启单元 systemctl reload <单元>     #重新读取单元配置 systemctl status <单元>     #输出单元运行状态 systemctl is-enabled <单元>   #检查单元是否配置为自动启动 systemctl enable <单元>     #开机自动启动单元 systemctl disable <单元>     #取消开机自动激活单元 systemctl is-active<单元>    #查看单元是不是正在运行 systemctl daemon-reload      #重新载入 systemd,扫描新的或有变动的单元

电源管理:

systemctl reboot    #重启 systemctl poweroff     #退出系统并停止电源

例如:

systemctl is-enablediptables.servicesystemctl is-enabled servicename.service  #查询服务是否开机启动systemctl enable *.service  #开机运行服务systemctl disable *.service  #取消开机运行systemctl start *.service  #启动服务systemctl stop *.service  #停止服务systemctl restart *.service  #重启服务systemctl reload *.service  #重新加载服务配置文件systemctl status *.service  #查询服务运行状态systemctl mask *.service  #禁用指定服务systemctl unmask *.service   #激活指用服务

注:*代表某个服务的名字,如http的服务名为httpd

案例:

查看服务的状况

wKiom1ju6Dywg_nrAAAiIrBr7HA600.png-wh_50

停止 sshd服务,查看状态

wKiom1ju6EmQkFrRAAAs4LhFC_Q915.png-wh_50

状态表示为dead服务已经停止。

disable 服务,禁止开机自动运行

wKioL1ju6FeAuo27AAAgxjTl4_0442.png-wh_50

开机自动加载,并启动该服务

wKioL1ju6HyQQIK0AAAOrrLAB-0524.png-wh_50

通过mask来禁用该服务,这样一旦服务终止,则无法再启动,必须通过unmask解除禁用才能使用systemctl start sshd 来运行服务

wKioL1ju6IiwzL7cAAAow8_1oN0750.png-wh_50

除了上面提到的基本功能,systemctl还可以查询当前加载的模块单元,注意后缀为service的才是我们需要管理的服务

wKiom1ju6JXDuazTAAAExtN0Pyw278.png-wh_50

可以通过 type来过滤掉其他类型的单元

systemctl list-unit-files –typeservice

六:防火墙

Redhat Enterprise Linux7已经默认使用firewalld作为防火墙,其使用方式已经变化。

基于iptables的防火墙被默认不启动,但仍然可以继续使用。

RHEL7中有几种防火墙共存:firewalldiptablesebtables等,默认使用firewalld作为防火墙,管理工具是firewall-cmdRHEL7的内核版本是3.10,在此版本的内核里防火墙的包过滤机制是firewalld,使用firewalld来管理netfilter,不过底层调用的命令仍然是iptables等。因为这几种daemon是冲突的,所以建议禁用其他几种服务

wKiom1ju6KaRsaU1AABXsvlHH7U109.png-wh_50

例如若要禁用iptablesip6tablesebtables防火墙,方法如下图

wKioL1ju6LPjXC_yAAAEBRTlbmk886.png

wKiom1ju6MfRzToYAAACsmsWCoA230.png

查看这几种服务是否正在运行

wKioL1ju6NTBlvvyAAA2JDI5Gcc422.png-wh_50

wKiom1ju6OmjJlEwAAADrS82Wms896.png-wh_50

RHEL7虽然有iptables但是不建议使用了,使用新的firewalld服务。

查看firewalld软件包是否安装

wKiom1ju6PeBTGV4AAABt5HzsVE103.png-wh_50

Firewalld提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的防火墙管理工具。拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。以前的 system-config-firewall防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。相反,firewall daemon 动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。

wKioL1ju6QmB6gMvAABYDMNU7NY004.jpg-wh_50

什么是区域:网络区域定义了网络连接的可信等级。

wKioL1ju6SXhm7DKAAALOTDM_eE017.png

 数据包要进入到内核必须要通过这些zone中的一个,而不同的zone里定义的规则不一样(即信任度不一样,过滤的强度也不一样)。可以根据网卡所连接的网络的安全性来判断,这张网卡的流量到底使用哪个zone,比如上图来自eth0的流量全部使用zone1的过滤规则,eth1的流量使用zone2。一张网卡同时只能绑定到一个zone

预定义的服务:服务是端口和/或协议入口的组合。

 

端口和协议:定义了 tcp udp 端口,端口可以是一个端口或者端口范围。          

 

ICMP 阻塞:可以选择 Internet控制报文协议的报文。这些报文可以是信息请求亦可是对信息请求或错误条件创建的响应。

 

伪装:私有网络地址可以被映射到公开的IP地址。这是一次正规的地址转换。

 

端口转发:端口可以映射到另一个端口以及/或者其他主机。

 

在进行firewalld配置之前,我想来讨论一下区域(zones)这个概念。默认情况就有一些有效的区域。由firewalld 提供的区域按照从不信任到信任的顺序排序。

丢弃区域(Drop Zone):如果使用丢弃区域,任何进入的数据包将被丢弃。这个类似与我们之前使用iptables -j drop。使用丢弃规则意味着将不存在响应。 阻塞区域(Block Zone):阻塞区域会拒绝进入的网络连接,返回icmp-host-prohibited,只有服务器已经建立的连接会被通过即只允许由该系统初始化的网络连接。 公共区域(Public Zone):只接受那些被选中的连接,默认只允许 ssh 和 dhcpv6-client。这个 zone 是缺省 zone 外部区域(External Zone):这个区域相当于路由器的启用伪装(masquerading)选项。只有指定的连接会被接受,即ssh,而其它的连接将被丢弃或者不被接受。 隔离区域(DMZ Zone):如果想要只允许给部分服务能被外部访问,可以在DMZ区域中定义。它也拥有只通过被选中连接的特性,即ssh。 工作区域(Work Zone):在这个区域,我们只能定义内部网络。比如私有网络通信才被允许,只允许ssh,ipp-client和 dhcpv6-client。 家庭区域(Home Zone):这个区域专门用于家庭环境。它同样只允许被选中的连接,即ssh,ipp-client,mdns,samba-client和 dhcpv6-client。 内部区域(Internal Zone):这个区域和工作区域(Work Zone)类似,只有通过被选中的连接,和home区域一样。 信任区域(Trusted Zone):信任区域允许所有网络通信通过。记住:因为trusted是最被信任的,即使没有设置任何的服务,那么也是被允许的,因为trusted是允许所有连接的

以上是系统定义的所有的 zone,但是这些 zone 并不是都在使用。只有活跃的 zone 才有实际操作意义。

Firewalld的原则:

如果一个客户端访问服务器,服务器根据以下原则决定使用哪个 zone 的策略去匹配 1.如果一个客户端数据包的源 IP 地址匹配 zone 的 sources,那么该 zone 的规则就适 用这个客户端;一个源只能属于一个zone,不能同时属于多个zone。 2.如果一个客户端数据包进入服务器的某一个接口(如eth0)区配zone的interfaces, 则么该 zone 的规则就适用这个客户端;一个接口只能属于一个zone,不能同时属于多个zone。 3.如果上述两个原则都不满足,那么缺省的zone 将被应用

你可以使用任何一种 firewalld 配置工具来配置或者增加区域,以及修改配置。工具有例如firewall-config 这样的图形界面工具, firewall-cmd 这样的命令行工具,或者你也可以在配置文件目录中创建或者拷贝区域文件,/usr/lib/firewalld/zones 被用于默认和备用配置,/etc/firewalld/zones被用于用户创建和自定义配置文件。

命令行工具firewall-cmd支持全部防火墙特性,基本应用如下:

一般应用:

1、  获取firewalld状态

wKioL1ju6VSBIeL0AAABolmn-CA593.png

2、在不改变状态的条件下重新加载防火墙:

wKioL1ju6WLihQldAAABk7YWYw8165.png

如果你使用--complete-reload,状态信息将会丢失。

3、获取支持的区域列表

wKiom1ju6XDQTk1qAAACuJtIcGM624.png

这条命令输出用空格分隔的列表

4、获取所有支持的服务

wKiom1ju6YLRJPutAAAwXr-QNs4158.jpg

这条命令输出用空格分隔的列表。

服务是firewalld所使用的有关端口和选项的规则集合。被启动的服务会在firewalld服务开启或者运行时自动加载。默认情况下,很多服务是有效的。使用下面命令可列出有效的服务。

想要列出默认有效的服务,也可以进入下面的目录也能够取得。

# cd /usr/lib/firewalld/services/

wKiom1ju6Zbw7u46AABhD1wRtoE358.png-wh_50

想要创建自己的服务,需要在下面的目录下定义它。比如,现在我想添加一个rhmp服务,端口号1935。首先,任选一个服务复制过来。

wKiom1ju6a_ivAS0AAAX03F85ZM864.png-wh_50

接下来把复制过来的文件重命名为“rtmp.xml”,

接下来打开并编辑文件的头部、描述、协议和端口号,以供RTMP服务使用,如下图所示。

wKioL1ju6hXQwQZAAAAGDYGTHEU199.png-wh_50

重启firewalld服务或者重新加载设置,以激活这些设置。

# firewall-cmd --reload

为确认服务是否已经启动,运行下面的命令获取有效的服务列表。

# firewall-cmd --get-services

wKiom1ju6jDxV2GtAAAvaR9ZXPk587.jpg-wh_50

5、获取所有支持的ICMP类型

wKiom1ju6lTAifZkAAARI8l5IRw730.png-wh_50

这条命令输出用空格分隔的列表。

6、列出全部启用的区域的特性(即查询当前防火墙策略)

解释:特性可以是定义的防火墙策略,如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP 拦截或自定义规则等

wKioL1ju6m3D1phPAAAEZJtUpbA752.png-wh_50

上面的命令将会列出每种区域如blockdmzdropexternalhomeinternalpublictrusted以及work。如果区域还有其它详细规则(rich-rules)、启用的服务或者端口,这些区域信息也会分别被罗列出来

7、输出区域全部启用的特性。如果省略区域,将显示默认区域的信息。

firewall-cmd [--zone=] --list-all

wKiom1ju6oWSS2BYAAAEjnkD_qk010.png-wh_50

输出指定区域启动的特性

wKiom1ju6-vSRnc7AAAEyahB6MQ400.png-wh_50

8、查看默认区域

wKioL1ju7DfwMRW4AAAB33JN-mE543.png-wh_50

public区域是默认区域。

在文件/etc/firewalld/firewalld.conf中定义成DefaultZone=public

9、设置默认区域

firewall-cmd --set-default-zone=区域名

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

10、获取活动的区域

wKioL1ju7FSiMFqHAAAC27a0oH0071.png-wh_50

这条命令将用以下格式输出每个区域所含接口:

区域名

interfaces :  接口名

11、根据接口获取区域即需要查看哪个区域和这个接口绑定即查看某个接口是属于哪个zone的:

firewall-cmd --get-zone-of-interface=接口名

这条命令将输出接口所属的区域名称。

12、将接口(网卡)增加到区域

firewall-cmd [--zone=] --add-interface=接口名

如果接口不属于区域,接口将被增加到区域。如果区域被省略了,将使用默认区域。接口在重新加载后将重新应用。

13、修改接口所属区域

firewall-cmd [--zone=] --change-interface=接口名

这个选项与--add-interface 选项相似,但是当接口已经存在于另一个区域的时候,该接口将被添加到新的区域。

14、从区域中删除一个接口

firewall-cmd [--zone=] --remove-interface=接口名

注:如果某个接口不属于任何Zone,那么这个接口的所有数据包使用默认的Zone的规则

15、查询区域中是否包含某接口

firewall-cmd [--zone=] --query-interface=接口名

如果区域被省略了,将使用默认区域

16、列举区域中启用的服务

firewall-cmd [ --zone= ] --list-services

如果区域被省略了,将使用默认区域

17、启用应急模式阻断所有网络连接,以防出现紧急状况

wKioL1ju7l2R-f6dAAABpYzHpjs127.png

18、禁用应急模式

firewall-cmd --panic-off

19、查询应急模式

firewall-cmd --query-panic

其他相关的配置项可以查看firewall-cmd的手册页:#man  firewall-cmd

处理运行时区域:

运行时模式下对区域进行的修改不是永久有效的。重新加载或者重启后修改将失效。

1、启用区域中的一种服务即给某个区域开启某个服务

firewall-cmd [--zone=区域] --add-service=服务 [--timeout=秒数]

此操作启用区域中的一种服务。如果未指定区域,将使用默认区域。如果设定了超时时间,服务将只启用特定秒数。

wKioL1ju7nCQrwlTAAAgjF48Adk732.png-wh_50

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

启用默认区域中的http服务:firewall-cmd--add-service=http

2、禁用区域中的某种服务即关闭某个服务

firewall-cmd [--zone=区域] --remove-service=服务

此举禁用区域中的某种服务。如果未指定区域,将使用默认区域。

:禁止默认区域中的 http 服务:

wKiom1ju7ofCcDxjAAAZ3kS6vLM964.png-wh_50

3、查询区域中是否启用了特定服务

firewall-cmd [--zone=区域] --query-service=服务 Yes 表示服务启用, no 表示服务关掉了。

4、启用区域端口和协议组合

firewall-cmd [--zone=区域] --add-port=portid[-portid]/protocol[--timeout=seconds]

此操作将启用端口和协议的组合。端口可以是一个单独的端口或者是一个端口范围 - 。协议可以是tcpudp

wKioL1ju7x-D9pMDAAAKhR8fYCo605.png

5、禁用端口和协议组合

firewall-cmd [--zone=区域] --remove-port=portid[-portid]/protocol

6、查询区域中是否启用了端口组合

wKioL1ju72LTcI41AAAygdZjVZg131.png-wh_50

7、启用区域中的 IP 伪装功能

firewall-cmd [--zone=区域]--add-masquerade

此操作启用区域的伪装功能。私有网络的地址将被隐藏并映射到一个公有IP。这是地址转换的一种形式,常用于路由。由于内核的限制,伪装功能仅可用于IPv4

8、禁用区域中的 IP 伪装

firewall-cmd [--zone=区域]--remove-masquerade

9、查询区域的伪装状态

firewall-cmd [--zone=区域]--query-masquerade

注意:启用伪装功能的主机同时也需要开启转发服务:

#echo 1 > /proc/sys/net/ipv4/ip_forward 或 #vi  /etc/sysctl.conf   添加如下内容 net.ipv4.ip_forward  =  1 保存退出并执行#sysctl  -p使修改生效

10、启用区域的 ICMP 阻塞功能

firewall-cmd [--zone=区域] --add-icmp-block=icmp类型

此操作将启用选中的 Internet 控制报文协议(ICMP)报文进行阻塞。 ICMP 报文可以是请求信息或者创建的应答报文,以及错误应答。

11、禁止区域的 ICMP 阻塞功能

firewall-cmd [--zone=区域] --remove-icmp-block=icmp类型

12、查询区域的 ICMP 阻塞功能

firewall-cmd [--zone=区域] --query-icmp-block=icmp类型

13、在区域中启用端口转发或映射

firewall-cmd [--zone=区域] --add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][ :toaddr=address [/mask]]

端口可以映射到另一台主机的同一端口,也可以是同一主机或另一主机的不同端口。端口号可以是一个单独的端口或者是端口范围 - 。协议可以为tcpudp。目标端口可以是端口号或者是端口范围 - 。目标地址可以是 IPv4地址。受内核限制,端口转发功能仅可用于IPv4

意思是凡是来从external进来的22端口的数据包全部转发到211.106.65.50

firewall-cmd --zone=external--add-forward-port=port=22:proto=tcp:toaddr=211.106.65.50

14、禁止区域的端口转发或者端口映射

firewall-cmd [--zone=]--remove-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][:toaddr=address [/mask]]

15、查询区域的端口转发或者端口映射

firewall-cmd [--zone=]--query-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][ :toaddr=address [/mask]]

处理永久区域:

永久选项不直接影响运行时的状态。这些选项仅在重载或者重启服务时可用。为了使用运行时和永久设置,需要分别设置两者。选项--permanent需要是永久设置的第一个参数。

1、获取永久选项所支持的服务

firewall-cmd --permanent --get-services

2、获取永久选项所支持的ICMP类型列表

firewall-cmd --permanent --get-icmptypes

3、获取支持的永久区域

firewall-cmd --permanent --get-zones

4、配置防火墙在public区域打开http协议,并保存,以致重启有效

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

查看永久模式下public区域是否打开http服务。

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

5、防火墙开放8080端口在public区域

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

6、命令行配置富规则:

  查看富规则:

# firewall-cmd --list-rich-rules

  创建富规则:

  firewall-cmd --add-rich-rule 'rule family=ipv4 sourceaddress=10.35.89.0/24 service  name=ftp  log prefix="ftp" level=info accept'  --permanent   firewall-cmd --add-rich-rule 'rule family=ipv4 sourceaddress=10.35.89.0/24 port port=80 protocol=tcp   log prefix="80" level=info accept'--permanent   firewall-cmd --add-rich-rule rule family="ipv4" sourceaddress="192.168.10.30" forward-port port="808"protocol="tcp" to-port="80" to-addr="10.10.10.2"

   富规则中使用伪装功能可以更精确详细的限制:

   firewall-cmd--add-rich-rule 'rule family=ipv4 source address=10.10.10.2/24  masquerade'

   仅允许部分IP访问本机服务配置

firewall-cmd --permanent--zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24"service name="http" accept"

禁止远程IP访问ssh

firewall-cmd --permanent--zone=public --add-rich-rule=’rule family=ipv4 source address=192.168.0.0/24service name=ssh reject’

7、删除rich规则

firewall-cmd --permanent--zone=public --remove-rich-rule=’rule family=ipv4 source address=192.168.0.0/24service name=ssh reject’

8、仅允许部分IP访问本机端口配置

firewall-cmd --permanent--zone=public --add-rich-rule="rule family="ipv4"  sourceaddress="192.168.0.0/24"port protocol="tcp"port="8080" accept"

            

9、创建rich规则,可以指定日志的前缀和输出级别

firewall-cmd --permanent--zone=public --add-rich-rule="rule family="ipv4" sourceaddress="192.168.0.4/24"port port=8080 protocol="tcp" logprefix=proxy level=warning accept" 可以通过查看/var/log/messages日志文件


10、也可通过配置以下XML文件,进行对防火墙的配置修改

#cat/etc/firewalld/zones/public.xml <?xmlversion="1.0" encoding="utf-8"?> <zone> <short>Public</short> <description>Foruse in public areas. You do not trust the other computers on networks to notharm your computer. Only selected incoming connections areaccepted.</description> <servicename="dhcpv6-client"/> <servicename="ssh"/> <rulefamily="ipv4"> <sourceaddress="192.168.0.4/24"/> <servicename="http"/> <accept/> </rule> </zone>

总结

netfilter 防火墙总是容易受到规则顺序的影响,因为一条规则在链中没有固定的位置。在一条规则之前添加或者删除规则都会改变此规则的位置。在静态防火墙模型中,改变防火墙就是重建一个干净和完善的防火墙设置,默认链通常也没有安全的方式添加或删除规则而不影响其他规则。

动态防火墙有附加的防火墙功能链。这些特殊的链按照已定义的顺序进行调用,因而向链中添加规则将不会干扰先前调用的拒绝和丢弃规则。从而利于创建更为合理完善的防火墙配置。

下面是一些由守护进程创建的规则,过滤列表中启用了在公共区域对 ssh , mdns ipp-client 的支持:

wKiom1ju8PqiB1nRAABNRnnf-lo060.png-wh_50

总结:

图形化配置工具

firewall daemon 主要的配置工具是firewall-config。它支持防火墙的所有特性。管理员也可以用它来改变系统或用户策略。

命令行客户端

firewall-cmd是命令行下提供大部分图形工具配置特性的工具。

附录:要想了解更多firewall防火墙更多知识可以查看firewall的相关手册页,下图所显示的就是firewall防火墙的相关手册页:

wKioL1ju8RKA4HkMAAABr8mkues774.png

若要查看rich-rule手册页

wKiom1ju8SaAaCDRAAASVdBVoTs606.png-wh_50

例如:允许icmp协议的数据包通信

wKioL1ju8TWS4vv2AAAP9xpm4_8221.jpg-wh_50


原文链接:https://blog.51cto.com/yw666/1915517
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章