Linux防火墙基础
Linux防火墙概述
linux系统给的防火墙功能是由内核实现的
-
2.0版内核中,包过滤机制是ipfw,管理工具是ipfwadm
-
2.2版内核中,包过滤机制是ipchain,管理工具是ipchains
-
2.4版及以后的内核中,包过滤机制是netfilter, 管理工具是iptables
netfilter
-
位于Linux内核中的包过滤防火墙功能体系
-
称为Linux防火墙的“内核态”
iptables(不能抓arp包,tcpdump可以抓)
-
位于/sbin/iptables,是用来管理防火墙的命令工具
-
为防火墙体系提供过滤规则/策略,决定如何过滤或处理到达防火墙主机的数据包
-
称为Linux防火墙的“用户态”
一习 惯上,上述2种称呼都可以代表Linux防火墙
iptables + netfilter 软件防火墙: 硬件防火墙:服务器+专i 定制的程序+芯片+超好的硬件配置
iptables的规则表、链结构(4表5链)
规则链
-
规则的作用在于对数据包进行过滤或处理,根据处理时机的不同,各种规则被组织在不同的“链”中
-
规则链是防火墙规则/策略的集合
默认的5种规则链
-
INPUT:处理入站数据包
-
OUTPUT:处理出站数据包
-
FORWARD:处理转发数据包
-
POSTROUTING链:在进行路由选择后处理数据包
-
PREROUTING链:在进行路由选择前处理数据包
[root@host ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@host ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@host ~]# cat /proc/sys/net/ipv4/ip_forward
1 #打开路由功能
[root@host ~]#iptables -A INPUT -p icmp --icmp-type 8 -j DROP #指定链为input 协议为icmp 类型为8(request) 设置为drop丢弃
规则表
-
具有某一类相似用途的防火墙规则,按照不同处理时机区分到不同的规则链以后,被归置到不同的“表”中
-
规则表是规则链的集合
默认的4个规则表
-
raw表:确定是否对该数据包进行状态跟踪
-
mangle表:为数据包设置标记
-
nat表:修改数据包中的源、目标IP地址或端口
-
filter表:确定是否放行该数据包(过滤)
可以使用>>>iptables -t filter -L
数据包过滤匹配流程
管理和设置iptables规则
iptables的基本语法格式
-
iptables [-t 表名]管理选项[链名] [条件匹配] [-j 目标动作或跳转]
几个注意事项
-
不指定表名时,默认表示filter表
-
不指定链名时,默认表示该表内所有链
-
除非设置规则链的缺省策略,否则需要指定匹配条件
管理iptables规则
规则表间的优先顺序
-
依次为: raw、mangle、 nat、 filter(默认查看此表)
规则链间的匹配顺序
-
入站数据: PREROUTING、INPUT
-
出站数据: OUTPUT、POSTROUTING
-
转发数据: PREROUTING、FORWARD、POSTROUTING
规则链内的匹配顺序
-
按顺序依次进行检查,找到相匹配的规则即停止(LOG策略会有例外)
-
若在该链内找不到相匹配的规则,则按该链的默认策略处理
设置规则内容:
-
-A:在链尾追加一-条新的规则 append
-
-I: 在指定位置(或链首)插入一条新的规则 insert
-
-R:修改、替换指定位置或内容的规则 replace
-
-P: 设置指定链的默认策略 policy
列表查看规则
-
-L:列表查看各条规则信息 list
-
--line-numbers:查看规则信息时显示规则的行号
-
n:以数字形式显示IP地址、端口等信息 number
-
-V: 显示数据包个数、字节数等详细信息 verbose
清除规则
-
-D:删除指定位置或内容的规则delete
-
-F :清空规则链内的所有规则 flush 刷新
自定义规则链
-
-N:创建一条新的规则链
-
-X:删除自定义的规则链
#创建lian链
#iptables -A lian -p icmp -j ACCEPT
#iptables -A INPUT -p icmp -j lian
#把关于icmp协议的就调用INPUT链的权限给lian
#删除自定义链
#iptables -X lian -tfilter
#删链之前要先把里面的规则删掉
其他
-
-h:查看iptables命令的使用帮助
条件匹配
通用条件匹配
-
可直接使用,不依赖于其他的条件或扩展模块
-
包括网络协议、IP地址、网络接口等匹配方式
协议匹配
-
使用“*-p协议名”的形式
-
协议名可使用在“/etc/protocols"文 件中定义的名称
-
常用的协议包括tcp、udp、icmp等
地址匹配
-
使用“'-s源地址”、“d目标地址”的形式
-
地址可以是单个IP地址、网络地址( 带掩码长度)
接口匹配
-
使用'-i网络接口名’、“-o网络接口名”的形式,分别对应接收、发送数据包的网络接口
reject:给不能到达的回复,还是会拒绝,但是会给回复
隐含条件匹配
-
一般需要以特定的协议匹配作为前提
-
包括端口、TCP标记、ICMP类型等匹配方式
端口匹配
-
使用“--sport 源端口”、“--dport目标端口”的形式
-
采用“端口1:端口2”的形式可以指定一个范围的端口
TCP标记匹配
-
使用“--tcp-flags检查范围被设置的标记”的形式
-
如“--tcp-flags SYN,RST,ACK SYN"表示检查SYN、RST、ACK这3个标记,只有SYN为1时满足条件
ICMP类型匹配\
-
使用“-icmp-type ICMP类型”的形式
-
ICMP类型可以使用类型字符串或者对应的数值,例如Echo-Request、Echo-Reply
显式条件匹配
-
需要使用“-m扩展模块”的形式明确指定匹配方式
-
包括多端口、MAC地址、IP地址范围、数据包状态等匹配方式
MAC地址匹配
-
使用“_-m,mac:”结合“--maac-source MAC地址”的形式
多端口匹配
-
使用‘'-m multiport"结合“--sports源端口列表”或者“--dports目标端口列表”的形式
-
多个端口之间使用逗号“”分隔,连续的端口也可以使用冒号“:”分隔
IP地址范围匹配
-
使用‘-m iprange结合‘--src-range源IP范围”或者‘-dst-range目标IP范围”的形式
-
以“-”符号连接起始IP地址、结束IP地址
数据包控制
常见的数据包处理方式
-
ACCEPT:放行数据包
-
DROP:丢弃数据包
-
REJECT:拒绝数据包
-
LOG:记录日志信息,并传递给下一条规则处理
-
用户自定义链名:传递给自定义链内的规则进行处理
-
SNAT:修改数据包的源地址信息
-
DNAT:修改数据包的目标地址信息
使用防火墙脚本
导出、导入防火墙规则
导出规则
-
iptables-save
-
结合重定向 输出“>”符号保存规则信息
导入规则
-
iptables-restore
-
结合重定向输入“<"符号恢复规则信息
编写防火墙脚本
使用防火墙脚本的优点
-
预先加载拓展模块、设置环境参数
-
引入可控变量,增强脚本的可移植性、可重用性
-
通过shelll语句灵活控制防火墙策略
防火墙脚本的一般结构
-
1.设置网段、网卡、IP地址等变量
-
2.加载包过滤相关的内核模块(查看内核模块lsmod)
-
FTP相关:ip_nat_ftp、ip_conntrack_ftp
-
Mail相关:ip_nat_irc、ip_conntrack_irc
-
-
3.确认开启路由转发功能
-
方法1:/sbin/sysctl -w net.ipv4.ip_forward = 1
-
方法2:echo 1 > /proc/sys/net/ipv4/ip_forward
-
方法3:修改/etc/systl.conf,设置net.ipv4.ip_forward = 1
-
-
4.用于添加的具体防火墙规则内容
-
清空所有规则,建立新的规则
-