远程连接

查看端口是否开放

Centos

方式一:
利用centos7自带的firewall命令查看

> firewall-cmd --query-port=port/tcp
> firewall-cmd --query-port=22/tcp # 查看22端口信息

方式二:

> netstat -tlunp # 查看当前主机在监听的端口
> netstat -tlunp | grep 22

Ubuntu

方式一:
首先登陆到root用户,然后开启终端。进入root用户界面后,输入查看端口命令:lsof -i:22,运行命令后界面无返回信息则表示该端口未开放。

# 查看端口22端口是否开启
> lsof -i:22

方式二:
netstat -tlunp命令查看当前所有开放端口。然后使用管道符号查找相关的信息。

> netstat -tlunp # 查看当前主机在监听的端口
> netstat -tlunp | grep 22 

开启 SSH服务的22端口

对于远程连接,使用的是ssh服务。所以流程一般是,先有ssh服务,然后开启对应的端口。

Centos

对于ssh服务的查看与开启:

# 先查看本机是否安装SSH软件包
> ssh -V

# 如果没有安装,则安装openssh-server
> sudo yum install openssh-server

# 查看ssh服务是否开启
> service ssh status
> systemctl status sshd # Centos7.x

# 开启ssh服务
> service ssh start
> systemctl start sshd

查看防火墙状态

# centos6以前的
> service iptables status

# centos7.x
> systemctl status firewalld

开启端口:

> iptables-save # 查看防火墙开放端口
> firewall-cmd --zone=public --add-port=22/tcp --permanent # 添加开放22端口
> firewall-cmd --reload # 重载防火墙

Ubuntu

对于ssh服务的查看与开启:

# 先查看本机是否安装SSH软件包
> ssh -V

# 如果没有安装,则安装openssh-server
> sudo apt-get install openssh-server

# 查看ssh服务是否开启
> service ssh status

# 开启ssh服务
> service ssh start

开启端口:使用ufw(自带了)或者iptables(需要安装)

ufw

ufw一般在Ubuntu系统上已经有了,但是如果没有安装,则可以通过:

> sudo apt update
> sudo apt install ufw

对于Ubuntu,如果是最开始安装的时候,可能没有开启过。

# 查看ufw的状态,inactive,表示无效
> sudo ufw status

# 开启服务
> sudo ufw enable

ufw使用规则如下:

  1. ufw enable/disable:打开/关闭防火墙
  2. ufw reload:重启防火墙
  3. ufw status:查看已经定义的ufw规则
  4. ufw default allow/deny:外来访问默认允许/拒绝
  5. ufw allow/deny 20:允许/拒绝访问20端口,20后可跟/tcp或/udp,表示tcp或udp封包。
  6. sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22:允许自192.168.0.0/24的tcp封包访问本机的22端口。
  7. ufw delete allow/deny 20:删除以前定义的"允许/拒绝访问20端口"的规则
> sudo ufw allow 9200 # 允许外部访问9200端口(tcp/udp)
> sudo ufw allow 3690 # 允许外部访问3690端口(svn)
> sudo ufw allow from 192.168.3.23 # 允许此IP访问所有的本机端口
> sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22 # 允许指定的IP段访问特定端口
> sudo ufw delete allow smtp # 删除上面建立的某条规则,
# 比如删除svn端口就是 
> sudo ufw delete allow 3690 
iptables
# 安装iptables
> sudo apt-get install iptables

# 添加规则
> iptables -I INPUT -p tcp --dport 22 -j ACCEPT

# 保存规则
> iptables-save

以上就完成了开放指定的端口。不过未持久化的,也就是如果机器重启该规则就没有了。如果需要持久化,就需要iptables-persistent

# 安装iptables-persistent
> sudo apt-get install iptables-persistent

# 保存规则
> sudo netfilter-persistent save

# 载入规则
> sudo netfilter-persistent reload

注意,生成的规则被存储/etc/iptables/rules.v4/etc/iptables/rules.v6

端口监听命令netstat

对于服务器操作系统来说,对外暴露一些不必要的端口都是非常危险的。一般在主机上查看当前主机在监听哪些端口的命令是netstat

> netstat -tlunp
Active Internet connections (only servers)
Proto Recv-Q Send-Q 	Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 	0.0.0.0:22              0.0.0.0:*               LISTEN      1029/sshd           
tcp        0      0 	127.0.0.1:25            0.0.0.0:*               LISTEN      1276/master         
tcp6       0      0 	:::22                   :::*                    LISTEN      1029/sshd           
tcp6       0      0 	::1:25                  :::*                    LISTEN      1276/master         
udp        0      0 	0.0.0.0:68              0.0.0.0:*                           846/dhclient 

这个命令会显示出当前主机打开的所有端口。

常用的命令可以通过netstat --help 或者 man netstat 查看。

> netstat -a      # 列出所有端口
> netstat -at     # 列出所有TCP端口
> netstat -au     # 列出所有UDP端口

# 列出所有处于监听状态的 Sockets
> netstat -l   # 只显示监听端口
> netstat -lt  # 显示监听TCP端口
> netstat -lu  # 显示监听UDP端口
> netstat -lx  # 显示监听UNIX端口

# 显示每个协议的统计信息
> netstat -s     # 显示所有端口的统计信息
> netstat -st    # 显示所有TCP的统计信息
> netstat -su    # 显示所有UDP的统计信息

# 显示核心路由信息
> netstat -r

# 查看端口和服务
> netstat -antp | grep ssh

对于netstat命令其输出内容表示有:

列名含义
Proto协议名
recv-Q网络接收队列
send-Q网路发送队列
Local Address本地地址
Foreign Address外部地址
State状态
PID/Program namePID即进程id,Program即使用该socket的应用程序

说明:
Proto协议一般有tcp(tcpv4,tcpv6)和udp
recv-Q、send-Q这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。
Local Address:

  1. 0.0.0.0:2000:表示监听服务器上所有ip地址的2000端口(0.0.0.0表示本地所有ip)
  2. :::2000:也表示监听本地所有ip的2000端口。和 0.0.0.0:2000 的区别是这里表示的是IPv6地址,0.0.0.0表示的是本地所有IPv4地址。
  3. “:::” 这三个 : 的前两个 “::” ,是 “0:0:0:0:0:0:0:0” 的缩写,相当于IPv6的 “0.0.0.0” 。表示本机的所有IPv6地址,第三个 : 是IP和端口的分隔符
  4. 127.0.0.1:8080:表示监听本机的loopback地址的8080端口。如果某个服务只监听了回环地址,那么只能在本机进行访问,无法通过tcp/ip 协议进行远程访问
  5. ::1:9000:表示监听IPv6的回环地址的9000端口,::1这个表示IPv6的loopback地址

State,链路状态,共有11种。state列共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐