第二章
Netfilter/iptables
2.1
何为内核
内核指的是操作系统的内核,其实内核对于操作系统来说,是极为重要的部分,其主要用来执行系统资源的分配及调度。
2.2
何为Netfilter
Netfilter 组件称为内核空间(kernel space)是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集
2.4
Netfilter 工作的位置
Netfilter是运行在linux中一个功能,因为linux是一个极度“模块”化的内核,所以Linux绝大多数功能都以模块形式扩充出来,而这种模块化的设计最大的优点在于“弹性”,我们可以通过Linux的模块管理工具,随心所欲地将模块载入内存,或者将某一个目前不需要使用的模块从内存中移除,Netfilter也是以模块的形式存在于Linux中。
2.5
Netfilter的命令结构
表 |
链 |
Fillter |
INPUT |
FORWARD |
|
OUTPUT |
|
Nat |
PREROUTING |
POSTROUTING |
|
OUTPUT |
|
mangle |
PREROUTING |
INPUT |
|
FORWARD |
|
OUTPUT |
|
POSTROUTING |
|
raw |
PREROUTING |
OUTPUT |
Filter:filter是Netfilter中最重要的机制,其任务是执行数据包的过滤操作,也就是起到防火墙的作用。
Nat:nat(Network Address Translation) 也是防火墙上一个不可或缺的重要机制,比较通俗的方式来说,其功能就是IP分享器,只不过其所能执行的功能,比一般市场上的IP分享器功能强大行多。
Mangle :mangle 是一个很特殊的机制,我们可以通过mangle机制来修改经过防火墙内数据包的内容。
Raw :负责加快数据包穿过防火墙机制的速度,由些提高防火墙的性能。
2.6
Netfilter的filter机制
INPUT类型:是指“网络上其他主机发送给本机进程的数据包”,例如,网络上其他使用者访问本机的httpd服务时,就会生成这种类型的数据包。
OUTPUT类型:如果是“本机进程”所生成的数据包,即为OUTPUT类型的数据包。
例如,使用者在本机启动firefox去访问网络上的其他主机时,就会生成这种类型的数据包。
FORWARD类型:如果数据包对本机而言只是“路过”而已,那么这就是属于FORWARD类型的数据包。例如:本机扮演的是路由器角色,就会生成FORWARD类型的数据包。
图:
2.7
规则的匹配方式
采用优先匹配的方式,也就是按照“先后顺序”一条一条被加入到INPUT链中。
如果最一条规则始终都没有匹配成功,那么数据包能不能进入到“本机进程”中,取决于
每个链的最底端的默认策略(default policy).
2.8 netfilter与iptables的关系
Netfilter所需要的规则是存放在内存中,而防火墙管理人员需要一个规则编辑工具,通过这个工具来对内存中的规则执行添加,删除及修改等操作。
2.9
Iptables工具的使用方法
2.9.1 iptables命令参数
Iptables -t |
filter |
-L (list) 列出表的内容 |
-F (flush) 清除表的内容 |
||
-A (add) 加入新规则 |
||
-P (policy) 设置默认策略 |
||
-I (insert) 插入新规则 |
||
-R (replace) 取代规则 |
||
-D (delete) 删除规则 |
||
nat |
||
mangle |
||
Raw |
示例2.1:列出filter表的所有内容
语法: iptables -t filter -L
示例 2.2 列出filter表中的INPUT链的内容
语法 iptables -t filter -L INPUT
示例 2.3 清除filter表中的所有内容
语法 :iptables -t filter -F
示例 2.4 将规则添加到filter表的INPUT链中
语法:iptables -t -A INPUT -p icmp -j ACCEPT
示例 2.5 将FORWARD链的默认策略设置为DROP
语法:iptables -t filter -P FORWARD DROP
示例 2.6 在INPUT链中插入新的规则
语法 :iptables - t filter -I INPUT 2 -p tcp -j ACCEPT
示例 2.7 取代INPUT链内已经存在的规则
语法:iptables -t filter -R INPUT 2 -p tcp -j ACCEPT
示例 2.8 删除INPUT链中已经存在的规则
语法: iptables -t filter -D INPUT 2
此处省略nat,mangle,raw表的操作
2.9.2 iptables规则语法 (基础语法)
示例2.9 将192.168.0.200 进入本机的icmp协议包都丢弃
语法:iptables -A INPUT -p icmp -s 192.168.0.200 -j DROP
解析:
-A INPUT
保护的对象 |
因为本示例所使用的是INPUT链,故其保护的对象是本机 |
-p icmp
原文 |
-p, protocol |
目的 |
匹配某种特定协议的数据包,本示例是匹配icmp协议包 |
语法 |
-p icmp ,-p udp -p tcp -p all 等 |
-s 192.168.0.200
原文 |
-s source |
对应的参数 |
-d destination |
目的 |
匹配数据包中“来源”或“目的”端的IP |
语法 |
IP位置的标识方法可以是单一IP或者标准的CIDR网段 |
-j
原文 |
Jump |
目的 |
将符合以上两个条件的数据包以特定方式来处理 |
常见的处理方式
ACCEPT |
允许通过 |
DROP |
将数据包丢弃掉,此种处理方式将导致来源端误以为数据包丢失而不断重新发送数据包,这个动作将持续连接超时为止。 |
REJECT |
将数据包丢弃掉,并回送一个Destination Ureachable的icmp 数据包给发送端,发送端的应用程序在收到这个错误信息数据包后,会终止连接。 |
示例2.10
不允许192.168.0.200 主机通过本机的DNS服务来执行名称解析
语法; iptables -A INPUT -p udp -s 192.168.0.200 --dport 53 -j REJECT
其他语法跟上面一样,只有--dport不同
--dport
原文 |
--port ,Destination port |
对应的参数 |
--sport source port |
目的 |
匹配TCP ,UDP 包头中的“来源端端口”或“目的端端口”,如此即可判断连接要访问的服务,例如:-p udp -dport 53 代表客户端要访问udp的53端口,而udp的53端口就是DNS服务。 |
语法 |
只要规则语法中使用到“端口参数”,一定要加上-p tcp 或 -p udp 参数 |
示例 2.11
允许192.168.0.200主机连接到本机的TELNET服务
语法:iptables -A INPUT -p tcp -s 192.168.0.200 --dport 23 -j ACCEPT
示例 2.12 允许192.168.1.0/24网段的主机向本机192.168.0.1 提出任何服务请求
Iptables -A INPUT -p all -s 192.168.1.0/24 -d 192.168.0.1 -j ACCEPT
示例 2.13
只允许客户端主机从eth1这个接口访问本机的SSH服务
语法:
Iptables -A INPUT -p tcp -i eth --dport 22 -j ACCEPT
-i eth1
来源 |
-i, in-interface |
对应的参数 |
-o,,out-interface |
目的 |
匹配数据包的进出接口 |
语法 |
-i eth1, -o eth2 |
示例2.14不允许本机的应用程序从eth0接口发送数据包去访问edu.uuu.con.tw以外的网站
语法:
Iptables -A OUTPUT -o eth0 -p tcp -d ! Edu.uuu.com.tw --dport 80 -j REJECT
限制的对象 |
因为本示例所使用的是output链,故其目的是限制本机对外访问 |
-d !edu.uuu.com.tw
目的 |
如果本机的应用程序要从eth0接口发送tcp协议的数据包到edu,uuu.com.tw以外其他主机的端口80,是不允许的 |
示例:2.15
不允许本企业内部的主机访问企业以外的任何网站
Iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -j DROP
补充说明:
本示例使用网关式防火墙,因此所使用的链是FORWARD,eth0接口连接到Internet,而eth1 连接到企业内部..
总结与整理:
接口的匹配参数
参数名称 |
-i -o |
参数值 |
参数值会因为防火墙主机所使用的网络实体接口而异,以下为常见的网络接口名称: Eth0:以太网的接口名称 Ppp0:ppp接口的名称 Lo:local loopback 接口 Fddi0:光纤网络接口 |
使用示例 |
-i eth0 :匹配从eth0接口送入的数据包 -o eth0:匹配从eth0接口离开的数据包 |
意义 |
匹配数据包进出的接口 |
补充 |
可搭配”!”来代表反向,例如:”-i ! Eth0”,即代表匹配不是从eth0接口进入的数据包. |
上层协议(upper layer protocol)的匹配参数
参数名称 |
-P |
参数值 |
这些参数会因匹配的上层协议而异 Tcp ,udp ,icmp ,all |
参数名称 |
-P |
使用示例 |
-p tcp -p6:匹配tcp协议. -p icmp -p 1:匹配icmp协议 |
意义 |
匹配上层通信协议 |
补充 |
可能搭配”!”来代表反向,例如”-p ! icmp” 表示匹配的不是icmp的数据包 |
匹配来源/目的的IP地址
参数名称 |
-s -d |
参数值 |
来源及目的IP地址匹配,其可以识别的IP地址格式如下: 192.168.0.1 :匹配单一IP 172.10.0.0/16 匹配一个B类网段 192.168.0.0/28 匹配一个任何标准的CIDR的网段 www.playbody.com 也可以是FQDN ,但最后存放到链中的值还是IP |
使用示例 |
-s 192.168.0.1 匹配从192.168.0.1 主机发送来的数据包 |
意义 |
匹配数据包的来源或目的IP地址 |
补充 |
也可搭配”!” |
匹配来源/目的的端口
参数名称 |
--sport ,--dport |
参数值 |
匹配端口的用意在于匹配连接所需访问的服务 |
使用示例 |
--dport 80 匹配要访问WEB服务的数据包3 --sport 110 匹配由pop3服务应答的客户端的数据包 |
意义 |
匹配数据包的来源或目的端口 |
补充 |
可搭配”!” |
处理方式
参数名称 |
-j |
参数值 |
较常见的处理方式有三种 ACCEPT :允许 DROP:将数据包丢弃 REJECT:将数据包丢弃,并回送给发送端一个ICMP数据包 |
使用示例 |
-j ACCEPT :允许 -j DROP 将数据包丢弃 |
意义 |
采用特定方式来处理符合条件地数据包 |
本笔记为一书 《Linux网络安全技术与实现(第2版)》第二章前部分,目的为了方便自己以后查看,同时也分享出来,希望对大家有帮助。笔记不免有所遗漏,欢迎大家指正。