iptables基础笔记

1.iptables是什么

iptables是Linux上的一支防火墙服务程序,且由内核直接提供

2.iptables的基本工作方式

iptables通过"表"的形式管理进出主机网卡的数据流

默认的"表"有3张,分别为Filter(默认使用),Nat,Manager。我们的需求使用Filter表的情况居多,通过对比数据包头部信息与每张表中的规则,来决定处理数据流是放行还是丢弃。

3.1Filter"表"介绍

Filter是过滤器表,主要与想要进出本机的数据包有关,也是iptables默认的表

每张表里有几种基本概念:

  1) "链",每张表里有数种不同的"链","链"的作用是给数据流分类,比如,是进入的数据还是出去的数据或者是需要转发到后端的数据

  2) 默认策略,当数据包头部信息与"链"中的每条规则对比都不符合时,就执行"链"默认的策略,是放行还是丢弃或是拒绝等

举例说明:如图

图中黄色标记的就是Filter表中的3个链,分别为INPUT链,FORWARD链,OUTPUT链;用来管理进入的数据,转发的数据及发送出去的数据,每张链的默认处理策略是DROP,ACCEPT,ACCEPT.

当一个数据包想要进入主机时,就需要与Filter表中INPUT链中的规则进行对比,如果符合规则就执行相应的动作,如上图中,标题头target代表规则对比成功要执行的动作,

prot代表数据包的协议(icmp,tcp,udp),source来源IP/网络,目标IP/网络等

4,基本iptables语法

  1)列出表的内容

  iptables [-t 表名字] [-L] [-n]

  -t: 后面接表名字,例如filter,如果省略不写,就使用默认filter表

  -L: 列出当前表的规则

  -n: 不进行IP地址与主机名的互查(提高显示速度,但是现实的都是ip地址,而不是对人友好的主机名)

  2)清除表中默认的规则

  iptables [-t 表名字] [-F | X | Z]

  -F: 清除表中各个链的的规则,如果想特表指定清除某条链的规则,可以使用--flush选项(例如,--flush INPUT)

  -X: 清除用户自定义的链的规则

  -Z: 所有链中的计数与流量归零

  3)定义链的默认策略

  所谓默认策略,是指当数据包不在我们的设计规则之内时,该数据包的处理方式,是通过还是丢弃(类似swith语句中的case和default的意思)

  iptables [-t 表名字] -P [INPUT | OUTPUT | FORWARD]    [ACCEPT | DROP | REJECT | LOG]

  -P: 定义链的默认策略

  4)数据包的基础对比语法规则

  iptables [-t 表名字] [-A | I] [-io 网络接口设备] [-p 协议] [-s 来源IP/网段] [-d 目标IP/网段] -j [ACCEPT | DROP | REJECT | LOG]

  -A | I : 添加规则到链的方式,是"追加"或者"插入"

  -i: 数据包进入的设备,例如网卡eth0,lo等,需要配合INPUT链

  -o: 数据包发出的设置,列入网卡eth0,lo等,需要配合OUTPUT链

  -p: 指明数据包的协议格式,支持的有icmp,udp,tcp等

  -s: 来源IP/网段,例如,

    IP: 192.168.90.9

    网段: 192.168.90.0/24 或者192.168.90.0/255.255.255.0

    当在IP/网段前加上!符号时,排除此IP/网段(就是取反的意思)

  -d: 目标IP/网段,类似-s选项

  -j: 代表本条规则所进行的动作,有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)和记录(LOG),例如,

    iptables -A INPUT -i lo -j ACCEPT , 本条规则表示不论数据包来自何处去往哪里,只要是进入lo这个网络设备接口,就给予放行,并且本条规则置于INPUT链所有规则的最后

  5)针对-p选项中的TCP和UDP协议的端口语法说明

  TCP和UDP协议中有个端口的概念,当我们针对这两种协议的数据包进行规则设计时,如果需要使用到端口,就需特别指明.

  iptables [-AI 链名] [-io 接口] [-p tcp,udp] [-s 来源IP/网段] [--sport来源端口范围] [-d 目标IP/网段] [--dport 目标端口范围] -j 动作

  --sport: 来源端口范围,端口号可以仅仅指定一个例如21 , 或者也可以指定一个范围例如1024:2048

  --dport: 目标端口范围,同上.

  例如,想要过滤掉除了来自IP:192.168.90.9的局域网内的主机进行ssh的连接,可以使用:

  iptables -A INPUT -i eth0 -p tcp ! -s 192.168.90.9 --dport 22 -j DROP

5,基本iptables语法扩展

数据包状态相关和硬件地址

iptables [-AI INPUT,OUTPUT,FORWARD] [-m state] [--state 状态说明]

iptables [-AI INPUT,OUTPUT,FORWARD] [-m mac] [--mac-source 网卡硬件地址]

想象一种情况,当我们主动通过防火墙送出一个数据包后而又想不加过滤的接受此数据包的响应数据包,那我们该怎么做.例如我有台主机,不允许其他主机主动联络,但当我们主动

连接一台远程主机的80端口的服务,然后又需要接收远程主机80端口服务的数据响应,此时该怎么做. 在这种情况下iptables的扩展模块state就能很好的解决这种问题

-m: iptables的外挂模块

  state: 状态模块

  mac: 网卡硬件地址模块

--state: 针对state模块数据包的状态,可选的值有:

  INVALID:  无效的数据包

  ESTABLISHED:  已经成功建立的连接状态标志

  NEW:  想要新建立一个连接的数据包状态

  RELATED:  表示这个数据包与本机主动发送出去的数据包相关(常用)

  例如,如果只允许通过已经建立的连接或者是和已经发出的数据包的的相关响应数据包,而其它的情况下数据包给予丢弃,可以使用:

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

  iptables -A INPUT -m state --state INVALID -j DROP

--mac-source: 针对mac模块数据包,表示来源主机的网卡地址(MAC)

  如果在局域网中,我们想要针对某台机器的外发数据做限制,而我们又知道这台机器的网卡硬件地址,可以使用:

  iptables -A INPUT -m mac --mac-source 74:23:44:88:E4:98 -j DROP  (当然我们的主机这时候是用作路由器)

参考:<<鸟哥的LINUX私房菜>>

时间: 2024-08-06 19:00:25

iptables基础笔记的相关文章

java String 类 基础笔记

字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String s = "abc";//存放于字符串常量池,产生1个对象 String s1=new String("abc");//堆内存中new创建了一个String对象,产生2个对象 String类中的equals比较字符串中的内容. 常用方法: 一:获取 1.获取字符串中字符的个数(长度):length();方法. 2.根据位置获取字符:charAt(int index); 3.根据字符获取在字符串中

网络基础笔记——OSI七层模型

OSI七层模型 由于整个网络连接的过程相当复杂,包括硬件.软件数据封包与应用程序的互相链接等等.如果想要写一支将联网全部功能都串连在一块的程序,那么当某个小环节出现问题时,整只程序都需要改写.所以我们将整个网络分成数层,每层都有自己独立的功能,而且每层的代码都可以独立撰写,因为相互之间不会干扰.如此一来,当某个小环节出现问题时,只要将该层的代码改写即可.并且这样可以让整个网络层次更加的清晰. 在网络上传输信息就像是一个发包裹的过程,从己方的应用程序开始往第七层的包裹里塞数据,再依次塞到第一层的包

[Java基础笔记]数组

Java基础笔记 定义数组: int[] numbers = new int[100]; //方法一 double[] num = new double[10]; int[][] a = new int[2][5]; 通过new创建的数组,元素默认值为0(0.0) int[] scores = {5,4,33,12,46}; //方法二 int[][] a = { //位数不足,自动补0 {5,3,2,1,6}, {10,12,14,15}, }; 数组特性:存储的都是同类型数据:长度定义后不可

C# 基础笔记(第一篇)

C#基础 概念:.net与c#.net/dontnet:一般指.net framework框架,一种平台,一种技术c#(charp):一种编程语言,可以开发基于.net的应用. *java既是一种技术又是一种编程语言.                           .net都能干什么?开发桌面应用程序   Winforminternet应用程序    Asp.net/webservice C/S:客户机(Client)/服务器模式(Server)B/S:浏览器(Browser)/务器模式(

我的LINUX基础笔记

Linux系统管理      1 Day   2014.5.23 su -name   切换用户passwd 密码   更改密码gnome-terminal    伪CLI   桌面终端程序1.查看内核版本uname -r    2.查看红帽系统版本cat /etc/redhat-rdlease3.查看LINUX标准分发版信息  lsb_release4.查看网卡的IP,MAX       ifconfig                       ifconfig eth 10.0.0.10

Nginx基础笔记

Nginx基础笔记 资源 安装 ubuntu下 编译安装 基本操作 HTTP基本配置 配置说明 配置文件目录结构 配置文件结构 模块 模块化 index模块 Log模块 Real IP模块 Access模块 Rewrite模块 Proxy模块 upstream模块 其他 配置静态化目录 负载均衡 控制页面缓存 nginx的内置变量 nginx小结 资源 资源 Nginx 官网 Nginx 官方下载地址 Nginx最佳实践配置项目 地址 Nginx Configuration wiki 教程 ag

iptables基础概念

1.基础概念. 防火墙,其实说白了讲,用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP.数据进行检测. 目前市面上比较常见的有3.4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关. 对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测.但是对于七层的防

MYSQL基础笔记(三)-表操作基础

数据表的操作 表与字段是密不可分的. 新增数据表 1 Create table [if not exists] 表名( 2 字段名 数据类型, 3 字段名 数据类型, 4 字段n 数据类型 --最后一行不需要加逗号 5 )[表选项]; If not exists:如果表名不存在,那么就创建,否则不执行创建代码,实现检查功能. 表选项:控制表的表现 1.字符集:charset/character 具体字符集:--保证表中数据存储的字符集. 2.校对集:collate 具体校对集: 3.存储引擎:e

REDIS基础笔记

Redis基础笔记 资源链接 简介 简介 安装 五种数据类型及相应命令 1. 字符串类型 2. 散列类型 3. 列表类型 4. 集合类型 5. 有序集合 其他 事务 SORT 生存时间 任务队列 发布/订阅模式 Python中使用Redis 实际实例 管理 其他 资源链接 推荐书籍:<Redis入门指南> 资源列表: redis命令速查command | CMD索引-中文 | CMD树-中文 redis源码github 下载地址redis.io The Little Redis book 入口