一、分类
我们可以简单的分为三类:1.包过滤防火墙 2.应用层网关代理 3.状态防火墙
1.1 包过滤防火墙
原理:根据包头部的元素进行判断(源目的端口、源目的地址、协议)
优点:简单、快速、易于配置
缺点:难以抵挡分片攻击、不支持复杂的协议、不能防止应用层的恶意攻击
1.2 应用层网关代理
原理:服务器与客户端间有一层代理,客户和服务器之间从不会有真正的连接。应用代理网关防火墙彻底隔断内网与外网的直接通信,内网用户对外网的访问变成防火墙对外网的访问,服务器返回的数据首先到达防火墙,经过安全策略检测,然后再由防火墙转发给内网用户。也即所有通信都必须经应用层代理软件转发。
优点:对数据的控制直接上升到应用层,对数据包检测非常充分
缺点:为了实现这一点,对于每一个服务应用,写要编写特定的安全代理程序,也即相应的客户端与服务器端程序
1.2 状态防火墙
原理:态检测防火墙在接收到连接建立请求是,就可以建立一张表,在表中存储相关的各个连接的信息,建立连接状态规则,基于这个表对进入和出去的数据包进行匹配。
二、iptables
2.1 基本指令:
-A, --append chain rule-specification:追加新规则于指定链的尾部;
如:sudo -A INPUT -p icmp -j DROP #将接受的icmp包全部丢掉
sudo -A INPUT -p icmp --icmp-type 0 -j DROP #将type为0的icmp包丢掉
sudo -A INPUT -p tcp --sport 23 -j ACCEPT
-I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部;
-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;
-D, --delete chain rulenum:根据规则编号删除规则;
如: iptables -D INPUT 1
-D, --delete chain rule-specification:根据规则本身删除规则;
基本链管理命令:
-F, --flush [chain]:清空指定的规则链上的规则;
-P, --policy chain target 制定链表的策略(ACCEPT|DROP|REJECT)
如:sudo iptables -P INPUT DROP #将INPUT链策略改为默认丢弃
-L, --list [chain]:列出规则;
有了这几个命令,我们可以做一些事情。
高级用法:
#限制每分钟只能收到5个icmp包
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 5/min -j ACCEPT
#根据字符串过滤,如防止baidu包
sudo iptables -I OUTPUT -m string --algo bm --string "baidu" -j REJECT
#根据状态
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
2.2 基本结构
可以看到iptables有四张表,每个表有几个链,每个链中有详细的规则,接下来详细介绍每个表。
filter主要和主机自身有关,主要负责防火墙功能 过滤本机流入流出的数据包是默认使用的表;
NAT表负责网络地址转换,即来源于目的IP地址和端口的转换,一般用于共享上网或特殊端口的转换服务
mangle表负责拆解报文,修改并重新封装。
raw表可以关闭iptables中开启的连接追踪。
代理与NAT不同,代理后的主机访问的时代理的特定端口,而NAT访问的就是外网,只不过在出路由时源IP被改成了公网IP