iptables 认识 第二章
一、四表五链
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 认识 第二章的更多相关文章
- CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...
- Jenkins入门系列之——02第二章 Jenkins安装与配置
2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...
- Python黑帽编程 2.0 第二章概述
Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...
- 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型
第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...
- Asp.Net MVC4 + Oracle + EasyUI 学习 第二章
Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...
- 数据结构与算法分析C++表述第二章编程题
把昨天看的第二章巩固一下,做一做编程习题. 2.6: 第一天交2元罚金,以后每一天都是前一天的平方,第N天罚金将是多少? 这个题目和2.4.4-3介绍的幂运算基本一致.若按相同的递归思路分析,比那个问 ...
- 【vue.js权威指南】读书笔记(第二章)
[第2章:数据绑定] 何为数据绑定?答曰:数据绑定就是将数据和视图相关联,当数据发生变化的时候,可以自动的来更新视图. 数据绑定的语法主要分为以下几个部分: 文本插值:文本插值可以说是最基本的形式了. ...
随机推荐
- 对于已经添加引用,还找不到类型或名字空间的错误及svn客户端清除用户帐号密码
1 已经添加过引用,却找不到类型或名字空间. 可以看下项目的的.net framework版本是否一致. 项目(例如类库项目)右键(vs解决方案资源管理器)——>属性——>应用程序——&g ...
- 16-1 ECMA5与ECMA6的函数定义
ECMA5: function Drag(id){ this.ele = document.getElementById(id); var that = this; this.ele.onmoused ...
- IsWindowVisible
IsWindowVisible通过该函数可以获得指定窗口的可视状态,即显示或者隐藏. BOOL IsWindowVisible( HWND hWnd ); hWnd:被测试窗口的句柄. 返回值:如果指 ...
- itoa()函数
itoa()函数 itoa():char *itoa( int value, char *string,int radix); 原型说明: value:欲转换的数据.string:目标字符串的地址.r ...
- 关于IOC和DI
IoC (Inverse of Control)即控制反转.是指将原来程序中自己创建实现类对象的控制权反转到IOC容器中.只需要通过IOC获了对象的实例,将IOC当成一个黑盒子.工厂.容器. spri ...
- MySQL数据库报错pymysql.err.InterfaceError: (0, '')
今天入库的时候出现了报错pymysql.err.InterfaceError: (0, ''),经过排查,发现是由于把连接数据库的代码放到了插入函数的外部,导致多线程运行出错 def write_in ...
- UI常用接口使用规范
//////////////////////////////////////////////////////////////////////////////////////////////// /// ...
- LeetCode 520 Detect Capital 解题报告
题目要求 Given a word, you need to judge whether the usage of capitals in it is right or not. We define ...
- CFGym101138D Strange Queries 莫队/分块
正解:莫队/分块 解题报告: 传送门 ummm这题耗了我一天差不多然后我到现在还没做完:D 而同机房的大佬用了一个小时没有就切了?大概这就是大佬和弱鸡的差距趴QAQ 然后只是大概写下思想好了因为代码我 ...
- 20.0-uC/OS-III移植
1.CPU移植要求: 1) 处理器有对应的能产生可重入代码的C编译器2) 处理器支持中断且能提供周期性的中断(通常介于10到1000Hz之间). 3) 可以关中断和开中断4) 处理器支持存储和载入堆栈 ...