linux-服务名称与对应的端口
前言
在Linux上,端口的使用是有一定的规范:
1、端口号 0 不使用;
2、端口号 1 - 1023,系统默认只给root使用;
3、端口号 1024 - 4999 由客户端程序自由分配;
4、端口号 5000 - 65535 由服务器端程序自由分配;
端口号名称注册
在Linux下有一个 /etc/services的文件,记录着服务名和他们对应的端口和协议。
在一些应用中可以直接使用协议名称来操作对应的端口,比如 iptables 添加规则的时候可以直接写http,https,来代替对应的80,443。(当然是默认的配置),如果名称对应的端口号变了,重新查找的时候就添加规则后的端口就会随着改变。
/etc/services文件格式
这个文件的每一行对应一种服务,由三个字段组成,中间用TAB或者空格分隔,从左到右,分别对应 服务名称 使用端口/协议名称 别名:
例如:
cat /etc/services
...
ftp-data 20/tcp
ftp-data 20/udp
ftp-data 20/sctp
ftp 21/tcp
ftp 21/udp
ftp 21/sctp
ssh 22/tcp ssh2
ssh 22/udp
ssh 22/sctp
telnet 23/tcp
telnet 23/udp
smtp 25/tcp
smtp 25/udp
...
这里我们给ssh加一个ssh2的别名,这样子在iptables中我们可以指定端口是ssh2端口
iptables -A INPUT -p tcp --dport ssh2 -j ACCEPT
其他地方的应用
我们在使用netstat或者ss命令常看网络连接的时候如果不加-n参数,默认就会解析端口对应的服务名称。
例如:
ss -ltp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*
LISTEN 0 5 127.0.0.1:ipp 0.0.0.0:*
LISTEN 0 128 [::]:ssh [::]:*
LISTEN 0 5 [::1]:ipp [::]:*
总结
/etc/services对我们一些端口操作有一定的遍历和直观,但是也存在被篡改的风险。因此,建议不要随便去修改这个文件,我们平时操作对应的端口的时候直接写上对应的端口号,防止因/etc/services这个文件被修改,出现异常或者安全问题。