查看安全日志

查看成功登录的IP 和次数

1
[root@test ~]# cat /var/log/secure* |grep 'Accepted password' |awk '{print $(NF-3)}' |sort -n |uniq -c |awk '{print $2,"成功登录了 "$1," 次"}''

查看失败登录的IP和次数

1
[root@test ~]# cat /var/log/secure* |grep 'Failed password' |awk '{print $(NF-3)}' |sort -n |uniq -c |awk '{print $2,"登录失败了: "$1," 次"}'

硬件资源

top命令

top参数详解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  s- 改变画面更新频率

  l - 关闭或开启第一部分第一行 top 信息的表示

  t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示

  m - 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示

  N - 以 PID 的大小的顺序排列表示进程列表(第三部分后述)

  P - 以 CPU 占用率大小的顺序排列进程列表 (第三部分后述)

  M - 以内存占用率大小的顺序排列进程列表 (第三部分后述)

  h - 显示帮助

  n - 设置在进程列表所显示进程的数量

  q - 退出 top

  s -改变画面更新周期
top查看cpu信息和内存信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
top

top - 00:15:46 up 48 days, 8:39, 3 users, load average: 0.07, 0.10, 0.17
Tasks: 219 total, 2 running, 217 sleeping, 0 stopped, 0 zombie
%Cpu(s): 6.8 us, 2.7 sy, 0.0 ni, 89.0 id, 0.0 wa, 0.0 hi, 0.1 si, 1.4 st
KiB Mem : 8008648 total, 262380 free, 4203884 used, 3542384 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 3087740 avail Mem




第一行(top):
  00:15:46 系统当前时刻
  48 days 系统启动后到现在的运作时间
  3 users 当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目
  load average 当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程


第二行(Tasks):
  219 total 当前系统进程总数
  2 running 当前运行中的进程数
  217 sleeping 当前处于等待状态中的进程数
  0 stoped 被停止的系统进程数
  0 zombie 僵尸进程数


第三行(Cpus):
  6.8% us 用户空间占用CPU百分比
  2.7% sy 内核空间占用CPU百分比
  0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
  89.0% id 空闲CPU百分比
  0.0% wa 等待输入输出的CPU时间百分比
  0.0% hi
  0.1% si
  0.0% st
  

第四行(Mem):
  8008648 total 物理内存总量
  262380 used 使用的物理内存总量
  4203884 free 空闲内存总量
  3542384 buffers 用作内核缓存的内存量

第五行(Swap):
#表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。
  0 total 交换区总量
  0 used 使用的交换区总量
  0 free 空闲交换区总量
  0 cached 缓冲的交换区总量
  

sar

sar查看cpu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 查看所有cpu使用情况,每1秒采集一次CPU使用率,共采集5次
sar -u 1 5
Linux 3.10.0-1160.el7.x86_64 (gitlab) 07/31/2022 _x86_64_ (4 CPU)

12:11:26 AM CPU %user %nice %system %iowait %steal %idle
12:11:27 AM all 7.11 0.00 1.78 0.25 0.76 90.10
12:11:28 AM all 3.30 0.00 1.52 0.00 0.76 94.42
12:11:29 AM all 2.82 0.00 1.54 0.00 1.28 94.36
12:11:30 AM all 3.84 0.00 2.05 0.00 0.77 93.35
12:11:31 AM all 2.26 0.00 1.00 0.00 1.00 95.74
Average: all 3.86 0.00 1.58 0.05 0.91 93.60


# 查看指定显示1号cpu 的使用情况,每1秒采集一次CPU使用率,共采集5次
sar -P 1 -u 1 5
Linux 3.10.0-1160.el7.x86_64 (gitlab) 07/31/2022 _x86_64_ (4 CPU)

12:12:10 AM CPU %user %nice %system %iowait %steal %idle
12:12:11 AM 1 1.00 0.00 2.00 0.00 2.00 95.00
12:12:12 AM 1 2.00 0.00 1.00 0.00 2.00 95.00
12:12:13 AM 1 20.20 0.00 2.02 0.00 0.00 77.78
12:12:14 AM 1 3.06 0.00 0.00 0.00 0.00 96.94
12:12:15 AM 1 3.03 0.00 2.02 0.00 1.01 93.94
Average: 1 5.85 0.00 1.41 0.00 1.01 91.73

#参数解释:

%user:显示在用户级别(application)运行使用 CPU 总时间的百分比
%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比

#以下是三种常见的场景:
1)若 %iowait 的值过高,表示硬盘存在I/O瓶颈
2)若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
3)若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU
sar查看内存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sar -r 5 4 
Linux 3.10.0-1160.el7.x86_64 (gitlab) 07/31/2022 _x86_64_ (4 CPU)

12:39:45 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
12:39:50 AM 209448 7799200 97.38 163000 3086128 6621856 82.68 5525224 1600276 188
12:39:55 AM 211692 7796956 97.36 163000 3086168 6622044 82.69 5523608 1600316 304
12:40:00 AM 201168 7807480 97.49 163000 3086276 6622044 82.69 5534384 1600364 416
12:40:05 AM 221568 7787080 97.23 163000 3086296 6620800 82.67 5513964 1600384 456
Average: 210969 7797679 97.37 163000 3086217 6621686 82.68 5524295 1600335 341

#参数解释:
kbmemfree:剩余可用内存、单位K
kbmemused:已用内存、以K 为单位、该值不考虑内核自身所使用的内存
%memused:已用内存百分比
kbbuffers:已用buffer(内核所用)、单位K
kbcached:已用cache(内核所用)、单位K
kbswpfree:剩余Swap、单位K
kbswpused:已用Swap、单位K
%swpused:已用Swap百分比
kbswpcad:被缓存的Swap、单位K
sar监测网卡速度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sar -n DEV 1

Linux 3.10.0-1160.el7.x86_64 (gitlab) 07/31/2022 _x86_64_ (4 CPU)

12:42:59 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
12:43:00 AM veth2707ccd 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:43:00 AM veth1530445 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:43:00 AM vethdf37848 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:43:00 AM eth0 23.00 0.00 1.46 0.00 0.00 0.00 0.00
12:43:00 AM eth1 108.00 0.00 6.41 0.00 0.00 0.00 0.00
12:43:00 AM veth4456dfb 1.00 0.00 0.07 0.00 0.00 0.00 0.00
12:43:00 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:43:00 AM veth3541656 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:43:00 AM veth4e64e35 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:43:00 AM docker0 1.00 0.00 0.06 0.00 0.00 0.00 0.00

#参数解释:
rxpck/s:每秒接收数据包的数量
txpck/s:每秒发送数据包的数量
rxkb/s:每秒接收的数据大小,单位kb
txkb/s:每秒发送的数据大小,单位kb
rxcmp/s:每秒接收的压缩包的数量
txcmp/s:每秒发送的压缩包的数量
rxmcst/s:每秒接收的多播数据包数量

sar监测磁盘IO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sar -b 3 5 

Linux 3.10.0-1160.el7.x86_64 (gitlab) 07/31/2022 _x86_64_ (4 CPU)

12:45:56 AM tps rtps wtps bread/s bwrtn/s
12:45:59 AM 10.33 0.00 10.33 0.00 320.00
12:46:02 AM 0.00 0.00 0.00 0.00 0.00
12:46:05 AM 10.33 0.00 10.33 0.00 141.33
12:46:08 AM 1.67 0.00 1.67 0.00 88.00
12:46:11 AM 1.67 0.00 1.67 0.00 138.67
Average: 4.80 0.00 4.80 0.00 137.60

#参数解释:

tps:每秒磁盘的 I/O 传输总量
rtps:每秒从磁盘读出的数据总量
wtps:每秒向磁盘写入的数据总量
bread/s:每秒从磁盘读出的数据量,单位为 块/s
bwrtn/s:每秒向磁盘写入的数据量,单位为 块/s

free

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
free -h
total used free shared buff/cache available
Mem: 7.6G 4.1G 2.6G 401M 980M 2.9G
Swap: 0B 0B 0B


输出简介

下面先解释一下输出的内容:
Mem 行(第二行)是内存的使用情况。
Swap 行(第三行)是交换空间的使用情况。
total 列显示系统总的可用物理内存和交换空间大小。
used 列显示已经被使用的物理内存和交换空间。
free 列显示还有多少物理内存和交换空间可用使用。
shared 列显示被共享使用的物理内存大小。
buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。
available 列显示还可以被应用程序使用的物理内存大小。

我想只有在理解了一些基本概念之后,上面的输出才能帮助我们了解系统的内存状况。

buff/cache

先来提一个问题: buffer 和 cache 应该是两种类型的内存,但是 free 命令为什么会把它们放在一起呢?要回答这个问题需要我们做些准备工作。让我们先来搞清楚 buffer 与 cache 的含义。

buffer 在操作系统中指 buffer cache, 中文一般翻译为 “缓冲区”。要理解缓冲区,必须明确另外两个概念:”扇区” 和 “块”。扇区是设备的最小寻址单元,也叫 “硬扇区” 或 “设备块”。块是操作系统中文件系统的最小寻址单元,也叫 “文件块” 或 “I/O 块”。每个块包含一个或多个扇区,但大小不能超过一个页面,所以一个页可以容纳一个或多个内存中的块。当一个块被调入内存时,它要存储在一个缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的表示(下图来自互联网):


注意,buffer cache 只有块的概念而没有文件的概念,它只是把磁盘上的块直接搬到内存中而不关心块中究竟存放的是什么格式的文件。

cache 在操作系统中指 page cache,中文一般翻译为 “页高速缓存”。页高速缓存是内核实现的磁盘缓存。它主要用来减少对磁盘的 I/O 操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。页高速缓存缓存的是内存页面。缓存中的页来自对普通文件、块设备文件(这个指的就是 buffer cache 呀)和内存映射文件的读写。

页高速缓存对普通文件的缓存我们可以这样理解:当内核要读一个文件(比如 /etc/hosts)时,它会先检查这个文件的数据是不是已经在页高速缓存中了。如果在,就放弃访问磁盘,直接从内存中读取。这个行为称为缓存命中。如果数据不在缓存中,就是未命中缓存,此时内核就要调度块 I/O 操作从磁盘去读取数据。然后内核将读来的数据放入页高速缓存中。这种缓存的目标是文件系统可以识别的文件(比如 /etc/hosts)。

页高速缓存对块设备文件的缓存就是我们在前面介绍的 buffer cahce。因为独立的磁盘块通过缓冲区也被存入了页高速缓存(缓冲区最终是由页高速缓存来承载的)。

到这里我们应该搞清楚了:无论是缓冲区还是页高速缓存,它们的实现方式都是一样的。缓冲区只不过是一种概念上比较特殊的页高速缓存罢了。

那么为什么 free 命令不直接称为 cache 而非要写成 buff/cache? 这是因为缓冲区和页高速缓存的实现并非天生就是统一的。在 linux 内核 2.4 中才将它们统一。更早的内核中有两个独立的磁盘缓存:页高速缓存和缓冲区高速缓存。前者缓存页面,后者缓存缓冲区。当你知道了这些故事之后,输出中列的名称可能已经不再重要了。

free 与 available

在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?

free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差
将buff/cache 内存释放 变成free内存
1
echo 1 > /proc/sys/vm/drop_caches

sshd

修改ssh默认端口号为24522

1
2
3
4
5
sed -i 's@#Port 22@Port 24522@' /etc/ssh/sshd_config
sed -i 's/ 22 / 24522 /' /etc/sysconfig/iptables

systemctl restart sshd.service iptables.service
systemctl stop firewalld && systemctl disable firewalld

配置ssh免密码登录服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
在自己电脑上使用git bash 使用命令
xsx@DESKTOP-GPD8SA9 MINGW64 /e/Desktop
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/xsx/.ssh/id_rsa):
Created directory '/c/Users/xsx/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/xsx/.ssh/id_rsa.
Your public key has been saved in /c/Users/xsx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:sTQi+vEbaTvfSNx081lHCKI+El2dSiprz8RASoPzMuU xsx@DESKTOP-GPD8SA9
The key's randomart image is:
+---[RSA 3072]----+
| . o... |
| o + .. o..o. . |
| *.+o *o . . .|
| o.E.o=.+. . |
| .o. .=S . o o|
| . oo+o+ . o o.|
| ..=+o . o |
| ..=oo |
| ooo . |
+----[SHA256]-----+

/c/Users/xsx/.ssh/id_rsa
/c/Users/xsx/.ssh/id_rsa.pub
#将id_rsa.pub. 放到服务器/root/.ssh/authorized_keys 这个时候再用我们的id_rsa 私钥就可以去远程连接服务器了

配置ssh禁止使用密码登录服务器

1
2
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config
systemctl stop sshd && systemctl start sshd

sshd_config 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
ForwardAgent no
"ForwardAgent"设置连接是否经过验证代理(如果存在)转发给远程计算机。

ForwardX11 no
"ForwardX11"设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)。

RhostsAuthentication no
"RhostsAuthentication"设置是否使用基于rhosts的安全验证。

RhostsRSAAuthentication no
"RhostsRSAAuthentication"设置是否使用用RSA算法的基于rhosts的安全验证。

RSAAuthentication yes
"RSAAuthentication"设置是否使用RSA算法进行安全验证。

PasswordAuthentication yes
"PasswordAuthentication"设置是否使用口令验证。

FallBackToRsh no
“FallBackToRsh"设置如果用ssh连接出现错误是否自动使用rsh,由于rsh并不安全,所以此选项应当设置为"no”。

UseRsh no
“UseRsh"设置是否在这台计算机上使用"rlogin/rsh”,原因同上,设为"no"

BatchMode no
“BatchMode”:批处理模式,一般设为"no";如果设为"yes",交互式输入口令的提示将被禁止,这个选项对脚本文件和批处理任务十分有用。

CheckHostIP yes
“CheckHostIP"设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为"yes”。

StrictHostKeyChecking no
“StrictHostKeyChecking"如果设为"yes”,ssh将不会自动把计算机的密匙加入"$HOME/.ssh/known_hosts"文件,且一旦计算机的密匙发生了变化,就拒绝连接。

IdentityFile ~/.ssh/identity
"IdentityFile"设置读取用户的RSA安全验证标识。

Port 22
"Port"设置连接到远程主机的端口,ssh默认端口为22。

Cipher blowfish
“Cipher”设置加密用的密钥,blowfish可以自己随意设置。

EscapeChar
“EscapeChar”设置escape字符

shell 常用脚本

检查IP能否ping通

1
2
#将123.58.2.0/24网络中可以ping通的偶数IP打印出来
for i in `seq 2 2 254` ; do ping -c 1 -w 1 -s 1 123.58.2.$i &>/dev/null && echo 123.58.2.$i ; done

只对当前目录排序,并用直观的大小显示出来

1
2
for i in $(ls -l |grep '^d' |du -s *|sort -nr|awk '{print $2}');do du -sh $i;done

报错:line 38: $’\r’: command not found

1
linux 上shell下载到windows上可能给转换了格式,需要重新设置一下

date时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#显示当前的时间
[root@5eb1r /]# date
Mon Jun 20 15:31:36 CST 2022

#显示三个月前时间
[root@5eb1r /]# date +%Y%m%d -d "+3 month ago"
20220320

#显示三个月后时间
[root@5eb1r /]# date +%Y%m%d -d "+3 month "
20220920

#显示三天前时间
[root@5eb1r /]# date +%Y%m%d -d "+3 day ago "
20220617

#显示三天后时间
[root@5eb1r /]# date +%Y%m%d -d "+3 day "
20220623

#n默认为1
[root@5eb1r /]# date +%Y%m%d -d "+n day "
20220621

ls

ls按照时间排序查看

1
2
3
4
5
6
7
8
9
#升序排列是按照数据从低到高排列,降序排列是数据从高到低排列

ls按时间 降序 排列: ls -lt
ls按时间 升序 排列:ls -lrt

ll -htr (最好用)
-h 单位显示更直观查看
sort -n 排序
uniq -c 去重

ls按照文件大小排序查看

1
2
3
4
5
6
7
# 降序
ls -Sl

#升序
ls -Slr

du -h --max-depth=1

对当前目录和文件大小排序

1
du -s * |sort -nr

只对当前目录排序,并用直观的大小显示出来

1
2
for i in $(ls -l |grep '^d' |du -s *|sort -nr|awk '{print $2}');do du -sh $i;done

常用参数

1
2
3
4
5
6
7
8
9
10
 ls [-alrtAFR] [name...]
参数 :

-a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-R 若目录下有文件,则以下之文件亦皆依序列出

iptables防火墙

卸载firewalld安装iptables

1
2
3
4
5
6
7
8
9
10
11
12
13
#关闭firewalld并禁止开机自启
systemctl stop firewalld && systemctl disable firewalld

# 配置阿里云yum源,epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache fast

#安装IPtables
yum install -y iptables-services
systemctl disable firewalld.service && systemctl stop firewalld.service
systemctl enable iptables.service && systemctl start iptables.service

根据默认规则进行优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cat > /etc/sysconfig/iptables <<EOF
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 24522 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
EOF

#使修改的配置文件生效
systemctl reload iptables.service

四表五链讲解

iptables具有Filter, NAT, Mangle, Raw四种内建表:

1.Filter表

Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:

  • INPUT链 – 处理来自外部的数据。
  • OUTPUT链 – 处理向外发送的数据。
  • FORWARD链 – 将数据转发到本机的其他网卡设备上。
2.NAT表

NAT表有三种内建链:

  • PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
  • POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
  • OUTPUT链 – 处理本机产生的数据包。
3. Mangle表

Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:

  • PREROUTING
  • OUTPUT
  • FORWARD
  • INPUT
  • POSTROUTING
4. Raw表

Raw表用于处理异常,它具有2个内建链:

  • PREROUTING chain
  • OUTPUT chain

参数选项和规则语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
iptables(选项)(参数)

-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。


iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
常用示例
开放指定的端口
1
2
3
4
5
6
7
8
9
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口
iptables -A INPUT -j reject #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问
屏蔽IP
1
2
3
4
iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是
删除已添加的iptables规则
1
2
3
4
5
#将所有iptables以序号标记显示,执行:
iptables -L -n --line-numbers

#比如要删除INPUT里序号为8的规则,执行:
iptables -D INPUT 8

IP地址分类

A类地址

  • 1.0.0.1-126.155.255.254

    其中10.x.x.x 是私有地址,127.x.x.x 是保留地址,用作循环测试

B类IP地址

  • 范围从128.0.0.0 到 191.255.255.255 可用的B类网络有16382个
    172.16.0.0 ~ 172.31.255.255 是私有地址

C类IP地址

  • 范围从192.0.0.0 到 223.225.255.254
    192.168.x.x 是私有地址

特殊符号用法

$? $# & && &> | || ; ;;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
表示管道,上一条命令的输出,作为下一条命令参数,如:ls | grep “aa”,在ls的输出中查找aa字符串。

||
表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo “fail”

&
表示任务在后台执行,执行程序的后面添加&,这样在程序执行时我们仍然可以操作控制台。如要在后台运行test.jar,则可以用 java -jar test.jar > log.txt &

&&
表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo ‘2’

$?和$#
$?是执行上一条指令的返回值;$#是调用shell脚本传递的参数个数

&>
可以将错误信息或者普通信息都重定向输出

; 分号
在 shell 中,担任"连续指令"功能的符号就是"分号"。譬如以下的例子:cd ~/backup ; mkdir startup ;cp ~/.* startup/.

;; 连续分号
专用在 case 的选项,担任 Terminator 的角色。
case "$fop" inhelp) echo "Usage: Command -help -version filename";;version) echo "version 0.1" ;;esac

[ ] 中括号
常出现在流程控制中,扮演括住判断式的作用。if [ "$?" != 0 ]thenecho "Executes error"exit1fi
这个符号在正则表达式中担任类似 "范围" 或 "集合" 的角色
rm -r 200[1234]

[[ ]]
这组符号与先前的 [] 符号,基本上作用相同,但她允许在其中直接使用 || 与&& 逻辑等符号。
#!/bin/bashread akif [[ $ak > 5 || $ak< 9 ]]thenecho $akfi

, 逗点 (comma,标点中的逗号)
这个符号常运用在运算当中当做"区隔"用途。如下例
#!/bin/bashlet "t1 = ((a = 5 + 3, b = 7 - 1, c = 15 / 3))"echo "t1= $t1, a = $a, b = $b"

'string' 单引号
被单引号用括住的内容,将被视为单一字串。在引号内的代表变数的$符号,没有作用,也就是说,他被视为一般符号处理,防止任何变量替换。
heyyou=homeecho '$heyyou' # We get $heyyou

"string" 双引号
被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展。这点与单引数的处理方式不同。
heyyou=homeecho "$heyyou" # We get home

` 倒引号
在前面的单双引号,括住的是字串,但如果该字串是一列命令列,会怎样?答案是不会执行。要处理这种情况,我们得用倒单引号来做。
fdv=`date +%F`echo "Today $fdv"
在倒引号内的 date +%F 会被视为指令,执行的结果会带入 fdv 变数中。

linux标准输入输出

1
2
3
4
5
6
7
8
9
10
11
linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1,2。

STDIN是标准输入,默认从键盘读取信息;
STDOUT是标准输出,默认将输出结果输出至终端;
STDERR是标准错误,默认将输出结果输出至终端。

由于STDOUT与STDERR都会默认显示在终端上,为了区分,就有了编号的0,1,2的定义,用1表示STDOUT,2表示STDERR。

2>&1,指将标准输出、标准错误指定为同一输出路径
若要将所有标准输出及标准错误都输出至文件,可用&表示全部1和2的信息,eg:
find /etc -name passwd &>find.all 或 find /etc -name passwd >find.all 2>&1

nmap

快速ping多个网段

1
nmap  -sn 101.36.178.0/24 101.36.172.0/24    快速ping多个网段,12个网段15秒结束

检测某个IP的端口开放了那些

1
nmap -Pn 22,80,3306,443, x.x.x.x

常用快捷键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
xshell终端中
ctrl w #删除上个单词
ctrl ins #复制
shift ins #粘贴
alt 1 2 3 #快速切换终端
yyp #复制本行粘贴
ctrl v #选中 y 复制 p粘贴


ctrl c #复制
ctrl v #粘贴
ctrl a 全选
ctrl pageup #上一个浏览器页面
ctrl pagedown #下一个
ctrl w #关闭当前浏览器

查看当前开放的端口和进程

查看端口

1
2
ss -tuna 
netstat -utplna

查看进程

1
[root@test ~]# ps -ef 

查看进程的父进程

1
2
yum -y install psmisc
pstree -aps 异常进程ID号

lsblk磁盘管理用法

查看磁盘信息

1
2
3
4
5
6
7
lsblk   
########查看磁盘信息
[root@openvpn /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 50G 0 disk
└─vda1 253:1 0 50G 0 part /
vdb 253:16 0 100G 0 disk

将未挂载的vdb磁盘进行分区挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@openvpn ~]# fdisk /dev/vdb 
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-209715199, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199):
Using default value 209715199
Partition 1 of type Linux and of size 100 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

格式化磁盘挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#######格式化磁盘
[root@openvpn ~]# mkfs -t ext4 /dev/vdb1
NAME FSTYPE LABEL UUID MOUNTPOINT
vda
└─vda1 ext4 9f64194b-530f-4d17-bef9-d3607ecb5d55 /
vdb
└─vdb1 ext4 2ffae3ec-11d0-40d7-81fb-f078a4f082f6


#######临时挂载
[root@openvpn ~]#mount /dev/vdb1 /opt/

[root@openvpn ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
vda
└─vda1 ext4 9f64194b-530f-4d17-bef9-d3607ecb5d55 /
vdb
└─vdb1 ext4 2ffae3ec-11d0-40d7-81fb-f078a4f082f6 /var



blkid



#设置永久挂载不失效
[root@openvpn ~]# vim /etc/fstab
UUID=9f64194b-530f-4d17-bef9-d3607ecb5d55 / ext4 defaults 1 1
UUID=2ffae3ec-11d0-40d7-81fb-f078a4f082f6 /var ext3 defaults 1 1

[root@openvpn ~]#mount -a

删除磁盘分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@openvpn ~]# lsblk -a
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 50G 0 disk
└─vda1 253:1 0 50G 0 part /
vdb 253:16 0 100G 0 disk
└─vdb1 253:17 0 512B 0 part
[root@openvpn ~]# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): d ##d 为删除
Selected partition 1 ##输入要删除的分区号
Partition 1 is deleted
Command (m for help): w ## 保存并退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

服务器正在运行的用户

查看目前正在登录的用户

1
2
3
4
5
6
7
查看自己登录的终端信息
[root@test ~]# w |grep 'w$'

查看目前登录的用户IP
[root@test ~]# w |awk 'NR>=3 {print $3}'
124.127.244.29
124.127.244.29

查看自己登录身份

1
2
[root@test ~]# whoami
root

bond

Bond技术即bonding,它是Linux Kernel的一个模块,能将多块物理网卡绑定到一块虚拟网卡上,并通过修改网口驱动让多块网卡看起来是一个单独的以太网接口设备(对外只有一个IP),一般用于解决网卡的单点故障或网卡负载较高的场景。

Bond技术原理

Bond技术需要物理网卡开启混杂模式才能正常工作。在混杂模式下,网卡不只接收目的MAC地址为自身的以太网帧,而是接收网络上所有的数据帧。为了实现多块网卡的协同工作,Bond将自己的MAC地址复制到各个物理网卡上,让所有的网卡共享同一个MAC地址。这个方式就要求所有的网卡都要支持BIOS,这样才能够让操作系统将MAC地址写到网卡上。

对于单物理网卡的Bond网卡来说,Bond网卡的MAC地址和物理网卡的物理地址是一致的。而对于多物理网卡的Bond网卡而言,其中一块物理网卡会被设置为 Master,其他的网卡则都是Slave,Bond网卡的MAC地址取自标志为Master的物理网卡,然后再将这个MAC地址复制到其他物理网卡上。所以在安装网卡时,我们需要指定Bond网卡,以及Bond网卡所对应的标志为Master的物理网卡。

bond:可以理解为就是双网卡或者更多网卡绑定,逻辑上当作一个网卡用。

网卡Bond模式

网卡Bond模式总共有7种,最常用的是负载模式(模式0)和主备模式(模式1),在网络流量较大的场景下推荐使用负载模式,而在可靠性要求较高的场景下则推荐使用主备模式。接下来将对这7种模式进行简单的介绍以及优缺点对比。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1)mode=0
# 介绍
(balance-rr)Round-robin policy(平衡抡循环策略)
特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕)
问题:一个连接的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发

2)mode=1
# 介绍
bond1为主备模式,只有一个网卡在使用中。而且仅当活动网卡失效时才会激活其他的网卡。这种模式下做bond的两张或多张网卡的MAC地址和Bond虚拟网卡的MAC地址相同,而Bond的MAC地址是Bond创建启动后活动网卡的MAC地址这种模式要求主被网卡能快速的切换,即当主网卡出现故障后能迅速地切换至备用网卡。切换过程中,上层的应用几乎不受影响,因为Bond的驱动程序会临时接管上层应用的数据包,存放至数据缓冲区,等待备用网卡启动后再发送出去。但是如果切换时间过长,则会引起缓冲区的溢出,导致丢包
优点就是很安全,两块网卡同时坏的概率很低。
缺点则是利用率低下,只有50%的利用率。

应用场景一般是服务器的管理口,管理口一般没有太高的网络需求,稳定第一

mode=2
平衡策略 balance-xor(XOR policy)

基于特性的 Hash 算法传输数据包。
缺省的策略为:(源MAC地址 XOR 目标MAC地址) % slave数量。 # XRO为异或运算,值不同时结果为1,相同为0
可以通过xmit_hash_policy选项设置传输策略。
特点:提供负载均衡和容错能力。


3)mode=4
# 介绍
bond4为链路聚合模式。相当于两块小网卡合并一起当作一个大网卡用,类似1+1=2
前置条件1:交换机需要支持IEEE802.3ad(链路聚合标准),并且在交换机上进行相应配置。
前置条件2:ethtool支持获取每个slave的速率和双工设定

应用场景一般是业务网了,需要的大的带宽的情况比较适合

awk 常用语法

1
2
多个分隔符# awk -F \: '{print $1,$2}'

ceph

ceph -s 详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
watch -n1 ceph -s

Every 5.0s: ceph -s Thu Aug 18 11:13:51 2022

cluster:
id: dfff3f17-f0d8-4e8a-9107-a68fb4eccffa
health: HEALTH_WARN # 健康状态
9792109/98254284 objects misplaced (9.966%)
Degraded data redundancy: 19944/98254284 objects degraded
(0.020%), 105 pgs degraded, 187 pgs undersized

services:
mon: 3 daemons, quorum controller1,controller2,controller3 #三个守护进程,控制节点
mgr: mon1_mgr(active), standbys: mon3_mgr, mon2_mgr #活跃mon1_mgr 备用mon3_mgr mon2_mgr
osd: 115 osds: 115 up, 115 in; 1125 remapped pgs
rgw: 6 daemons active

data:
pools: 11 pools, 5176 pgs
objects: 32.75 M objects, 102 TiB
usage: 352 TiB used, 513 TiB / 865 TiB avail
pgs: 19944/98254284 objects degraded (0.020%)
9792109/98254284 objects misplaced (9.966%)
4049 active+clean
813 active+remapped+backfill_wait
125 active+remapped+backfilling
104 active+recovery_wait+undersized+degraded+remapped
77 active+recovering+undersized+remapped
5 active+recovering+undersized
2 active+recovery_wait+remapped
1 active+recovery_wait+undersized+degraded

io:
client: 22 MiB/s rd, 200 MiB/s wr, 3.08 kop/s rd, 3.83 kop/s wr
recovery: 98 MiB/s, 26 objects/s

Grep

grep Mount -A 10

除了列出符合行之外,并且列出后NUM行

grep Mount -B 10

history

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# history(选项)(参数)
选项:
-N: 显示历史记录中最近的N个记录;
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中;
-d<offset>:删除历史记录中第offset个命令
-n<filename>:读取指定文件


# history 10
1061 telnet 122.14.196.40 19091
1062 telnet 122.14.196.40 9091
1063 ls
1064 df -hT
1065 history -n 20
1066 history 20
1067 telnet 122.14.196.40 19091
1068 ls
1069 df -hT
1070 history 10

使用 !number 执行第几条命令
# !1063
ls
1.txt alertmanager.yml prometheus_SD_.yml prometheus.yml rules targets

执行上一条命令
# !!


用Ctrl+R搜索历史命令;当你执行了一串相当长的命令之后,你只要用关键字搜索一下历史命令然后重新执行这条命令而不需要将整条命令再输一遍

http status(状态码):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
	1xx:100-101,信息提示:
​ 2xx:200-206,成功类信息
​ 3xx:300-305,重定向
​ 4xx:400-415,错误类信息,客户端错误
​ 5xx:500-505,错误类信息,服务器端错误

常用的状态码:
200:成功,请求的所有数据通过响应报文的entity-body部分发送:ok
301:请求的URL指向的资源已经被删除,但在响应报文中通过首部Location指明了资源现在所处的新位置:Moved Permanently(永久删除)
302:与301相似,但在响应报文中通过Location指明资源现在所处临时新位置;Found
304:客户端发出了条件式请求;但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端:Not Modified
401:需要输入账号和面谬认证方能访问资源:Unauthorized
403:请求被禁止:Firbidden
404:服务器无法找到客户端请求的资源:Not Found
500:服务器内部错误:Internal Server Error
502:代理服务器从后端服务器收到了一条伪响应:Bad Gateway (很可能网关配置错误)