近来回顾系统知识,想写个基于iptables安全防御的脚本,实现系统自动防护。

参考文档:http://blog.chinaunix.net/uid-26495963-id-3279216.html

iptables的历史

iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。

他们都是工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)

作者一共在内核空间中选择了5个位置,

1.内核空间中:从一个网络接口进来,到另一个网络接口去的 

2.数据包从内核流入用户空间的

3.数据包从用户空间流出的

4.进入/离开本机的外网接口

5.进入/离开本机的内网接口

iptables的工作机制

这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链。

1.PREROUTING (路由前)

2.INPUT (数据包流入口)

3.FORWARD (转发管卡)

4.OUTPUT(数据包出口)

5.POSTROUTING(路由后)

iptables的动作和策略

     防火墙的动作总共就两种,ACCEPT和DROP,不是通过就是丢弃。而针对不同位置有不同的策略表,每个表在不同的位置上有不同的链(chain)。

如图所示,我们现在用的比较多链的功能有3个:

1.filter 定义允许或者不允许的

2.nat 定义地址转换的 

3.mangle功能:修改报文原数据

       iptables规则的写法

iptables定义规则的方式比较复杂:

格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION

-t table :3个filter nat mangle

COMMAND:定义如何对规则进行管理

chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的

CRETIRIA:指定匹配标准

-j ACTION :指定如何进行处理

比如:不允许172.16.0.0/24的进行访问。

iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP

当然你如果想拒绝的更彻底:

iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT

iptables -L -n -v #查看定义规则的详细信息

iptables COMMAND详解

1.链管理命令

-P :设置默认策略的  (accept|drop)

iptables –P INPUT (ACCEPT|DROP)

-F:清空规则链

-N: 新建一个用户自定义链

-X: 删除一个用户自定义链

-E: 用于重命名用户自定义链的名称

-Z: 清空链及链中的计数器

            2.规则管理命令

-A :追加

-I chain num: 插入

-R chain num:替换

-D chain num:删除

3.查看管理命令 “-L”

-n :以数字方式显示ip

-v :显示详细信息

-vv -vvv越多越详细

-x :在计数器上显示精确值,不做单位换算

--line-numbers :显示规则行号

-t nat:显示所有的关卡的信息

详解匹配标准

1.通用匹配:源地址目标地址的匹配

-s: 指定作为源地址匹配,这里不能指定主机名称,必须是IP

IP  |  IP/MASK | 0.0.0.0/0.0.0.0

-d: 表示匹配目标地址

-p: 用于匹配协议的

-i eth#:从这块网卡流入的数据

-o eth#:从这块网卡流出的数据

2.扩展匹配:对协议的扩展

-p tcp :TCP协议的扩展

--dport ##-##:  xx制定目的端口

--tcp-flags: TCP的标志位

--tcp-flags syn,ack,fin,rst syn = –-syn

-p udp : UDP协议的扩展

--dport

--sport

-p icmp : icmp数据报文的扩展

--icmp-type icmp的类型

3.显示扩展

-m,表示启用多端口扩展

之后我们就可以启用比如 –dports 21,23,80

详解-j ACTION

                         常用的ACTION

DROP:悄悄丢弃

REJECT:明示拒绝

ACCEPT:接受

详解状态检测

什么是状态检测?对于整个TCP协议来讲,它是一个有连接的协议,三次握手中,第一次握手,我们就叫NEW连接,而从第二次握手以后的,ack都为1,这是正常的数据传输,和tcp的第二次第三次握手,叫做已建立的连接(ESTABLISHED),还有一种状态,比较诡异的,比如:SYN=1 ACK=1 RST=1,对于这种我们无法识别的,我们都称之为INVALID无法识别的。还有第四种,FTP这种古老的拥有的特征,每个端口都是独立的,21号和20号端口都是一去一回,他们之间是有关系的,这种关系我们称之为RELATED。

所以我们的状态一共有四种:

NEW

ESTABLISHED

RELATED

INVALID

具体这个状态检测可以用来做什么呢?

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

这句命令的意思是在INPUT的位置只允许第二次握手后的数据包和有依赖关系的数据包通过,这样就能让外部用户都无法发起对本机tcp连接,对于处于公网上,非C/S架构的业务会比较有效。

但是这句话有个问题,你连第一次发起的链接都拒绝了,那我root用户不是想管都管不上了?

于是就需要在这句话前放行你自己所在的IP网段的tcp state new,让本地网络可以访

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

limit,limit-burst详解

从iptables指南上看出limit和limit-burst最初不是拿来限速的。是拿来限制日志记录的次数的(iptables的logging功能),比如一秒1w个包,通过iptables的匹配了logging规则,都记录下来,log信息会无比庞大。在logging的规则中加上limit之后,可以有每秒/分/小时记录多少次的效果。

iptables -A INPUT -i wlan0 -m limit --limit 1000/s -j ACCEPT
iptables -A INPUT -i wlan0 -j DROP

这两条规则一起,可以有限制没秒通过无线网卡上传包的数目为1000,因为INPUT 进来的包,进行ACCEPT的次数被限制为1000次每秒,OUTPUT也是如此。

另外需要注意的是第二条规则iptables -A INPUT -i wlan0 -j DROP  如果没有它,限速不成功。

因为在iptables里,一个包不符合某条规则,就会由后面的规则来处理,如果都不符合,就由缺省的策略处理。所以如果limit后面没规则了,默认规则就是全量ACCEPT,也就是每秒ACCEPT规则匹配超过1000次之后,那些包,都由默认规则(ACCEPT)来处理,所以无法限速。

关于limit-burst

个人理解limit-burst是个初始值..匹配次数过了这个初始值,之后的就由limit xxx/s来控制了

linux iptables理论学习的更多相关文章

  1. linux iptables常用命令之配置生产环境iptables及优化

    在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...

  2. Linux iptables原理--数据包流向

    Iptable与Netfilter 在上一篇文章 linux iptables常用命令--配置一个生产环境的iptables 我们知道iptables有好几个表,如raw,mangle,nat,fil ...

  3. Linux iptables

    一.简介 http://liaoph.com/iptables/ 二.操作 1)查看规则 iptables -t filter -L -n iptables -t nat -L -n iptables ...

  4. Linux iptables 应用控制访问SSH服务

    Title:Linux iptables 应用控制访问SSH服务  --2012-02-23 17:51 今天用到了以前从来没有用到过的,iptables控制访问,只允许外部访问SSH服务(22号端口 ...

  5. Linux iptables 配置规则

    Linux iptables 防火墙配置规则 前言:把网上我感觉不错iptables的访问规则都统一在这里,以后做参考. modprobe ipt_MASQUERADE modprobe ip_con ...

  6. Linux iptables用法与NAT

    1.相关概念 2.iptables相关用法 3.NAT(DNAT与SNAT) 相关概念 防火墙除了软件及硬件的分类,也可对数据封包的取得方式来分类,可分为代理服务器(Proxy)及封包过滤机制(IP ...

  7. [svc]linux iptables实战

    参考: http://blog.51yip.com/linux/1404.html 链和表 参考: https://aliang.org/Linux/iptables.html 配置 作为服务器 用途 ...

  8. 常用的 Linux iptables 规则

    一些常用的 Linux iptables 规则,请根据自己的具体需要再修改. 转载自:http://mp.weixin.qq.com/s/uAPzh9_D4Qk6a3zBh7Jq5A # 1. 删除所 ...

  9. 25 个常用的 Linux iptables 规则【转】

    转自 25 个常用的 Linux iptables 规则 - 文章 - 伯乐在线http://blog.jobbole.com/108468/ # 1. 删除所有现有规则 iptables -F # ...

随机推荐

  1. 记EXSI虚拟机CentOS7断电无法启动修复过程

    参考:https://msd.misuland.com/pd/3148108429789233656 EXSI6.7安装虚拟机CentOS7.5 1804 断电后启动页面进度条很慢 最后出现如下提示 ...

  2. 绕过CDN测试出真实IP

    前言 CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发.调度等功能模块 ...

  3. react native 中 Demensions的坑

    简单描述下碰到的问题:Demensions.get('window').height,一般拿来获取屏幕高度的.但是在小米mix3上面(其他安卓机型可能也会有)无论底部的虚拟物理键盘显示与否(底部的返回 ...

  4. Redis 常用命令学习三:哈希类型命令

    1.赋值与取值命令 127.0.0.1:6379> hset stu name qiao (integer) 1 127.0.0.1:6379> hset stu sex man (int ...

  5. VisualStudioCode网页开发常用插件

    VS下载链接 提取码:usx8 VsCode扩展功能强大,在于他可以安装各种各样的插件来辅助开发.下面是我初学前端时常用的vscode开发插件 Chinese 汉化 Beautify 格式化javas ...

  6. Java的设计模式(4)--抽象工厂模式

    提供一个创建一系列或相互依赖对象的接口,而无须指定他们具体的类.例如某些系统可能需要为用户提供一系列相关对象,但系统不希望用户直接使用new运算符实例化这些对象,而是应当由系统来控制这些对象的创建,否 ...

  7. GoF 的 23 种设计模式的分类和功能

    1. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式.结构型模式和行为型模式 3 种. 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”.GoF ...

  8. Python笔记004-Python最基本内置数据类型和运算符

    第二章(1)Python编程基础概念 1. 最基本内置数据类型和运算符 每个对象都有类型,Python 中最基本的内置数据类型: 1. 整数 整数,2345 ,10 ,50 2. 浮点型 小数,3.1 ...

  9. 【规律】Cunning Friends

    Cunning Friends 题目描述 Anthony and his friends Ben and Chris decided to play a game. They have N piles ...

  10. Spring (3)框架

    Spring第三天笔记 今日内容 Spring的核心之一 -  AOP思想 (1) 代理模式- 动态代理 ① JDK的动态代理 (Java官方) ② CGLIB 第三方代理 (2) AOP思想在Spr ...