星途物语 星途物语
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
留言板
归档
GitHub (opens new window)

星途物语

尚记时,记之
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
留言板
归档
GitHub (opens new window)
  • 随手记录

    • QPS优化记录
    • 阿里云SLB演示
    • DDOS预防
    • Linux内核优化
    • rsync同步守护进程
    • NFS文件同步
    • Tomcat升级
    • 编译安装mysql后添加到systemd管理
    • 防火墙笔记
      • iptables
        • iptalbes 概念
        • iptables 常用参数
        • iptables 应用案例
        • 基础安全防护
        • 网络地址转换(NAT)
        • 流量控制与负载均衡
        • 端口开放高级应用
    • python自动化巡检服务器
  • 故障处理

    • 处理防MIME攻击后出现的问题解决
  • MySQL学习笔记

    • MySQL5.7安装
    • MySQL常用操作语句
    • MySQL主从架构实施
    • MySQL主主架构实施
    • MySQL MHA高可用实施
    • MyCat读写分离
    • MySQL创建用户时的授权
    • MySQL备份
    • MySQL通配符
  • Nginx学习笔记

    • 状态码含义
    • 匹配优先级
    • Nginx常用操作
    • 添加第三方模块
    • 关于路径匹配
    • 转发和重写
    • 内置变量
    • Nginx配置文件结构
  • Tomcat学习笔记

    • 部署Tomcat
    • 修改发布目录
    • Tomcat调优
  • Redis学习笔记

    • 通过 tar.gz 包安装部署 redis
    • redis 配置文件
    • 哨兵集群
    • redis常用命令
    • 虚拟机安装 redis.tar.gz 遇到的问题
  • Ansible学习笔记

    • 部署和使用 ansible
    • ansible 自带的密码认证参数
    • 批量免密操作:批量分发公钥
    • 配置主机清单
    • ansible 小知识
    • 模块介绍
    • 剧本
    • 一键部署 rsync 环境
    • 批量安装一个tomcat
    • 批量安装一个nginx
    • 批量安装 zabbix-agent
  • Zabbix学习笔记

    • 部署 zabbix 服务端、客户端
    • 自定义监控
    • 触发器
    • 监控项类型
    • 简单检查模式
    • zabbix web 界面结构信息
    • 邮件报警
    • 微信报警
    • snmp 监控网络设备
    • 部署 zabbix 服务端、客户端
    • jmx 监控 java 应用
    • ipmi 监控硬件
    • 自动化注册
    • 监控项的主要项和相关项
    • percona 监控 mysql
  • Git学习笔记

    • 配置 git
    • 常用命令
  • GitLab学习笔记

    • 环境准备
    • 安装 gitlab
    • gitlab 忘记 root 管理员密码的处理办法
  • Jenkins学习笔记

    • 安装部署
    • jenkins 使用脚本完成项目构建
    • jenkins 自动构建最新项目
    • 将 jenkins 自动部署的结果返回给 gitlab
    • jenkins 上线 java 项目
    • jenkins pipeline
  • Docker学习笔记

    • 安装 docker
    • 配置 docker 源
    • docker 中的常见名词
    • 镜像管理命令
    • 容器管理命令
    • 创建容器
    • 数据卷
    • docker network
    • 搭建 LNMP
    • Dockerfile
    • Dockerfile 搭建 tomcat
    • docker 镜像磁盘扩容
    • docker composer
    • Harbor 私有镜像仓库
    • docker 面试题
    • docker desktop 运行时与虚拟机冲突
    • docker离线安装
  • Nexus学习笔记
  • Prometheus学习笔记

    • 核心组件
    • 工作原理
    • 安装和配置
    • 启动 Prometheus
    • PromQL 使用
    • 数据模型
    • Exporter
    • 演示服务
    • Grafana 数据可视化
    • Prometheus 告警
  • Kubernetes学习笔记

    • K8S的介绍
    • K8S集群环境的搭建
    • K8S资源管理
    • K8S的实战入门
  • 运维
  • 随手记录
星途物语
2025-03-14
目录

防火墙笔记

# iptables

# iptalbes 概念

1.基本定义和功能:iptables 是运行在用户空间的命令行工具,通过控制内核态的 netfilter 框架 实现对网络数据包的处理

  1. 数据包过滤:根据源/目的 IP、端口、协议等条件允许或拒绝数据包通过
  2. 网络地址转换(NAT):修改数据包的源/目的 IP 或端口,常用于端口转发和共享上
  3. 数据包修改:调整 TTL、TOS 等字段,或设置标记用于流量控制

2.核心结构:表、链、规则

表(Table):按功能分类,包含 4 种主要表:

  1. filter(默认表):过滤数据包,决定放行(ACCEPT)或丢弃(DROP)
  2. nat:处理地址转换(DNAT/SNAT)
  3. mangle:修改数据包头(如 TTL、TOS)
  4. raw:控制连接追踪机制

链(Chain):数据包处理流程中的关键节点,共有 5 条内建链:

  1. PREROUTING:路由前,用于 DNAT
  2. INPUT:处理目标为本机的数据包
  3. FORWARD:处理转发的数据包
  4. OUTPUT:处理本机发出的数据包
  5. POSTROUTING:路由后,用于 SNAT

规则(Rule):匹配条件(如协议、IP 地址)与动作(如 ACCEPT、DROP)的组合,按顺序匹配并执行

3.数据包处理流程

数据包的生命周期中会依次经过以下路径(以入站和转发为例):

入站数据包

  1. 经过 PREROUTING 链(可能触发 DNAT)
  2. 路由判断目标为本机后,进入 INPUT 链
  3. 若未被拦截,交由本机进程处理,回程时经过 OUTPUT 链,最终通过 POSTROUTING 链离开
  4. 总结: PREROUTING --> INPUT --> OUTPUT --> POSTROUTING

转发数据包

  1. 经过 PREROUTING 链
  2. 路由判断需转发后,进入 FORWARD 链
  3. 通过 POSTROUTING 链完成 SNAT 后转发
  4. 总结:PREROUTING --> FORWARD --> POSTROUTING

# iptables 常用参数

  1. 规则管理
    • -A:追加规则到链末尾(iptables -A INPUT -p tcp --dport 80 -j ACCEPT)
    • -D:删除规则(按规则号或内容删除,如 iptables -D INPUT 2)
    • -I:插入规则到指定位置(默认插入到链首)
    • -R:替换规则(如 iptables -R INPUT 1 -j DROP)
    • -L:列出规则(iptables -L -n --line-numbers 显示行号)
    • -F:清空链规则(iptables -F 清空所有规则)
    • -N:创建自定义链(如 iptables -N custom_chain)
    • -X:删除自定义链(iptables -X custom_chain)
    • -P:设置默认策略(如 iptables -P INPUT DROP)
  2. 匹配条件
    • -p:指定协议(tcp、udp、icmp 等)
    • -s/-d:源/目标 IP 地址(如 -s 192.168.1.0/24)
    • --dport/--sport:目标/源端口(如 --dport 22)
    • -m:指定iptables使用哪个匹配模块
      • state:允许根据连接的状态过滤数据包,如NEW(新连接)、ESTABLISHED(已建立的连接)、RELATED(与已有连接相关的)和INVALID(无法识别的数据包) 例如:-m state --state ESTABLISHED,RELATED
      • conntrack:类似于state模块,但提供了更多功能来跟踪连接状态 例如:-m conntrack --ctstate ESTABLISHED,RELATED
      • tcp:用于匹配TCP协议相关的特性,比如特定标志位(SYN、ACK等)或端口范围 例如:-m tcp --dport 80
      • udp:用于匹配UDP协议相关的特性,如端口号 例如:-m udp --dport 53
      • icmp:用于匹配ICMP协议类型,如echo请求(ping) 例如:-m icmp --icmp-type echo-request
      • limit:限制规则匹配的速度,可以用来防止日志洪水或DoS攻击 例如:-m limit --limit 5/min
      • multiport:允许在一条规则中指定多个端口或一个端口范围 例如:-m multiport --dports 80,443,8080
      • mac:基于MAC地址过滤数据包 例如:-m mac --mac-source 00:11:22:33:44:55
      • time:根据时间条件进行匹配,可以限定规则生效的时间段 例如:-m time --timestart 09:00 --timestop 18:00
      • nth:按照数据包的数量进行匹配,可以实现简单的负载均衡或流量分配 例如:-m nth --every 3 --packet 0
      • owner:允许匹配本地生成的数据包的UID/GID信息 例如:-m owner --uid-owner 1000
  3. 动作处理
    • ACCEPT:允许流量通过
    • DROP:直接丢弃数据包(不回应)
    • REJECT:拒绝并发送响应(如 icmp-host-prohibited)
    • REDIRECT:目标地址转换(端口转发),仅修改数据包的目的端口,不改变目的IP,通常用于本地端口重定向
    • DNAT:目标地址转换(NAT 路由),可以修改数据包的目的IP地址和目的端口,适用于将外部请求转发到内部服务器(在数据包从外部网络发送到内部网络时,将目标IP地址替换为内部设备的私有IP地址)
    • SNAT:源地址转换(NAT 路由),在数据包从内部网络发送到外部网络时,将源IP地址替换为公共IP地址的技术(内部设备发起请求时,NAT设备(如路由器)自动将源IP替换为配置的公网IP,使外部网络看到的源地址统一为公网IP)
    • MASQUERADE:自动伪装源地址(动态 IP 环境)
  4. 其他选项
    • -n:以数字形式显示 IP(避免 DNS 解析延迟)
    • -v:显示详细信息(如数据包计数)
    • -vL:列出规则及计数器
    • iptables-save/iptables-restore:保存/恢复规则

详细解释下 REDIRECT、DNAT、SNAT、MASQUERADE 动作

# iptables 应用案例

# 基础安全防护

# 禁止特定 IP 访问
iptables -A INPUT -s 192.168.1.100 -j DROP  # 拒绝来自该 IP 的所有流量

# 允许 SSH 连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # 允许外部 SSH
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT  # 允许响应
# 正常情况下,为避免兼容性问题,应该加上 -m tcp,及
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT  # 允许外部 SSH
iptables -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT  # 允许响应
1
2
3
4
5
6
7
8
9

# 网络地址转换(NAT)

# 使用iptables将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to-port 8080

# DNAT 端口映射 将 8080 映射到内网服务器
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
1
2
3
4
5

# 流量控制与负载均衡

# 简单负载均衡(轮询)轮询到三台服务器
iptables -t nat -A PREROUTING -p tcp --dport 443 -m state --state NEW -m nth --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -t nat -A PREROUTING -p tcp --dport 443 -m state --state NEW -m nth --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -t nat -A PREROUTING -p tcp --dport 443 -m state --state NEW -m nth --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

# 防 DDoS 攻击 限制 SYN 洪水攻击
iptables -A INPUT -p tcp --syn -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
1
2
3
4
5
6
7

# 端口开放高级应用

# 对一组 IP 开放 一个端口
iptables -A INPUT -m iprange --src-range 192.168.1.129-192.168.1.146 -p tcp -m tcp --dport 8080 -j ACCEPT

# 对一个 IP 开放 多个端口
iptables -A INPUT -s 192.168.1.100 -p tcp -m tcp --dport 0:65335 -j ACCEPT
iptables -A INPUT -s 192.168.1.100 -p tcp -m multiport --dports 80,443,8080 -j ACCEPT

# 对一组 IP 开放 多个端口
iptables -A INPUT -m iprange --src-range 192.168.1.129-192.168.1.146 -p tcp -m multiport --dports 80,443,8080 -j ACCEPT
1
2
3
4
5
6
7
8
9

持久化:iptables-save > /etc/iptables.rules

#随手记录#防火墙
编译安装mysql后添加到systemd管理
python自动化巡检服务器

← 编译安装mysql后添加到systemd管理 python自动化巡检服务器→

Theme by Vdoing | Copyright © 2025-2025 | 鄂ICP备2024086820号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式