故事
首页
指南
  • Java
  • Python
  • Linux
  • 前端
  • Docker
  • 实践
  • 折腾
  • 分类
  • 标签
  • 归档
壁纸 (opens new window)
GitHub (opens new window)
首页
指南
  • Java
  • Python
  • Linux
  • 前端
  • Docker
  • 实践
  • 折腾
  • 分类
  • 标签
  • 归档
壁纸 (opens new window)
GitHub (opens new window)
  • 服务器环境

    • Centos7安装Python3环境
    • 从零搭建Linux虚拟机环境
    • bash常用的快捷键
    • 阿里云服务器挂载阿里云盘
    • centos7防火墙命令
    • 阿里云服务器启用密钥登录并禁用密码登录
    • Linux服务器文件目录共享映射配置
    • 腾讯云服务器存在对外攻击行为的处理
    • Linux设置swap空间
    • 链接和别名(ln、alias)
    • nginx配置
    • Linux访问权限控制之ACL
    • Linux私钥登陆提示server refused our key
  • 应用相关

    • canal部署
    • Linux中使用selenium
    • screen的进阶用法
    • iptables
      • 表和链
        • Raw
        • Mangle
        • NAT
        • Filter
        • Security
      • iptables数据包处理流程图
      • iptables语法
        • 语法
        • 常见的命令选项
        • 常见策略(target)
        • 添加规则
        • 查看规则
        • 删除规则
        • 给指定的链设置默认策略
        • 通用匹配
        • 隐含匹配
        • 显式匹配
  • 硬件

    • linux磁盘操作相关
  • 简介
  • linux
  • 应用相关
storyxc
2023-02-14

iptables

# iptables

iptables是一个用户级程序,用于操作内核级的网络模块netfilter

# 表和链

iptables的功能由表的形式呈现,每张表由若干个链组成,每个链可以分配一组规则

iptables有五张内建表,按照优先级高到底分别是:Raw、Mangle、NAT、Filter、Security

# Raw

此表负责数据包标记,决定数据包是否被状态跟踪机制处理,Raw表有2个内建链

  • PREROUTING:用于通过任何网络接口到达的数据包
  • OUTPUT:针对本地进程产生的数据包

# Mangle

此表负责更改数据包内容,Mangle表有5个内建链

  • PREROUTING
  • OUTPUT
  • FORWARD
  • INPUT
  • POSTROUTING

# NAT

此表负责数据包的ip地址转换,NAT表有3种内建链

  • PREROUTING:处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
  • POSTROUTING:处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
  • OUTPUT:处理本机产生的数据包。

# Filter

此表负责过滤数据包,iptables的默认表,具有3种内建链

  • INPUT:处理来自外部的数据。
  • OUTPUT:处理向外发送的数据。
  • FORWARD:将数据转发到本机的其他网卡设备上。

# Security

新加入的特性,用于强制访问控制(MAC)网络规则,有3种内建链

  • INPUT
  • OUTPUT
  • FORWARD

# iptables数据包处理流程图

v2-6c9358844d8f440486551d925dfe36b5_1440w

# iptables语法

# 语法

iptables [-t 表名] 命令选项 [链名] [匹配条件] [-j 策略]

iptables命令包含五个部分

  • 表名:要操作的表,不指定时默认操作Filter表

  • 链名:要操作的链,不指定链时默认表内所有链

  • 命令选项:要进行的操作

  • 匹配条件:定义规则适用哪些数据包(匹配哪些数据包)

  • 策略:匹配数据的目标执行的操作,说白了就是packet匹配上规则后该干嘛

# 常见的命令选项

  • -A 在指定链的末尾添加(append)一条新的规则
  • -D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
  • -I 在指定链中插入(insert)一条新的规则,默认在第一行添加
  • -R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
  • -L 列出(list)指定链中所有的规则进行查看
  • -E 重命名用户定义的链,不改变链本身
  • -F 清空(flush)
  • -N 新建(new-chain)一条用户自己定义的规则链
  • -X 删除指定表中用户自定义的规则链(delete-chain)
  • -P 设置指定链的默认策略(policy)
  • -Z 将所有表的所有链的字节和数据包计数器清零
  • -n 使用数字形式(numeric)显示输出结果
  • -v 查看规则表详细信息(verbose)的信息
  • -V 查看版本(version)
  • -h 获取帮助(help)

# 常见策略(target)

  • ACCEPT:允许数据包通过。

  • DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。

  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。

  • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。

  • MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。

  • DNAT:目标地址转换。

  • REDIRECT:在本机做端口映射。

# 添加规则

  • -A:在链的末尾追加一条规则,例如iptables -A INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT
  • -I:在链的开头(或指定序号)插入一条规则,例如iptables -I INPUT -p tcp -j ACCEPT或iptables -I INPUT 2 -p tcp -j ACCEPT

# 查看规则

  • -L:列出所有规则

  • -n:以数字形式显示地址、端口等信息

  • -v:显示更详细规则信息

  • --line-numbers:显示规则序号

# 删除规则

  • 删除nat表INPUT链的第三条规则:iptables -t nat -D INPUT 3

  • 清空nat表所有规则:iptables -t nat -F

# 给指定的链设置默认策略

  • iptables -t filter -P FORWARD DROP

# 通用匹配

# 协议匹配 -p(protocol)

  • 指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。
  • 如果不指定**-p参数,则默认是all**值。这并不明智,请总是明确指定协议名称。
  • 可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols
  • 还可以使用**–protocol参数代替-p**参数

# 地址匹配 -s -d:

# -s 源地址
  • 指定数据包的源地址
  • 参数可以使IP地址、网络地址、主机名
  • 例如:-s 192.168.1.101指定IP地址
  • 例如:-s 192.168.1.10/24指定网络地址
  • 如果不指定-s参数,就代表所有地址
  • 还可以使用**–src或者–source**
# -d 目标地址
  • 指定目的地址
  • 参数和**-s**相同
  • 还可以使用**–dst或者–destination**

# 接口匹配 -i -o

# -i 输入接口(input interface)
  • -i代表输入接口(input interface)
  • -i指定了要处理来自哪个接口的数据包
  • 这些数据包即将进入INPUT, FORWARD, PREROUTE链
  • 例如:-i eth0指定了要处理经由eth0进入的数据包
  • 如果不指定**-i**参数,那么将处理进入所有接口的数据包
  • 如果出现**!** -i eth0,那么将处理所有经由eth0以外的接口进入的数据包
  • 如果出现-i eth**+,那么将处理所有经由eth开头的接口**进入的数据包
  • 还可以使用**–in-interface**参数
# -o 输出(out interface)
  • -o代表”output interface”
  • -o指定了数据包由哪个接口输出
  • 这些数据包即将进入FORWARD, OUTPUT, POSTROUTING链
  • 如果不指定**-o**选项,那么系统上的所有接口都可以作为输出接口
  • 如果出现**!** -o eth0,那么将从eth0以外的接口输出
  • 如果出现-i eth**+,那么将仅从eth开头的接口**输出
  • 还可以使用**–out-interface**参数

# 隐含匹配

# 端口匹配

# -–sport 源端口(source port) 针对-p tcp 或者 -p udp
  • 缺省情况下,将匹配所有端口
  • 可以指定端口号或者端口名称,例如”–sport 22″与”–sport ssh”。
  • /etc/services文件描述了上述映射关系。
  • 从性能上讲,使用端口号更好
  • 使用冒号可以匹配端口范围,如”–sport 22:100″
  • 还可以使用”–source-port”
# –-dport 目的端口(destination port) 针对-p tcp 或者 -p udp
  • 参数和–sport类似
  • 还可以使用”–destination-port”
# -–tcp-flags TCP标志 针对-p tcp
  • 可以指定由逗号分隔的多个参数
  • 有效值可以是:SYN, ACK, FIN, RST, URG, PSH
  • 可以使用ALL或者NONE
# -–icmp-type ICMP类型 针对-p icmp
  • –icmp-type 0 表示Echo Reply
  • –icmp-type 8 表示Echo

# 显式匹配

多端口匹配 -m multiport --sport 源端口列表 -m multiport --dport 目的端口列表 IP范围匹配 -m iprange --src-range IP范围 MAC地址匹配 -m mac –mac1-source MAC地址 状态匹配 -m state --state 连接状态

iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
iptables -P INPUT DROP
iptables -I INPUT -p tcp -m multiport --dport 80-82,85 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
1
2
3
4
5
6
编辑 (opens new window)
#linux#iptables
上次更新: 2023/03/24, 23:40:02
screen的进阶用法
linux磁盘操作相关

← screen的进阶用法 linux磁盘操作相关→

Theme by Vdoing | Copyright © 2019-2023 story | 豫ICP备19046036号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式