部署-ubuntu-服务器
本例使用系统版本为 Ubuntu 22.04.2 LTS (GNU/Linux 5.19.0-35-generic x86_64)
提示:win 环境下最好使用 UltraISO 烧写镜像文件。经实测,按照官方文档推荐的 balenaEtcher 有损坏 U 盘风险。
安装 ssh
执行下列命令:
1 | sudo apt-get install openssh-server |
验证服务是否启动:sudo systemctl status ssh
安装 Mariadb
两种主要方式:
1、Repositories 安装方式:https://mariadb.org/download/?t=repo-config&d=22.04+%22jammy%22&v=10.11&r_m=neusoft
2、从 https://archive.mariadb.org/mariadb-10.11.2/bintar-linux-systemd-x86_64/
获得链接,直接下载压缩包
本地二进制压缩包链接:
https://archive.mariadb.org/mariadb-10.11.2/bintar-linux-systemd-x86_64/mariadb-10.11.2-linux-systemd-x86_64.tar.gz
本例采用第一种。依次执行下列命令:
1 | sudo apt-get install apt-transport-https curl |
3、验证服务是否启动:sudo systemctl status mariadb
注意:安装完成后要执行
sudo -i
切换 root 再通过mariadb -u root
进入设置密码:alter user 'root'@'localhost' identified by 'MyNewPass4!';
4、配置文件
配置文件路径为:/etc/mysql/mariadb.conf.d/50-server.cnf
5、取消 IP 限制
当执行 netstat -an|grep 3306
命令发现如下反馈,说明此时无法远程连接数据库。
1 | ubuntu@ubuntu-virtual-machine:~$ netstat -an|grep 3306 |
打开配置文件
1 | sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf |
找到 bind-address = 127.0.0.1
注释掉。
可能需要安装 vim 编辑器,执行
sudo apt-get install vim
部署 JDK
以 corretto 为例。按相应 JDK 版本依次执行命令:
官方文档:https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/generic-linux-install.html
1、JDK11
1 | wget -O- https://apt.corretto.aws/corretto.key | sudo apt-key add - |
2、JDK17
1 | wget -O- https://apt.corretto.aws/corretto.key | sudo apt-key add - |
3、卸载
1 | sudo dpkg --remove java-11-amazon-corretto-jdk |
修改本地网络地址
1、固定 IP
通过 ip a
命令查看网咖信息。修改前:
1 | ubuntu@ubuntu-virtual-machine:~$ ip a |
查看 /etc/netplan
网络配置文件:
1 | ubuntu@ubuntu-virtual-machine:~$ ls /etc/netplan |
执行 sudo vim /etc/netplan/*.yaml
,添加以下内容:
1 | # Let NetworkManager manage all devices on this system |
其中:
- ens33:拟设置的网卡名称
- addresses:拟设置的固定 ip 和掩码。掩码 24 表示前 24 位有效,剩下的 8 位可以是 0-254 之间的任一地址(255 为广播地址),例如 255.255.255.255 是 IPv4 中最大可能的 IP 地址,每个数字(255)都是由 8 个比特位表示的,每个比特位非 0 即 1,最大值即为 11111111,因此掩码 24 表示 255.255.255.0。同理,xxx.xxx.xxx.xxx/32,表示掩码为 192.168.0.0
- routes:网关地址。default 也可以写为
0.0.0.0/0
或0/0
- nameservers:DNS 地址
网关若使用
gateway4
属性会提示** (process:9908): WARNING **: 22:03:51.792: gateway4 has been deprecated, use default routes instead. See the 'Default routes' section of the documentation for more details.
执行 sudo netplan try
使配置生效。修改后:
1 | ubuntu@ubuntu-virtual-machine:~$ ip a |
2、开启 dhcp
无需再设置 addresses 属性(实际上 routes 属性也可以移除)。配置如下:
1 | # Let NetworkManager manage all devices on this system |
其他工具或命令
查看 CPU、内存使用情况:sudo apt-get install htop
防火墙
一般系统默认带有防火墙。安装命令:sudo apt install ufw
1、允许 ssh(特别注意开启,否则下次连接将无法远程连接)
执行 sudo ufw allow ssh
或 sudo ufw allow 22
创建防火墙规则,允许 22 端口上的所有连接。
2、启用 ufw
执行 sudo ufw enable
,确认启动后可通过 sudo ufw status verbose
查看状态。
注:当状态为
Status: inactive
说明 ufw 未启动。如果处于活动状态,将显示Status: active
,并列出所有规则。
3、拒绝连接
执行 sudo ufw deny from 192.1.110.24
,则拒绝全部来自该 IP 的连接。
4、删除规则
执行 sudo ufw status numbered
查看规则列表,获知规则的序号,再执行 sudo ufw delete 3
(删除第 3 条规则)
5、端口规则设置
ufw 默认的策略是允许出,不允许进,这个可以在配置文件 /etc/default/ufw
中看到。出规则需要配置。
配置文件片段:
1 | DEFAULT_INPUT_POLICY = "DROP"; |
- 允许 http 连接:
sudo ufw allow http
或sudo ufw allow 80
- 阻止 http 连接:
sudo ufw denty http
或sudo ufw denty 80
- 开放特定端口范围:
sudo ufw allow 3000:3007/tcp
注:如果不指定协议,会自动允许 tcp 和 udp 两种协议。
- 限制 IP 允许连接的端口:
sudo ufw allow from 192.1.110.24 to any port 22
- 配合子网掩码限制网段:
sudo ufw allow from 192.1.110.24/24
- 监听来自指定网卡的连接:
sudo ufw allow in on eth1 to any port 3306
6、停止和重置
- 停用 ufw:
sudo ufw disable
- 重置 ufw 规则:
sudo ufw reset
其他相关命令
- 显示所有连接:
lsof -i
- 仅获取 ipv6 流量:
lsof -i6
- 显示端口信息:
lsof -i :5432
lsof 命令参数:
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
- 列出所有:
netstat -a
- 使用 ip 地址列出所有监听状态的 tcp 端口以及程序名:
netstat -atnlp
netstat 命令参数:
- 显示所有连接中的 Socket:
-a
或--all
- 显示正在使用 Socket 的程序识别码和程序名称:
-p
或--programs
- 显示 TCP 传输协议的连线状况:
-t
或--tcp
- 显示 UDP 传输协议的连线状况:
-u
或--udp
显示结果参数释义:
Proto
:协议名(tcp 协议还是 udp 协议还是 unix 协议)Recv-Q
:网络接收队列。表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()如果接收队列 Recv-Q 一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击;send-Q
:网路发送队列。对方没有收到的数据或者说没有 Ack 的,还是本地缓冲区.Local Address
:表示监听服务器上对应的 ip 地址的对应端口 (0.0.0.0 表示本地所有 ip)Foreign Address
:与本机端口通信的外部 socket。显示规则与 Local Address 相同State
:链路状态。共有 12 中可能的状态LISTEN :正在监听端口,可以接受连接
SYN_SENT:socket 正在积极尝试建立一个连接,即处于发送后连接前的一个等待但未匹配进入连接的状态
SYN_RECV:收到对方的连接建立请求
ESTABLISHED:代表一个打开的连接,双方可以进行或已经在数据交互
FIN_WAIT1:socket 已关闭,连接正在或正要关闭
CLOSE_WAIT:等待关闭。当对方关闭一个 SOCKET 后发送 FIN 报文给自己,系统毫无疑问地会回应一个 ACK 报文给对方,此时则进入到 CLOSE_WAIT 状态。接下来需要考虑的事情是察看你是否还有数据发送给对方,如果没有就可以关闭这个 SOCKET,发送 FIN 报文给对方,也即关闭连接。所以在 CLOSE_WAIT 状态下,需要完成的事情是等待你去关闭连接。
FIN_WAIT2:连接已关闭,并且 socket 正在等待远端结束
LAST_ACK:被动关闭一方在发送 FIN 报文后,最后等待对方的 ACK 报文。当收到 ACK 报文后,也即可以进入到 CLOSED 可用状态
TIME_WAIT:socket 正在等待关闭处理仍在网络上的数据包。表示收到了对方的 FIN 报文,并发送出了 ACK 报文,就等 2MSL 后即可回到 CLOSED 可用状态。如果 FIN_WAIT_1 状态下,收到了对方同时带 FIN 标志和 ACK 标志的报文时,可以直接进入到 TIME_WAIT 状态,而无须经过 FIN_WAIT_2 状态。
CLOSING:比较少见,等待远程 TCP 对连接中断的确认
CLOSED:没有任何连接状态。被动关闭端在接受到 ACK 包后,就进入该状态。连接结束
UNKNOWN:未知的状态