2019-05-29

Linux-nftables


Linux-nftables

https://netfilter.org/
https://netfilter.org/projects/iptables/index.html
https://netfilter.org/projects/nftables/index.html
https://www.netfilter.org/projects/nftables/manpage.html
https://wiki.nftables.org/wiki-nftables/index.php/Main_Page
https://wiki.nftables.org/wiki-nftables/index.php/Quick_reference-nftables_in_10_minutes
https://wiki.archlinux.org/index.php/Nftables
https://wiki.gentoo.org/wiki/Nftables
https://wiki.gentoo.org/wiki/Nftables/Examples
https://kernelnewbies.org/nftables_examples

1. Linux防火墙简介
2. nftables介绍
3. 为什么要使用nftables
4. Netfilter日志框架
5. nft命令介绍
6. nft基础操作
7. 更多规则选项

1. Linux防火墙简介

Linux系统较早使用的防火墙是(约1996年的Linux 2.0) ipfwadm 和(约1999年的Linux 2.2) ipchains。
基于以上版本经过重新设计和大幅改进后出现了(约2001年的Linux 2.4)的netfilter。一直应用到现在。

  • 包过滤框架:netfilter (约2001年Linux 2.4) 该框架内的软件支持包过滤,网络地址[和端口]转换(NA[P]T)和其他数据包重整。是Linux内核中的一组钩子,允许内核模块向网络堆栈注册回调函数。然后,对于遍历网络堆栈内的相应挂钩的每个数据包,回调注册的回调函数。
  • 用户工具集:iptables, nftables等
    • iptables (约2001年Linux 2.4) 是用户空间命令行程序,用于配置netfilter包过滤规则集。
    • nftables (约2013年Linux 3.13) 旨在取代现有iptables的{ip,ip6,arp,eb}表框架。(iptables,ip6tables,arptables,etables用于以太网桥过滤的功能。)

补充:firewalld也是Linux的防火墙,同时支持iptables和nftables,最新版本默认使用nftables。简单的说firewalld是基于nftfilter防火墙的用户界面工具。而iptables和nftables是命令行工具。firewalld引入区域的概念,可以动态配置,让防火墙配置及使用变得简便。详见firewalld.org

netfilter, iptables, nftables 都是netfilter项目。nftables 用于替代 iptables。
netfilter的功能很强大,远远超越防火墙的范围,详见项目主页。

2. nftables介绍

本文主要记录较新的nftables的特性及nft工具的使用。
nftables 提供了一个新的包过滤框架,该框架基于特定于网络的虚拟机(VM),一个新的用户空间实用程序(nft)和一个用于{ip,ip6}表的兼容层。
它使用现有的钩子,连接跟踪系统,用户空间排队组件和netfilter的日志子系统。
它由三个主要组件组成:内核实现,libnl netlink通信和nftables用户空间前端。
内核提供了netlink配置接口,以及运行时规则集评估,
libnl包含用于与内核通信的低级函数,
而nftables前端是用户通过nft进行交互的内容。

从Linux内核3.13版本开始(2013),nftables已经成为Linux内核主线的一部分。正在逐渐替换iptables。

3. 为什么要使用nftables

https://developers.redhat.com/blog/2016/10/28/what-comes-after-iptables-its-successor-of-course-nftables/
nftables对旧iptables提供的最显着的功能有:
支持查找表 - 无需进行线性规则评估
不再强制执行隐式规则计数器和地址/接口匹配的开销
拥有使用额外脚本的能力。
nftables不包含任何内置表。

可用性:
事务规则更新 - 所有规则都以原子方式应用
应用程序可以订阅nfnetlink通知,以便在添加或删除新规则时接收规则更新
nft命令行工具可以显示正在匹配的规则的实时日志,以便于规则集调试

nftables重用了netfilter框架的许多部分,例如连接跟踪和NAT设施。它还保留了命名法和基本iptables设计的几个部分,例如表格,链条和规则。
就像使用iptables一样,表充当链的容器,链包含单独的规则,可以执行诸如丢弃数据包,移动到下一个规则或跳转到新链的操作。

什么被替换?
从用户的角度来看,nftables添加了一个名为nft的新工具,它取代了iptables,arptables和ebtables中的所有其他工具。从架构的角度来看,它还取代了处理包过滤规则集的运行时评估的内核部分。

允许监控规则更新。nft工具可用于监视规则集中的更改,例如“nft monitor”显示从内核添加和删除的每个规则。
它还提供“跟踪模式”,系统管理员可以在此处执行“添加规则修改” prerouting ip saddr 10.2.3.4 meta nftrace set 1'。
然后,“nft monitor trace”将显示与来自IP地址10.2.3.4的数据包匹配的每个规则。

4. Netfilter日志框架

Nftables 7 : Nftables Logging
http://computer-outlines.over-blog.com/article-nftables-7-nftables-logging-123303629.html
/proc/net/netfilter/nf_log
从Linux 2.6.14开始,可以通过内核数据包过滤器记录的用户空间数据包进行传递。
有两个工具:
QUEUE et NFQUEUE:外部应用程序用于决策(SNORT IDS / IPS,NuFW,ulogd,...)
LOG et NFLOG:用于外部日志记录(Wireshark,Syslog,...)

NFlog是一个新的iptables和Nftables的目标是通过虚拟设备记录数据包。
NFLOG目标会复制数据包并将其发送到指定的netlink套接字。

$ sudo cat /proc/net/netfilter/nf_log
 0 NONE ()
 1 NONE ()
 2 NONE ()// IPv4
 3 NONE ()
 4 NONE ()// Novell IPX
 5 NONE ()
 6 NONE ()
 7 NONE ()
 8 NONE ()
 9 NONE ()
10 NONE ()// IPv6
11 NONE ()
12 NONE ()
// 行号是协议。
比如启用IPv6 nfnetlink_log:
echo "nfnetlink_log" > /proc/sys/net/netfilter/nf_log/10
$ ls /proc/net/netfilter/nf_log
/proc/net/netfilter/nf_log
$ ls /proc/sys/net/netfilter/nf_log
0  1  10  11  12  2  3  4  5  6  7  8  9
$ sudo cat /proc/net/netfilter/nf_log
...
10 nfnetlink_log(nfnetlink_log)

5. nft命令介绍

不同与iptables,nftables不包含任何内置表。还拥有使用额外脚本的能力, 拥有一些高级的类似编程语言的能力,例如定义变量和包含外部文件。
与iptables类似的是,表层次结构:表包含链,链里是具体的过滤规则。处理规则则由 地址,接口,端口或包含当前处理数据包中的其他数据等表达式以及诸如drop, queue, continue等声明组成。
可以用于多种地址族的过滤和处理:

  • ip: IPv4 地址
  • ip6: IPv6 地址
  • inet: IPv4 和 IPv6 地址
  • arp: 地址解析协议(ARP)地址
  • bridge: 处理桥接数据包

注:当没有指定地址族时,默认为IP。

特定的地址族包含钩子,对ip,ipv6,和inet地址族来说,可以应用如下钩子

  • prerouting: 刚到达并且未被处理过的数据包
  • input: 已经被接收并且已经经过prerouting钩子的传入数据包
  • forward: 如果数据包将被发送到另一个设备,他将会通过forward钩子
  • output: 从本地系统传出的数据包
  • postrouting: 仅仅在离开系统之前

ARP地址族只能使用input和output钩子。

$ nft -h
  -h, --help 显示帮书
  -v, --version 显示版本信息

  -c, --check 检查命令的有效性,而不实际应用更改。
  -f, --file <filename> 包含文件内容<filename>
  -i, --interactive 从命令行读取输入

  -j, --json 以JSON格式化输出
  -n, --numeric 指定一次后,以数字方式显示网络地址(默认行为)。
  指定两次以数字方式显示Internet服务(端口号)。
指定三次以数字方式显示协议,用户ID和组ID。
  -s, --stateless 省略规则集的有状态信息。
  -N 将IP地址转换为名称。
  -a, --handle 显示规则句柄handle.
  -e, --echo Echo what has been added, inserted or replaced.
  -I, --includepath <directory> 添加<directory>目录到包含文件的搜索路径中。默认为: /usr/share
  --debug <level [,level...]> 添加调试,在level处(scanner, parser, eval, netlink, mnl, proto-ctx, segtree, all)

# nft 操作符 操作目标 操作内容
操作符: 增,删,改,查,清除,插入,创建
操作目标: 表,链(),规则()
表操作(add,delete,list,flush;
链操作(add,delete,rename,list,flush,create);链类型(type:filter,route,nat);链钩子(hook...)
规则(add,delete,insert;
操作内容:...

查询所有表名
nft list tables

查询某个表的内容
nft list table 表名

    \Subcmd→
cmd↓\
表语法
table
链语法
chain
规则语法
rule
备注
add 添加到末尾
create 除非已存在同名链
insert 插入到指定位置
delete
flush
rename 链名称
list

6. nft基础操作

https://yq.aliyun.com/articles/531207
1、增
增加表:nft add table fillter
增加链:nft add chain filter input { type filter hook input priority 0 \; } # 要和hook(钩子)相关连
增加规则:nft add rule filter input tcp dport 22 accept
2、删
只需要把上面的 add 改为 delete 即可
3、改
更改链名用rename
更改规则用replace
4、查
nft list ruleset # 列出所有规则
nft list tables # 列出所有表
nft list table filter # 列出filter表
nft chain filter input # 列出filter表input链
以上命令后面也可以加 -nn  用于不解析ip地址和端口
加 -a 用于显示 handles

7. 更多规则选项

声明

1 accept 接受 接受 包 停止处理
2 drop 丢弃 丢弃 包 停止处理
3 reject 拒绝 驳回 包 停止处理
4 queue 队列 发送包 到用户空间程序 停止处理
5 continue 继续 继续处理包
6 return 返回 发送到调用的规则链进行处理
7 jump <chain> 跳跃 发送到指定的规则链进行处理 当完成时或执行了返回的声明,返回到调用的规则链
8 goto <chain> 转到 发送到指定的规则链进行处理 不返回到调用的规则链
9 limit limit 达到接收包的匹配限制, 则根据规则处理包
10 log log 日志记录 包 继续处理
meta 元表达式

66 meta rtclassid Routing realm 路由领域




67 length Length of the packet in bytes: meta length > 1000 以字节为单位的数据包长度:元长度> 1000




68 protocol ethertype protocol: meta protocol vlan ethertype协议:元协议vlan




69 priority TC packet priority TC包优先级




70 mark Packet mark 包标记




71 iif Input interface index 输入接口索引 76 meta oif Output interface index 输出接口索引
72 iifname Input interface name 输入接口名称 77 oifname Output interface name 输出接口名称
73 iiftype Input interface type 输入接口类型 78 oiftype Output interface hardware type 输出接口硬件类型
74 skuid UID associated with originating socket 与原始套接字关联的UID 79 skgid GID associated with originating socket 与原始套接字关联的GID
75 iifgroup Input interface group 输入接口组 80 oifgroup Output interface group 输出接口组
ct 连接跟踪

54 ct direction Direction of the packet relative to the connection 数据包相对于连接的方向




55 mark Connection mark 连接标记




56 expiration Connection expiration time 连接到期时间




57 helper Helper associated with the connection 辅助与连接相关联




58 l3proto Layer 3 protocol of the connection 连接的第3层协议




59 protocol Layer 4 protocol of the connection for the given direction 给定方向的连接的第4层协议




60 state State of the connection 连接状态 63 ct status Status of the connection 连接状态
61 saddr Source address of the connection for the given direction 给定方向的连接的源地址 64 daddr Destination address of the connection for the given direction 给定方向的连接的目标地址
62 proto-src Layer 4 protocol source for the given direction 给定方向的第4层协议源 65 proto-dst Layer 4 protocol destination for the given direction 给定方向的第4层协议目的地
IPv4 IPv6 报头表达式

1 ip hdrlength IP header length IP标头长度




2 tos Type of Service 服务类型




3 id IP ID IP ID




4 frag-off Fragmentation offset 碎片偏移




5 ttl Time to live 生存的时间




6 protocol Upper layer protocol 上层协议




7 checksum IP header checksum IP头校验和




8 version Ip Header version Ip Header版本 12 ip6 version IP header version IP标头版本
9 saddr Source address 来源地址 13 saddr Source Address 来源地址
10 daddr Destination address 目的地址 14 daddr Destination Address 目的地址
11 length Total packet length 总包长度 15 length Payload length 有效载荷长度





16 priority
优先





17 nexthdr Next header type (Upper layer protocol number) 下一个标题类型
(上层协议号)





18 flowlabel Flow label 流标签





19 hoplimit Hop limit 跳限制
TCP UDP 报头表达式

20 tcp sequence Sequence number 序列号




21 ackseq Acknowledgement number 致谢号码




22 doff Data offset 数据偏移




23 flags TCP flags TCP标志




24 window Window 窗口




25 urgptr Urgent pointer 紧急指针




26 sport Source port 源端口 29 udp sport Source port 源端口
27 dport Destination port 目的端口 30 dport destination port 目的端口
28 checksum Checksum 校验 31 checksum Checksum 校验





32 length Total packet length 总包长度
其他匹配项目

33 udplite sport Source port 源端口
34 dport destination port 目的端口
35 cscov Checksum coverage 校验和覆盖范围
36 checksum Checksum 校验
37 sctp sport Source port 源端口
38 dport destination port 目的端口
39 vtag Verification tag 验证标签
40 checksum Checksum 校验
41 dccp sport Source port 源端口
42 dport destination port 目的端口
43 ah nexthdr Next header protocol (Upper layer protocol) 下一个标头协议(上层协议)
44 hdrlength AH header length AH标头长度
45 spi Security Parameter Index 安全参数索引
46 sequence Sequence Number 序列号
47 esp spi Security Parameter Index 安全参数索引
48 sequence Sequence Number 序列号
49 ipcomp nexthdr Next header protocol (Upper layer protocol) 下一个标头协议(上层协议)
50 flags Flags
51 cfi Compression Parameter Index 压缩参数索引
52 icmp type icmp packet type icmp数据包类型
53 icmpv6 type icmpv6 packet type icmpv6数据包类型

Linux-kernel-timeline


Linux kernel
ProtocolLocation
HTTP https://www.kernel.org/pub/
GIT https://git.kernel.org/
RSYNC rsync://rsync.kernel.org/pub/

1. 最新版本
2. 版本类别
  活动内核版本
  分发内核版本
3. 部分较关键历史版本时间线
4. 历史版本代码规模统计
5. 常用Linux分支最新版本的内核版本号(201905)
6. 补充参考信息,部分内容可能已过时

> 1. 最新版本(包含长期发行版本)

截至2019年5月28号

版本号 时间 版本说明
3.16.68 2019.05.22 Longterm 长期发行版本 2014.08~2020.08
3.18.140[EOL] 2019.05.16 Longterm
4.4.180 2019.05.16 Longterm 长期发行版本 2016.01~2022.02
4.9.179 2019.05.25 Longterm 长期发行版本 2016.12~2023.01
4.14.122 2019.05.25 Longterm 长期发行版本 2017.11~2020.01
4.19.46 2019.05.25 Longterm 长期发行版本 2018.10~2020.10
5.1.5 2019.05.25 stable 稳定版
5.2-rc2 2019.05.26 mainline 主线

> 2. 版本主要类别

Active kernel releases 活动内核版本

Prepatch 预备
Prepatch或“RC”内核是主线内核预发行版,主要针对其他内核开发人员和Linux爱好者。
它们必须从源代码编译,并且通常包含必须在可以放入稳定版本之前进行测试的新功能。准备内核由Linus Torvalds维护和发布。

Mainline 主线 新的主线内核每2-3个月发布一次。
主线树由Linus Torvalds维护。它是引入所有新功能的树,以及所有令人兴奋的新开发项目。

Stable 稳定 根据需要发布稳定的内核更新,通常每周一次。
在每个主线内核发布后,它被认为是“稳定的”。任何针对稳定内核的错误修复都从主线树反向移植,并由指定的稳定内核维护者应用。在下一个主线内核可用之前,通常只有少数bugfix内核版本可用 - 除非它被指定为“长期维护内核”。

Longterm 长期
通常有几个“长期维护”内核版本,用于向旧内核树的后端移植错误修复。只有重要的错误修正应用于此类内核,并且它们通常不会看到非常频繁的版本,特别是对于较旧的树。

Distribution kernels 分发内核

许多Linux发行版都提供了自己的“长期维护”内核,这些内核可能也可能不是基于内核开发人员维护的内核。这些内核版本不在kernel.org上托管,内核开发人员不支持它们。

很容易判断您是否正在运行分发内核。除非您从kernel.org下载,编译和安装了自己的内核版本,否则您正在运行分发内核。要找出内核的版本,请运行
uname -r
5.1.5-arch1-2-ARCH
如果在破折号后看到任何内容,则表明您正在运行分发内核。请使用您的分发供应商提供的支持渠道来获取内核支持。

> 3. 部分较关键历史版本时间线


版本号 时间 版本说明
0.00 1991.2-4 两个进程分别显示AAABBB
0.11 1991.12.8 基本可以正常运行的内核版本
1.0 1994.3.14 linux系统的核心开发队伍建起
2.0 1996.2.9 ipfwadm
2.2 1999.1.26 ipchains
2.4 2001.1.4 netfilter
2.6 2003.12.17 支持多处理器配置和64位计算,
它还支持实现高效率线程处理的本机POSIX线程库(NPTL)。
实际上,性能、安全性和驱动程序的改进是整个2.6.x内核的关键
2.6.15 2006 改进对IPv6的支持
2.6.30 2009.6 改善了文件系统、加入了完整性检验补丁、
TOMOYOLinux安全模块、
可靠的数据报套接字(datagramsocket)协议支持、
对象存储设备支持、FS-Cache文件系统缓存层、
nilfs文件系统、线程中断处理支持等等。
2.6.32 2009.12 增添了虚拟化内存de-duplicacion、重写了writeback代码、
改进了Btrfs文件系统、添加了ATIR600/R7003D和KMS支持、
CFQ低传输延迟时间模式、perftimechart工具、
内存控制器支持softlimits、支持S+Core架构、
支持IntelMoorestown及其新的固件接口、
支持运行时电源管理、以及新的驱动
2.6.34 2010.5 添加了Ceph和LogFS两个新的文件系统,
其中前者为分布式的文件系统,
后者是适用于Flash设备的文件系统。
LinuxKernel2.6.34的其他特性包括新的Vhostnet、
改进了Btrfs文件系统、对Kprobesjump进行了优化、
新的perf功能、RCUlockdep、
GeneralizedTTLSecurityMechanism(RFC5082)
及privateVLANproxyarp(RFC3069)支持、asynchronous挂起恢复等
2.6.35 2010.8.1 在系统的多个CPU之间分配网络处理负载,
Btrfs文件系统加入直接I/O支持,大量新的驱动等
2.6.36 2010.10 Tilera处理器架构支持、新的文件通知接口fanotify、
Intel显卡上实现KMS和KDB的整合、并行管理工作队列、
Inteli3/5平台上内置显卡和CPU的智能电源管理、
CIFS文件系统本地缓存、改善虚拟内存的层级结构,
提升桌面操作响应速度、改善虚拟内存溢出终结器的算法、
整合了AppArmor安全模型
(注:与SELinux基于文件的标注不同,AppArmor是基于路径的)
2.6.38 2011.3.15 件操作性能得以提高许多,提高了Wi-Fi的性能等等
2.6.39 2011.5 加入了IPset框架,提高规则匹配速度,更新媒体控制系统等
3.0 2011.7.21
3.2 2012.1 三星Exynos处理器驱动、VMware显卡驱动脱离
staging tree以及后者的大量变动、
Intel/Radeon/Nouveau/DRM大量更新、
Btrfs文件系统改进,等等
3.5 2012.7 EXT4文件系统元数据校验,TCP连接的检查与修复
3.12.6 2013.12
3.16 2014.8 Longterm 长期发行版本 2014.08~2020.08
3.18.11 2015.4 Longterm
3.19 2015.2 为多种触控板增加多点触控支持
3.19.8 2015.5.11 在动态电源管理风扇控制、Flash友好文件系统启动时间、
多重触摸等方面做了改进
4.4 2016.1 Longterm 长期发行版本 2016.01~2022.02
4.9 2016.12 Longterm 长期发行版本 2016.12~2023.01
4.14 2017.11 Longterm 长期发行版本 2017.11~2020.01
4.19 2018.10 Longterm 长期发行版本 2018.10~2020.10
5.0.19 2019.05.25 stable 稳定版
5.1.5 2019.05.25 stable 稳定版
5.2-rc2 2019.05.26 mainline 主线

> 4. 历史版本代码规模统计



https://web.archive.org/web/20180623215917/https://www.linuxcounter.net/statistics/kernel

> 5. 常用Linux分支最新版本的内核版本号(201905)


分支 排名 点击数 最近更新日期 长期支持 分发版本 内核版本
MX Linux 1 4345 2019-05-27
18.3 4.19.37
Manjaro 2 3382 2019-03-12
2019-05-28

18.0.4
Stable
4.19.28
5.2rc1…
Mint 3 2197 2018-12-18 2023-04 19.1 4.15
Ubuntu 5 1490 2019-04-18 2020-01 19.04 5.0.0
Fedora 7 1034 2019-04-30
30 5.0.9
Arch 16 582 2019-05-29
current 5.1.15
Gentoo 48 238 2019-05-28
stable
Unstable
4.19.44
5.1.5

> 6. 补充参考信息,部分内容可能已过时

https://www.linuxidc.com/Linux/2011-08/40049.htm
内核版本号由3 个数字组成:r.x.y。

r:目前发布的内核主版本。
x:偶数表示稳定版本;奇数表示开发中版本。
y:错误修补的次数。

major.minor.patch-build.desc
2.26.35-rc5
1、major:表示主版本号,有结构性变化时才变更。
2、minor:表示次版本号,新增功能时才发生变化;一般奇数表示测试版,偶数表示生产版。
3、patch:表示对次版本的修订次数或补丁包数。
4、build:表示编译(或构建)的次数,每次编译可能对少量程序做优化或修改,但一般没有大的(可控的)功能变化。
5、desc:用来描述当前的版本特殊信息;其信息由编译时指定,具有较大的随意性,但也有一些描述标识是常用的,比如:
<1>rc(有时也用一个字母r),表示候选版本(release candidate),rc后的数字表示该正式版本的第几个候选版本,多数情况下,各候选版本之间数字越大越接近正式版。
<2>smp,表示对称多处理器(Symmetric MultiProcessing)。
<3>pp,在Red Hat Linux中常用来表示测试版本(pre-patch)。
<4>EL,在Red Hat Linux中用来表示企业版Linux(Enterprise Linux)。
<5>mm,表示专门用来测试新的技术或新功能的版本。
<6>fc,在Red Hat Linux中表示Fedora Core。


https://www.ibm.com/developerworks/cn/linux/l-linux-kernel/index.html

2019-05-27

Linux-swap

Linux交换区简介

Linux交换区简介

Linux交换区相当与Windows的虚拟内存,大小通常要大于等于内存的大小。
交换空间可用于两个目的,弥补物理内存(RAM)过小的问题;以及PC睡眠的支持。
https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate

  • suspend (suspend to RAM)挂起到RAM方法会削减除RAM之外的大多数机器的电源,这是恢复机器状态所必需的。由于节省了大量电力,建议笔记本电脑在电池运行且盖子关闭(或用户处于非活动状态一段时间)时自动进入此模式。
  • hibernate (Suspend to disk)挂起到磁盘方法将机器的状态保存到swap交换空间并完全关闭计算机。打开机器电源后,状态将恢复。在此之前,功耗为零。
  • hybrid suspend 挂起到两种方法都会将机器的状态保存到swap交换空间,但不会关闭机器电源。相反,它调用通常挂起到RAM。因此,如果电池没有耗尽,系统可以从RAM恢复。如果电池电量耗尽,系统可以从磁盘恢复,这比从RAM恢复要慢得多,但机器的状态并没有丢失。

Linux交换区:可以使用独立的分区,也可以使用一个文件。
查看现有交换分区的几种方式:
$ swapon
NAME       TYPE      SIZE USED PRIO
/dev/sda12 partition   8G   0B   -2
$ swapon -show
Filename Type Size Used Priority
/dev/sda12                              partition 8386556 0 -2
$ free -h
              total        used        free      shared  buff/cache   available
Mem:          7.8Gi       2.3Gi       3.6Gi       280Mi       1.9Gi       4.9Gi
Swap:         8.0Gi          0B       8.0Gi

Swap partition

查看/etc/fstab文件。
# /dev/sdb6
UUID=77727c05-e82e-426f-b1b2-9062be75ad62 /          ext4      rw,relatime 0 1
# /dev/sdb7 LABEL=Shome
UUID=3591c8cd-47f7-4bf6-a417-e62b685f9144 /home      ext4      rw,relatime 0 2
# /dev/sdb9
UUID=13802d9f-8485-4d1f-a08c-583abe64961f none      swap      defaults  0 0

$ lsblk -f
NAME    FSTYPE LABEL  UUID                                 FSAVAIL FSUSE% MOUNTPOINT
sdb                                                                     
├─sdb6  ext4   Sarch  77727c05-e82e-426f-b1b2-9062be75ad62   14.1G    48% /
├─sdb7  ext4   Shome  3591c8cd-47f7-4bf6-a417-e62b685f9144     13G    55% /home
└─sdb9  swap          13802d9f-8485-4d1f-a08c-583abe64961f                [SWAP]

再增加一个交换区
$ sudo mkswap /dev/sda12
Setting up swapspace version 1, size = 8 GiB (8587833344 bytes)
no label, UUID=08aba37c-1b94-4d14-af39-cd416e0ecf57
$ sudo swapon /dev/sda12
$ swapon
NAME       TYPE      SIZE USED PRIO
/dev/sdb9  partition   8G   0B   -2
/dev/sda12 partition   8G   0B   -3

编辑/etc/fstab文件,添加sda12作为交换分区。
# /dev/sda12
UUID=08aba37c-1b94-4d14-af39-cd416e0ecf57 none       swap       defaults   0 0

删除一个交换分区,确保未被使用,可以重启后执行。
$ sudo swapoff /dev/sdb9
$ swapon
NAME       TYPE      SIZE USED PRIO
/dev/sda12 partition   8G   0B   -2
注:别忘了 编辑/etc/fstab文件,删除掉/dev/sdb9交换区的信息行

Swap file

https://wiki.archlinux.org/index.php/Swap#Swap_file
使用fallocate创建一个交换文件,单位可以使用(M = Mebibytes,G = Gibibytes)。
# fallocate -l 512M /swapfile
# fallocate -l 1G /swap
注意: fallocate可能会导致某些文件系统(例如F2FS)出现问题。[1]作为替代方案,使用dd更可靠,但速度更慢:
# dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress

# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile

将交换文件添加到/etc/fstab文件
/swapfile none swap defaults 0 0

Remove swap file
# swapoff /swapfile
# rm -f /swapfile

2019-05-25

Linux-System-Port


 目录
TCP和UDP
端口号的分配
广泛公认的端口列表
常用端口列表
Linux系统的端口列表信息
Linux系统nftables防火墙的端口映射
(20190525添加:Linux系统nftables防火墙的端口映射 章节)
传输层的端口
计算机之间依照互联网传输层TCP/IP协议的协议通信,不同的协议都对应不同的端口。并且,利用数据报文的UDP也不一定和TCP采用相同的端口号码。

TCP和UDP

  • TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。
  • UDP(User Data Protocol,用户数据报协议)非连接的协议,传输数据之前源端和终端不建立连接,尽快交付,不保证可靠交付。
>  TCP就好比打电话: 可靠,相对消耗资源也更多.
拨通电话,且对方接听了电话,才算建立连接成功,这时候就可以聊天了。TCP数据才开始发送。
电话拨通了,但对方没接,建立连接失败;需要重拨...
若中途掉线,即连接断开,聊天也中断了。连接断开;需要重拨...
>  UDP就好比发送短消息: 快速节能但不可靠.
只管发出去,不管对方能不能看到。更不会考虑对方是否有拦截短信等软件。
对方没带手机,手机没电关机...与我无关,我已发送完成。

端口号的分配

端口号基于三个范围以各种方式分配。这些范围的差异用途描述于[RFC6335]。根据[RFC6335]的8.1.2节:
  • 系统端口:(0-1023)是由“IETF审查”或“IESG批准”程序分配[RFC8126]。
  • 用户端口:(1024-49151)由IANA使用“IETF审核”流程分配,根据“IESG批准”流程或“专家审核”流程[RFC6335]。
  • 动态端口:(49152-65535)或称私有端口, 根据定义,没有端口可以被正式地注册占用。

广泛公认的端口列表

完整的注册端口列表,最近更新时间:2019-04-23 (查看时间20190503,还是非常新的。)
https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
网页上查看有142页,有超过14000行的端口登记信息。支持导出格式有csv, xml, heml, txt
有搜索栏,方便搜索关键字。
注:
  1. 广泛公认的端口,是大部分广泛使用的程序或协议的默认端口,但实际使用时,由于安全等原因,系统管理员可以自行指定端口号。
  2. 这里的端口号通常指的是服务器端的端口号。比如网页浏览器会在本机的36406端口和远端的80端口间建立连接。服务端的80端口就是默认的广泛公认的端口。而本机的36406则只是临时端口。
https://zh.wikipedia.org/wiki/TCP/UDP端口列表
wiki这里筛选了常用的端口,约500行。包括一些游戏使用的端口。

常用端口列表  

端口 服务 描述
20/TCP,UDP FTP [Default Data] 文件传输协议 - 默认数据端口
21/TCP,UDP FTP [Control] 文件传输协议 - 控制端口
22/TCP,UDP SSH SSH(Secure Shell) - 远程登录协议,用于安全登录文件传输(SCP,SFTP)及端口重新定向
23/TCP,UDP Telnet Telnet终端仿真协议 - 未加密文本通信
25/TCP,UDP SMTP SMTP(简单邮件传输协议) - 用于邮件服务器间的电子邮件传递
43/TCP WHOIS WHOIS协议
53/TCP,UDP DNS DNS(域名服务系统)
67/UDP BOOTPs BOOTP(BootStrap协议)服务;同时用于动态主机设置协议
68/UDP BOOTPc BOOTP客户端;同时用于动态主机设定协议
69/UDP TFTP 小型文件传输协议(小型文件传输协议)
80/TCP Http 超文本传输协议(超文本传输协议)- 用于传输网页
110/TCP POP3 邮局协议,“邮局协议”,第3版 - 用于接收电子邮件
113/TCP Windows验证服务 Ident - 旧的服务器身份识别系统,仍然被IRC服务器用来认证它的用户
123/UDP NTP NTP(Network Time Protocol) - 用于时间同步
137/TCP,UDP NetBIOS Name Service NetBIOS NetBIOS 名称服务
138/TCP,UDP NetBIOS Datagram Service NetBIOS NetBIOS 数据报文服务
139/TCP,UDP NetBIOS Session Service NetBIOS NetBIOS 会话服务
143/TCP,UDP IMAP 因特网信息访问协议(Internet信息访问协议 4) - 用于检索 电子邮件s
161/TCP,UDP SNMP 简单网络管理协议 (简单网络管理协议)
179/TCP Bgp 边界网关协议 (边界网关协议)
194/TCP IRC(互联网中继聊天)
220/TCP,UDP IMAP3 因特网信息访问协议,交互邮件访问协议第3版
389/TCP,UDP LDAP 轻型目录访问协议 LDAP
443/TCP Https 超文本传输安全协议 - 超文本传输协议 over TLS/SSL(加密传输)
546/TCP,UDP DHCPv6客户端
547/TCP,UDP DHCPv6服务器
631/TCP,UDP CUPS 互联网打印协议
636/TCP,UDP LDAPS LDAP over SSL(加密传输,也被称为LDAPS)
991/TCP,UDP NAS (Netnews Admin System)
1080/tcp SOCKS SOCKS代理
1194/udp OpenVPN
1433/tcp,udp SQL Server Microsoft SQL 数据库系统
1434/tcp,udp SQL Server monitor Microsoft SQL 活动监视器
1521/tcp Oracle Oracle数据库 default listener, in future releases official port 2483
3306/tcp,udp MySQL MySQL数据库系统
3389/tcp RDP 远程桌面协议(RDP)
5432/tcp PostgreSQL PostgreSQL database system

Linux系统的端口列表信息

使用“ cat /etc/services ”命令,可以查看所有服务默认的端口列表信息。
$ cat /etc/services |wc -l
11410 //1行就是1个tcp或udp端口对照

//# Full data: /usr/share/iana-etc/port-numbers.iana
$ cat /usr/share/iana-etc/port-numbers.iana |wc -l
121959 //类似xml格式的,7行左右表示1个端口信息


Linux系统nftables防火墙的端口映射

https://wiki.archlinux.org/index.php/Nftables
注意: nft不用于/etc/services将端口号与名称匹配,而是使用内部列表。 要从命令行显示端口映射,请使用eg nft describe tcp dport。
$ sudo nft describe tcp dport |wc -l
338
$ sudo nft describe tcp dport
payload expression, datatype inet_service (internet network service) (basetype integer), 16 bits
pre-defined symbolic constants (in decimal):
tcpmux 1
echo 7
... 详见下表:

sn name port name port name port name port

tcpmux 1 exec 512 cfinger 2003 x11-6 6006

echo 7 login 513 search 2010 x11-7 6007

discard 9 shell 514 nfs 2049 gnutella-svc 6346

systat 11 printer 515 knetd 2053 gnutella-rtr 6347

daytime 13 talk 517 gnunet 2086 sge-qmaster 6444

netstat 15 ntalk 518 rtcm-sc104 2101 sge-execd 6445

qotd 17 route 520 zephyr-srv 2102 mysql-proxy 6446

msp 18 timed 525 zephyr-clt 2103 syslog-tls 6514

chargen 19 tempo 526 zephyr-hm 2104 sane-port 6566

ftp-data 20 courier 530 eklogin 2105 ircd 6667

ftp 21 conference 531 kx 2111 afs3-fileserver 7000

ssh 22 netnews 532 gsigatekeeper 2119 afs3-callback 7001

telnet 23 netwall 533 iprop 2121 afs3-prserver 7002

smtp 25 gdomap 538 gris 2135 afs3-vlserver 7003

time 37 uucp 540 ninstall 2150 afs3-kaserver 7004

rlp 39 klogin 543 cvspserver 2401 afs3-volser 7005

nameserver 42 kshell 544 venus 2430 afs3-errors 7006

whois 43 dhcpv6-client 546 venus-se 2431 afs3-bos 7007

tacacs 49 dhcpv6-server 547 codasrv 2432 afs3-update 7008

re-mail-ck 50 afpovertcp 548 codasrv-se 2433 afs3-rmtsys 7009

domain 53 idfp 549 mon 2583 font-service 7100

mtp 57 rtsp 554 zebrasrv 2600 zope-ftp 8021

tacacs-ds 65 remotefs 556 zebra 2601 http-alt 8080

bootps 67 nntps 563 ripd 2602 tproxy 8081

bootpc 68 submission 587 ripngd 2603 omniorb 8088

tftp 69 nqs 607 ospfd 2604 clc-build-daemon 8990

gopher 70 npmp-local 610 bgpd 2605 xinetd 9098

rje 77 npmp-gui 611 ospf6d 2606 bacula-dir 9101

finger 79 hmmp-ind 612 ospfapi 2607 bacula-fd 9102
30 http 80 asf-rmcp 623 isisd 2608 bacula-sd 9103

link 87 qmqp 628 dict 2628 mandelspawn 9359

kerberos 88 ipp 631 f5-globalsite 2792 git 9418

supdup 95 ldaps 636 gsiftp 2811 xmms2 9667

linuxconf 98 tinc 655 gpsd 2947 zope 9673

hostnames 101 silc 706 afbackup 2988 webmin 10000

iso-tsap 102 kerberos-adm 749 afmbackup 2989 zabbix-agent 10050

acr-nema 104 kerberos4 750 gds-db 3050 zabbix-trapper 10051

csnet-ns 105 kerberos-master 751 icpv2 3130 amanda 10080

poppassd 106 passwd-server 752 iscsi-target 3260 kamanda 10081

rtelnet 107 krb-prop 754 mysql 3306 amandaidx 10082

pop2 109 krbupdate 760 nut 3493 amidxtape 10083

pop3 110 webster 765 distcc 3632 nbd 10809

sunrpc 111 moira-db 775 daap 3689 dicom 11112

auth 113 moira-update 777 svn 3690 smsqp 11201

sftp 115 moira-ureg 779 suucp 4031 hkp 11371

uucp-path 117 spamd 783 sysrqd 4094 bprd 13720

nntp 119 omirr 808 sieve 4190 bpdbm 13721

ntp 123 supfilesrv 871 xtell 4224 bpjava-msvc 13722

pwdgen 129 rsync 873 f5-iquery 4353 vnetd 13724

loc-srv 135 swat 901 epmd 4369 bpcd 13782

netbios-ns 137 ftps-data 989 remctl 4373 vopied 13783

netbios-dgm 138 ftps 990 ipsec-nat-t 4500 xpilot 15345

netbios-ssn 139 telnets 992 fax 4557 sgi-cmsd 17001

imap2 143 imaps 993 hylafax 4559 sgi-crsd 17002

snmp 161 ircs 994 iax 4569 sgi-gcd 17003

snmp-trap 162 pop3s 995 distmp3 4600 sgi-cad 17004

cmip-man 163 customs 1001 mtn 4691 db-lsp 17500

cmip-agent 164 socks 1080 radmin-port 4899 isdnlog 20011

mailq 174 proofd 1093 munin 4949 vboxd 20012
60 xdmcp 177 rootd 1094 rfe 5002 dcap 22125

nextstep 178 rmiregistry 1099 mmcc 5050 gsidcap 22128

bgp 179 kpop 1109 enbd-cstatd 5051 wnn6 22273

prospero 191 supfiledbg 1127 enbd-sstatd 5052 binkp 24554

irc 194 skkserv 1178 sip 5060 asp 27374

smux 199 openvpn 1194 sip-tls 5061 csync2 30865

at-rtmp 201 predict 1210 pcrd 5151


at-nbp 202 kazaa 1214 aol 5190


at-echo 204 rmtcfg 1236 xmpp-client 5222


at-zis 206 nessus 1241 xmpp-server 5269


qmtp 209 wipld 1300 cfengine 5308


z3950 210 xtel 1313 mdns 5353


ipx 213 xtelw 1314 noclog 5354


imap3 220 lotusnote 1352 hostmon 5355


pawserv 345 ms-sql-s 1433 postgresql 5432


zserv 346 ms-sql-m 1434 rplay 5555


fatserv 347 ingreslock 1524 freeciv 5556


rpc2portmap 369 prospero-np 1525 nrpe 5666


codaauth2 370 support 1529 nsca 5667


clearcase 371 datametrics 1645 amqps 5671


ulistserv 372 sa-msg-port 1646 amqp 5672


ldap 389 kermit 1649 mrtd 5674


imsp 406 groupwise 1677 bgpsim 5675


svrloc 427 l2f 1701 canna 5680


https 443 radius 1812 ggz 5688


snpp 444 radius-acct 1813 x11 6000


microsoft-ds 445 msnp 1863 x11-1 6001


kpasswd 464 unix-status 1957 x11-2 6002


urd 465 log-server 1958 x11-3 6003


saft 487 remoteping 1959 x11-4 6004

90 isakmp 500 cisco-sccp 2000 x11-5 6005




Diode

导航 (返回顶部) 1. Diode 1.1 Diode 概述 1.2 肖克利二极管方程 1.3 缩写 Abbreviations 2. 主要功能 2.1 单向电流 (Unidirectional current flow) 2.2 阈值电压 (Threshold...