Linux防火墙基础与编写防火墙规则

Iptables采用了表和链的分层结构,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,raw表,mangle表,nat表,filter表,每个表容器内包括不同的规则链,根据处理数据包的不同时机划分为五种链,而决定是否过滤或处理数据包的各种规则,按先后顺序存放在各规则链中。

1、防火墙:内核中具有包过滤体系

内核态:netfilter

用户态:iptables 管理工具

工作在网络层:可以对ip地址、端口、协议等信息进行处理

2、规则链:规则的集合

五种链:(必须大写)

INPUT:入站

OUTPUT:出站

FORWARD:转发

POSTROUTING:路由后转换

PREROUTING:路由前转换

1)INPUT链:当收到访问防火墙本机地址的数据包(入站),应用此链中的规则。

2)OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。

3)FORWARD链:当收到需要通过防火墙中转发送给其他地址的数据包(转发)时,应用此链中的规则。

4)PREROUTING链:在对数据包做路由选择之前,应用此链中的规则。

5)POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则。

3、规则表:规则链的集合

有4个表:

Raw:状态跟踪

Mangle:设置标记

Nat:地址转换

Filter:包过滤

1)filter表:用来对数据包进行过滤,表内包含三个链,即:INPUT,FORWARD,OUTPUT

2)Nat表:nat表主要用来修改数据包的ip地址、端口号等信息。包含三个链,即PREROUTING,POSTROUTING,OUTPUT

3)Mangle表:用来修改数据包的TOS、TTL,或者为数据包设置MARL标记,实现流量整形,策略路由等高级应用,包含五个链,PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD

4)Raw表:用来决定是否对数据包进行状态跟踪,包含两个链:即OUTPUT,PREROUTING

4、规则的匹配顺序:

1)规则表的顺序

当数据包抵达防火墙时,将依次应用raw表,mangle表,nat表和filter表中对应链内的规则,应用顺序为raw-mangle-nat-filter

按顺序依次检查,匹配即停止(LOG策略除外),无匹配项,执行默认策略。

2)规则链之间的顺序

入站数据流向:来自外界的数据包到达防火墙后,首先被PRETOUTING链处理,然后进行路由选择,如果数据包的目标地址是防火墙本机,那么内核将其传递给INPUT链进行处理,通过以后再讲给系统的上层应用程序进行响应。

转发数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING链处理,然后再进行路由选择,如果数据包的目的地址是其他外部的地址,则内核将其传递给FORWARD链进行处理,最后交给POSTROUTING链进行处理。

出站数据流向:防火墙本机向外部地址发送的数据包,首先被OUTOUT处理,然后进行路由选择,再交给POSTROUTING链进行处理。

3)规则链内部各条防火墙规则之间的顺序

当数据包经过每条规则链时,依次按第一条规则,第二条规则......的顺序进行匹配和处理,链内的过滤遵循“匹配即停止”的原则,一旦找到一条相匹配的规则,则不再检查本链内后续的其它规则,如果比对完整个链,也找不到与数据包相匹配的规则,就按照规则链的默认策略进行处理。

5、iptables语法:

Iptables -t 表名 命令选项 链名 条件选项 -j 控制类型

1)不指定表名,为filter表

2)命令选项、链名、控制类型必须大写,其他必须小写

3)条件选项可以设置多项

6、控制类型:

1)ACCEPT:允许

2)REJECT:拒绝,返回信息

3)DROP:丢弃,无信息

4)LOG:记录日志,传给下一条规则

5)SNAT:源地址转换

6)DNAT:目标地址转换

7)MASQUERADE:ip伪装,源地址转换

8)REDIRECT:重定向

7、命令选项:

-A:追加到末尾

-I:插入(默认插入到第一条)

-L:查看

-D:删除(必须加序号)

-F:清空,但默认策略不清空

-P:默认策略,只有ACCEPT或DROP两种

-R:替换

-X:删除自定义链

-N:新建自定义链

-n:以数字方式显示

--line-number:添加序号

8、条件选项:

1)通用匹配:不依赖于任何条件可直接使用

-s:源地址 -d:目标地址

-p:协议 -i:入口

-o:出口 !:取反

2)隐含匹配:依赖指定的协议

--sport:源端口 --dport:目标端口

--tcp—flags:TCP标记

--icmp-type:icmp类型,有两种:

Echo-request(可用8代替) 请求

Echo-reply(可用0代替) 回应

开启转发功能:

永久有效:vim /etc/sysctl.conf

Net.ipv4.ip_forward=1

生效:sysctl -p

临时转发,立即生效

Sysctl -w net.ipv4.ip_forward=1

Echo “1” > /proc/sys/net/ipv4/ip_forward

3)显示配置:依赖于指定的功能模块,必须明确指定模块名称才可以使用

多端口匹配:-m multiport --sports 源端口列表

-m multiport --dports 目的端口列表

IP范围匹配:-m iprange --src-range ip范围

MAC地址匹配:-m mac --mac-source MAC地址

状态匹配:-m state --state 连接状态

原文发布于微信公众号 - L宝宝聊IT(gh_b0e552aa80db)

原文发表时间:2018-02-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

高性能HTTP加速器Varnish(安装配置篇)

一、安装Varnish Varnish的安装非常简单,下面逐步介绍: 1、安装前的准备 Varnish安装环境如下表1所示: 表1 主机名 操作系统 IP地址...

2866
来自专栏Google Dart

Dart服务器端 shelf_route包 原

简而言之,如果你想构建自己的堆栈,那么shelf_route和shelf_rest可能会更适合你。 如果你想要一个功能更全面的框架,同时仍然具有高度可扩展性,那...

734
来自专栏测试开发架构之路

JMeter测试工具.jmx文件详解

摘要:了解.jmx文件格式类型,对jmeter二次开发与拓展有很大的帮助,当然也可以利用python对其进行一些处理(生成一些测试用例,对jmx文件进行 ”增删...

1264
来自专栏编程

Django分离JS代码,处理AJax错误请求

在写Django时候,遇到个错误,这里进行下记录。 都知道Django或者Flask中通过下面这种方式 {%blockjs%}{%endblock%} 能够直接...

3287
来自专栏MasiMaro 的技术博文

Windows程序设计学习笔记(五)——菜单资源和加速键的使用

菜单可能是Windows提供的统一用户界面中最重要的一种方式,菜单通常在标题栏的下一行显示,这一栏叫做菜单栏,菜单栏中的每一项称之为菜单项,菜单栏中的每一个菜单...

632
来自专栏草根专栏

用ASP.NET Core 2.0 建立规范的 REST API -- GET 和 POST

本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/9010978.html 和 http://www.cnblog...

1021
来自专栏菩提树下的杨过

mac/linux中vim永久显示行号、开启语法高亮

注:如果是mac,更好的办法是直接换掉默认的终端,改用zsh,百度一下zsh,有很多教程,

822
来自专栏州的先生

使用RestFramework框架内置组件进行Django Restful接口的数据解析和渲染

1783
来自专栏流柯技术学院

windows charles response 乱码解决办法

使用windows 版本的charles来做代理,发现服务端返回的response会出现中文乱码的情况,

1182
来自专栏阮一峰的网络日志

Koa 框架教程

Node 主要用在开发 Web 应用。这决定了使用 Node,往往离不开 Web 应用框架。 ? Koa 就是一种简单好用的 Web 框架。它的特点是优雅、简洁...

4595

扫码关注云+社区