远程连接
查看端口是否开放
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使用规则如下:
ufw enable/disable
:打开/关闭防火墙ufw reload
:重启防火墙ufw status
:查看已经定义的ufw规则ufw default allow/deny
:外来访问默认允许/拒绝ufw allow/deny 20
:允许/拒绝访问20端口,20后可跟/tcp或/udp,表示tcp或udp封包。sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22
:允许自192.168.0.0/24的tcp封包访问本机的22端口。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 name | PID即进程id,Program即使用该socket的应用程序 |
说明:
Proto协议一般有tcp(tcpv4,tcpv6)和udp
recv-Q、send-Q这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。
Local Address:
- 0.0.0.0:2000:表示监听服务器上所有ip地址的2000端口(0.0.0.0表示本地所有ip)
- :::2000:也表示监听本地所有ip的2000端口。和 0.0.0.0:2000 的区别是这里表示的是IPv6地址,0.0.0.0表示的是本地所有IPv4地址。
- “:::” 这三个 : 的前两个 “::” ,是 “0:0:0:0:0:0:0:0” 的缩写,相当于IPv6的 “0.0.0.0” 。表示本机的所有IPv6地址,第三个 : 是IP和端口的分隔符
- 127.0.0.1:8080:表示监听本机的loopback地址的8080端口。如果某个服务只监听了回环地址,那么只能在本机进行访问,无法通过tcp/ip 协议进行远程访问
- ::1:9000:表示监听IPv6的回环地址的9000端口,::1这个表示IPv6的loopback地址
State,链路状态,共有11种。state列共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的。