关于firewalld没有开启22端口但22端口可以被访问的问题

缘由

最近看到vps有上万条登陆失败记录,感觉很危险,想设置一下防火墙。但是看到防火墙没有开启22端口,就好奇既然没有开启为什么能访问。

分析问题

一查才知道是防火墙开启的是ssh服务。
查询记录如下,虽然port项目下没有22端口,但是在services下有ssh服务。所以firewalld是允许了ssh服务通过防火墙,而ssh服务默认是22端口,所以能正常使用ssh
可以通过单独的命令查询防火墙开启的服务

firewall-cmd --list-services

操作记录如下:

[host]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports: 80/tcp 443/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[host]# firewall-cmd --list-services
cockpit dhcpv6-client ssh
[host]# 

其他验证

注意:除非你有其他方式设置ssh访问权限,否则不要尝试下面内容,否则可能连不上vps了。

关闭ssh服务验证

如果我在防火墙上关闭ssh服务,理论上应该就无法连接ssh了,下面进行验证。
1、关闭ssh服务

firewall-cmd --remove-service=ssh --permanent

2、随后重新加载配置文件

firewall-cmd --reload

执行 firewall-cmd reload 命令可以重新加载 firewalld 的配置文件,使新的规则生效。这个命令会重新加载防火墙配置,但不会中断当前的连接。在重新加载配置后,防火墙将使用更新后的规则进行进一步的连接处理。

操作记录如下:

[host]# firewall-cmd --remove-service=ssh --permanent
success
[host]# firewall-cmd --list-services
cockpit dhcpv6-client ssh
[host]# firewall-cmd --reload
success
[host]# firewall-cmd --list-services
cockpit dhcpv6-client
[host]# 

3、现在就连接不上ssh服务了。
我用了两种验证方式,分别是telnet工具和使用vscode进行ssh连接。这里不再展开叙述。

开启端口白名单验证

如果我在防火墙上开启端口白名单,理论上应该就可以连接ssh了,下面进行验证。

1、我通过管理面板添加白名单

2、查询如下,可以看出已经对固定的ip放行了

[host]# firewall-cmd --list-rich-rules
rule family="ipv4" source address="223.104.38.72" port port="22" protocol="tcp" accept
rule family="ipv4" source address="117.136.38.62" port port="22" protocol="tcp" accept

3、现在可以正常连接了。
我用了两种验证方式,分别是telnet工具和使用vscode进行ssh连接。这里不再展开叙述。

结论

防火墙既可以通过端口也可以通过服务来控制访问。

补充

实际上,不仅是上面提到的两种方式,常用的方式说明如下:

  1. 通过端口和服务:可以使用 firewalld 控制特定端口或服务的访问权限。你可以允许或拒绝对特定端口或预定义服务的访问。例如,允许 SSH 访问的命令如下所示:

    firewall-cmd --zone=public --add-service=ssh

    或者,允许特定端口的访问,例如允许端口 8080 的命令如下:

    firewall-cmd --zone=public --add-port=8080/tcp
  2. 通过 IP 地址或 IP 范围:你可以使用 firewalld 控制特定 IP 地址或 IP 范围的访问。可以允许或拒绝对特定 IP 地址的访问。以下是一个允许特定 IP 地址访问的示例:

    firewall-cmd --zone=public --add-source=192.168.1.100

    或者,允许特定 IP 范围的访问,例如允许 192.168.1.0/24 网络的命令如下:

    firewall-cmd --zone=public --add-source=192.168.1.0/24
  3. 通过网络接口:你可以使用 firewalld 控制特定网络接口的访问权限。这对于限制特定接口的入站或出站流量很有用。以下是一个将规则应用于特定接口的示例:

    firewall-cmd --zone=public --add-interface=eth0
  4. 通过富规则(Rich Rules):Firewalld 还支持使用富规则来定义更复杂和灵活的访问控制。通过富规则,你可以基于多个条件(例如端口、IP、协议等)定义高级规则。以下是一个添加富规则的示例:

    firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'

这些只是 firewalld 提供的一些常见方法,用于控制访问权限。你可以根据自己的需求和具体情况选择适当的方法来配置 firewalld。记得在修改规则后,使用 firewall-cmd --reload 命令重新加载配置,使更改生效。

  1. 服务和端口组:除了单独指定端口,Firewalld 还支持定义服务和端口组。服务是一组预定义的端口集合,可以通过名称来引用。端口组是用户自定义的端口集合,方便管理和重复使用。你可以使用这些服务和端口组来简化规则的配置。以下是一些示例:

    • 允许 HTTP 服务访问:

      firewall-cmd --zone=public --add-service=http
    • 允许自定义的端口组访问:

      firewall-cmd --zone=public --add-port=7000-8000/tcp
    • 创建自定义的端口组:

      firewall-cmd --permanent --new-portgroup=myports
      firewall-cmd --permanent --port=8080/tcp --port=9000-9500/tcp --add-portgroup=myports

      上述命令创建了名为 "myports" 的自定义端口组,并将端口 8080 和 9000-9500 添加到该端口组中。

  2. 包过滤:Firewalld 允许你根据特定的网络数据包属性进行过滤和控制。你可以使用 --add-filter 参数来指定过滤规则。例如,以下命令将允许 ICMP Echo 请求通过:

    firewall-cmd --zone=public --add-filter=icmp_echo_request

    你还可以根据其他网络数据包属性进行过滤,如源/目标 MAC 地址、IP 协议、TTL 等。

  3. 地址转换:Firewalld 支持地址转换功能,包括源地址转换(Source NAT)和目标地址转换(Destination NAT)。地址转换允许修改网络数据包的源或目标地址,以便实现网络地址重写。这对于在网络中进行 IP 地址映射或隐藏内部网络拓扑结构非常有用。

    firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100

    上述命令将接收到的 TCP 流量从公共端口 80 转发到内部地址 192.168.1.100 上的端口 8080。

Firewalld 提供了广泛的功能和选项,以满足不同的网络安全需求。你可以根据具体场景和需求选择适合的方法和配置选项。可以参考 Firewalld 的文档以获取更多详细信息和示例。

防火墙可以通过以下方式实现访问控制:

IP地址过滤

防火墙可以根据IP地址对网络流量进行过滤和控制,例如只允许特定的IP地址访问网络。

用户认证

防火墙可以对用户进行认证,只允许经过认证的用户访问网络。

URL过滤

防火墙可以

linux编辑器vi使用教程

vi使用方法详细介绍

vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

1、vi的基本概念

基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

1) 命令行模式command mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

2) 插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

3) 底行模式(last line mode)

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。

不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

2、vi的基本操作

a) 进入vi

在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:

$ vi myfile

不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到「插入模式(Insert mode)」再说吧!

b) 切换至插入模式(Insert mode)编辑文件

在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

c) Insert 的切换

您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字。

d) 退出vi及保存文件

在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:

: w filename (输入 「w filename」将文章以指定的文件名filename保存)
: wq (输入「wq」,存盘并退出vi)
: q! (输入q!, 不存盘强制退出vi) 

3、命令行模式(command mode)功能键

1). 插入模式

按「i」切换进入插入模式「insert mode」,按"i"进入插入模式后是从光标当前位置开始输入文件;

按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

2). 从插入模式切换为命令行模式

按「ESC」键。
1

3). 移动光标

vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
  按「ctrl」+「b」:屏幕往"后"移动一页。
  按「ctrl」+「f」:屏幕往"前"移动一页。
  按「ctrl」+「u」:屏幕往"后"移动半页。
  按「ctrl」+「d」:屏幕往"前"移动半页。
  按数字「0」:移到文章的开头。
  按「G」:移动到文章的最后。
  按「$」:移动到光标所在行的"行尾"。
  按「^」:移动到光标所在行的"行首"
  按「w」:光标跳到下个字的开头
  按「e」:光标跳到下个字的字尾
  按「b」:光标回到上个字的开头
  按「#l」:光标移到该行的第#个位置,如:5l,56l。

4). 删除文字

「x」:每按一次,删除光标所在位置的"后面"一个字符。
  「#x」:例如,「6x」表示删除光标所在位置的"后面"6个字符。
  「X」:大写的X,每按一次,删除光标所在位置的"前面"一个字符。
  「#X」:例如,「20X」表示删除光标所在位置的"前面"20个字符。
  「dd」:删除光标所在行。
  「#dd」:从光标所在行开始删除#行

5). 复制

  「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
  「#yw」:复制#个字到缓冲区
  「yy」:复制光标所在行到缓冲区。
  「#yy」:例如,「6yy」表示拷贝从光标所在的该行"往下数"6行文字。
  「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。

6). 替换

「r」:替换光标所在处的字符。
  「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

7). 回复上一次操作

「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次"u"可以执行多次回复。

8). 更改

「cw」:更改光标所在处的字到字尾处
  「c#w」:例如,「c3w」表示更改3个字

9). 跳至指定的行

「ctrl」+「g」列出光标所在行的行号。
  「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

4、Last line mode下命令简介

在使用「last line mode」之前,请记住先按「ESC」键确定您已经处于「command mode」下后,再按「:」冒号即可进入「last line mode」。

A) 列出行号

「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。

B) 跳到文件中的某一行

「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

C) 查找字符

「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。

「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

D) 保存文件

「w」:在冒号输入字母「w」就可以将文件保存起来。

E) 离开vi

「q」:按「q」就是退出,如果无法离开vi,可以在「q」后跟

关于公网和局域网IP

IPv4为了避免公有地址不够使用,设置了Private Address地址域的专有地址,即常说的IPv4私有地址,包括三个地址段:

10.0.0.0        -   10.255.255.255  (10/8 prefix)
172.16.0.0      -   172.31.255.255  (172.16/12 prefix)
192.168.0.0     -   192.168.255.255 (192.168/16 prefix)

详见:RFC1918 ,IPv4 私有地址可以通过NAT 后访问公网,也可以构成企业或组织内网。

IPv6 地址类型分为: 单播地址(Unicast)、任意播地址(Anycast)、多播地址(Multicast)。其中,单播地址中包括全球单播地址(类似IPv4的公网地址)、本地地址(类似IPv4的私有地址)等类型。

IPv6 本地地址又分为3类:

  1. 链路本地地址(Link Local Address): FE80::/10, 不能出路由器
  2. 站点本地地址(Site Local Address): FEC0::/10, 已被ULA取代
  3. 唯一本地地址(Unique Local Address, ULA):FC00::/7,详见:RFC4193

IPv6 ULA 是否具备了类似NAT的标准,还不清楚。但可以使用FC00::/7地址,组建企业内部网络。

链接:https://www.zhihu.com/question/40020<!–autointro–>