概念
端口
端口:port,可以认为是设备与外界通讯交流的出口。端口分为虚拟端口和物理端口。
- 物理端口:
实际存在的端口,如并行端口、串行端口、RJ-45端口等。 - 逻辑端口:
逻辑端口值逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口,端口号的范围是从0-65535,常见的逻辑端口:FTP服务的21端口、SSH服务的22端口、MYSQL数据库服务的3306端口、浏览网页的80端口、MongoDB数据库服务的27017端口等。我们经常用到的是逻辑端口。
逻辑端口
逻辑端口主要分为三大类:
- 公认端口
公认端口是从0到1023,它们是众所周知的一些端口,与一些常见服务紧密绑定。如FTP服务的21端口、SSH服务的22端口等。 - 注册端口
注册端口是从1024到49151,它们松散的绑定于一些服务,即有许多的服务绑定于这些端口。 - 动态端口
动态端口是从49152到65535,它们是用户动态分配的。
服务
服务是表示具体做一件事。如我们浏览网页,需要Web服务;我们发送文件,需要FTP服务等。
端口 与 服务
打一个例子:银行比作服务器(IP),银行中的窗口比作端口(port),银行中提供了多个服务(Service):如办理银行卡、存款、取款、贷款等等。我们需要什么服务,就去对应的窗口进行办理即可。
所以在计算机中,一个IP地址确定一台主机,一台主机提供了多种服务,为了准确定位到对应的服务中,添加port进行定位即可,最终:"IP地址 + 端口号"来区分不同的服务。
端口常用工具
为了对服务器中端口进行管理,我们需要使用一些工具进行高效管理。
netstat命令
netstat命令用来查看网络状态。使用netstat命令可以让我们知道整个Linux系统的网络情况。网路连接、路由表、网络接口信息。
netstat -ano
选项 | 作用 |
---|---|
-a | 显示所有连线的socket连接 |
-n | 使用IP地址,不通过域名服务器 |
-l | 显示监控中的服务器的Socket |
-p | 显示正在使用的socket程序识别码和程序名称 |
-u | 显示UDP连接 |
-t | 显示TCP连接 |
lsof命令
lsof(list open files)是一个列出当前系统打开文件的工具。在Linux系统中,任何事物都是以文件的形式存在。
安装lsof命令
我们在Linux系统中是用lsof命令的时候,可能会出现lsof找不到情况,所以通过yum进行下载安装即可。
安装lsof命令
yum -y install lsof.x86_64
lsof工具监测端口
lsof -i:端口号
防火墙
防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一个相对隔绝的保护屏障,以保护数据安全的一种技术。
防火墙主要是借助硬件和软件的作用于内部和外部网路的环境间产生一种保护的屏障,从而实现对计算机不安全网络因素的阻断。只有在防火墙同意的情况下,用户才能够进入计算机内。借用刘遄老师《Linux就该这么学》一书中的图片。
随着时间的发展,防火墙管理工具由iptables变成了firewalld。接下来主要说一下这两个工具。
iptables防火墙
基本术语
Netfileter/iptables | tables | chains | Policy | |
---|---|---|---|---|
tables的容器 | chains的容器 | policy的容器 | 规则 | |
比喻 | 小区一栋楼 | 楼里的房子 | 房子里的柜子 | 柜子里物品的摆放规则 |
常见的表和链
Filter表:和主机自身相关
- INPUT:过滤进入主机的数据包
- FORWARD:流经主机但不进入主机的数据
- OUTPUT:处理主机发出的数据包
NAT表:网络地址转换的意思,负责来源与目的IP地址和port的转换;与主机本身无关
- OUTPUT:主机发出的数据包,改变地址和端口
- PREROUTING:数据包到达防火墙时,进行判断之前执行规则、改变地址和端口
- POSTROUTING:数据包离开防火墙时,进行判断之后执行规则、改变地址和端口
Mangle:修改数据包中特殊的路由标记,如TTL、MARK
支持Filter表和NAT表中的链,意思同上。
工作原理
iptables防火墙的规则是从前到后一次执行、遇到匹配的规则就暂停,不再继续向下检查了。
firewalld防火墙
firewalld防火墙取代了iptables防火墙。iptables防火墙的策略是交由内核层面的netfilter网络过滤器来处理,firewalld则是交给内核层面的nftables包过滤框架来处理。相较于iptables防火墙而言,firewalld防火墙支持动态更新技术并加入区域的概念。
基本概念
- 区域:firewalld预先准备了几套防火墙策略集合(策略模拟),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
区域 | 默认策略规则 |
---|---|
trusted | 允许所有的数据包进出 |
home | 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许进入 |
Internal | 等同于home区域 |
work | 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许进入 |
public | 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许进入 |
external | 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh服务相关,则允许进入 |
dmz | 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh服务相关,则允许进入 |
block | 拒绝进入的流量,除非与出去的流量相关 |
drop | 拒绝进入的流量,除非与出去的流量相关 |
- 动态更新
iptables每一个更改都需要先清除所有旧有的规则,然后重新加载所有的规则(包括新的和修改后的规则)
firewalld任何规则的变更都不需要对整个防火墙规则重新加载。
firewall的配置
firewall的配置文件在/usr/lib/firewalld
和/etc/firewalld
中存放。
firewall命令行命令
-
查看防火墙的状态
firewall-cmd --state
或
systemctl status firewalld.service
-
开启防火墙
systemctl start firewalld.service
-
关闭防火墙
systemctl stop firewalld.service
重启防火墙
systemctl restart firewalld.service
查看所有内容:
firewall-cmd --list-all
查看端口:
查看某个端口:firewall-cmd --permanent --query-port=端口号/协议
查看端口列表:firewall-cmd --zone=public --list-ports
-
添加端口:
firewall-cmd --permanent --add-port=端口号/协议
或
firewall-cmd --permanent --zone=public --add-port=端口号/协议
运行完此命令之后,会发现/etc/firewalld/zones/public.xml
文件中新增一行
-
删除端口:
firewall-cmd --permanent --remove-port=端口号/协议
或
firewall-cmd --permanent --zone=public --remove-port=端口号/协议
针对IP开放端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="IP地址" accept"
或
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="IP地址" port protocol="tcp" port="端口号" accept"
删除IP
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="IP地址" accept"
重新加载防火墙文件:
每次修改完防火墙的时候,都需要执行此命令
firewall-cmd --reload