1、防火墙简介
防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性。它通过访问控制机制,确定哪些内部服务允许外部访问。它可以根据网络传输的类型决定IP包是否可以传进或传出内部网。
防火墙通过审查经过的每一个数据包,判断它是否有相匹配的过滤规则,根据规则的先后顺序进行一一比较,直到满足其中的一条规则为止,然后依据控制机制做出相应的动作。如果都不满足,则将数据包按照默认规则,从而保护网络的安全。
防火墙机制:
一种机制是拦阻传输流通行(白名单)ssh
一种机制是允许传输流通过(黑名单)http
一些防火墙偏重拦阻传输流的通行,而另一些防火墙则偏重允许传输流通过。
防火墙实现功能:
可以保护易受攻击的服务;
控制内外网之间网络系统的访问;
集中管理内网的安全性,降低管理成本;
提高网络的保密性和私有性;
记录网络的使用状态,为安全规划和网络维护提供依据。
防火墙à过滤器
netfilter/iptables 分别是内核态模块和用户态工具,netfilter位于Linux内核中的包过滤功能体系,iptables位于/sbin/iptables,用来管理防火墙规则的工具,管理员通过iptables给netfilter变更规则实现防火墙作用。
kernel 2.0.x ipfw ipfwadmin
kernel 2.2.x ipchains ipchains
kernel 2.4.x netfilter iptables
kernel 3.13.x firewall nftables>iptables
2、规则表和规则链
netfilter/iptables 预设的规则表
表作用:容纳各种规则链
划分依据:根据防火墙对数据的处理方式
规则表:
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
netfilter/iptables 预设的规则链:
规则的作用:对数据包进行过滤或处理(策略)
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
规则链:
PREROUTING链:在进行路由选择前处理数据包
INPUT:处理入站数据包
FORWARD:处理转发数据包
OUTPUT:处理出站数据包
POSTROUTING链:在进行路由选择后处理数据包
3、命令格式
语法构成
iptables {-t 表名} {选项 链名} 条件 {-j 策略}
几个注意事项:
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、策略使用大写字母,其余均为小写
4、数据包常见的控制类型(策略)
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配
SNAT:源地址转换,将符合条件的数据包的源地址进行修改
--to-source ip
MASQUERADE:将数据包的源地址修改为本机的动态公网IP
DNAT:目标地址转换,将符合条件的数据包的目标地址进行修改
--to-destination ip:port
REDIRECT:将符合条件的请求转发到本机的指定端口上
--to-ports port
规则删除、清空
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则(内存中的缓存规则)
-X: 清空自定义链上的规则
#iptables -D INPUT 3
#iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
设置默认策略
-P(大):为指定的链设置默认规则
# iptables -t filter -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
5、条件匹配
通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口等条件
隐含匹配
要求以特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等条件
显式匹配(扩展匹配|模块匹配)
要求以“-m 扩展模块”的形式明确指出类型
包括多端口、MAC地址、IP范围、数据包状态等条件
1、通用匹配
常见的通用匹配条件
协议匹配:-p(小) 协议名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站网卡、-o 出站网卡
# iptables -A FORWARD -s 192.168.1.11 -j REJECT
# iptables -I INPUT -s 10.20.30.0/24 -j DROP
# iptables -I INPUT -p icmp -j DROP
# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
2、隐含匹配
常见的通用匹配条件
协议匹配:-p(小) 协议名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站网卡、-o 出站网卡
# iptables -A FORWARD -s 192.168.1.11 -j REJECT
# iptables -I INPUT -s 10.20.30.0/24 -j DROP
# iptables -I INPUT -p icmp -j DROP
# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
3、常用的显示匹配条件
多端口匹配:-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
IP范围匹配:-m iprange --src-range IP范围
-m iprange --dst-range IP范围
MAC地址匹配:-m mac --mac-source MAC地址
状态匹配:-m state --state 连接状态
# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
# iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
# iptables -I INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
6、源地址转换:SNAT策略
SNAT策略的典型应用环境
局域网主机共享单个公网IP地址接入Internet
SNAT策略的原理
源地址转换,Source Network Address Translation
修改数据包的源地址
实现方法
编写SNAT转换规则
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31
公网IP地址不固定时使用:
MASQUERADE —— 地址伪装
适用于外网IP地址非固定的情况
对于ADSL拨号连接,接口通常为 ppp0、ppp1
将SNAT规则改为MASQUERADE即可
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
masquerade
7、DNAT策略(目标地址转换)
DNAT策略的原理:
目标地址转换,Destination Network Address Translation:修改数据包的目标地址
发布时修改目标端口
在DNAT规则中以“IP:Port”的形式指定目标地址
# iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to-destination 192.168.1.6:22
#把访问网卡是eth0 的,使用tcp协议,访问端口为2346,目标地址为218.29.30.31的IP 转换成目标地址为192.168.1.6:22的IP。
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 111.111.111.20:3128