一篇面向Linux网络配置新手的博客:从零开始掌握网络命令与服务器部署


一篇面向Linux网络配置新手的博客:从零开始掌握网络命令与服务器部署

作为一名后端开发人员,你被分配了一台完全"裸"的远程Linux服务器,要求你在上面部署各种服务。面对这样的任务,如果你对网络命令一无所知,别担心!这篇博客将带你从零开始,循序渐进地学习Linux中与网络相关的核心技能。我们会围绕常见的服务器部署需求,比如查看网络连接、检查端口归属、分析端口状态,以及配置防火墙和端口访问权限等,逐步展开讲解。不仅如此,我还会解释每个命令的选项含义(包括缩写来源),并回答一些常见疑问,帮助你更好地记忆和理解,甚至像黑客一样深入掌握Linux网络连接。


第一步:为什么要关心网络配置?

在公网中运行的服务器,就像一座暴露在外的房子。如果不锁好"门"(端口)和设置好"围墙"(防火墙),黑客可能轻松入侵。作为后端开发人员,你的代码可能需要监听某个端口(比如Web服务的80或443端口),而服务器的安全性、访问控制和网络状态直接影响服务的可用性。因此,掌握网络命令是部署服务的第一步。


第二步:基础网络命令入门

让我们从最简单的命令开始,逐步深入。

1. 查看网络连接:netstatss

在Linux中,查看当前网络连接状态是运维的基础。我们先用两个常用工具:netstatss

  • 命令1:netstat

    • 输入:netstat -tuln

    • 输出:显示所有正在监听的TCP和UDP端口。

    • 选项解析:

      • -t:表示"TCP",只显示TCP连接。
      • -u:表示"UDP",只显示UDP连接。
      • -l:表示"Listening",只显示监听状态的端口(即服务器端等待连接的端口)。
      • -n:表示"Numeric",显示数字形式的IP和端口,而不是解析成域名(速度更快)。
    • 示例输出:

      css 复制代码
      Proto Recv-Q Send-Q Local Address           Foreign Address         State
      tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
      tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
  • 命令2:ss(更现代的选择)

    • 输入:ss -tuln

    • 输出:和netstat类似,但速度更快,信息更简洁。

    • 示例输出:

      ruby 复制代码
      Netid  State      Recv-Q Send-Q  Local Address:Port   Peer Address:Port
      tcp    LISTEN     0      128     :::22               :::*
      tcp    LISTEN     0      128     0.0.0.0:80          0.0.0.0:*
    • 注意:::22 表示监听在IPv6的22端口(:: 是IPv6通配符地址)。

  • 实际应用:检查80端口是否被占用,为部署Web服务做准备。


2. 查看某个端口属于哪个程序:lsof 的秘密

光知道端口被占用还不够,你需要知道是谁占用了它。

  • 命令:lsof

    • 输入:sudo lsof -i :22

    • 输出:显示占用22端口的程序。

    • 为什么叫 lsof
      lsof 是 "List Open Files" 的缩写,在Linux中网络连接也被视为文件。

    • 示例输出:

      sql 复制代码
      COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
      sshd    1234  root    3u  IPv6  56789      0t0  TCP *:22 (LISTEN)
  • 为什么 lsof -i :22 没有输出?

    1. 权限不足:用 sudo
    2. 服务未运行:检查 systemctl status sshd
    3. 协议不匹配:试试 lsof -i tcp:22
  • 实际应用 :用 kill -9 1234 结束占用端口的进程。


3. 查看某个端口的连接状态

  • 命令:ss

    • 输入:ss -t -a | grep :22

    • 输出:

      ruby 复制代码
      ESTAB      0      0      192.168.1.10:22     10.0.0.5:54321
      LISTEN     0      128    :::22               :::*
  • 实际应用:排查不明连接。


第三步:防火墙与端口控制

什么是防火墙?

防火墙基于规则过滤网络数据包,常见工具包括 iptablesfirewalld

检查防火墙状态

  • 命令:systemctl
    • 输入:systemctl status firewalld
  • 命令:ufw
    • 输入:ufw status

配置防火墙:只允许自己访问

假设你的IP是 203.0.113.5

  • ufw
    1. ufw allow from 203.0.113.5 to any port 22
    2. ufw deny 22
    3. ufw enable

开放业务端口

  • ufw allow 8080

控制端口是否对外开放:防火墙与云服务器安全组的区别

1. 服务器内部控制:防火墙

  • 操作
    • 开放:ufw allow 8080
    • 关闭:ufw deny 8080
  • 检查nc -zv 服务器IP 8080

2. 云服务器安全组

  • 操作:在云面板添加规则,如开放TCP 8080。
  • 关系
    • 安全组未开放,即使防火墙允许,外界也无法访问。
    • 两者都需配置正确才能连通。

3. 动手实践

  1. 服务器内:ufw allow 8080
  2. 云面板:开放8080
  3. 测试:nc -zv 服务器IP 8080

没有 ufw 时如何控制防火墙

如果你的系统没有 ufw(输入 ufw 提示"command not found"),别担心,可以用 iptables 代替。iptables 是Linux内核的底层防火墙工具,几乎所有系统都有。

1. 检查是否安装 iptables

  • 输入:iptables -L
  • 输出:列出当前防火墙规则。如果提示"command not found",安装它:
    • Ubuntu/Debian:sudo apt install iptables
    • CentOS/RHEL:sudo yum install iptables

2. 用 iptables 控制端口

  • 开放8080端口
    • sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
    • 解析:
      • -A INPUT:追加规则到输入链。
      • -p tcp:协议为TCP。
      • --dport 8080:目标端口8080。
      • -j ACCEPT:接受流量。
  • 拒绝8080端口
    • sudo iptables -A INPUT -p tcp --dport 8080 -j DROP
  • 只允许特定IP访问22端口
    • sudo iptables -A INPUT -p tcp --dport 22 -s 203.0.113.5 -j ACCEPT
    • sudo iptables -A INPUT -p tcp --dport 22 -j DROP

3. 保存规则

iptables 的规则默认不持久,重启后丢失。保存方法:

  • Ubuntu:sudo iptables-save > /etc/iptables/rules.v4
  • CentOS:sudo service iptables save
  • 重启后恢复:sudo iptables-restore < /etc/iptables/rules.v4

4. 检查效果

  • iptables -L -n:列出规则。
  • nc -zv 服务器IP 8080:测试端口是否开放。

5. 注意事项

  • iptablesufw 更复杂,但更灵活。
  • 如果有云安全组,仍然需要配合配置。

第四步:像黑客一样深入网络连接

  1. 抓包:tcpdump
    • tcpdump -i any port 22
  2. 列连接:ss -t -a
  3. 伪造:nc -l 12345
  4. 内核:cat /proc/net/tcp

第五步:总结与建议

  • 学习路径sslsofufw/iptablestcpdump
  • 安全建议
    1. 关闭不必要端口。
    2. 修改SSH端口。
    3. 用密钥登录。
相关推荐
海狸鼠8 分钟前
几行代码实现MCP服务端/客户端(接入DeepSeek)
前端·后端
37手游后端团队21 分钟前
10分钟读懂RAG技术
人工智能·后端
Moment24 分钟前
岗位急招,算法实习、音乐生成、全栈、flutter 都有,早十晚六 😍😍😍
前端·后端·面试
金融数据出海41 分钟前
使用Spring Boot对接印度股票数据源:实战指南
后端
ONE_Gua43 分钟前
魔改chromium——源码拉取及编译
前端·后端·爬虫
计算机程序设计开发1 小时前
相机租赁网站基于Spring Boot SSM
spring boot·后端·数码相机·毕设·计算机毕设
__淡墨青衫__1 小时前
Django之旅:第六节--mysql数据库操作增删改查(二)
后端·python·django
京东云开发者1 小时前
业务复杂度治理方法论--十年系统设计经验总结
后端
陈珙_SkyChen1 小时前
后端思维之高并发方案
后端
uhakadotcom1 小时前
nginx的JavaScript魔力:njs简介与实践
javascript·后端·面试