zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    全站导航
    常用模块
    模块的引用的路径的查找
    类的魔术方法
    包装和授权
    类内置的attr属性
    反射
    三大特性之多态
    三大特性之封装
    python应用:爬虫框架Scrapy系统学习第二篇——windows下安装scrapy
  • 原文地址:https://www.cnblogs.com/cplinux/p/15345143.html
Copyright © 2011-2022 走看看