Linux-Centos7学习笔记

本文涉及的产品
云防火墙,500元 1000GB
公网NAT网关,每月750个小时 15CU
简介: Linux-Centos7学习笔记

下载、安装与配置

下载

下载Centos镜像,网站见参考

点击大的版本,例如7,再选择isos进行下载

镜像描述

名称 描述
CentOS-7-x86_64-DVD-1708.iso 标准安装版,一般下载这个就可以了(推荐)
CentOS-7-x86_64-NetInstall-1708.iso 网络安装镜像(从网络安装或者救援系统)
CentOS-7-x86_64-Everything-1708.iso 对完整版安装盘的软件进行补充,集成所有软件。(包含centos7的一套完整的软件包,可以用来安装系统或者填充本地镜像)
CentOS-7-x86_64-LiveGNOME-1708.iso GNOME桌面版
CentOS-7-x86_64-LiveKDE-1708.iso KDE桌面版
CentOS-7-x86_64-Minimal-1708.iso 精简版,自带的软件最少

安装

这里使用的VMware 12 Pro,以Centos7为例,新建新的虚拟机-自定义-下一步

继续选择下一步,然后选择稍后安装-下一步

选择Linux-Red Hat Enterprise Linux 7 64位

填写名字,选好位置

核数和宿主机一致即可

内存,看个人要使用什么了,我一般是选择宿主机的一半,平时开虚拟机的话就不会在宿主机开太多软件了

网络都可以,看个人习惯

下一步直到分配磁盘大小,选择合适磁盘大小,改为单个文件如果你只会在自己的电脑上使用的话

可以删除没有的硬件,例如打印机,选择光驱

选择镜像,就是前面下载的.iso文件

处理器添加虚拟化(之后学习KVM需要)

之后点击完成即可

配置

打开虚拟机,选择语言

软件选择,新手可以选择带GUI的,选择开发工具(带有gcc等),我就选择最小安装了

安装位置选择磁盘即可,我要配置分区

选择标准分区,添加挂载点/boot,选择1024,防止后序yum update空间不足

添加 / 挂载点

添加swap挂载点

完成,接收更改

之后添加网络,这里改为手动,步骤如下。注意网关最后是1还是2

主机名修改一下,这里就使用centos+ip最后一位,这样之后当有其他虚拟机,例如192.168.x.4访问这台主机的时候就不用记ip了,例如访问Web服务,http://centos3:80/index.html

点击开始安装,设置下密码

重启,之后你可以ping一下www.baidu.com,试一下网络

---------2022-04-13更新-------------

主机名与映射

主机名是可以修改的

hostnamectl set-hostname centos3

重启一下即可

ip不方便记住,可以使用映射

vim /etc/hosts
127.0.0.1 centos3

---------2022-04-13更新完毕------------

软件安装与卸载

软件包说明

rpm包的获取方式

  1. Centos系统镜像光盘
  2. 网站rpmfind.net
  3. 软件官网
  4. centos yum源或rpm手动下载

rpm包安装后一般保存在/var/lib/rpm/目录下

命令学习

rpm下载安装(不推荐)

命令

rpm [Option...]

常用参数

参数 含义
-i install,安装软件包
-v 显示附加信息
查询
rpm -q [Option...]


参数 含义
-a 查看所有安装的软件包
-f 系统文件名
-i pkgname 显示已安装的包pkgname的信息
-l 查询软件包中文件安装的位置
-p name 查询未安装软件包name的相关信息
-R 查询软件包的依赖性
举个例子:
卸载
rpm -e pkgname

建议添加–nodeps,不去卸载依赖关系包

yum管理(推荐)

自动处理依赖性关系,一次性安装所有依赖的软件包

yum [options] COMMAND

常用命令

搜索:yum search xxx
安装:yum -y install xxx
卸载:yum -y remove xxx
更新:yum -y update xxx

-y省的交互输入y了

常用软件下载与安装

ifconfig

网络查看

yum -y install net-tools.x86_64

ssh

远程连接,安装服务端与客户端

yum -y install openssh-server openssh-clients

vim

比vi好像用的文本编辑器

yum -y install vim

tree

目录树形结构查看

yum -y install tree

wget

文件下载

yum -y install wget

图形化界面

如果你还是想用图形化界面,可以这样安装

yum groupinstall "GNOME Desktop" "Graphical Administration Tools"

使用

init 5

进入图形界面,使用

init 3

回到命令行界面

到了这里,差不多必备的软件就全了。接下来在练习命令的时候,你可能会创建一些文件、目录、用户等,也可能误操作导致系统损坏,网络不通等问题,因此,强烈建议不再动这个,而是以此为母版,克隆一些。

例如:

Centos7-test:练习Linux命令

Centos7-docker:练习Docker使用

Centos7-web:练习Web开发与部署

之后不需要了可以直接删除。

克隆与网络连接

上了班一般设置自动快照,网络一般不用管,都是云服务器,有外网ip和VPC。这里还是简单配置一下。

克隆

我不会动母版,所以都是使用链接克隆,可以节省空间

原来的是NAT的,克隆了一个Bridge的。之后NAT的不再开机,只做母版留着克隆。

网络连接

VM与物理机设置

类型 ip 子网掩码 网关 DNS
物理机/宿主机/主机 192.168.31.164 255.255.255.0 192.168.31.1 自动
桥接虚拟机 192.168.31.3 255.255.255.0 192.168.31.1 192.168.31.1
NAT虚拟机 192.168.100.3 255.255.255.0 192.168.100.2 8.8.8.8;114.114.114.114

桥接设置

选择与物理机一直的网卡即可

NAT设置

设置网关

设置子网ip,子网掩码,dhcp

Host-Only设置

设置子网ip,子网掩码,dhcp

物理机/宿主机/主机设置

网络连接

ip自动

ipconfig查看

接下来设置虚拟机

桥接模式

主机网卡与虚拟机虚拟的网卡,利用网桥进行通信。类似于虚拟一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机中。

注意:虚拟机ip地址需要与主机在同一个网段,如果需要联网,网关与DNS保持一致。

虚拟机网络适配器设置为桥接模式

修改网络配置

cd /etc/sysconfig/network-scripts

文件一般为ifcfg-ensxx,你的可能不是33

修改为协议为static,设置静态ip,网关,dns

重启网络

/etc/init.d/network restart

测试网络

发现无法ping通宿主机,但是可以访问主机http服务(这里使用的python -m http.server开启的)

所以,应该是宿主机防火墙的问题

设置防火墙

启用上图所示的虚拟机监控,启用后前面会有绿色对勾

测试访问主机与外网

测试主机访问虚拟机

NAT(地址转换)模式

借助虚拟NAT设备和虚拟的DHCP,虚拟机和物理机共用一个IP。

注意:虚拟机使用NAT模式时,Linux系统要配置成dhcp。

虚拟机网络适配器设置为NAT模式

修改网络配置

cd /etc/sysconfig/network-scripts

文件一般为ifcfg-ensxx,你的可能不是33

修改为dhcp,设置个静态ip

重启网络

/etc/init.d/network restart

测试网络

测试主机访问虚拟机

Host-Only模式

将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机互相通讯。相当于NAT模式去除了虚拟NAT地址转换功能。

这个我不用,就不展示了。

文件与目录

自带目录

  • bin:二进制文件目录,/usr/bin的软链接
  • boot:系统启动相关的文件
  • dev:Device,设备文件目录,声卡、磁盘等
  • etc:常用系统及二进制安装包配置文件默认路径 例如,/etc/passwd /etc/hosts
  • home:普通用户家目录
  • lib:库文件目录,/usr/lib的软链接
  • lib64:库文件目录,/usr/lib64的软链接
  • media、mnt:临时挂载存储设备的目录
  • opt:有些软件会安装在这里
  • proc:操作系统运行时,进程信息及内核信息存放在这里,例如,/proc/cpuinfo
  • root:root用户家目录
  • run:运行目录,存放系统运行时数据
  • sbin:大部分系统管理命令存放目录,root可执行命令存放目录,/usr/sbin的软链接
  • srv:服务目录,存放本地服务相关文件
  • sys:系统目录,存放硬件信息
  • tmp:临时文件目录
  • usr:存放应用程序和文件 /usr/bin(普通用户的应用程序)、/usr/lib (库文件)
  • var:系统和软件运行时产生的日志信息,例如,/var/log

进阶前的命令就不展示了,可以看参考的Linux基础

目录

  • cd:change dirctory
  • pwd:print working directory
  • ls:list
  • mkdir:make directory
  • rm:remove
  • rmdir:remove directory,不推荐,可使用rm代替

文件

  • touch
  • echo
  • mv
  • cp
  • head
  • tail
  • cat
  • more
  • less
  • ln
  • grep
  • find
  • locate
>:用前面的内容覆盖掉后面文件的内容
>>:用前面的内容追加到后面的文件尾部
|:管道,前面的做后面的输入

压缩与备份

  • zip
  • unzip
  • tar

用户与权限管理

用户

  • whoami
  • id
  • useradd
  • passwd
  • userdel
  • usermod
  • su

用户组

  • groupadd
  • groupdel

权限

  • chown
  • chgrp

系统管理

系统查看

系统版本

lsb_release -a
cat /etc/issue

内核版本

uname -a

-r参数获取部分

cpu信息

cat /proc/cpuinfo

cpu和内存使用

top

时间日期

  • date:日期
  • cal:日历

任务调度

  • crontab

进程管理

  • ps:进程查看
  • kill:杀死进程

其他

  • history:历史命令
  • runlevel:运行级别
  • init
  • help
  • man
  • shutdown:关机
  • poweroff:关机
  • halt:关机
  • reboot:重启

进阶

服务管理

service(不推荐)

service 服务名 [start | stop | restart | reload | status]
  • start:启动
  • stop:停止
  • restart:重启
  • reload:重新载入
  • status:状态

查询sshd服务状态

service sshd status

systemctl

systemctl [Options...] {COMMANDS...}

start:启动

stop:停止

status:状态

reload:重新载入

restart:重启

enable:开机启动

disable:取消开机启动

开机启动sshd服务

systemctl enable sshd

文件

sed

这个命令最厉害的地方在于在文件中间进行插入,替换,删除

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明

  • -e<script>或–expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -i 修改源文件

动作说明

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行);
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,将某个选择的数据印出。通常 p 会与参数-n一起运行
  • s :取代,通常这个 s 的动作可以搭配正规!例如 1,20s/old/new/g
    创建文件tested,并写入一些内容,内容如下

    在第四行后插入一行内容,内容为:新的第5行
sed -e 4a\新的第5行 testsed

注意:默认是将结果输出到控制台,而不是文件,可以使用重定向>来放到新的文件,例如

sed -e 4a\新的第5行 testsed > newtestsed

在第3行前插入内容,内容为:新的第3行

sed '3i 新的第3行' testsed

删除第4-5行

sed "4,5d" testsed

取代第3,4行:内容为第3-4行

sed '3,4c 第3-4行' testsed

搜寻含有4的行,并输出,带有行号

sed -n '4p' testsed

直接替换是这样的

's/要被取代的字串/新的字串/g'

将第2-4行的这是替换为这个是

前面都是输出到控制台或重定向到新文件,testsed文件还未改变,接下来说一下直接修改源文件!!!注意测试时不要使用系统配置,或记得备份

把所有数字,改为number

sed -i 's/[0-9]/number/g' testsed

磁盘

mount

挂载

挂载/dev/vda到/data下

mount /dev/vda /data

df

disk free,磁盘情况统计

df -Th

fdisk

一个创建和维护分区表的程序

查看分区情况

fdisk -l

磁盘这里,如果你是云服务商用户,可以尝试买一块数据盘,挂载一下

-------------2022-03-13更新-----------------

安全

selinux

一般都会关闭

1、临时关闭(不用重启机器)

setenforce 0

2、修改配置文件(需要重启机器)

修改/etc/selinux/config 文件

将SELINUX=enforcing改为SELINUX=disabled

重启机器即可

iptables(centos 5、6)

iptables会加大延迟,一般内网关闭,外网看情况

iptables是用于配置 Linux 2.4.x 及更高版本包过滤规则集的用户空间命令行程序。它面向系统管理员。

由于网络地址转换也是从数据包过滤规则集配置的,因此也使用iptables。

iptables 包还包括 ip6tables。 ip6tables用于配置 IPv6 包过滤器。

简单说,iptables是一个规则表链,用于包过滤和NAT

yum install iptables-service
systemctl [stop|start|restart|status] iptables

使用

man iptables

查看选项等信息

匹配流程

层层匹配

匹配到就不再继续匹配了,不论是丢弃还是接受,直接处理

5 tables && 5 chains && many policies

表包含链,链包含规则

前面man的手册往下继续翻看,可以找到表

  • filter:默认表,不用-t参数指定,进行包过滤,有INPUT、FORWARD、OUTPUT三条链
  • nat: 地址转换,用于代理,进行包转发,有创建新连接的包时,考虑此表,类似网络交换机的acl,有PREROUTING、OUTPUT、POSTROUTING三条链
  • mangle: 有PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
  • raw:基本没用过的表,有PREROUTING、OUTPUT两条链
  • security:安全表,新版本才有的,结合SELINUX,在filter表之后使用,有INPUT、FORWARD、OUTPUT三条链

接下来,说说五条链

INPUT:入站,过滤目的地址是本机的数据包

OUTPUT:出站,过滤源地址是本机的数据包

FORWARD:转发,转发流经主机的数据包

PREROUTING:预路由,路由判断之前执行的规则链,改变数据包的目的地址、目的端口等。

POSTROUTING:已路由,路由判断之后执行的规则链,改变数据包的源地址、源端口等。

接下来说说语法、规则

部分语法如下

iptables -t 表名 [命令选项] [匹配条件] [-j 控制类型]
查看规则列表
-L      #列出所有的规则条目
-n      #以数字形式显示地址、端口等信息
-v      #以更详细的方式显示规则信息
--line-numbers    #查看规则时,显示规则的序号(方便通过序号删除规则)
添加新的规则
-I      #在链的开头(或指定序号)插入一条规则
-A      #在链的末尾追加一条规则
删除、清空规则
-D      #删除链内指定序号(或内容)的一条规则
-F      #清空所有的规则
-X      #是清理自定义的链,用的少
-Z      #清理规则序号
设置默认规则
-P      #为指定的链设置默认规则
-p      #指定协议名称
-s      #指定地址
-i      #指定网段
--dport     #指定端口
-m multiport --sports   #指定多源端口
-m multiport --dports   #指定多目的端口
-m iprange --src-range  #指定IP范围
-m mac --mac-source   #指定mac
-m state --state    #指定状态

整个规则就是条件+处理方式

条件可以是目的ip地址、目的端口、数据包类型等

处理方式常见:

ACCEPT:接受

DROP:丢弃

REJECT:拒绝

JUMP:跳转

MATCH:匹配

实践

查看所有链规则

iptables -L

firewalld(centos 7)

上图为iptables和firewall的关系,在service层面是平级的,然后firewall最终还是调用的iptables的command。去执行内核的netfilter。

对比项 firewalld iptables
配置文件 /etc/firewalld /etc/sysconfig/iptables
对规则的修改 不需要全部刷新策略,不丢失现行连接 需要全部刷新策略,丢失现行连接
防火墙类型 动态防火墙 静态防火墙

firewall使用时隔离iptables,隔离与取消隔离命令如下

systemctl mask iptables
systemctl umask iptables

firewalld使用的越来越多了,下面这些都在使用

  • RHEL 7+
  • CentOS 7+
  • Fedora 18+
  • SUSE 15+
  • OpenSUSE 15+
架构与概念

firewalld的架构如下图所示

firewalld 有两层设计:核心层和顶层的 D-Bus 层。核心层负责处理配置和后端,如 firewalld.conf、iptables、ip6tables、ebtables、ipset等。

firewalld D-Bus 接口是更改和创建防火墙配置的主要方式。所有 firewalld 提供的在线工具都使用该接口,例如 firewall-cmd、firewall-config 和 firewall-applet。

zone

不同的区域之间的差异是其对待数据包的默认行为不同,根据区域名字我们可以很直观的知道该区域的特征,在CentOS7系统中,默认区域被设置为public。

通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。

开启firewalld后,使用命令

firewalld-cmd --list-all-zone

可以查看所有zone,包含以下几种zone

  • block:任何进入的网络连接都被拒绝,并返回 IPv4 的 icmp-host-prohibited 报文或者 IPv6 的 icmp6-adm-prohibited 报文。只允许由该系统初始化的网络连接。
  • drop:任何流入网络的包都被丢弃,不作出任何响应。只允许流出的网络连接。
  • external:用在路由器等启用伪装的外部网络。你认为网络中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连接接入。
  • internal:用在内部网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。
  • home:用在家庭网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。
  • public:用以可以公开的部分。你认为网络中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连接接入。
  • trusted:允许所有网络连接。
  • work:用在工作网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。
  • zmd:用以允许隔离区(dmz)中的电脑有限地被外界网络访问。只接受被选中的连接。

zone内规则匹配优先级

  • 关联zone的源网段
  • 关联zone的网卡
  • IP地址、网卡都没有关联zone,进入默认zone
使用

firewall-cmd、firewall-config和firewall-applet,这里仅展示firewall-cmd的部分功能。

部分命令

命令

解释

firewall-cmd --zone=public --list-all

查看公开区域的信息

firewall-cmd --list-all-zone

查看所有区域的信息

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

查看指定区域所有开启的端口号

systemctl start firewalld

开启防火墙

systemctl stop firewalld

关闭防火墙

systemctl enable firewalld

设置开机启动

sytemctl disable firewalld

停止并禁用开机启动

firewall-cmd --reload

刷新规则

/etc/firewalld

配置文件的路径

**部分参数**

参数

作用

--version

查看版本

--permanent

永久生效

--get-active-zones

查看区域信息

--state

查看防火墙状态

--get-default-zone

查询默认的区域名称

--set-default-zone=<区域名称>

设置默认的区域,使其永久生效

--get-zones

显示可用的区域

--get-services

显示预先定义的服务

--get-active-zones

显示当前正在使用的区域与网卡名称

--add-source=

将源自此IP或子网的流量导向指定的区域

--remove-source=

不再将源自此IP或子网的流量导向某个指定区域

--add-interface=<网卡名称>

将源自该网卡的所有流量都导向某个指定区域

--change-interface=<网卡名称>

将某个网卡与区域进行关联

--list-all

显示当前区域的网卡配置参数、资源、端口以及服务等信息

--list-all-zones

显示所有区域的网卡配置参数、资源、端口以及服务等信息

--add-service=<服务名>

设置默认区域允许该服务的流量

--add-port=<端口号/协议>

设置默认区域允许该端口的流量

--remove-service=<服务名>

设置默认区域不再允许该服务的流量

--remove-port=<端口号/协议>

设置默认区域不再允许该端口的流量

--reload

让“永久生效”的配置规则立即生效,并覆盖当前的配置规则

--panic-on

开启应急状况模式

--panic-off

关闭应急状况模式

禁止访问本主机http服务

开启防火墙前

http服务是Python3开启的

开启firewalld

systemctl start firewalld

添加源网段

firewall-cmd --permanent--add-source= --zone=block

注意,此时还没有添加上

使用

firewall-cmd--reload

重载一下

firewall-cmd --permanent--add-service=http --zone=block
firewall-cmd --reload

之后再访问

恢复访问可采用添加到trusted的方式

firewall-cmd --permanent --add-source= --zone=trusted
firewall-cmd --permanent --add-service=http --zone=trusted
firewall-cmd --reload

个人更喜欢这种白名单的方式

参考

Centos阿里云镜像下载

Linux基础

Linux命令大全

腾讯云-云硬盘扩展

netfilter-iptables

centos6 iptables&centos7 firewall

firewalld

相关文章
|
4月前
|
网络协议 Java Linux
Linux学习笔记
Linux学习笔记
102 0
|
4月前
|
缓存 网络协议 Linux
Linux C/C++ 开发(学习笔记十三):百万并发的服务器实现
Linux C/C++ 开发(学习笔记十三):百万并发的服务器实现
96 0
|
1月前
|
存储 运维 Shell
运维.Linux.bash学习笔记.数组及其使用
运维.Linux.bash学习笔记.数组及其使用
26 0
|
2月前
|
Shell Linux
RSIC-V“一芯”学习笔记(二)——Linux入门教程
RSIC-V“一芯”学习笔记(二)——Linux入门教程
|
3月前
|
数据可视化 Shell Linux
技术笔记:Linux学习笔记1
技术笔记:Linux学习笔记1
25 0
|
4月前
|
Linux 开发工具 索引
Linux 学习笔记索引
Linux 学习笔记索引
|
4月前
|
缓存 监控 Linux
Linux 学习笔记十九:常见监控工具
Linux 学习笔记十九:常见监控工具
Linux 学习笔记十九:常见监控工具
|
4月前
|
监控 Linux
Linux学习笔记十二:Linux 工作管理
Linux学习笔记十二:Linux 工作管理
Linux学习笔记十二:Linux 工作管理
|
4月前
|
Linux 数据安全/隐私保护
Linux学习笔记九:权限管理
Linux学习笔记九:权限管理
Linux学习笔记九:权限管理
|
4月前
|
Ubuntu Unix Linux
Linux 学习笔记一: 常见操作系统相关概念
Linux 学习笔记一: 常见操作系统相关概念
Linux 学习笔记一: 常见操作系统相关概念