该怎么描述防火墙的实现呢?既然说不明白那就不说了,自己领悟吧!
一、防火墙是什么?
通过一些规则在网络数据报文必经的几个钩子上做端口的限制,实现数据过滤的功能。
二、数据报文传输的路径是怎样的?
1、 客户端发出数据报文---->到达服务器的网络接口-----(判断目标是服务器自己)将报文送入内核处理---->将处理好的数据报文转发出去---->通过网络接口发还给客户端
2、客户端发出数据报文---->到达服务器的网络接口-----(判断目标不是服务器)将数据转发出去---->通过网络接口送去目标地址
三、哪些地方是数据流必经的点?
1.报文进入网卡,但是还没有经过路由,这个点叫做prerouting
2.报文经过路由后送入内核之前,这个点叫做input
3.路由功能节点,这个点叫forward
4.报文由内核处理完毕,发送给路由之前,这个点叫output
5.报文经过路由后,就要经过网卡发送出去,这个点叫postrouting
这些点在专业术语中称为hooks funcation即钩子函数,因为所有的数据流必经这五个点,所以我们的防火墙规则写在这5个点上就可以了。
四、有哪些规则可以防火?
这就要谈一下防火墙的历史了,最开始linux是没有防火墙设计的,基于安全的考虑OpenBSD最先将防火墙的概念在其unix内核中实现。后来linux的维护者看到有这么好的东西,就把它移植到linux的内核中去了,最开始这个规则叫做firewall,但是其太简陋了,只能起到数据报文过滤filter的功能。随着时间的发展其功能得到了非常多的扩展,比如实现了nat、mangle、raw等功能,所以后来给这些功能统一一起来起了个好听的名字——netfilter,怎么样?好听吧......
netfilter叫做规则,它有四种功能:
1.filter 过滤
2.nat 网络地址转换
3.mangle 修改数据报文首部的可修改信息
4.raw 关闭net表上启动的连接追踪功能
五、什么是链?chain?
在一个钩子上添加了很多规则功能,这些规则功能连起来就叫chain。但是有些功能只有在特定的钩子上才起作用,下面是五个链的对应表:
prerouting | raw | mangle | nat | |
input | mangle | filter | ||
output | raw | mangle | nat | filter |
forward | mangle | filter | ||
postrouting | mangle | nat |
链上面的规则检查是要按顺序检查的:
1.同类规则匹配范围小的方上面
2.不同类规则,匹配次数频繁的方上面
3.应该设定默认的规则
六、什么是表?table
每个功能都对应几个链,把这些链排起来就是表,下面是四个功能表:
filter | input | forward | output | ||
nat | prerouting | output | postrouting | ||
mangle | prerouting | input | output | forward | postrouting |
raw | prerouting | output |
七、上面所说的规则功能怎么添加到linux中?
iptables是一个接口,也是一个工具,可以让程序员使用命令行模式输入设定的规则到指定的hooks funcation上,实现防火墙的功能。
格式:
# iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET
TABLE: filter, nat, mangle, raw
SUBCOMMAND:
-P 设置链的默认处理 #iptables -P INPUT DROP
-F 清空指定链上的所有规则 #iptables -F INPUT
-Z 将链上的流经的数据报文数据清零
-N 新建一个链,自定义的链
-X 删除用户自定义的空链
-E 重命名自定义链
-A 在指定链的最后添加一条规则
-I 插入一条规则,默认插入为第一条
-D 删除指定的规则
-R 替换指定的规则
-L 列出指定链上的所有规则
-L -n 以数字方式列出
-L -n -v 更相信的信息
-L -n --line-numbers 显示规则编号
-L -n -v -x 显示计数器的精确值
CHAIN: PREROUTING INPUT FORWARD OUTPUT POSTROUTING
CRETERIA:
通用:-p 检查协议tcp,udp,icmp
-s 源IP
-d 目标IP
-i 进入网卡接口
-o 出去网卡接口
隐式:(如果-p指明了协议-m 和协议可以省略)
-m tcp --dport|sport|syn|tcp-flags LIST1 LIST2
-m udp --dport|sport
-m icmp --icmp-type 8|0(8为ping请求,0为ping响应)
显示:
-m multiport 指定多个端口
--sports
--dports
-m iprange 指定IP范围
--src-range 源 (注意:前面可使用 ! 表示否定含义)
--dst-range 目标
-m string 指定过滤的字符串
--algo {kmp|bm} 指定解析算法
--string 字符串
--hex-string 十六进制编码后的字符串
-m time 基于时间做限制
--datestart
--datestop
--timestart
--timestop
--weekdays
-m connlimit 基于并发连接数做限制
--connlimit-above
-m limit 基于链接速率做限制
--limit n[/second|/minit|/hour|/day] 限制链接速度多久一次
--limit-burst n 突发链接速率最快每秒n个
TARGET:
内置目标:ACCEPT(接受),DROP(不响应),REJECT(拒绝)
自定义的链chain
八、未完待续
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。