一、四表五链

netfilter 通过四表五链两个维度来定义数据包过滤规则。

#上面图片中 raw 表不在postrouting 链中,请注意

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

1.PREROUTING (路由前)

2.INPUT (数据包流入口)

3.FORWARD (转发管卡)

4.OUTPUT(数据包出口)

5.POSTROUTING(路由后)

这是netfilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。

iptables包含4个表,5个链。其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度。

(1)4表:

   filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)

filter:一般的过滤功能

nat:用于nat功能(端口映射,地址映射等)

mangle:用于对特定数据包的修改

raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

(2)5链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。

    PREROUTING:数据包进入路由表之前

    INPUT:通过路由表后目的地为本机

    FORWARDING:通过路由表后,目的地不为本机

    OUTPUT:由本机产生,向外转发

    POSTROUTING:发送到网卡接口之前。

二、各功能分别实现的位置

流入:PREROUTING --->INPUT
流出:OUTPUT-----> POSTROUTING
转发: PREROUTING ---> FORWARD ----POSTOUTING
filter : INPUT ,OUTPUT ,FORWARD
nat : PREROUTING(DNAT) ,OUTPUT ,POSTROUTING (SNAT)
mangle : PREROUTING ,INPUT ,OUTPUT ,FORWARD ,POSTROUTING
raw : PREROUTING ,OUTPUT ,POSTROUTING
功能的优先级次序: raw -->mangle --> nat--> filter
.filter表——三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包 内核模块:iptables_filter.
.Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
.Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(不经常使用)
.Raw表——两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable_raw
iptables :规则管理工具
添加, 删除,修改,显示等; 规则和链有计数器:
pkts;有规则或链所匹配到的报文个数
bytes: 由规则或链匹配到的所有报文大小之和 iptables 命令:
iptables [-t table] {-A|-C|-D} chain rule-specification iptables [-t table] -I chain [rulenum] rule-specification iptables [-t table] -R chain rulenum rule-specification iptables [-t table] -D chain rulenum iptables [-t table] -S [chain [rulenum]] iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...] iptables [-t table] -N chain iptables [-t table] -X [chain] iptables [-t table] -P chain target iptables [-t table] -E old-chain-name new-chain-name     语法:   iptables [-t table] SUBCOMMAND CHAIN CRETERIA -j TARGET
    -t table: 默认为 filter
filter ,nat ,mangle ,raw
chain ;
-F:flush ,清空规则链,省略链,表示清空指定表上的所有链
-N: new, 创建新的自定义规则链,
-X:drop ,删除用户自定义的空的规则链;
-Z:zero ,置零,置零规则计数器
-P:policy ,设置默认策略,对filter 表中的链而言,默认通常ACCEPT,DROP ,REJECT
-E: 重命名自定义链 ,应用计数不为0 的自定义链,无法改名,也无法删除 规则管理:
-A ;append ,将新规则追加至指定链的尾部
-I ;insert ,将新规则追加至指定链的指定位置
-D :delete ,删除指定链上的指定规则
两种指定方式:
指定匹配条件
指定规则编号
-R:replace,替换指定链上的指定规则
查看:
-L :list ,列出指定链上的所有规则
-n :numberic ,以数字格式显示地址和端口
-v :verbose ,显示详细信息
-vv ,-vvv
--line-numbers;显示规则编号
-x :exactly,显示计数器结果的精确值
        目标;
-j ;TARGET ,jump ,跳转 指定的 TARGET
ACCEPT :接受
DROP :丢弃
REJECT :拒绝
RETURN :返回调用链
REDIRECT :端口重定向
LOG :记录日志
MARK ;做防火墙标记
DNAT :目标地址转换
MASQUERADE ;地址伪装
.....
自定义链;由自定义链上的规则进行匹配检查 centos : man iptables
centos : man iptables-extensions
[root@localhost /]# iptables -t filter -N test_public    #添加自定义链
[root@localhost /]#
[root@localhost /]# iptables -t filter -L
Chain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination Chain test_public ( references)
target prot opt source destination
[root@localhost /]#
[root@localhost /]# iptables -X -t filter    #删除用户自定义没有引用的空链
[root@localhost /]#
[root@localhost /]# iptables -t filter -L
Chain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@localhost /]# systemctl restart firewalld    #重启iptables 服务
[root@localhost /]# iptables -L -n          #查看iptables
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/ 0.0.0.0/ ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/ 0.0.0.0/
INPUT_direct all -- 0.0.0.0/ 0.0.0.0/
INPUT_ZONES_SOURCE all -- 0.0.0.0/ 0.0.0.0/
INPUT_ZONES all -- 0.0.0.0/ 0.0.0.0/
DROP all -- 0.0.0.0/ 0.0.0.0/ ctstate INVALID
REJECT all -- 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited
[root@localhost /]# iptables -t filter -P FORWARD DROP   修改某一个链上的默认策略
[root@localhost /]#
[root@localhost /]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy DROP)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@nginx etc]# iptables -t filter -A INPUT -d 10.2.61.22 -p tcp -j ACCEPT    #允许任意地址通过TCP 地址访问本机
[root@nginx etc]#
[root@nginx etc]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/ 10.2.61.22 Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@nginx etc]#
[root@nginx etc]# iptables -t filter -D OUTPUT     #删除指定链上编号为1 的规则
[root@nginx etc]# iptables -L -n -v --line-number
Chain INPUT (policy ACCEPT packets, bytes)
num pkts bytes target prot opt in out source destination
ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 Chain FORWARD (policy ACCEPT packets, bytes)
num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT packets, bytes)
num pkts bytes target prot opt in out source destination
ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/
[root@nginx etc]#
[root@nginx etc]# iptables -P INPUT DROP    #指定默认策略为 DROP
[root@nginx etc]# iptables -P OUTPUT DROP
[root@nginx etc]# iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/ 10.2.61.22 Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 10.2.61.22 0.0.0.0/
[root@nginx etc]#
[root@nginx etc]# iptables -t filter -A INPUT -p icmp -d 10.2.61.22 -j ACCEPT   #允许ping 包进来
[root@nginx etc]# iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/ 10.2.61.22
ACCEPT icmp -- 0.0.0.0/ 10.2.61.22 Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 10.2.61.22 0.0.0.0/
[root@nginx etc]# iptables -t filter -A OUTPUT -p icmp -s 10.2.61.22 -j ACCEPT #允许响应ping 包出去
[root@nginx etc]# iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/ 10.2.61.22
ACCEPT icmp -- 0.0.0.0/ 10.2.61.22 Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 10.2.61.22 0.0.0.0/
ACCEPT icmp -- 10.2.61.22 0.0.0.0/
[root@nginx etc]#
[root@nginx etc]# iptables -A INPUT -i ens192 -j ACCEPT         #指定出入接口匹配
[root@nginx etc]# iptables -A OUTPUT -o ens192 -j ACCEPT

[root@nginx etc]# iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination      #限制了流入流出
859 62296 ACCEPT tcp -- * * 0.0.0.0/0 10.2.61.22
3 244 ACCEPT all -- ens192 * 0.0.0.0/0 0.0.0.0/0


Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination


Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
557 56796 ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/0
3 244 ACCEPT all -- * ens192 0.0.0.0/0 0.0.0.0/0
[root@nginx etc]#

 

iptables 认识 第二章的更多相关文章

  1. CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  2. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  3. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  4. Jenkins入门系列之——02第二章 Jenkins安装与配置

    2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...

  5. Python黑帽编程 2.0 第二章概述

    Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...

  6. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  7. Asp.Net MVC4 + Oracle + EasyUI 学习 第二章

    Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...

  8. 数据结构与算法分析C++表述第二章编程题

    把昨天看的第二章巩固一下,做一做编程习题. 2.6: 第一天交2元罚金,以后每一天都是前一天的平方,第N天罚金将是多少? 这个题目和2.4.4-3介绍的幂运算基本一致.若按相同的递归思路分析,比那个问 ...

  9. 【vue.js权威指南】读书笔记(第二章)

    [第2章:数据绑定] 何为数据绑定?答曰:数据绑定就是将数据和视图相关联,当数据发生变化的时候,可以自动的来更新视图. 数据绑定的语法主要分为以下几个部分: 文本插值:文本插值可以说是最基本的形式了. ...

随机推荐

  1. JS 一张图理解prototype、proto和constructor的关系

    转载于原文地址:https://www.cnblogs.com/xiaohuochai/p/5721552.html(感谢大神的总结) 前面的话 javascript里的关系又多又乱.作用域链是一种单 ...

  2. 基于Schema配置切面

        使用基于Schema的切面定义后,切点.增强类型的注解信息从切面类中剥离出来,原来的切面类也就蜕变为真正意义上的POJO了. 1.一个简单切面的配置 基于Schema配置的切面示例: < ...

  3. pandas功能使用rename, reindex, set_index 详解

    pandas rename 功能 在使用 pandas 的过程中经常会用到修改列名称的问题,会用到 rename 或者 reindex 等功能,每次都需要去查文档 当然经常也可以使用 df.colum ...

  4. python中 requests 支持 socks代理

    参考博客 https://zhengheng.me/2016/08/25/python-requests-socks5/

  5. 几个dos命令

  6. python语法_字符串拼接

    +号可以用来做字符串拼接 print("abc"+"efg"+"def") abcefgdef 字符串(str)与数字(int)不能使用+进 ...

  7. PE、PB、PEG三大估值法的正确使用方法!

    目前市面上的估值方法有很多,比如PE估值法.PB估值法.PEG估值法,但是我相信,真正会用的人并不多,比如说目前动态市盈率121倍的比亚迪真的高估吗?比如目前市净率为0.63倍的众泰汽车真的是破净股吗 ...

  8. Mac 软件

    http://xclient.info/?t=e0ec92ebc9ce8ef7b7a48460b06893fa040ff066   Mac破解版软件网址

  9. vue 点击弹窗外框关闭弹框

    https://blog.csdn.net/zjw0742/article/details/77822777 ready() { document.addEventListener('click', ...

  10. [js]js设计模式-原型模式

    构造函数模型- 对象的属性和方法每人一份 function createJs(name, age) { this.name = name; this.age = age; this.writeJs = ...