一、四表五链

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. shell 递归枚举文件并操作

    递归枚举文件并操作 #!/bin/bash CURDIR=$(cd $(dirname $0); pwd) export GOPATH=$CURDIR/.. echo GOPATH=$GOPATH c ...

  2. maven 私服同步无法获取依赖的pom.xml的依赖

    项目中引入了依赖: <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hado ...

  3. mui 普通新闻文字列表 图文新闻列表

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  4. python全栈开发 * 进程理论 进程创建 * 180724

    一.进程理论 1.进程是资源分配的最小单位. 2.进程调度就是多个进程在操作系统的控制下被CPU执行,去享用计算机的资源. 先来先服务 短作业优先 时间片轮转 多级反馈队列 3.进程调度的过程是不能够 ...

  5. Nginx负载均衡后端健康检查

    参考文档:https://www.cnblogs.com/kevingrace/p/6685698.html 本次使用第三方模块nginx_upstream_check_module的,要使用这个第三 ...

  6. elastricsearch学习笔记

    一.基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助. 接近实时(NRT)         Elasticsearch是一个接近实时的搜索平台.这意 ...

  7. Redis安装[Windows]

    一.  redis下载地址:  https://github.com/ServiceStack/redis-windows/tree/master/downloads 根据需要的下载对应版本*.zip ...

  8. Coroutines declared with async/await syntax is the preferred way of writing asyncio applications. For example, the following snippet of code (requires Python 3.7+) prints “hello”, waits 1 second, and

    小结: 1.异步io  协程 Coroutines and Tasks — Python 3.7.3 documentation https://docs.python.org/3/library/a ...

  9. vim正则表达式

    目录 一.使用正则表达式的命令[/,?, s, g] 1. 搜索命令 2. 替换命令s 3. global 命令形式 二.正则表达式的用法 表示位置的符号 表示数量的元字符 元字符一览 方括号内的特殊 ...

  10. mybatis(二)--相关属性及相关细节

    mapper接口动态代理 动态代理dao开发规则 1.namespace必需是接口的全路径名 2.接口的方法名 必需与 映射文件的sql id一致 3.接口的输入参数必需与映射文件的parameter ...