防火墙
/etc下面的文件
hosts.allow文件 :记录允许访问的用户
host.deny文件: 记录不允许访问的用户
用户访问时首先会查询hosts.allow文件,如果查询成功则不再查询hosts.deny文件
如果访问的用户在hosts.allow和hosts.deny两个文件里面都没有匹配成功则仍然访问
iptables -L -n
查看当前防火墙信息
iptables -F
清空防火墙(此时只是清空内存中的防火墙信息,重启服务将会回复配置文件中的防火墙信息)
iptables -save > xx
将防火墙备份到xx文件中
恢复防火墙,将xx文件内容重新导入防火墙
iptables -restore < xx
service iptables save
将当前防火墙信息保存到配置文件
/etc/sysconfig/iptables
防火墙信息文件
linux :网络防火墙
netfilter 真正起到防火墙作用的
是一个内核框架
网络过滤器
iptables :生成防火墙规则附加在netfilterde、实现数据报文过滤、net、mangle、的一种工具
-网络防火墙的主要功能根据报文首部来实现的
防火墙:工作在主机或者网路的边缘,对进出的报文进行检查、监控、并且能够对于事先定义好的规则标准进行相应处理、一旦符合标准就采取由这个规则所定义的处理动作进行处理的一套组建
真正起到防火功能的时规则,防火墙是一个指定规则的框架
默认规则:开放、关闭
规则:匹配标准
IP:源IP、目标IP
TCP:SPORT、DPORT(端口号) SYN,FIN,RST,ACK (ESTABLISHED-已建立的链接)
UDP: SPORT、DPORT(端口号)
ICMP: icmp-type(报文类型)
数据报文过滤
内核当中实现的网络功能、要让防火墙发挥作用必须把规则放到内核之中、但是用户无法直接与内核交互、因此在内核中TCP/IP协议栈上开放位置,通过命令来实现交互
linux2.0: ipfw/firewall
linux2.2: ipchain/firwall
linux2.4: iptables/netfilter
netfilter就是放在内核中的位置(三个位置,进、出、转、发),iptables相当于外部命令(规则指挥器)
netfilter放的位置必须经过数据包,TCP/IP协议栈->路由决策
经由路由表判断三种数据包的流向
-数据包进来的
-数据包出去的
-数据包转发的
0.0.0.0表示任何主机
hook function:钩子函数
任何一个报文走到TCP/IP协议栈都会被其中一个钩子检验,看是否满足规则
检查规则的方式为自上而下逐个检查若第一条规则匹配成功之后就不会再检查第二条规则,因此规则的顺序很重要
在经过路由表之前,在路由决策之前,修改报文,NAT技术,
五个钩子函数
prerouting 进入路由之前
input
ouput
forward
postrouting 离开之前
四表:
filter
nat
mangle
raw
五链:
PREROUTING
INPUT
OUPUT
FORWARD
POSTROUTING
filter(过滤):表
INPUT
OUTPUT
FORWARD
nat(地址转换):表
PREROUTING
OUTPUT
POSTROUTING
mangle(拆开、修改、封装、主要是修改报文首部的其他字段、不做地址转换):表
INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING
raw(还原数据包为原始模式 ):表
PREROUTING
OUTPUT
数据包过滤匹配流程
:iptables 在这些表的链上生成规则并使其完成相应功能
每个退则都有两个内置的计数器
-
一个用来记录被匹配到的报文个数
-
一个用来记录别匹配的报文大小之和
能否使用自定义链
可以使用自定义链,但是只能由主链调用时才能发挥作用,也就是说自定义链是嵌在主链之中的,如果自定义链中的规则都没有匹配,同时还应该有返回机制,用户可以删除自定义的空链,默认主链不能被删除
如下图
规则:匹配标准,处理动作
iptables [-t TABLE] COMMAND CHAIN [num] 匹配标准 -j 处理办法
-t指定表名字, 命令, 操作的链, 操作链的第几条规则, 指定匹配标准, -j指定处理办法
-
通用匹配
-s --src 指定源地址 -d --dst 指定目标地址 -p --{tcp|udp|icmp} 指定协议 --sport 源端口 --dport 目标端口 --tcp-flags mask comp 只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中对的标志位必须为1, 但是对于comp中没出现而mask中出现的,则必须为0 eg:--tcp-flags SYN,FIN,ACK,RST SYN,ACK 这里面SYN,ACK为1 而FIN,RST为0 --syn 三次握手中对的第一次 -i INTERFACE 指定数据报文流入接口 一般用在PREROUTING,INPUT,FORWARD -o INTERFACE 指定数据报文流出接口,一般用在OUTPUT,POSTROUTING,FORWARD
-
扩展匹配
-
需要依赖扩展模块来完成,包括以下两种:
-
隐含扩展:
不用特别指明由哪儿个模块进行扩展,入tcp,udp,icmp
-
显示扩展
必须指明有哪儿个模块进行扩展,在iptables中使用-m选项可完成此功能
-
-J 指定处理动作
- ACCEPT 接受
- DROP 不声明直接丢弃
- REJECT 明确告诉对方不让通过
- DNAT 目的地址转换
- SNAT 源地址转换
- REDIRECT 端口重定向
- MASQUERADE 地址伪装
- LOG 日志
- MARK 标记
eg:
iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -j DROP
指明来自172.16.0.0/16这个网段的访问本机的报文我们一律丢弃
命令
-
管理规则
-A: 默认在链的尾部的添加一条规则 -I CHAIN [num]:表示插入一条规则,插入到对应CHAIN链上的第num条 若省略num则默认插入尾部 -D CHAIN [num]:删除指定链中的第num条规则 -R CHAIN [num] 替换指定规则:
-
管理链
-F [CHAIN] :清空指定规则链条,如果省略CHAIN,则可以实现删除对应表中的所有链,f指flush -P CHAIN:设定指定链的默认策略; -N:自定义一条新的空连 -X:删除一个自定一的空链 -Z:置零指定链中所有规则的计数器 -E:重命名自定义的链
-
查看
-L:显示指定表中的规则 -n:禁止反向解析, -v:显示链及详细信息 -x:明确显示精确值信息 --line-numbers:显示规则号码 iptables -L -n默认查看filter这张表,若要知名查看则使用-t 指定表名
放行本机ssh服务对于172.16.0.0网段对的访问
172.16.100.7 sshd:22/tcp
-
开放172.16.0.0对自己的访问
开放由外到内 iptables -t filter - A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT 开放由内到外 iptables -t filter - A INPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT
lsmod | grep ip 可以用来查看iptables启用的模块
iptables 本质:装载及一处iptables//netfilter相关的内核模块:
iptables_nat
iptables_filter
iptables_mangle
iptables_raw
iptables_conntrack