• iptables详解和使用


    一、系统简介和原理

    1、介绍

    IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。


    防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。


    虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。


    netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。


    iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。

    2、netfilter的原理

    netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。

     过程说明:

    • 1.数据包从网卡进来,会进入到PREROUTING. 在PREROUTING阶段,会去检查raw,mangle,nat这几个表是否会有相关的规则。有则会执行相关的规则
    • 2.然后进行路由选择判断,如果是发往本机的,就会进入到INPUT阶段。如果不是则进入FORWARD,匹配相关的规则表后,进入到POSTROUTING阶段。
    • 3.进入到INPUT后,就会进入到上层应用程序。
    • 4.如果是应用程序发出去的包,就会进入OUTPUT->POSTROUTING.

    二、iptables的基本用法

    基本语法:iptables [-t TABLE] COMMAND CHAIN  [RULE] [-j TARGET]

    iptablestablecommandchainParamter & Xmatchtarget
    iptables

    -t  filter

        nat

    -A

    -D

    -L

    -F

    -P

    -I

    -R

    -n

    INPUT

    FORWARD

    OUTPUT

    PREROUTING

    POSTROUTING

    -p  tcp

    -s

    -d

    --sport

    --dport

    --dports

    -m  tcp

          state

          multiport

    -j  ACCEPT

        DROP

        REJECT

        DNAT

        SNAT

    解释:iptables 的某个表(table),对应的是那一条链(chain),对这条链上的什么内容(Parameter Xmatch)进行什么样的操作(target).
    command:
    -A:表示的是追加一个什么规则。
    -D:表示的是删除一个规则。
    -L:表示列出所有的规则。
    -F:表示清空对应的规则。‘
    -P:设置默认规则。
    -I:插入第一行,最为第一个规则。
    -R:替换。
    -n:把对应的域名转换成ip地址。

    保存iptables规则

    sudo iptables-save


    保存ipv6 的iptables规则

    sudo ip6tables-save


    查看iptables规则

    sudo iptables -L


    查看iptables规则,以数字形式

    sudo iptables -L -n


    查看iptables规则的序号,用于删除规则参考

    sudo iptables -L -n --line-numbers


    清除所有iptables预设表filter里的所有规则

    sudo iptabels -F


    清除预设表filter中使用者自定链中的规则

    sudo iptables -X


    清除单条iptables规则

    sudo iptables -D INPUT(链) 3(规则对应的序号)


    修改单条iptables规则,使用 -R,修改INPUT链序号为3的规则为允许,第4条规则为拒绝,丢弃

    1. sudo iptables -R INPUT 1 -j ACCEPT
    2. sudo iptables -R INPUT 2 -j DROP


    允许已经建立的连接发送和接收数据,以免设置链为DROP时远程ssh断开

    sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


    保证VPS可以运行的时候,可以为loopback网卡添加运行规则,插到第一行

    sudo iptables -I INPUT 1 -i lo -j ACCEPT


    允许某段IP访问本机的所有类型的所有端口

    1. sudo iptables -I INPUT -s 192.168.1.0/24 -p all -j ACCEPT
    2. sudo iptables -I INPUT -s 192.168.0.0/16 -p all -j ACCEPT


    允许本机127.0.0.1访问自身所有端口

    sudo iptables -I INPUT -s 127.0.0.1 -p all -j ACCEPT


    允许某段IP访问本机的TCP 3306端口

    sudo iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT


    允许某段IP访问本机的某段TCP端口

    sudo iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 3306:65525 -j ACCEPT


    向所有IP开放ssh的远程连接,这里是已经更改了的19515端口,默认为22端口

    sudo iptables -A INPUT -p tcp --dport 19515 -j ACCEPT


    默认INPUT OUTPUT FORWORD 链都是全部接受,需要改为拒绝

    确保ssh远程连接端口已经添加进 IPUNT 允许规则中,否则执行以下命令将可能会断开远程

    1. sudo iptables -A INPUT -p tcp --dport 19515 -j ACCEPT #这里ssh端口为19515
    2. sudo iptables -P INPUT DROP


    可选项,需保证SSH端口已经添加各链的允许规则,否则会断开SSH连接并无法远程连接

    1. sudo iptables -P OUTPUT DROP
    2. sudo iptables -P FORWORD DROP


    iptables规则配置后,无法访问外网,无法接收返回的数据,进行以下配置,并保证OUTPUT状态为ACCEPT,会使iptables允许由服务器本身请求的数据通过

    1. sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    2. sudo iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


    iptables 的持久化,由于重启ubuntu会导致iptables规则消失,需要持久化

    1.安装iptables-persistent工具帮助我们持久化

    1. sudo apt-get update
    2. sudo apt-get install iptables-persistent -y


    执行命令持久化

    1. sudo netfilter-persistent save
    2. sudo netfilter-persistent reload


    2.将iptables规则存入文件,随网卡状态进行加载,保存

    将iptables保存的规则保存入当前用户的文件

    sudo iptables-save > /home/user/iptables.rules


    在/etc/network/interfaces 网卡配置文件里加入相应内容

    vim /etc/network/interfaces


    添加内容

    1. pre-up iptables-restore < /home/user/iptables.rules
    2. post-down iptables-save > /home/user/iptables.rules


    用到的参数解释:

    pre-up: 网卡启用前的动作

    up: 启用时候的动作

    post-up: 启用后的动作

    pre-down: 关闭前的动作

    down: 关闭时动作

    post-down: 关闭后动作

    iptables的关闭,使用清除规则来实现

    1. sudo iptables-save > /home/user/iptables.rules
    2. sudo iptables -X  清除默认filter表里的自定义规则
    3. sudo iptables -t nat -F   清除nat表里的规则
    4. sudo iptables -t nat -X
    5. sudo iptables -t mangle -F  清除nat表里的规则
    6. sudo iptables -t mangle -X
    7. sudo iptables -P INPUT ACCEPT   将INPUT链默认更改为全部接受
    8. sudo iptables -P OUTPUT ACCEPT
    9. sudo iptables -P  FORWORD ACCEPT

  • 相关阅读:
    ComfyUI进阶:Comfyroll插件 (一)
    java序列回显学习
    SecretFlow隐语-安装
    MySQL流程控制函数
    d唐的导入C的经验
    【算法】通信线路(二分,堆优化版dijkstra)
    测试驱动开发 002:VSCode + CMake + Unity 环境搭建
    gpt批量原创文章生成器,不限制内容的生成器
    leetcode 1235
    Flink学习21:数据输出sink
  • 原文地址:https://blog.csdn.net/m0_68949064/article/details/125534804