linux基础

一、linux的目录

1.1、根目录下目录结构

/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var

1.2、目录结构解释

我们应该知道 Windows 有一个默认的安装目录专门用来安装软件。

Linux 的软件安装目录也应该是有讲究的,遵循这一点,对后期的管理和维护也是有帮助的。

  1. /usr 系统级的目录,可以理解为 C:/Windows/

  2. /usr/lib 可理解为 C:/Windows/System32

  3. /usr/local 用户级的程序目录,可以理解为 C:/Progrem Files/ 。用户自己编译的软件默认会安装到这个目录下。

  4. /opt 用户级的程序目录,可以理解为 D:/Softwareopt 有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接 rm -rf 掉即可。在硬盘容量不够时,也可将 /opt 单独挂载到其他磁盘上使用。

  5. /usr/src 系统级的源码目录。

  6. /usr/local/src 用户级的源码目录。

/opt
Here’s where optional stuff is put. Trying out the latest Firefox beta? Install it to /opt where you can delete it without affecting other settings. Programs in here usually live inside a single folder whick contains all of their data, libraries, etc.
​
这里主要存放那些可选的程序。你想尝试最新的firefox测试版吗?那就装到/opt目录下吧,这样,当你尝试完,想删掉firefox的时候,你就可 以直接删除它,而不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。
​
举个例子:刚才装的测试版firefox,就可以装到/opt/firefox_beta目录下,/opt/firefox_beta目录下面就包含了运 行firefox所需要的所有文件、库、数据等等。要删除firefox的时候,你只需删除/opt/firefox_beta目录即可,非常简单。
​
/usr/local
​
This is where most manually installed(ie. outside of your package manager) software goes. It has the same structure as /usr. It is a good idea to leave /usr to your package manager and put any custom scripts and things into /usr/local, since nothing important normally lives in /usr/local.
​
这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面,我想这应该是个不错的主意。

/bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。

/etc 存放系统管理和配置文件

/home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示

/usr 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。

/usr/x11r6 存放x window的目录

/usr/bin 众多的应用程序

/usr/sbin 超级用户的一些管理程序

/usr/doc linux文档

/usr/include linux下开发和编译应用程序所需要的头文件

/usr/lib 常用的动态链接库和软件包的配置文件

/usr/man 帮助文档

/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里

/usr/local/bin 本地增加的命令

/usr/local/lib 本地增加的库

/opt 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。

/proc 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。

/root 超级用户(系统管理员)的主目录(特权阶级^o^)

/sbin 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。

/dev 用于存放设备文件。

/mnt 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统。

/boot 存放用于系统引导时使用的各种文件

/lib 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。

/tmp 用于存放各种临时文件,是公用的临时文件存储点。

/var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。

/lost+found 每个分区默认都有一个 lost+found 目录,用来存放 fsck 过程中部分修复的文件的。

二、init进程

2.1、init简介

在redhat 6之前,init是Linux系统操作中不可缺少的程序之一。 是一个由内核启动的用户级进程。

  内核启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式来启动其他用户级的进程或服务,在系统启动完成完成后,init将变为守护进程监视系统其他进程。所以,init始终是第一个进程(其PID始终为1)。

  内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init.如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

 

 

 

init作为上帝(内核)派到人间的使者,肩负着光荣而艰巨的任务,它要启动许多进程,init的担子很重,所以它要更快,更高,更强 ,但是老派的init已经捉襟见肘了,在redhat的6、7已经没有了老版的init,将其取而代之upstart和systemd。

在redhat5之前,init进程的程序在如下的目录

/sbin/init

自从redhat5之后,init进程就被其他进程取代了。

2.2、淘汰原因

老派的init在radhat5上搭载,这个程序已经非常古老了,运行效率也不怎么快,它的运行方式是非常笨的,就是一个进程一个进程的启动,启动完这一个再启动另一个,在效率上未免有些差强人意,给开机速度拉后腿,所以被淘汰。ubuntu重新开发了一款类似init名字叫做upstart,这一款init比传统的init运行效率更高,虽然在红帽6依然是叫init这个名字,但是实质上就是upstart,我们通过rpm –qf /sbin/init就可以查看的到init的安装包其实名字叫做upstart。

但这并不是最好的,最好的叫做“systemd”,这个init可以完全实现多个进程并行启动,现在的7就是用的这个,其实就可以感受到,centos7的开机速度比centos6的要快很多。

init程序位于/sbin/init,它的主配置文件是/etc/inittab。我重点突出了主这个字,正如你所想,init的配置文件不止这一个,但这个无疑是最重要的。正如前面所述,由于init进程有很多问题,已经被淘汰,所以在redhat7之后的/etc/inittab配置文件就再也没有任何内容。并且/sbin/init这个程序也变成了一个软链接,链接到/lib/systemd/systemd

[root@localhost sbin]# ll | grep init*
lrwxrwxrwx. 1 root root          22 6月  21 2020 init -> ../lib/systemd/systemd
-rwxr-xr-x. 1 root root      126688 10月 31 2018 iprinit
lrwxrwxrwx. 1 root root          16 6月  21 2020 telinit -> ../bin/systemctl

三、/etc/init与/etc/init.d

3.1、/etc/init.d/

/etc/init.d/目录下存放的是 System V init 工具 (SysVinit) 使用的脚本。 /etc/init.d/是 Linux 的传统服务管理包,包含 init 程序以及一些用于启动和停止服务并配置它们的基础设施,init程序内核完成初始化后运行的第一个程序,加载到内存后的进程号是1。 具体来说,/etc/init.d/中的文件都是一些 shell 脚本,这些shell脚本是用来执行start,stop,restart,reload(如果支持)等命令,其目的就是管理特定服务的。 这些脚本可以直接调用,例如/etc/init.d/networking start,也可被其他trigger直接激活执行,这些trigger被软连接在/etc/rcN.d/中。

3.2、/etc/init/

/etc/init 包含 Upstart 使用的配置文件。 Upstart 是 Ubuntu 倡导的一个新的服务管理包。其实Upstart也不新了,最新的服务管理包是Systemd。 /etc/init/ 中的文件是配置文件,告诉 Upstart 如何以及何时启动、停止、重新加载配置或查询服务的状态。 从 lucid开始,Ubuntu 正在从 SysVinit 过渡到 Upstart,这就解释了为什么许多服务都带有 SysVinit 脚本,尽管 Upstart 配置文件是首选。 实际上,SysVinit 脚本是由 Upstart 中的兼容层处理的。

3.3、service命令

在CentOS6或者redhat 6 我们会用service xxx start来启动某个进程,那么它背后究竟执行了什么?

其实service的绝对路径为/sbin/service ,打开这个文件cat /sbin/service,我们会发现其实它就是一个很普通的shell脚本

在redhat7以前,这个脚本service主要作了如下两点:

  1. 初始化执行环境变量PATH和TERM PATH=/sbin:/usr/sbin:/bin:/usr/bin 。TERM,为显示外设的值,一般为xterm

  2. 调用/etc/init.d/文件夹下的相应脚本。

但是在Redhat 7或CentOS 7,这个脚本的作用有一些改变, 就是如果再使用service xxx start 等命令,就会重定向到 /bin/systemctl 。

四、systemd

4.1、systemd简介

传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)来处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方式,宣称弥补了以传统Linux SysV init为基础的系统的缺点;Systemd是用来启动守护进程,已成为大多数发行版的标准配置。

在CentOS 7或者RedHat 7之前,我们启动服务一般采取init进行。如果:

# sudo /etc/init.d/mysqld start
# service mysqld start

这种启动方式是有缺点的:

  • 是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。

  • 是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

Systemd就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案,根据Linux惯例,字母d是守护进程(daemon)的缩写,Systemd这个名字的含义,就是它要守护整个系统。使用了Systemd,就不需要再用init了。Systemd取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。

$ systemctl --version  #命令查看Systemd的版本。

Systemd并不是一个命令,而是一组命令,涉及到系统管理的方方面面。

4.2、systemd中的命令

在systemd中,Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。

在Linux生态系统中,Systemd被部署到了大多数的标准Linux发行版中,只有为数不多的几个发行版尚未部署。Systemd通常是所有其它守护进程的父进程。

systemctl 是Systemd的主命令,用于管理系统

#重启系统
$ sudo systemctl reboot
​
#关闭系统,切断电源
$ sudo systemctl poweroff
​
#CPU停止工作
$ sudo systemctl halt
​
#暂停系统
$ sudo systemctl suspend
​
#让系统进入冬眠状态
$ sudo systemctl hibernate
​
#让系统进入交互式休眠状态
$ sudo systemctl hybrid-sleep
​
#启动进入救援状态(单用户状态)
$ sudo systemctl rescue

systemd-analyze 命令用于查看启动耗时

#查看启动耗时
$ systemd-analyze                                                                                       
​
#查看每个服务的启动耗时
$ systemd-analyze blame
​
#显示瀑布状的启动过程流
$ systemd-analyze critical-chain
​
#显示指定服务的启动流
$ systemd-analyze critical-chain atd.service

除了上述的命令,在systemd中还有hostnamectllocalectltimedatectlloginctl等命令。

4.3、systemctl示例

查看命令版本号

[root@localhost sbin]# systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
​

systemd和systemctl的位置

[root@localhost sbin]# whereis systemd
systemd: /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz
[root@localhost sbin]# whereis systemctl
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz

检查systemd是否运行

[root@localhost sbin]# ps -eaf | grep [s]ystemd
root          1      0  0 07:44 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root       3121      1  0 07:44 ?        00:00:00 /usr/lib/systemd/systemd-journald
root       3156      1  0 07:44 ?        00:00:00 /usr/lib/systemd/systemd-udevd
root       6055      1  0 07:44 ?        00:00:00 /usr/lib/systemd/systemd-logind
dbus       6065      1  0 07:44 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation

4.4、Unit

Systemd可以管理所有系统资源,不同的资源统称为 Unit(单位),Unit一共分成以下12种。

Service unit:系统服务
Target unit:多个Unit构成的一个组
Device Unit:硬件设备
Mount Unit:文件系统的挂载点
Automount Unit:自动挂载点
Path Unit:文件或路径
Scope Unit:不是由Systemd启动的外部进程
Slice Unit:进程组
Snapshot Unit:Systemd快照,可以切回某个快照
Socket Unit:进程间通信的socket
Swap Unit:swap文件
Timer Unit:定时器

 

Unit状态

systemctl status命令用于查看系统状态和单个Unit的状态。

#显示系统状态
$ systemctl status
​
#显示单个Unit的状态
$ sysystemctl status bluetooth.service
​
#显示远程主机的某个Unit的状态
$ systemctl -H root@rhel7.example.com status httpd.service

Unit管理

对于用户来说,最常用的是下面这些命令,用于启动和停止Unit(主要是service)。

#立即启动一个服务
$ sudo systemctl start apache.service
​
#立即停止一个服务
$ sudo systemctl stop apache.service
​
#重启一个服务
$ sudo systemctl restart apache.service
​
#杀死一个服务的所有子进程
$ sudo systemctl kill apache.service
​
#重新加载一个服务的配置文件
$ sudo systemctl reload apache.service
​
#重载所有修改过的配置文件
$ sudo systemctl daemon-reload
​
#显示某个 Unit 的所有底层参数
$ systemctl show httpd.service
​
#显示某个 Unit 的指定属性的值
$ systemctl show -p CPUShares httpd.service
​
#设置某个 Unit 的指定属性
$ sudo systemctl set-property httpd.service CPUShares=500

依赖关系

Unit之间存在依赖关系:A依赖于B,就意味着Systemd在启动A的时候,同时会去启动B。 systemctl list-dependencies命令列出一个Unit的所有依赖。

$ systemctl list-dependencies nginx.service

上面命令的输出结果之中,有些依赖是Target类型(详见下文),默认不会展开显示。如果要展开Target,就需要使用--all参数。

$ systemctl list-dependencies --all nginx.service

Unit的配置文件

每一个Unit都有一个配置文件,告诉Systemd怎么启动这个Unit。Systemd默认从目录/etc/systemd/system/读取配置文件。但是里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。

systemctl enable命令用于在上面两个目录之间,建立符号链接关系。

$ sudo systemctl enable clamd@scan.service
#等同于
$ sudo ln -s '/usr/lib/systemd/system/clamd@scan.service' '/etc/systemd/system/multi-user.target.wants/clamd@scan.service'

如果配置文件里面设置了开机启动,systemctl enable命令相当于激活开机启动,与之对应的,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。

$ sudo systemctl disable clamd@scan.service

配置文件的后缀名,就是该Unit的种类,比如sshd.socket;如果省略,Systemd默认后缀名为.service,所以sshd会被理解成sshd.service。

如果需要详细学习,请参考https://www.linuxprobe.com/systemd-command.html

五、Centos7防火墙

5.1、FirewallD简介

firewallD与iptables关系

iptables 和 firewalld 都是工作在用户空间、用来定义规则的工具,本身不是防火墙,他们定义的规则,可以让内核空间当中的netfilter读取,并且实现防火墙工作。

netfilter是操作系统核心层内部的一个数据包处理模块,它具有如下功能:

  1.网络地址转换 nat
​
  2.数据包内容修改 mangle
​
  3.数据包过滤的防火墙功能 filter 
​

centos7 默认使用firewalld ;iptables默认无法被systemctl控制,需要安装iptables-services、iptables-devel这两个依赖包。

firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结 构以及使用方法不一样罢了。

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

FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。 以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而模块的卸载将会破坏状态防火墙和确立的连接。相反,firewall daemon 动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。不过,要使用 firewall daemon 就要求防火墙的所有变更都要通过该守护进程来实现,以确保守护进程中的状态和内核里的防火墙是一致的。另外,firewall daemon 无法解析由 iptables 和 ebtables 命令行工具添加的防火墙规则。
 守护进程通过 D-BUS 提供当前激活的防火墙设置信息,也通过 D-BUS 接受使用 PolicyKit 认证方式做的更改。

 

5.2、FirewallD特性

  • 守护进程 应用程序、守护进程和用户可以通过 D-BUS 请求启用一个防火墙特性。特性可以是预定义的防火墙功能,如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP 拦截或自定义规则等。该功能可以启用确定的一段时间也可以再次停用。 通过所谓的直接接口,其他的服务(例如 libvirt )能够通过 iptables 变元(arguments)和参数(parameters)增加自己的规则。 amanda 、ftp 、samba 和 tftp 服务的 netfilter 防火墙助手也被“守护进程”解决了,只要它们还作为预定义服务的一部分。附加助手的装载不作为当前接口的一部分。由于一些助手只有在由模块控制的所有连接都关闭后才可装载。因而,跟踪连接信息很重要,需要列入考虑范围。

  • 静态防火墙(system-config-firewall/lokkit) 使用 system-config-firewall 和 lokkit 的静态防火墙模型实际上仍然可用并将继续提供,但却不能与“守护进程”同时使用。用户或者管理员可以决定使用哪一种方案。 在软件安装,初次启动或者是首次联网时,将会出现一个选择器。通过它你可以选择要使用的防火墙方案。其他的解决方案将保持完整,可以通过更换模式启用。 firewall daemon 独立于 system-config-firewall,但二者不能同时使用。

  • 区域 网络区域定义了网络连接的可信等级。这是一个一对多的关系,这意味着一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接。

  • 预定义服务 服务是端口和/或协议入口的组合。备选内容包括 netfilter 助手模块以及 IPv4、IPv6地址。

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

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

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

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

  • 哪个区域可用? 由firewalld 提供的区域按照从不信任到信任的顺序排序。

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

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

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

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

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

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

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

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

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

  • 我应该选用哪个区域? 例如,公共的 WIFI 连接应该主要为不受信任的,家庭的有线网络应该是相当可信任的。根据与你使用的网络最符合的区域进行选择。

  • 由NetworkManager控制的网络连接 防火墙不能够通过 NetworkManager 显示的名称来配置网络连接,只能配置网络接口。因此在网络连接之前 NetworkManager 将配置文件所述连接对应的网络接口告诉 firewalld 。如果在配置文件中没有配置区域,接口将配置到 firewalld 的默认区域。如果网络连接使用了不止一个接口,所有的接口都会应用到 fiwewalld。接口名称的改变也将由 NetworkManager 控制并应用到firewalld。

  • 由脚本控制的网络 对于由网络脚本控制的连接有一条限制:没有守护进程通知 firewalld 将连接增加到区域。这项工作仅在 ifcfg-post 脚本进行。因此,此后对网络连接的重命名将不能被应用到firewalld。同样,在连接活动时重启 firewalld 将导致与其失去关联。现在有意修复此情况。最简单的是将全部未配置连接加入默认区域。

  • 使用firewalld 图形界面工具:firewall-config firewall-cmd命令行工具:firewall-cmd

5.3、FirewallD配置

Firewalld命令

#进程与状态相关
systemctl start firewalld.service            #启动防火墙  
systemctl stop firewalld.service             #停止防火墙  
firewall-cmd --state                         #查看防火墙状态  
firewall-cmd --reload                        #更新防火墙规则  
firewall-cmd --state                         #查看防火墙状态  
firewall-cmd --reload                        #重载防火墙规则  
firewall-cmd --list-ports                    #查看所有打开的端口  
firewall-cmd --list-services                 #查看所有允许的服务  
firewall-cmd --get-services                  #获取所有支持的服务  
​
#区域相关
firewall-cmd --list-all-zones                    #查看所有区域信息  
firewall-cmd --get-active-zones                  #查看活动区域信息  
firewall-cmd --set-default-zone=public           #设置public为默认区域  
firewall-cmd --get-default-zone                  #查看默认区域信息  
firewall-cmd --zone=public --add-interface=eth0  #将接口eth0加入区域public
​
#接口相关
firewall-cmd --zone=public --remove-interface=eth0       #从区域public中删除接口eth0  
firewall-cmd --zone=default --change-interface=eth0      #修改接口eth0所属区域为default  
firewall-cmd --get-zone-of-interface=eth0                #查看接口eth0所属区域  
​
#端口控制
firewall-cmd --add-port=80/tcp --permanent               #永久添加80端口例外(全局)
firewall-cmd --remove-port=80/tcp --permanent            #永久删除80端口例外(全局)
firewall-cmd --add-port=65001-65010/tcp --permanent      #永久增加65001-65010例外(全局)  
​
firewall-cmd  --zone=public --add-port=80/tcp --permanent            #永久添加80端口例外(区域public)
firewall-cmd  --zone=public --remove-port=80/tcp --permanent         #永久删除80端口例外(区域public)
firewall-cmd  --zone=public --add-port=65001-65010/tcp --permanent   #永久增加65001-65010例外(区域public) 

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

命令含义

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

Systemctl命令

systemctl start firewalld.service               #启动服务
systemctl stop firewalld.service                #关闭服务
systemctl reloadt 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                              #查看启动失败的服务列表

关闭CentOS7自带Firewall启用iptables

yum install iptables-services           #安装iptables  
systemctl stop firewalld.service        #停止firewalld  
systemctl mask firewalld.service        #禁止自动和手动启动firewalld  
systemctl start iptables.service        #启动iptables
systemctl start ip6tables.service       #启动ip6tables  
systemctl enable iptables.service       #设置iptables自启动  
systemctl enable ip6tables.service      #设置ip6tables自启动  
注:静态防火墙规则配置文件是 /etc/sysconfig/iptables 以及 /etc/sysconfig/ip6tables    

 

常用命令

vi /usr/lib/firewalld/services/ssh.xml

vi /usr/lib/firewalld/services/html.xml

systemctl enable firewalld.service

systemctl restart firewalld.service

firewall-cmd --state

firewall-cmd --list-all

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

vi /etc/firewalld/zones/public.xml

<port protocol="tcp" port="8502"/>

systemctl restart firewalld.service

2.3、firewall 配置

The configuration for firewalld is stored in various XML files in /usr/lib/firewalld and /etc/firewalld。

firewalld 的配置存储在 /usr/lib/firewalld 和 /etc/firewalld 中的各种 XML 文件中

注意:以下firewalld 的操作只有重启之后才有效:service firewalld restart

 

原文地址:https://www.cnblogs.com/cplinux/p/15345143.html