简介

Linux防火墙主要工作在网络层,针对TCP/IP数据包实施过滤和限制。iptables是linux防火墙的管理程序,为包过滤机制的实现制定规则,并告诉内核空间的netfilter如何处理这些网络数据包。

在centos7中,默认的防火墙管理程序是firewalld,通过yum install -y iptables-services安装iptables。firewalld可以通过systemctl stop firewalld && systemctl disable firewalld停止。

iptables的四表五链

如何对网络数据包进行过滤和处理成为规则,规则的集合成为规则集。按照规则集的不同用途,可以划分为四个规则表。处理数据包的不同时机分为五种规则链,每个规则表中含有不同的规则链。

规则表

  • filter表:用于数据包过滤,具体的规则要求决定如何处理数据包。

    • 表中有inputoutputforward三个链。
  • nat表:网络地址转换,主要用来修改数据包的IP、端口号等信息。
    • 表中有outputpreroutingpostrouting三个链。
  • managle表:主要用来修改数据包的服务类型、生存周期,为数据包设置标记、实现流量整形、策略路由等。
    • 表中有inputoutputforwardpreroutingpostrouting五个链
  • raw表:主要用来决定是否对数据包进行状态跟踪。
    • 表中有outputprerouting两个链。

当数据包到达防火墙时,如果对应的链中有规则,将按照 raw -> mangle -> nat -> filter的顺序通过各个规则表。

规则链

  • input:当收到访问本机的数据包时,将应用此链中的规则。主要用于针对本机的防火墙规则。
  • output:当本机向外发送数据包时,将应用此链中的规则。主要用于针对本机的防火墙规则。
  • forward:当收到需要通过本机转发到其它地址的数据包时,将应用此链中的规则。
  • prerouting:在对数据包做路由选择之前,将应用此链中的规则。
  • postrouting:在对数据包做路由选择之后,将应用此链中的规则。

外部数据包到达防火墙时,要先通过prerouting链进行路由选择。如果该数据包访问的是本机,则交给input规则链处理。如果是其它地址,则交给forward链处理,再交给postrouting链处理。

内部数据包到达防火墙时,首先被output链处理,然后选择路由,交给postrouting处理。

数据包进入规则链时按照顺序依次匹配处理。如果找到匹配数据包的处理规则,将不再执行当前规则链之后的其它规则。如果整个链都没有相应规则,将按照默认策略进行处理。

iptables命令基本语法

# iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
  • 未显式指定表名时,默认使用filter表。
  • 管理选项:iptables操作方式,比如:
    • -A : 在链尾增加一条规则
    • -D : 删除链中某一条规则,可指定序号或具体内容
    • -I : 指定序号插入规则,未指定序号时,在链首插入
    • -R : 修改链中某一条规则,可指定序号或具体内容
    • -L : 列出链中所有规则,未指定链名时,列出表中所有规则链的规则
    • -F : 清空指定链中的所有规则,未指定链名时,清空表中所有规则链的规则
    • -P : 设置指定链的默认规则
    • -n : 使用数字形式显示输出结果
    • -v : 查看规则列表时显示详细信息
    • --line-numbers : 查看规则列表时,同时显示规则在链中的序号
  • 控制类型
    • accept : 允许数据包
    • drop : 丢弃数据包,且不给回应消息
    • reject : 拒绝数据包,必要时会给数据发送方回应
    • log : 在/var/log/meesages文件中记录日志信息

简单示例(入站防护示例)

# 禁止192.168.11.0/24的IP访问
iptables -A INPUT -s 192.168.11.0/24 -j DROP # 允许192.168.12.0/24使用tcp协议访问本机80端口
iptables -A INPUT -s 192.168.12.0/24 -p tcp --dport 80 -j ACCEPT # 允许192.168.12.0/24使用tcp协议访问本机80和443端口
iptables -A INPUT -s 192.168.12.0/24 -p tcp -m multiport --dport 80,443 -j ACCEPT # 允许192.168.12.0/24使用udp协议访问本机2000 - 3000端口
iptables -A INPUT -s 192.168.12.0/24 -p udp --dport 2000:3000 -j ACCEPT # 禁止ICMP
iptables -A INPUT -p icmp -j DROP # 查看规则列表并显示序号
iptables -L INPUT --line-numbers # 使用数字形式避免地址解析,提高命令执行速度
iptables -nL INPUT # 删除INPUT链第3条规则
iptables -D INPUT 3 # 清空INPUT链中所有规则
iptables -F INPUT # 设置默认禁止入站
iptables -P INPUT DROP

其他命令

  • 导出iptables规则到文件中
iptables-save > /root/backup/iptables_bak20220508.txt
  • 从文件中导入iptables规则
iptables-restore < /root/backup/iptables_bak20220508.txt

参考

  • 杰哥的iptables手册V1.0.pdf

iptables基础的更多相关文章

  1. Iptables基础整理

    Iptables基础框架

  2. 腾讯云:iptables基础

    iptables 基础 iptables 基本命令 任务时间:5min ~ 10min iptables 可以简单理解为 Linux 系统内核级防火墙 netfilter 的用户态客户端. Linux ...

  3. iptables基础知识

    iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙.如果你是第一 ...

  4. iptables基础知识详解

    iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙.如果你是第一 ...

  5. iptables基础实战练习

    目录: 一.基本规则练习 二.SNAT源地址转移 三.DNAT目标地址转移 一.基础规则练习 (1) 放行ssh (端口:22) 1 iptables -A INPUT -d 192.168.42.1 ...

  6. iptables基础命令详解

    TCP/IP基本概念: TCP/IP将网络分为四层:应用层,传输层,网络层,链路层. 传输层:定义了两种通信协议,分别为TCP协议和UDP协议. TCP协议:TCP协议在传输 数据过程中会检查数据的完 ...

  7. iptables 基础知识

    [root@tp ~]#iptables -L -n 查看防火墙规则 [root@tp ~]# iptables -D INPUT 1  根据命令iptables -L -n --line-numbe ...

  8. iptables基础信息介绍

    在linux系统下,网络安全,除了有SElinux,另外就是iptables防火墙了,这个是用的最多也是功能非常强大的一个工具,今天就对其简单的架构上技术进行概要描述.让自己后续能够逻辑清晰的处理云环 ...

  9. Linux防火墙iptables基础详解

    原文来自于:https://www.linuxidc.com/Linux/2017-01/140073.htm(引用自) 一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分 ...

  10. iptables基础配置

    启动指令:service iptables start   重启指令:service iptables restart   关闭指令:service iptables stop   规则相关配置:/e ...

随机推荐

  1. 万字长文详解如何使用Swift提高代码质量

    前言 京喜APP最早在2019年引入了Swift,使用Swift完成了第一个订单模块的开发.之后一年多我们持续在团队/公司内部推广和普及Swift,目前Swift已经支撑了70%+以上的业务.通过使用 ...

  2. 2023-05-11:给你一个 m x n 的二进制矩阵 grid, 每个格子要么为 0 (空)要么为 1 (被占据), 给你邮票的尺寸为 stampHeight x stampWidth。 我们想将

    2023-05-11:给你一个 m x n 的二进制矩阵 grid, 每个格子要么为 0 (空)要么为 1 (被占据), 给你邮票的尺寸为 stampHeight x stampWidth. 我们想将 ...

  3. 2022-10-27:设计一个数据结构,有效地找到给定子数组的 多数元素 。 子数组的 多数元素 是在子数组中出现 threshold 次数或次数以上的元素。 实现 MajorityChecker 类

    2022-10-27:设计一个数据结构,有效地找到给定子数组的 多数元素 . 子数组的 多数元素 是在子数组中出现 threshold 次数或次数以上的元素. 实现 MajorityChecker 类 ...

  4. 2022-05-13:k8s安装webrtc-streamer,yaml如何写?

    2022-05-13:k8s安装webrtc-streamer,yaml如何写? 答案2022-05-13: yaml如下: apiVersion: apps/v1 kind: Deployment ...

  5. 2021-10-07:将有序数组转换为二叉搜索树。给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树

    2021-10-07:将有序数组转换为二叉搜索树.给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树.高度平衡 二叉树是一棵满足「每个节点的左右两个子树 ...

  6. 曲线艺术编程 coding curves 第三章 弧,圆,椭圆(ARCS, CIRCLES, ELLIPSES)

    第三章 弧,圆,椭圆(TRIG CURVES) 原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二 ...

  7. VSCode 中利用 Remote SSH 连接远程服务器

    北京时间 2019 年 5 月 3 日,在 PyCon 2019 大会上,微软发布了 VS Code Remote.这是一个用来实现远程开发的功能插件,对于许多使用 Windows 进行开发,但是需要 ...

  8. CentOS7 本地光盘镜像rpm包

    CentOS7 本地光盘镜像rpm包 一.前言 rpm包的下载方式 通过本地光盘镜像下载rpm,centos7.iso镜像文件,内置了绝大多数软件的rpm包(本文章即演示如何配置本地rpm) 在线下载 ...

  9. 解密Prompt系列8. 无需训练让LLM支持超长输入:知识库 & unlimiformer & PCW & NBCE

    这一章我们聊聊有哪些方案可以不用微调直接让大模型支持超长文本输入,注意这里主要针对无限输入场景.之前在BERT系列中我们就介绍过稀疏注意力和片段递归的一些长文本建模方案长文本建模 BigBird &a ...

  10. GO 集合 map 使用总结

    转载请注明出处: Go语言的集合称为映射(map),它是一种无序的键值对(key-value)的集合,集合是通过键(key)来快速检索值(value)的,键(key)类似于索引,它指向值(value) ...