何谓防火墙
防火墙:一种位于内部网络与外部网络之间的网络安全系统。
防火墙的判断依据(一)
各层数据包包头内的信息
链路层
比如将网卡的MAC地址作为过滤规则
网络层
比如将IP包头的相关数据作为过滤规则
网络传输层
比如将TCP包头的内容信息作为过滤规则
防火墙的判断依据(二)
数据包所承载的数据内容
如一个HTTP协议应用的数据包,客户端想要访问的对象是www.baidu.com这台主机,可以在防火墙上使用www.baidu.com字符串作为过滤条件。
防火墙的判断依据(三)
连接状态
xt_state.ko 提供的数据包连接状态
NEW
ESTABLISHED
RELATED
INVALID
iptables 的state模块有更详细的介绍
防火墙的分类
数据包过滤防火墙
优点:检查范围是一个数据包,对内存及CPU性能要求低。
缺点:无法对连接中的数据进行更精确的过滤操作。
应用层防火墙
优点:安全性高,提供应用层的安全。
缺点:性能差,只支持有限的应用,不透明,不检查报头,不建立连接状态表,检查数据区,网络层保护较弱。
常见的防火墙结构
单机防火墙
单机防火墙保护本机,凡是进出本机的数据包,都会受到这个防火墙 的监控,达到维护本机安全的目的。
网关式防火墙
布置在网关位置的防火墙,保护的范围是整个网络。
透明防火墙
简单来说,透明防火墙就是一个网桥设备,并且在网桥设备上赋予了过滤器的功能。好处是,网桥是工作在L2的网络设备,不会有任何路由问题。
Netfilter/iptables
Netfilter可以说是Linux的第三代防火墙,是运行在Linux中的一个功能。Netfilter也是以模块的形式存在于Linux中。每当Linux多一个Netfilter的模块,就代表Linux防火墙的功能多了一项。
Netfilter所需要的规则是存放在内存中的,防火墙管理人员如何将规则放到内存中呢?所以防火墙管理人员需要一个规则编辑工具。
Iptables 是在IPV4网络环境中使用
Ip6tables是在IPV6网络环境中使用
Netfilter 是 Linux 核心中一个通用架构,它提供了一系列的 “表”(tables),每个表由若干 “链”(chains)组成,而每条链中可以有一条或数条 “规则”(rule)组成。
内核中的钩子函数
Netfilter框架之所以能实现许多强大的功能,是因为它在内核若干网络转发的关键函数,设计了许多巧妙的钩子函数,比如数据转发,由两个主要函数A 和B函数实现,流程为A->B ,现在改变为A->钩子函数->B.比如
return NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, skb, dev, NULL,ip_rcv_finish);
内核在网络堆栈的重要节点,引入了NF_HOOK宏,搭起了整个Netfilter的框架
iptables工具使用方法
filter/nat/mangle/raw
filter,用于一般的数据包过滤;iptables默认的表;链:INPUT、FORWARD、OUTPUT;
nat,仅用于NAT,也就是转换数据包的源地址或目标地址;链:PREROUTING、POSTROUTING、OUTPUT;
mangle,用来修改流经防火墙的数据包内容,不能做任何NAT,它只是改变数据包的 TTL,TOS或MARK,而不是其源目地址。链:PREROUTING、POSTROUTING、OUTPUT、INPUT和 FORWARD;
raw, 负责加快数据包穿越防火墙的速度,借此提高防火墙的性能;
Iptables命令参数(一)
Iptables命令参数(二)
Iptables命令参数(三)
一般原则及性能优化
撰写防火墙规则的原则:
先拒绝所有连接,再逐一开放对外提供的服务。
性能优化:
原则:尽量减少不必要的规则匹配
调整防火墙规则顺序
巧妙使用multiport和iprange
巧妙使用用户自定义链
例子(一)
1.删除现有规则
iptables -F
2.配置默认链策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
3.允许远程主机进行SSH连接
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
4.允许本地主机进行SSH连接
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
5.允许HTTP请求
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
例子(二)
黑白名单设置
白名单配置:比如只允许访问URL中带baidu的网页
iptables -t filter -I INPUT 1 -p udp -m string --algo bm ! --string "baidu" -j REJECT
黑名单配置:比如禁止访问URL中带sina的网页
iptables -t filter -I INPUT 1 -p udp -m string --algo bm --string "sina" -j REJECT