iptables 初步入门
jopen
10年前
iptables
防火墙简述
新的防火墙子系统/包过滤引擎 Nftables 将在 Linux 3.13 中替代有十多年历史的iptables。iptables/netfilter在2001年加入到2.4内核中。诞生于2008年的 NFTables 设计替代 iptables, 它提供了一个更简单的kernel ABI,减少重复代码,改进错误报告,更有效的支持过滤规则。除了iptables,NFTables还将替代ip6tables、arptables和 ebtables。Linux内核的第一代包过滤机制是ipfwadm(1.2.1内核,1995年),之后是ipchains(1999 年),Netfilter,Nftables是第四代。
iptables基础
Netfilter/IPTables是继2.0.x的IPfwadm、2.2.x的IPchains之后,新一代的Linux防火墙机制。 Netfilter采用模块化设计,具有良好的可扩充性。其重要工具模块IPTables连接到Netfilter的架构中,并允许使用者对数据报进行过滤、地址转换、处理等操作。
Netfilter提供了一个框架,将对网络代码的直接干涉降到最低,并允许用规定的接口将其他包处理代码以模块的形式添加到内核中,具有极强的灵活性。
Netfilter/IPTables的体系结构可以分为三个大部分:
- Netfilter的HOOK机制
Netfilter的通用框架不依赖于具体的协议,而是为每种网络协议定义一套HOOK函数。这些HOOK函数在数据报经过协议栈的几个关键点时被调用,在这几个点中,协议栈将数据报及HOOK函数标号作为参数,传递给Netfilter框架。
对于它在网络堆栈中增加的这些HOOK,内核的任何模块可以对每种协议的一个或多个HOOK进行注册,实现挂接。这样当某个数据报被传递给 Netfilter框架时,内核能检测到是否有任何模块对该协议和HOOK函数进行了注册。若注册了,则调用该模块的注册时使用的回调函数,这样这些模块就有机会检查、修改、丢弃该数据报及指示Netfilter将该数据报传入用户空间的队列。
这样,HOOK提供了一种方便的机制:在数据报通过Linux内核的不同位置上截获和操作处理数据报。 - IPTables基础模块
IPTables基础模块实现了三个表来筛选各种数据报,具体地讲,Linux2.4内核提供的这三种数据报的处理功能是相互间独立的模块,都基于Netfilter的HOOK函数和各种表、链实现。这三个表包括:filter表,nat表以及mangle表。 - 具体功能模块
数据报过滤模块
连接跟踪模块(Conntrack)
网络地址转换模块(NAT)
数据报修改模块(mangle)
** 其它高级功能模块
iptables 的启动停止
ubuntu中启动及关闭iptables,在ubuntu中由于不存在 /etc/init.d/iptales文件,所以无法使用service等命令来启动iptables,需要用modprobe命令。
启动iptables
modprobe ip_tables iptable-restore < /etc/iptables.rule
关闭iptables
iptables -F iptables -X iptables -Z iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT modprobe -r ip_tables
命令基本格式
iptables 语法分成三部分:
命令本身 条件准则 处置方式 iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 列出当前iptables的策略和规则
iptables -L # --list 列出当前所有table的配置规则 iptables -L -n # -n: 用数字形式显示 iptables -L -v # -v: 打印详细的信息 iptables -F # 清除规则 iptables -X #
实例:限定指定IP段访问服务器的80端口
- 命令操作:
iptables -A INPUT -s 118.144.38.90/32 -p tcp -m multiport --dports 80 -j ACCEPT iptables -A INPUT -s -p tcp -m multiport --dports 80 -j DROP
- 查看状态 iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 118.144.38.90 anywhere multiport dports http DROP tcp -- anywhere anywhere multiport dports http Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
- 查看状态 iptables-save
# Generated by iptables-save v1.4.12 on Tue Apr 22 14:55:51 2014 *filter :INPUT ACCEPT [1689:106559] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [1608:154769] -A INPUT -s 118.144.38.90/32 -p tcp -m multiport --dports 80 -j ACCEPT -A INPUT -p tcp -m multiport --dports 80 -j DROP COMMIT # Completed on Tue Apr 22 14:55:51 2014 # Generated by iptables-save v1.4.12 on Tue Apr 22 14:55:51 2014 *raw :PREROUTING ACCEPT [2498:166654] :OUTPUT ACCEPT [2298:219551] COMMIT # Completed on Tue Apr 22 14:55:51 2014