一:主要分为网络防火墙和应用层防火墙
1:网络防火墙
一个位于计算机和它所连接的网络之间的防火墙。该计算机流入流出的所有网络通信均要经过此防火墙。
2:应用层防火墙
是在 TCP/IP 堆栈的“应用层”上运作,您使用浏览器时所产生的数据流或是使用 FTP 时的数据流都是属于这一层。应用层防火墙可以拦截进出某应用程序的所有封包,并且封锁其他的封包(通常是直接将封包丢弃)。
二、iptables的表链结构
iptables是 防火墙规则编写工具 (只是一种规则)netfilter: framework (规则存放地,是一个框架。)
iptables工作于用户空间,是防火墙的规则编写工具,使用iptables编写规则并且发送到netfilter;防火墙的规则刚放到netfilter中,它是一个能够让规则生效的网络架构,工作于内核空间。
2iptables的组成结构
由四表五列组成;
优先级:raw表 > mangle表 > nat表 > filter表
①、raw表
RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。
RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。
②、mangle表
mangle表一般是对数据包进行修改用的
比如在网络的转发过程中,数据包要从X到Z,中间夹了一个Y,当数据从X到Y的时候,Y要运行拆包,看是不是自己的,如果是就收下了,如果不就是重新封装,把源IP改为自己的,而不再是X的了,再进行转发。
③、nat表
用于nat功能(端口映射,地址映射等)
主要用来处理一些将要到达本机路由和将要离开本机路由的数据包,修改数据包中的源、目标IP地址或端口;其对应的模块为iptable_nat。
④、filter表
一看名字就知道是用来做过滤用的。filter表是iptables的默认表,如果在设置规则时,不指定表,则默认就是在filter表上操作
2)五链
这五条链其实就是针对防火墙策略的规则
①、PREROUTING
路由前,数据包在经过防火墙前应做如何处理
②、INPUT
在数据包进行进入本机前就做何处理,目标是本机,不是网络内的主机
③、OUTPUT
在数据包离开本机时做何处理,源是本机,目标是其它主机
④、FORWARD
对于转发数据包做如何处理,因为本机可能是一台代理服务器,网络内的其它主机在与互联网通信时都需要经过这台服务器的转发
⑤、POSTROUTING
在数据包离开防火墙时做如何处理
INPUT、OUTPUT链主要用在“主机型防火墙”中,即主要针对服务器本机进行保护的防火墙;而FORWARD、PREROUTING、POSTROUTING链多用在“网络型防火墙”中,
三、iptables数据包的过滤流程
四、iptables使用规则
iptables规则=检查条件+处理机制
1)检查条件
(1)IP:源IP,目标IP
(2)Protocal:TCP、UDP、ICMP
TCP:源端口、目标端口、Flags
UDP:源端口、目标端口
ICMP:ICMP-TYPE 报文类型
TCP Flags:基于标记的TCP包匹配经常被用于过滤试图打开新连接的TCP数据包,共有六个标志位,UDP没有
①、URG
如为1,则表示本数据包中含有紧急数据
②、ACK
确认标志们
③、PSH
PUSH操作,所谓PUSH操作就是批数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队
④、RST
表示连接复位请求,用来复位那些产生错误的连接;当PST=1时,表示出现严重错误,必须释放连接,然后再重新建立
⑤、SYN
表示同步序号,用来建立连接。
SYN=1,ACK=0 表示连接请求
SYN=1,ACK=1 表示连接请求被响应
⑥、FIN
表示数据已经发送完毕,希望释放连接
2)处理机制、动作 -j target
ACCEPT:将包放行,进行完此处理动作后,将不再匹配其它规则,直接跳往下一个规则链
DENY:拒绝,委婉式的拒绝
DROP:丢弃数据包,进行完此处理动作后,将不再匹配其它规则,直接中断过滤程序
REJECT:阻拦该数据包,并通知对方(ICMP消息)
SNAT:改定数据包源IP
DNAT:改定数据包目标IP
RETURN:结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自定义规则链看成是一个子程序,那么这个动作,就相当于提前结束子程序并返回到主程序中。
REDIRECT:将数据包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续匹配其它规则
LOG:记录日志
五、iptables语法
iptables [-t table] -N chain
创建一条自定义的规则链
iptables [-t table] -X [chain]
删除一条自定义的规则链
iptables [-t table] -E old-chain-name new-chain-name
修改自义链名
iptables [-t table] -P chain target
为链指定默认策略,指定默认规则
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
-F: 清空链中的规则
规则有编号,在链中自上而下,从1开始;
-L: list,列出表中的所有规则;
-n: 数字格式显示IP和Port
-v: 以详细格式显示
-Z:zero,清零,把规则的计数器清零
6)iptables [-t table] {-A|-D} chain rule-specification
-A:append,附加一条规则,添加到现在规则链的最下面(-I:默认添加到最前面)
rule-specification
匹配条件 -j 处理机制
(1)通用匹配:
-s:source,匹配源地址,可以是IP,也可以是网络地址;可以使用!操作符取反
-d:匹配目标地址,可以是IP,也可以是网络地址;可以使用!操作符取反
-p:匹配协议,通常只使用{TCP|UDP|ICMP}三者之一
-i:数据报文流入接口;通常只用于INPUT、FORWARD和PREROUTING
-o:数据报文流出接口;通常只用于OUTPUT、FORWARD和POSTROUTING
EG:
iptables -A INPUT -i eth0 -d 192.168.211.128 -p tcp -j ACCEPT
通过eth0端口进来,目标地址是本机,遵守tcp协议的可进入。
[root@xiaoxiao ~]# iptables -v -L -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
78683 88M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
132 7968 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
3 156 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
2157 476K REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 192.168.211.128
(2)扩展匹配:
①隐含扩展:使用-p{tcp|udp|icmp}指定某特定服务后,自动能够对协议进行扩展
-p tcp
--dport m[-n]:匹配的目标端口,可以是连续的多个端口
--sport m[-n]:匹配的源端口,可以是连续的多个端口
--tcpflags (6个标志们:URG、PSH、RST、SYN、ACK、FIN)
--tcp-flags rst,syn,ack,fin syn = --syn
ALL,NONE
-p udp udp没有标志位,所以只有源端口和目标端口可选
--dport
--sport
-p icmp
--icmp-type
8:ping 请求
0:ping响应
②显示扩展:必须要明确指定的扩展模块
-m 扩展模块名称 --专用选项1 --专用选项2
multiport:多端口匹配,一次指定多个(15个以内)离散端口
--source-ports, --sports
--destination-ports, --dports
--ports
iprange:ip地址范围
[!] --src-range from[-to]
[!] --dst-range from[-to]
time:指定时间范围
datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
datestop
timestart hh:mm[:ss]
timestop hh:mm[:ss]
[!]--weekdays day[,day...]
string:字符串匹配
--algo{bm|kmp}:字符匹配查找时使用算法
--string "STRING":要查找的字符串
--hex-string "HEX-STRING":要查找的字符,先编码成16进制格式
connlimit:第IP对指定服务的最大并发连接数
[!]--connlimit-above [n]
limit:报文速率控制
--limit #[/second|/minute|/hour|/day]
--limit-burst #
state:状态匹配
ip_conntrack,nf_conntrack
--state
NEW
ESTABLISHED
RELATED
INVALID
-D 删除规则
1
|
iptables [-t table] -D chain rulenum
|
-I 插入规则
1
|
iptables [-t table] -I chain [rulenum] rule-specification
|
-R 替换指定规则
1
|
iptables [-t table] -Rchain rulenum rule-specification
|
-S 只显示指定链上的规则添加命令
1
|
iptables [-t table] -S [chain [rulenum]]
|