前言

防火墙是保护服务器的重要工具。 Linux中最常用的基本防火墙软件是iptables。iptables通过与Linux内核网络堆栈(networking stack)中的包过滤钩子(packet filtering hooks)进行交互来工作。 出入网络系统的数据包将在通过网络堆栈时会触发这些钩子。这些内核钩子称为netfilter框架。

Netfilter 钩子

一个程序可以注册5个netfilter钩子。 当数据包通过网络堆栈时,将触发与被注册钩子相关的内核模块。下面介绍钩子

  • NF_IP_PRE_ROUTING:刚刚进入网络层的数据包通过此点
  • NF_IP_LOCAL_IN:经路由查找后,送往本机的通过此点,INPUT包过滤在此点进行
  • NF_IP_FORWARD:要转发的包通过此点,FORWARD包过滤在此点进行
  • NF_IP_POST_ROUTING:所有马上便要通过网络设备出去的包通过此检测点,内置的源地址转换功能(包括地址伪装)在此点进行
  • NF_IP_LOCAL_OUT:本机进程发出的包通过此检测点,OUTPUT包过滤在此点进行。

IPTables和链

iptables防火墙使用表来组织规则。 例如,如果规则处理网络地址转换,它将被放入nat表中。 如果规则决定数据包是否继续发往目的地,它将被放入filter表中。

查看某一张表

iptables -t filter -L

Filter表

Filter表是iptables中使用最广泛的表之一。 Filter表用于决定是否让数据包继续发完目的地,还是拒绝其请求。 Filter表提供了人们在讨论防火墙时所考虑的大量功能。

NAT表

NAT表用于实现网络地址转换。 当数据包进入网络堆栈时,将根据规则修改数据包中的源、目标IP地址或端口。

Mangle表

根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由。

例如,您可以调整的TTL(生存时间)值。

Raw表

Security 表

在每个iptables表中,规则在单独的“链”中进一步组织。 虽然表是根据规则一般作用定义的,但内置链表示触发iptables表的netfilter钩子。 链决定何时执行规则。内置链的名称反映了与它们关联的netfilter钩子的名称:

  • PREROUTING:由NF_IP_PRE_ROUTING钩子触发。对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
  • INPUT:由NF_IP_LOCAL_IN钩子触发。进来的数据包应用此规则链中的策略
  • FORWARD:由NF_IP_FORWARD钩子触发。转发数据包时应用此规则链中的策略
  • OUTPUT:由NF_IP_LOCAL_OUT钩子触发。外出的数据包应用此规则链中的策略
  • POSTROUTING:由NF_IP_POST_ROUTING钩子触发。对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

查看表中某个链(以filter表的INPUT链为例)

iptables -t filter -L INPUT

iptables语法

规则增删改

-t:指定表,默认是filter

-P 或 --policy:定义默认策略

[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -L INPUT
Chain INPUT (policy DROP)
target prot opt source destination
DROP icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
INPUT_direct all -- anywhere anywhere
INPUT_ZONES_SOURCE all -- anywhere anywhere
INPUT_ZONES all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

-A 或 --append:在规则列表最后增加一条规则

-I 或 --insert:在指定位置插入一条规则。如果不指定位置,则在最上边插入

[root@localhost ~]# iptables -I INPUT  -p icmp -j DROP
[root@localhost ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
INPUT_direct all -- anywhere anywhere
INPUT_ZONES_SOURCE all -- anywhere anywhere
INPUT_ZONES all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

-D 或 --delete:删除一个规则

[root@localhost ~]# iptables -D INPUT
[root@localhost ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
INPUT_direct all -- anywhere anywhere
INPUT_ZONES_SOURCE all -- anywhere anywhere
INPUT_ZONES all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

-R--replace:替换规则列表中的某个规则

-F--flush:删除表(或链)中所有规则

iptables -F删除filter表中所有规则

iptables -F INPUT删除filter表INPUT链中的所有规则

数据包匹配

-i--in-interface :指定数据包从哪个网络接口进入,如pppO、eth0和eth1等

-o --out-interface:指定数据包从哪块网络接口输出,如pppO、eth0和eth1等

-p --protocol:协议类型指定数据包匹配的协议,如TCP、UDP和ICMP等

-s --source:指定数据包匹配的源地址。

-d --destination:指定数据包匹配的目标地址

--sport:指定数据包匹配的源端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口

--dport:目标端口号:指定数据包匹配的目标端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口

实例演示

禁止XP连接Win2003的远程桌面(TCP,3389端口)

在任何一个Linux Router上执行

iptables -t filter -I FORWARD -p tcp -s 192.168.80.123/32 -d 192.168.10.123/32 --deport 3389 -j DROP

扩展匹配项

参数-m state

基于状态检测的包过滤,指定检测哪种状态。
--state(New,ESTATBLISHED,INVALID,RELATED}
说明:

用来比对连接状态,连接状态共有四种:IVALID、ESTABLISHED、NEW和RELATED。
INVALID:表示该封包的连接编号(SessionID)无法辨识或编号不正确。
ESTABLISHED:表示该封包属于某个已经建立的连接。
NEW:表示该封包想要起始一个连接(重设连接或将连接重导向)。
RELATED:表示该封包是属于某个已经建立的连接,所建立的新连接。例如:FTP-DATA连接必定是源自某个FTP连接。

范例

iptables-A INPUT-m state-state RELATED,ESTABLISHED

参数-micmp-icmp-type

Ping命令使用icmp协议测试网络是否畅通,Icmp有两种常用类型的数据包即imp-type,常用的类型为echo-reply和echo-request。如下图所示PC1ping PC2,发出去的数据包是iamp协议echo-reply类型的数据包,PC2返回来的数据包是iamp协议的echo-reply类型的数据包。

IPTables 和 Netfilter 框架的更多相关文章

  1. netfilter框架和iptables

    转载自:http://blog.chinaunix.net/uid-23069658-id-3160506.html http://blog.chinaunix.net/uid-23069658-id ...

  2. iptables和netfilter

    1.iptables和netfilter说明 [1]netfilter/iptables组成Linux平台下的包过滤防火墙,iptables是用户空间的管理工具,netfilter是内核空间的包处理框 ...

  3. 深入理解 iptables 和 netfilter 架构

    [译] 深入理解 iptables 和 netfilter 架构 Published at 2019-02-18 | Last Update 译者序 本文翻译自 2015 年的一篇英文博客 A Dee ...

  4. Linux Netfilter框架分析

    目录 Netfilter框架 Netfilter的5个hook点 netfilter协议栈数据流分析 连接跟踪conntrack conntrack连接跟踪表条目 连接跟踪表大小 管理连接跟踪表 ip ...

  5. iptables介绍iptables和netfilter

    随着互联网技术的方兴未艾,各种网络应用层出不穷,网络攻击.黑客入侵也成了网民畅游互联网的心头大患,互联网安全也愈加受到了人们的重视.网络防火墙,作为一种简单高效的互联网防御手段,逐渐成为了网民畅游网络 ...

  6. iptables or netfilter

    netfilter 内部有三个表:filter .nat .mangle 每个表又有不同的操作链: 1.在filter这个防火墙功能的表中有三个chain:INPUT.FORWARD.OUTPUT. ...

  7. 编译内核启用iptables及netfilter

    在Network Packet Filtering Framework(Netfilter)一节中还有两个额外的配置节——Core Netfilter Configuration(核心Netfilte ...

  8. 【Linux 驱动】Netfilter/iptables (八) Netfilter的NAT机制

    NAT是Network Address Translation的缩写,意即"网络地址转换". 从本质上来说,是通过改动IP数据首部中的地址,以实现将一个地址转换成还有一个地址的技术 ...

  9. netfilter框架之hook点

    1. Netfilter中hook的所在位置 当网络上有数据包到来时,由驱动程序将数据包从网卡内存区通过DMA转移到设备主存区(内存区), 之后触发中断通知CPU进行异步响应,之后ip_rcv函数会被 ...

随机推荐

  1. 有哪些可能的原因导致BDE死掉啊啊,求救了,谢谢

    一个服务程序在后台跑,用到了BDE访问SQLServer,隔了一段时间就会莫名其妙的与数据库连接失败,查了一下BDE,发现已经死掉了,bde administrator也无法打开,报错,重启或注销机器 ...

  2. css 颜色混合模式 mix-blend-mode

    CSS3 新增了一个很有意思的属性 -- mix-blend-mode ,其中 mix 和 blend 的中文意译均为混合,那么这个属性的作用直译过来就是混合混合模式,当然,我们我们通常称之为混合模式 ...

  3. AI - TensorFlow - 示例05:保存和恢复模型

    保存和恢复模型(Save and restore models) 官网示例:https://www.tensorflow.org/tutorials/keras/save_and_restore_mo ...

  4. 【深度学习与神经网络】深度学习的下一个热点——GANs将改变世界

    本文作者 Nikolai Yakovenko 毕业于哥伦比亚大学,目前是 Google 的工程师,致力于构建人工智能系统,专注于语言处理.文本分类.解析与生成. 生成式对抗网络-简称GANs-将成为深 ...

  5. Git 和 SVN 存储方式的差异对比

    Git git 对于一个文件的修改存储的是一个快照,就是说针对文件1,修改之后,生成文件2,文件2中包含文件的1的内容,如果当文件1不存在,版本回退也就不管用了. SVN SVN 存储的是对文件的差异 ...

  6. gluster设置日志级别

    glusterd --log-level WARNING #将日志级别设定为warning gluster --log-level=ERROR volume status #查看日志级别的状态 glu ...

  7. MySQL(四)InnoDB中一棵B+树能存多少行数据

    一.InnoDB一棵B+树可以存放多少行数据?(约2千万) 我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛.在计算机中磁盘存储数据最小单元是扇区,一个扇 ...

  8. GATK4注意事项

    近期在测试多样品的WES的过程中发现用HC得到gvcf之后,合并多个样品的gvcf文件的过程中,使用CombineGVCFs的过程中很慢,发现官网推荐使用GenomicsDBImport 用法如下: ...

  9. STL源码剖析——iterators与trait编程#2 Traits编程技法

    在算法中运用迭代器时,很可能用到其相应类型.什么是相应类型?迭代器所指对象的类型便是其中一个.我曾有一个错误的理解,那就是认为相应类型就是迭代器所指对象的类型,其实不然,相应类型是一个大的类别,迭代器 ...

  10. Python 用(无脑 and 有脑)方式解决小练习

    题目:企业发放的奖金根据利润提成. 利润(I)低于或等于10万元时,奖金可提10%: 利润高于10万元,低于20万元时,低于10万元的部分按10%提成, 高于10万元的部分,可提成7.5%:20万到4 ...