包过滤的工作层次:主要是网络层,针对 IP 数据包 体现在对包内的IP 地址,端口等信息的处理上。
netfilter:位于linux内核中的包过滤功能体系,称为linux防火墙的“内核态”
iptables:位于/sbin/iptables,用来管理防火墙规则的工具,称为linux防火墙的“用户态”
iptables管理着四表五链:
规矩链的作用:容纳各种防火墙规矩,对数据包进行过滤处理。
规矩表的作用:容纳各种规矩链。
iptables的四个规矩表——————raw表(确定是否对该数据包进行状态跟踪),mangle表(为数据包设置标记),nat表(修改数据包中的源,目标IP地址或端口),filter表(确定是否放行该数据包,常用过滤)
iptables的五种规矩链——————input(处理入站数据包),output(处理出战数据包),forward(处理转发数据包),postrouting链(在进行理由选择后处理数据包),prerouing链(在进行路由选择前处理数据包)
iptables数据包过滤的匹配流程:
规矩表之间的顺序————raw表,mangle表,nat表,filter表。
规矩链之间的顺序————入站(PREROUTING 到 INPUT) ,出站(OUTPUT 到 POSTROUTING),转发(PREROUTING 到 FORWARD 到 POSTROUTING)
规矩链内的匹配顺序———匹配即停止!
数据包控制类型:
ACCEPT------允许数据包通过
DROP-----直接丢弃数据包,不给出回应
REJECT-----拒绝数据包通过,必要时发送响应信息
log-----在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
编写防火墙的规则:
语法构成: iptables [ -t 表名] [ -I 链名] [ -p 条件 ] [ -j 控制类型] (默认选择filter表)
如————iptables -t filter -I INPUT -p icmp -j REJECT
添加新的规则
ptables -t filter -I INPUT -p tcp -j ACCEPT
(-A -I 前者用来追加,后者用来插入规则)
查看规则列表
iptables -nL INPUT --line-numbers
(--line-numbers 选项可以显示各条规矩在链内顺序号)
删除,清空规则
iptables -D INPUT 3 或 iptables -F INPUT 或 iptables -t nat -F
(-D 若要删除filter表INPUT链的第三条,清空指定链或表的规则)
设置默认策略-
iptables -t filter -P FORWARD DROP 和 iptables -P OUTPUT ACCEPT
(将FORWARD链的默认策略设置为丢弃,OUTPUT链的默认策略设置为允许,-P 重新进行设置。默认策略不参与链内规则的顺序编排,因此前后无所谓)
规则的匹配条件
1.通用匹配
协议匹配
iptables -I INPUT -p icmp -j DROP 和 iptables -A FORWARD ! -p icmp -j ACCEPT (// ! 感叹号取反意思)
(丢弃通过icmp协议访问防火墙本机的数据包,允许转发经过防火墙除icmp协议之外的数据包)
地址匹配
iptables -I FORWARD -s 192.168.1.1 -j REJECT
iptables -I FORWARD -s 192.168.1.0/24 ACCEPT
(-s源地址,-d目的地址)
iptables -I INPUT -s 10.0.0.0/24 -j DROP
iptables -I FORWARD -s 192.168.1.0/24 DROP
(小规模网络扫描或者***时,封锁ip地址有效方式)
网络接口匹配
iptables -I INPUT -i eth1 -s 192.168.1.0/24 -j DROP
(丢弃从外网接口eth1 访问防火墙本机且源地址为私有地址的数据包。-i 入站网卡,-o 出站网卡)
2.隐含匹配
端口匹配
iptables -I FORWARD -s 192.168.4.0/24 -p tcp --dport 20:21 -j ACCEPT
iptables -I FORWARD -s 192.168.4.0/24 -p tcp --dport 20:21 -j ACCEPT
(网络转换,转出,转入)
ICMP类型匹配:--icmp-type ICMP类型
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp -j DROP
(8.请求,0回显,3,不可达,要禁止从其他主机ping主机,但是允许本机ping其他主机)
3.显示匹配条件
多端口匹配:-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
(允许本机开放25,80,110,143端口,以便提供电子邮件服务)
IP范围匹配:-m iprange --src-range IP范围
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
(禁止转发源ip地址位于192.168.4.21与192.168.4.28之间的tcp数据包)
MAC地址匹配:-m mac --mac-source MAC地址
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
(根据mac地址封锁主机,禁止其他的访问本机的任何应用)
状态匹配:-m state --state 连接状态
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
(若只开放本机80端口,但对发给本机的tcp应答数据包给予以放行,其他入站数据包均丢弃)
SNAT与DNAT的配置
SNAT策略的典型应用环境
局域网主机共享单个公网IP地址接入Internet
SNAT策略的原理
源地址转换,Source Network Address Translation
修改数据包的源地址
前提条件
局域网各主机正确设置IP地址/子网掩码
局域网各主机正确设置默认网关地址
Linux网关支持IP路由转发
编写SNAT转换规则
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31
验证SNAT结果
在局域网主机 192.168.1.234 中能够访问外网的Web服务器 58.63.236.45
查看Web主机 58.63.236.45 的访问日志,记录的来访者应是网关主机的外网IP地址 218.29.30.31
共享动态ip地址上网
适用于外网IP地址非固定的情况
对于ADSL拨号连接,接口通常为 ppp0、ppp1
将SNAT规则改为MASQUERADE即可
iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -0 ppp0 -j MASQUERADE
DNAT
DNAT策略的典型应用环境
在Internet中发布位于企业局域网内的服务器
DNAT策略的原理
目标地址转换,Destination Network Address Translation
修改数据包的目标地址
前提条件
局域网的Web服务器能够访问Internet
网关的外网IP地址有正确的DNS解析记录
Linux网关支持IP路由转发
编写DNAT转换规则
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6
验证DNAT结果
在外网客户机 173.96.97.98 中能够访问位于企业内网的Web服务,访问地址为 http://218.29.30.31/
查看Web服务器 192.168.1.6 的访问日志,记录了外网客户机的IP地址 173.96.97.98