一、netfilter
网络过滤器:放入内核特定的位置,必须是tcp/ip的协议栈经过的地方,能够实现读取规则的地方叫做网络过滤器(netfilter)
iptables发展到现在有五个特定的位置被作为网络过滤器,被称为五个钩子函数(hook functions),也叫五个规则链。
1.INPUT (数据包流入口):当收到访问防火墙本地地址的数据包时,应用此链的规则
2.OUTPUT(数据包出口):当防火墙本机向外发出数据时,应用此链的规则。
3.FORWARD (转发管卡):当收到要通过防火墙发送给其他网络地址的数据包时,应用此链的规则。
4.PREROUTING (路由前):在对数据包做路由选择之前,应用此链的规则。
5.POSTROUTING(路由后):在对数据包做路由选择之后,应用此链的规则。
二、规则表
Netfilter/iptables可以对流入和流出的信息进行细化控制,且可以在一台低配置机器上很好地运行,被认为是Linux中实现包过滤功能的第四代应用程序。Netfilter/iptables包含在Linux 2.4以后的内核中,可以实现防火墙、NAT(网络地址翻译)和数据包的分割等功能。netfilter工作在内核内部,而iptables则是让用户定义规则集的表结构。内核模块可以注册一个新的规则表(table),并要求数据包流经指定的规则表。这种数据包选择用于实现数据报过滤(filter表),网络地址转换(NAT表)及数据报处理(mangle表)。
1、filter:filter表格不会对数据报进行修改,而只对数据报进行过滤(允许通过或者不允许通过)。
2、NAT:实现对需要转发数据报的地址进行地址转换
3、mangle:实现对数据报的修改或给数据报附上一些外带数据。(修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。)
对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT
对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
三、iptables基本原理
通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用Netfilter/iptables系统提供的特殊命令iptables,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加/除去/编辑规则的命令的一般语法如下:
iptables [-t table] command [match] [target]
不难看出,一条iptables规则包含如下4个基本元素:
1)、[-t table]:表
2)、command:命令
3)、[match]:匹配
4)、[target]:目标
四、command
1.链管理命令-P :设置默认策略的 iptables -P INPUT (DROP|ACCEPT)
-F: 清除所有的已订定的规则; iptables -F
-X: 用于删除用户自定义的空链 iptables -X
-Z:清空链,及链中默认规则的计数器的 iptables -Z
2.规则管理命令
-A:追加,在当前链的最后新增一个规则
-I num : 插入,把当前规则插入为第几条。
-R num:Replays替换/修改第几条规则
-D num:删除,明确指定删除第几条规则
3.查看管理命令 “-L”
附加子命令
-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
-v:显示详细信息
-vv
-vvv :越多越详细
-x:在计数器上显示精确值,不做单位换算
--line-numbers : 显示规则的行号
-t nat:显示所有的关卡的信息
五:match(匹配规则)
1、IP地址匹配必须为地址(IP)或者网段(IP/MASK)地址可以通过加!去反
-s:指定作为源地址匹配
-d:表示匹配目标地址
2、协议匹配
-p:用于匹配协议的(TCP/UDP/ICMP…)
3、流入流出匹配
-i eth0:从这块网卡流入的数据--流入一般用在INPUT和PREROUTING上
-o eth0:从这块网卡流出的数据--流出一般在OUTPUT和POSTROUTING上
4、端口配置 ( 1024-65535用户使用范围,1024以下为系统使用)
默认不能设置多个非连续端口,当开启多端口扩展支持多个非连续端口
-m multiport:表示启用多端口扩展
TCP/UDP --dport 21,25,33
TCP/UDP --dport XX-XX:目标端口,单个端口,或者连续端口
TCP/UDP --dport 22 --dport 21-23 (此时表示21,22,23)
TCP/UDP --sport:源端口
5、TCP标志位
--tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)
6、ICMP数据报文
-p icmp:icmp数据报文的扩展
六:target(目标) -j ACCEPT/REJECT/DROP…
ACCEPT:接受
REJECT:明示拒绝
DROP:悄悄丢弃(一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表)
custom_chain:转向一个自定义的链
DNAT:目的地址转换
SNAT:源地址转换
MASQUERADE:源地址伪装
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回(在自定义链执行完毕后使用返回,来返回原规则链)
LOG 表示将包的有关信息记录入日志
TOS 表示改写数据包的TOS值
六:基本操作
service iptables save 保存iptables规则
/etc/init.d/iptables save 保存iptables规则
service iptables stop 关闭iptables
service iptables start 开启iptables
service iptables restart 重启iptables