飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • 基础入门

    • Linux 命令概述与环境准备
    • 文件与目录操作(上):ls、cd、pwd
    • 文件与目录操作(下):cat、touch、mkdir、rm、cp、mv
    • 获取帮助与基础工具:man、help、clear、exit、sudo
  • 文件权限

    • 文件权限管理:chmod、chown
  • 系统与监控

    • 进程管理与系统监控:ps、top、kill、df、du、free
    • 用户与环境:whoami、id、env、echo、history
  • 网络命令

    • 网络诊断(上):ping、curl、wget
    • 网络诊断(下):netstat、ss、ip
    • 网络抓包与高级工具:traceroute、tcpdump、nc
    • DNS 与防火墙:nslookup、dig、iptables
  • 文本处理

    • 文本搜索:grep
    • 文本处理(上):awk
    • 文本处理(下):sed
    • 文本排序与统计:sort、uniq、wc
    • 文件查看与查找:head、tail、cut、find
    • 归档压缩与管道组合:tar、gzip、xargs
  • 开发工具

    • 开发工具链(上):gcc、make
    • 开发工具链(下):gdb、time
    • 版本控制:git
    • 远程操作:ssh、scp
    • 编辑器:vim、nano
  • Shell 编程

    • Shell 编程基础(上):变量、管道、重定向
    • Shell 编程基础(下):条件、循环、函数
  • 综合实战

    • 综合实战:日志分析

DNS 与防火墙:nslookup、dig、iptables

nslookup:DNS 查询基础工具

nslookup(Name Server Lookup)是最基础的 DNS 查询工具,交互式和命令行模式都支持。

# 查询 A 记录(IPv4 地址)
nslookup baidu.com

# 查询特定记录类型
nslookup -type=mx baidu.com      # 邮件交换记录
nslookup -type=ns baidu.com      # 域名服务器记录
nslookup -type=soa baidu.com     # 授权起始记录
nslookup -type=txt baidu.com     # 文本记录

# 指定 DNS 服务器查询
nslookup baidu.com 8.8.8.8

# 查询反向解析(IP 反查域名)
nslookup 110.242.68.66

nslookup 输出解读

$ nslookup baidu.com
Server:         192.168.1.1
Address:        192.168.1.1#53

Non-authoritative answer:
Name:   baidu.com
Address: 110.242.68.66
Name:   baidu.com
Address: 110.242.68.67
字段含义
Server使用的 DNS 服务器
Non-authoritative answer非权威回答(来自缓存)
Name查询的域名
Address对应的 IP 地址

dig:专业 DNS 查询工具

dig(Domain Information Groper)比 nslookup 更专业,输出格式清晰,是运维和开发的首选 DNS 工具。

# 基础查询
dig baidu.com

# 查询特定记录类型
dig baidu.com A          # A 记录(IPv4)
dig baidu.com AAAA       # AAAA 记录(IPv6)
dig baidu.com MX         # 邮件记录
dig baidu.com NS         # 域名服务器
dig baidu.com TXT        # 文本记录
dig baidu.com CNAME      # 别名记录

# 指定 DNS 服务器
dig @8.8.8.8 baidu.com

# 简洁输出(+short)
dig +short baidu.com

# 详细输出(+trace,追踪完整解析路径)
dig +trace baidu.com

# 反向查询
dig -x 110.242.68.66

# 只显示回答部分(+noall +answer)
dig +noall +answer baidu.com

dig 输出解读

$ dig baidu.com

; <<>> DiG 9.18.12 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;baidu.com.                     IN      A

;; ANSWER SECTION:
baidu.com.              600     IN      A       110.242.68.66
baidu.com.              600     IN      A       110.242.68.67

;; Query time: 15 msec
;; SERVER: 192.168.1.1#53
;; WHEN: Mon Jan 15 10:00:00 CST 2024
;; MSG SIZE  rcvd: 71
字段含义
statusNOERROR=成功,NXDOMAIN=域名不存在,SERVFAIL=服务器故障
flagsqr=查询响应, rd=递归查询, ra=递归可用
QUERY查询数
ANSWER回答数
TTL缓存时间(秒)
IN AInternet 类,A 记录
Query time查询耗时

iptables:IPv4 防火墙规则

iptables 是 Linux 传统的 IPv4 包过滤防火墙,基于规则链(Chain)和表(Table)工作。

四表五链

表(Table)作用包含的链
filter包过滤(默认)INPUT, FORWARD, OUTPUT
nat地址转换PREROUTING, POSTROUTING, OUTPUT
mangle修改包头部所有链
raw连接追踪豁免PREROUTING, OUTPUT
链(Chain)作用
INPUT进入本机的包
OUTPUT本机发出的包
FORWARD经过本机转发的包
PREROUTING路由前处理(DNAT)
POSTROUTING路由后处理(SNAT)

基础命令

# 查看所有规则(-L list, -v verbose, -n numeric)
sudo iptables -L -v -n

# 查看特定表(-t table,默认 filter)
sudo iptables -t nat -L -v -n

# 清空所有规则
sudo iptables -F

# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许本地回环
sudo iptables -A INPUT -i lo -j ACCEPT

# 允许 SSH(端口 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许 HTTP(端口 80)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 允许 HTTPS(端口 443)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 默认拒绝所有输入
sudo iptables -P INPUT DROP

# 允许 ping(ICMP)
sudo iptables -A INPUT -p icmp -j ACCEPT

# 删除特定规则(先查看编号)
sudo iptables -L --line-numbers
sudo iptables -D INPUT 3

规则匹配条件

条件说明示例
-p协议-p tcp, -p udp, -p icmp
-s源地址-s 192.168.1.0/24
-d目的地址-d 10.0.0.1
--dport目的端口--dport 80
--sport源端口--sport 1024:65535
-i入接口-i eth0
-o出接口-o eth0

目标动作(-j)

动作作用
ACCEPT允许通过
DROP丢弃(静默,不通知发送方)
REJECT拒绝(发送 ICMP 错误)
LOG记录日志,继续匹配下一条
SNAT源地址转换
DNAT目的地址转换

nftables:iptables 的现代替代

nft 是 iptables 的继任者,统一了 IPv4/IPv6 管理,语法更简洁。

# 查看规则
sudo nft list ruleset

# 添加表和链
sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }

# 添加规则
sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input iif lo accept
sudo nft add rule inet filter input tcp dport 22 accept

本篇小结

  • nslookup:基础 DNS 查询,交互式和命令行模式,支持指定服务器
  • dig:专业 DNS 工具,输出清晰,支持 +short、-x 反向查询、+trace 追踪
  • DNS 记录类型:A(IPv4)、AAAA(IPv6)、MX(邮件)、NS(域名服务器)、TXT(文本)、CNAME(别名)
  • iptables:四表(filter/nat/mangle/raw)五链(INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING)
  • 常用规则:允许 ESTABLISHED、lo 回环、SSH/HTTP/HTTPS,默认 DROP
  • nft:iptables 的现代替代,统一 IPv4/IPv6

动手实践

  1. DNS 查询对比:

    nslookup baidu.com
    dig baidu.com
    dig +short baidu.com
    dig @8.8.8.8 baidu.com
    dig -x 110.242.68.66
    
  2. 追踪 DNS 解析路径:

    dig +trace baidu.com
    # 观察从根服务器到 TLD 到权威服务器的完整过程
    
  3. 查看本机 iptables 规则:

    sudo iptables -L -v -n
    sudo iptables -t nat -L -v -n
    
  4. 配置基础防火墙规则(测试环境!):

    sudo iptables -F                    # 清空规则
    sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -A INPUT -i lo -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    sudo iptables -P INPUT DROP
    sudo iptables -L -v -n
    
  5. 查看 nftables 规则(如果系统使用 nft):

    sudo nft list ruleset
    
  6. 思考:为什么 iptables 默认有三条链(INPUT/OUTPUT/FORWARD),分别对应什么场景?如果一台 Linux 服务器只运行 Web 服务,不需要转发流量,FORWARD 链需要配置吗?

上一页
网络抓包与高级工具:traceroute、tcpdump、nc