linux 防火墙详解

一、linux防火墙基础

1.防火墙概念
在计算机科学领域中,防火墙(Firewall)是一个架设在互联网与企业内网之间的信息安全系统,根据企业预定的策略来监控往来的传输。
防火墙可能是一台专属的网络设备或是运行于主机上来检查各个网络接口上的网络传输。它是目前最重要的一种网络防护设备,从专业角度来说,防火墙是位于两个(或多个)网络间,实行网络间访问或控制的一组组件集合之硬件或软件
2.功能:防火墙最基本的功能就是隔离网络,通过将网络划分成不同的区域(通常情况下称为ZONE),制定出不同区域之间的访问控制策略来控制不同信任程度区域间传送的数据流
3.IPTABLES实现方式
Linux系统的防火墙功能是由内核实现的,包过滤防火墙工作在TCP/IP的网络层
在这里插入图片描述
iptables有四表五链,表决定了数据报文处理的方式,链决定了数据报文流经的位置

规则表
filter表:包含三个链INPUT,OUTPUT,FORWARLD,(作用:确定是否放行该数据包)(过滤)
nat表:PREROUTING,POSTROUTING,OUTPUT (作用:修改数据包中的源、目标IP地址或端口)
mangle表:INPUT,OUTPUT,FORWARLD,PREROUTING,POSTROUTING,(作用:为数据包设置标记)
raw表:OUTPUT,PREROUTING(作用:确定是否对该数据包进行状态跟踪)
规则链:
input: 当收到访问防火墙本机的数据包时(入站),应用此链中的规则。
output: 当防火墙向外发送数据包时(出站),应用此链中的规则。
forward: 收到需要通过防火墙发送给其他地址的数据包时,应用此链中的规则
prerouting:在进行路由选择前处理数据包(判断目标主机)应用此链
postrouting:在进行路由选择后处理数据包(判断经由哪一接口送往下一跳)应用此链
4.数据包匹配的流程:

分析数据报文进入本机后应用了哪些表规则以及链规则
如filter表的规则,filter表决定是否放行数据包通过,那如果通过,则必须经由INPUT链流入数据包,INPUT链是处理入站数据的,如果没问题,继续放行到用户空间,再经由OUTPUT链将数据包流出
如nat表的规则,nat表主要实现转发功能,数据包先经由PREROUTING链进行路由选择,选择好路线后再经由FORWARD链转发数据,然后再进行一个路由选择,最后由POSTROUTING链流出数据
在这里插入图片描述
规则表之间的优先级
raw、mangle、nat、filter
规则链之间的优先级
入站数据流向:来自外界的数据包到达防火墙,首先被PREROUTING规则链处理(是否被修改地址),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目的地址是防火墙本机,那么内核将其传递给INPUT链处理,通过以后再交给上次的应用程序进行响应。
转发数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后进行路由选择,如果数据包的目标地址是其他外部地址,则内核将其传递给FORWALD链进行处理,然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
出站数据流向:防火墙本身向外部地址发送数据包,首先被OUTPUT规则链处理,之后进行路由选择,然后交给POSTROUTING规则链(是否修改数据包的地址等)进行处理
规则链内部各防火墙规则之间的优先顺序
依次按第1条规则、第2条规则、第3条规则、·····的顺序进行处理,找到一条能够匹配的数据包规则,则不再继续检查后面的规则(使用LOG记录日志的规则例外)如果找不到规则,就按照规则链的默认策略进行处理。

二、管理和设置iptables规则

1.语法格式
iptables [ -t 表名] 命令选项 [ 链名] [ 条件匹配] [ -j 目标动作或者跳转]
2.iptables 命令
在这里插入图片描述
3.添加及输入规则
#iptables -t filter -A INPUT -p tcp -j ACCEPT
在filter表的INPUT链的末尾添加一条防火墙规则

iptables -l INPUT -p udp -j ACCEPT
在filter 表的INPUT链中插入一条防火墙规则

iptables -l INPUT 2 -p icmp -j ACCEPT
在filter 表的INPUT链中插入一条防火墙规则,作为链中的第二条规则
4.查看规则表
iptables -L INPUT --line-numbers
查看filter 表INPUT链中所有规则,同时显示各条规则的顺序号

iptables -nvL
-L 选项放在最后,否则会将vn当成链名。查看filter表各链中所有规则的详细信息,同时以数字形式显示地址和端口号
5.删除、清空规则
iptables-D INPUT 2
删除filter 表INPUT 链中的第二条规则

iptables -F
不指定表名时,默认情况filter表

iptables -t nat -F
清空nat 表中各链的所有规则

6.设置规则链的默认策略
iptables -t filter -P FORWARD DROP
将filter 表中FORWARD 规则的默认策略设为DROP

iptables -p OUTPUT ACCEPT
将filter 表中OUTPUT规则的默认策略设为ACCEPT

获得iptables 相关选项的帮助信息
iptables -p icmp -h
查看iptables 命令中关于icmp协议的帮助信息
7. 条件匹配
流入、流出接口(-i 、-o)
来源、目的地址(-s 、-d)
协议类型(-p)
源端口、目的端口(–sport 、–dport)

端口匹配
-p udp --dport 53
匹配网络中目的端口是53的udp协议数据包
地址匹配
拒绝转发来自192.168.1.11主机数据,允许转发来自192.168.0.0/24网段的数据
iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

端口和地址联合匹配
-s 192.168.0.1 -d www.abc.com -p tcp --dport 80
匹配来自192.168.0.1,去往www.abc.com的80端口的tcp协议数据包

8.动作匹配
ACCEPT DROP SNAT DNAT MASQUERADE
-j ACCEPT 通过,允许数据包通过本链而不拦截它
iptables -A INPUT -j ACCEPT
允许所有访问本机IP的数据包通过
-j 丢弃、阻止数据包通过本链而丢弃它
iptables -A FORWARD -s 192.168.80.39 -j DROP
阻止来源地址为192.168.80.39的数据包通过本机
-j SNAT --to IP[:端口-端口] 源地址转换,SNAT支持转换为单IP,也支持转换到IP地址池
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
将内网192.168.0.0/24的源地址修改为1.1.1.1

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
同上、修改成一个地址池里的IP
-j DNAT --to IP [-IP][:端口-端口] 目的地址转换,DNAT支持转换为单IP,也支持转换到IP地址池
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
把从ppp0 进来的要访问的tcp/80的数据包目的地址改为192.168.0.1

9.显示匹配的使用选项及功能:
显式匹配的选项特别多,man iptables-extensions查看具体用法
multiport(多端口)
–sport
–dports
iprange(ip范围)
time(时间范围)
string(字符串) #对报文中的应用层数据做字符串模式匹配检测(通过算法实现)
connlimit(连接限制)
limit(速率限制)
state(状态) #追踪本机上的请求和响应之间的数据报文的状态。状态有五种
–state state NEW:新连接请求
–state state ESTABLISHED:已建立的连接
–state state INVALID:无法识别的连接
–state state RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接
–state state UNTRACKED:未追踪的连接
提示:
对于进入的状态为ESTABLISHED都应该放行
对于出去的状态为ESTABLISHED都应该放行
严格检查进入的状态为NEW的连接
所有状态为INVALIED都应该拒绝

猜你喜欢

转载自blog.csdn.net/wq962464/article/details/84924180