防火墙原理
防火墙:Linux访问控制,有硬件防火墙和软件防火墙。防火墙通过审查经过的每一个数据包,判断它是否有相匹配的过滤规则,根据规则的先后顺序进行一一比较,直到满足其中的一条规则为止,然后依据控制机制做出相应的动作。如果都不满足,则将数据包丢弃,从而保护网络的安全。
网络层防火墙(包过滤防火墙) | 3、4层 | 安全性差,高效 |
代理层防火墙(iptables属于此) | 7层 | 安全性好,低效 |
例如Iptables 这样防火墙工具工作在用户空间中,定义规则的工具。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。
netfilter的5个位置
1.内核空间中:从一个网络接口进来,到另一个网络接口去的
2.数据包从内核流入用户空间的
3.数据包从用户空间流出的
4.进入/离开本机的外网接口
5.进入/离开本机的内网接口
Iptables原理
netfilter/iptables(简称为iptables)可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件 netfilter 和 iptables 组成。① netfilter :组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。②iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
Iptables的规则架构由 规则、链路、表构成。iptables一共有4个表;5种链路,每个表可能包含多个链路;每个链路可能包含多个规则。iptables规则是立即生效的, 规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。
规则(rules)
其实就是网络管理员预定义的条件,当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。
规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等
链(chains)
数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。
检查规则
1.依此检查链路中的规则,符合则直接执行,否则执行下一条规则。
2.如果链路中不符合所有规则,按照默认值处理包
五个规则链
1.PREROUTING (路由前)
2.INPUT (数据包流入口)
3.FORWARD (转发管卡)
4.OUTPUT(数据包出口)
5.POSTROUTING(路由后)
数据首先进入Prerouting链来判断是否能够进入本机; 如果能够进入本机再进入到INPUT链路交给用户层具体应用处理;数据经过OUTPUT链路返回到内核;然后经过POSTROUTING链路输出。 如果数据要转发出去就直接到FORWARD链路然后出去。
表(tables)
表是按照对数据包的操作区分的提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。
filter:一般的过滤功能
nat:用于nat功能(端口映射,地址映射等)
mangle:用于对特定数据包的修改
raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能
规则配置和命令行
规则配置
格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
-t table :raw>mangle>nat>filter
COMMAND:定义如何对规则进行管理
chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
CRETIRIA:指定匹配标准
-j ACTION :指定如何进行处理
COMMAND具体:
【规则管理】
-A或—append <链名> 在规则列表的最后增加1条规则
-I或–insert <链名> 在指定的位置插入1条规则
-I num : 插入,把当前规则插入为第几条。
-I 3 :插入为第三条
-D或–delete <链名> 从规则列表中删除1条规则
-D num:删除,明确指定删除第几条规则
-R或–replace <链名> 替换规则列表中的某条规则
-R num:Replays替换/修改第几条规则
格式:iptables -R 3 …………
【链管理】
-P或–policy <链名> 定义默认策略
默认策略一般只有两种
iptables -P INPUT (DROP|ACCEPT) 默认是关的/默认是开的
-L或–list <链名> 查看iptables规则列表
-F或–flush <链名> 删除表中所有规则
(注意每个链的管理权限)
iptables -t nat -F PREROUTING
iptables -t nat -F 清空nat表的所有链
-Z或–zero <链名> 将表中数据包计数器和流量计数器归零
【自定义链接】
-N:NEW 支持用户新建一个链
iptables -N inbound_tcp_web 表示附在tcp表上用于检查web的。
-X: 用于删除用户自定义的空
使用方法跟-N相同,但是在删除之前必须要将里面的链给清空昂了
-E:用来Rename chain主要是用来给用户自定义的链重命名
-E oldname newname
【查看管理】
-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
-v:显示详细信息
-vv
-vvv :越多越详细
-x:在计数器上显示精确值,不做单位换算
--line-numbers : 显示规则的行号
-t nat:显示所有的关卡的信息
CRETIRIA:指定匹配标准:
-s或–source <源地址或子网> 指定数据包匹配的源地址IP
IP | IP/MASK | 0.0.0.0/0.0.0.0
而且地址可以取反,加一个“!”表示除了哪个IP之外
-d或–destination <目标地址或子网> 指定数据包匹配的目标地址
-p或—proto协议类型 < 协议类型> 指定数据包匹配的协议,如TCP、UDP和ICMP等
-i或–in-interface <网络接口名> 指定数据包从哪个网络接口进入,如ppp0、eth0和eth1等
-o或–out-interface <网络接口名> 指定数据包从哪块网络接口输出,如ppp0、eth0和eth1等
-sport <源端口号> 指定数据包匹配的源端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口
-dport目标端口号 指定数据包匹配的目标端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口
-j ACTION:具体
ACCEPT 接受数据包
DROP 丢弃数据包
REJECT:明示拒绝
REDIRECT 与DROP基本一样,区别在于它除了阻塞包之外, 还向发送者返回错误信息。
SNAT 源地址转换,即改变数据包的源地址
DNAT 目标地址转换,即改变数据包的目的地址
MASQUERADE IP伪装,即是常说的NAT技术,MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP是由ISP分配动态的;如果主机的IP地址是静态固定的,就要使用SNAT
LOG 日志功能,将符合规则的数据包的相关信息记录在日志中,以便管理员的分析和排错
MARK:打防火墙标记的
举例:
比如:不允许172.16.0.0/24的进行访问。
iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP
当然你如果想拒绝的更彻底:
iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT