解析iptables原里及设置规则

news2024/9/23 13:18:24

文章目录

    • 一、前言
    • 二、iptables简介
    • 三、iptables原理
    • 四、iptables设置规则
    • 五、 Linux 常用实例
    • 六、注意事项
      • 1、命令书写规则
      • 2、谨慎使用的动作 DROP
      • 3、永久生效

一、前言

其实在IT行业里了,不仅是专职的运维人员需要了解 iptables,开发、测试等人员在了解系统架构,环境搭建等过程中也是需要多多少少对 iptables 进行简单的认识与了解的,这样才能在更快的了解架构,环境配置,才能在实际过程中出了问题能有效的排除网络防火墙等原因,iptables就是系统里的防火墙,所有数据的进入都是要经过iptables符合其一定的规则才能流入或流出。

本文就是针对对iptables了解不多,需要知道其基本原理,数据包处理流向及常用的配置设置等进行总结叙述,以达到在最短的时间内找到所需求的知识,进行常规配置操作。

二、iptables简介

IPTABLES 在Linux内核为3.5版本集成了 IP 信息包过滤,在系统是Red Hat Linux 7.1 或更高版中自带有此工具无需下载安装,如果是低于7.1版本则需要下载安装才能正常使用。

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

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

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

iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息端口包过滤表中的规则变得容易。

三、iptables原理

在网上看了一些资料,汇总了主要核心内容,iptables主要原理:四表五链。只需要知道明白以下几个问题,在平常操作中基本够用了。

  1. iptables四表五链,指的是那些表,那些链?
  2. 每个链的作用是什么,每个链中包含那些表?
  3. 在同一链中表之间的优先级?
  4. 同一类表都作用于那些链中?
  5. 整体的数据流向的处理过程大致是什么?

把上面的问题了解后基本上对iptables也就有了大致的了解了。方便快速的认识与理解,我把以上所要了解的信息都汇总到一个图上,结合图表会更容易理解与记忆。

在这里插入图片描述

四、iptables设置规则

了解了原理再了解一下设置规则,基本上就可以上手实操练习或是看懂他们设置的规则不是什么难事了。话不多说,还是方便快速的理解与记忆,规则就一条信息,基本语法格式:

iptables [ -t 表名 ] 命令选项 [ 链名 ] [ 条件匹配 ] [ -j 目标动作或跳转 ]

里面的项,具体信息全在下面的表格里了。
在这里插入图片描述

五、 Linux 常用实例

原理、规则已经介绍完了,接下来就是实例,照着实例操作一遍加深理解记忆,也算是上手了。以下列出了常用的操作实例。

1.删除所有现有规则

iptables -F

2.设置默认的 chain 策略

iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT DROP

3.阻止某个特定的 IP 地址#BLOCK_THIS_IP=“x.x.x.x”#

iptables -A INPUT -s$BLOCK_THIS_IP-j DROP

4.允许全部进来的(incoming)SSH

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

5.只允许某个特定网络进来的 SSH

iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

6.允许进来的(incoming)HTTP

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

7.多端口(允许进来的 SSH、HTTP 和 HTTPS)

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

8.允许出去的(outgoing)SSH

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

9.允许外出的(outgoing)SSH,但仅访问某个特定的网络#

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.101.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

10.允许外出的(outgoing) HTTPS

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

11.对进来的 HTTPS 流量做负载均衡

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

12.从内部向外部 Ping

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPTiptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

13.从外部向内部 Ping

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPTiptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

14.允许环回(loopback)访问

iptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT

15.允许 packets 从内网访问外网if eth1 is connected to external network (internet)if eth0 is connected to internal network (192.168.1.x)

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

16.允许外出的 DNS

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPTiptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

17.允许 NIS 连接 #rpcinfo -p | grep ypbind ; This port is 853 and 850

iptables -A INPUT -p tcp --dport 111 -j ACCEPT

iptables -A INPUT -p udp --dport 111 -j ACCEPT

iptables -A INPUT -p tcp --dport 853 -j ACCEPT

iptables -A INPUT -p udp --dport 853 -j ACCEPT

iptables -A INPUT -p tcp --dport 850 -j ACCEPT

iptables -A INPUT -p udp --dport 850 -j ACCEPT

18.允许某个特定网络 rsync 进入本机

iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

19.仅允许来自某个特定网络的 MySQL 的链接

iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

20.允许 Sendmail 或 Postfix

iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

21.允许 IMAP 和 IMAPS


iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

22.允许 POP3 和 POP3S

iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

23.防止 DoS 攻击

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

24.设置 422 端口转发到 22 端口

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

25.为丢弃的包做日志(Log)

iptables -N LOGGINGiptables -A INPUT -j LOGGINGiptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7iptables -A LOGGING -j DROP

六、注意事项

1、命令书写规则

所有链名必须大写

 INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING

所有表名必须小写

filter/nat/mangle

所有动作必须大写

ACCEPT/DROP/SNAT/DNAT/MASQUERADE

所有匹配必须小写

-s/-d/-m/-p

2、谨慎使用的动作 DROP

这个动作是抛弃所有的包,此动作后的所有规则执行的包将会被自动过滤掉,即不生效。所在在使用时小心自己把自己关在防火墙外。

想生效的规则动作要放在 DROP 前。

iptables 规则是顺序执行的,为减少资源使用率高的规则放在最前面。

3、永久生效

默认iptables设置的防火墙规则会立即生效,但重启后失效。

永久生效就要把规则放到iptables配置文件里,设置开机自启动。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT   #开启tcp协议的22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT   #开启udp协议的22端口
iptables-save > /etc/sysconfig/iptables  #保存规则
systemctl enable iptables       #开机自启动

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/377166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IIS .Net Core 413错误和Request body too large解决办法

错误描述图片比较大时&#xff0c;在前端上传就报413错误。根本到不了后端。在网上看到这个文章比较有用。https://blog.csdn.net/wstever/article/details/1288707421、修改网站Web.config配置文件加入下面这段配置<?xmlversion"1.0" encoding"utf-8"…

Python 中 openpyxl 模块封装,读写 Excel 文件中自动化测试用例数据

只有测试数据和错误提示信息不同&#xff0c;其他代码都是一样的&#xff0c;不这样不易修改数据和维护&#xff0c;会有两点痛点 1.代码冗余极其严重, 程序可读性不佳 2.程序拓展性很差 往往我们在自动化测试汇总&#xff0c;会将数据放在 Excel 文件、CSV文件、数据库 Py…

JVM 堆内存模型

方法区和永久代的关系 方法区与 Java 堆一样&#xff0c;是各个线程共享的内存区域&#xff0c;它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。虽然 Java 虚拟机规范把方法区描述为堆的一个逻辑部分&#xff0c;但是它却有一个别名叫做 N…

如何整理自己的前端面试题库

compose 题目描述:实现一个 compose 函数 // 用法如下: function fn1(x) {return x 1; } function fn2(x) {return x 2; } function fn3(x) {return x 3; } function fn4(x) {return x 4; } const a compose(fn1, fn2, fn3, fn4); console.log(a(1)); // 1432111实现代码…

基于Java+SpringBoot+Vue前后端分离书店购书系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《Spring家族及…

Tomcat部署及多实例

Tomcat部署及多实例一、Tomcat简介1、Tomcat核心组件2、什么是JSP二、Tomcat数据流向1、Tomcat数据流向2、Tomcat-Nginx数据流向三、Tomcat服务部署安装1、安装jdk包2、解压Tomcat所需的安装包3、在/etc/profile添加环境变量4、启动服务并查看5、在浏览器网页验证6、创建用户&a…

flink常用算子介绍

flink任务中【Transformation 数据转换】是对数据进行操作&#xff0c;有 Map、FlatMap、Filter、KeyBy 、Reduce 、Fold 、Aggregations、Window 、WindowAll 、Union 、Window join 、Split 、Select 、Project 等&#xff0c;通过对数据的操作&#xff0c;转换成想要的数据&…

【设计模式】4.建造者模式

概述 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于&#xff1a;某个对象的构建过程复杂的情况。由于实现了构建和装配的解耦。不…

【沐风老师】3DMAX一键玻璃门生成器使用教程

3DMAX一键玻璃门生成器使用方法详解 3dMax一键玻璃门生成器是在3dMax中自动创建三维玻璃门模型的高效脚本。有6种风格的玻璃门&#xff0c;它可以在Archviz项目中灵活应用&#xff0c;同时为3D艺术家节省大量时间。 【适用版本】 3dMax 2018.2及更高版本 【安装方法】…

day37|完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ 复健运动

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一不同…

什么是MES系统?本文解释得很清楚了

MES&#xff08;英文Manufacturing Execution System的缩写&#xff09;&#xff0c;即生产执行系统&#xff0c;是近几年发展起来的企业信息化系统&#xff0c;目前在发达国家已经普遍推广。 MES软件是介于ERP&#xff08;企业资源计划系统&#xff09;和自控系统&#xff08…

百度前端训练营

视频&#xff1a;前端训练营开营仪式20220627_哔哩哔哩_bilibili http://bit.baidu.com/productsBuy?id248 一、Git安装与使用【因为重装系统&#xff0c;所以重新装一次环境】 查看电脑32位还是64&#xff0c;安装git TortoiseGit 及TortoiseGit 汉化包 下载64位对应的版本…

Java集合概述(Collection集合)

目录集合一、集合与数组二、集合类体系结构三、泛型(约定集合存储数据类型)四、Collection集合常用API五、Collection集合的遍历方式5.1 迭代器遍历5.2 增强for循环(for each):5.3 lambda表达式六、Collection集合存储自定义类型的对象七、常见数据结构集合 一、集合与数组 数…

【设计模式】9.桥接模式

概述 现在有一个需求&#xff0c;需要创建不同的图形&#xff0c;并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系&#xff1a; 我们可以发现有很多的类&#xff0c;假如我们再增加一个形状或再增加一种颜色&#xff0c;就需要创建更多的类。 试…

redis 05 篇——主从复制

redis 05 篇——主从复制1. 前言1.1 什么是复制&#xff1f;1.1.1 复制概述1.1.2 主从复制的架构1.2 为什么要使用主从复制&#xff1f;1.3 主从复制主要的命令配置2. 准备工作3. 核心配置3.1 主服务器3.2 从服务器4. 实例演示4.1 简单实例——两台服务器4.1.1 同一服务多个red…

小程序:使用分包异步化解决一个分包引入另一个分包的组件/函数的问题

背景 我们一般使用小程序插件的时候&#xff0c;喜欢将其放在分包中&#xff0c;因为插件体积会打包进主包内&#xff0c;很容易造成主包体积超过 2M 从而无法发布&#xff0c;我们暂且叫这个有插件的分包叫分包P&#xff0c;这时候另外两个业务分包XY&#xff0c;想引入这个分…

从Java培训班出来好找工作吗?

个人觉得这个问题要从两方面来看&#xff0c;首先是培训班的Java课程质量如何&#xff0c;是否贴合用人单位实际需求&#xff0c;学出来的技术能对口&#xff1b;其次是培训班是否保障就业&#xff0c;有就业机会渠道推荐&#xff0c;比如老学员内推、合作企业人才输送以及企业…

【Spring Cloud Alibaba】008-Sentinel

【Spring Cloud Alibaba】008-Sentinel 文章目录【Spring Cloud Alibaba】008-Sentinel一、服务雪崩1、概述2、解决方案常见的容错机制二、Sentinel&#xff1a;分布式系统的流量防卫兵1、**Sentinel** 概述简介特性Sentinel 的开源生态Sentinel 的历史2、Sentinel 基本概念资源…

低代码系统能够解决哪些痛点?

低代码系统能够解决哪些痛点&#xff1f;如果用4句话去归纳&#xff0c;低代码开发可以解决以下问题—— 为企业提供更高的灵活性&#xff0c;用户可以突破代码的限制自主开发业务应用&#xff1b;通过减少对专业软件开发人员的依赖&#xff0c;公司可以快速响应市场上的新业务…

cartographer中分支定界法理解——为什么能保证上界

定界原理 储存的不同分辨率栅格图&#xff0c;为保证上边界正确性&#xff0c;即高层中的评分一定高于其底层节点的评分&#xff0c;压缩的地图并非直接从原图固定间隔采样&#xff0c;而是将固定间隔中所有坐标概率值最大值作为低分辨率地图。 理解&#xff1a; 1、其在计算…