Linux防火墙

防火墙我们在之前就已经接触过了,我们都知道传输层的设备是防火墙,其实防火墙不仅仅在传输层,它在网络层和应用层都有所涉及。

我们所知道的是防火墙可以基于传输层协议(如TCP、UDP)以及端口号进行过滤,例如,它可以阻止或允许特定端口的流量。高级一点的防火墙可以深入到应用层,分析特定应用协议(如HTTP、FTP)的流量,进行更复杂的过滤和检查,这种防火墙称为应用层防火墙或代理防火墙,我们暂时对这种防火墙不做了解。

我们今天主要了解工作在网络层的防火墙,它可以根据IP地址、协议类型等信息进行过滤,我们把这种类型的防火墙称为包过滤防火墙。Linux系统中的防火墙基本上都是包过滤防火墙,基于内核编码实现,具有非常稳定的性能和高效率,也因此获得广泛的应用。

为了在Linux系统中实现高效的网络流量管理和安全性控制,Linux内核提供了一个强大而灵活的框架——Netfilter,以及一个用户空间的工具——iptables

Netfilter 是Linux内核中的一个子系统,它提供了数据包过滤、网络地址转换(NAT)以及数据包的修改和控制功能。作为一个内核模块,Netfilter的工作是在数据包进入或离开网络接口时处理这些数据包。

iptables 是一个在用户空间运行的命令行工具,它通过与Netfilter交互来设置和管理这些规则。iptables提供了一种灵活的方法来定义规则和链条,从而实现复杂的网络策略。

iptables 有几个核心概念,表中有链,链中有规则,也就是表链规则

通过不同的表来处理不同类型的网络数据包操作,每个表中又包含了若干链,定义数据包处理的路径,我们称为四表五链,那么具体是哪四表哪五链,先从表开始说吧

filter 表:这是默认表,用于数据包的过滤,包含三个链,INPUT、FORWARD、OUTPUT ,这里先不对链做解释

nat 表:负责网络地址转换,用于改变数据包的源、目的地址端口号,包含三个链,OUTPUT、PREROUTING、POSTROUTING 

raw 表:用于决定是否对数据包进行状态跟踪,两个链 OUTPUT、PREROUTING

mangle 表:修改数据包的服务类型和优先级,对数据包标头修改等,五个链都有,INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING

raw 表   和  mangle 表 相对来说不太常用

raw表的功能比较专一,主要用于关闭连接跟踪,而大多数场合下并不需要这样的操作

mangle表主要用于复杂的数据包处理和修改,对于普通用户或简单的网络配置场景,它显得过于复杂

这四个表也是有优先级顺序的:raw→mangle→nat→filter

接下来是五链

INPUT:处理入站数据包,匹配目标ip为本机的数据包

OUTPUT:处理出站数据包,匹配从本机发出的,一般不做配置

FORWARD:处理需要转发的数据包,匹配经过本机

PREROUTING:在数据包进入路由前进行处理,用来修改目的地址,用于DNAT,相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上

POSTROUTING:在数据包从路由发出后进行处理,用来修改源地址,用于SNAT,相当于内网通过路由器NAT转换功能实现公网IP地址上网

表之间有先后顺序,规则链之间自然也是有的,不同的情况有不同的处理

入站数据:PREROUTING --> INPUT --> 本机的应用程序

出站数据:本机的应用程序-->OUTPUT-.>POSTROUTING

转发数据:本机的应用程序-->OUTPUT-.>POSTROUTING

规则链内也有匹配顺序,自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)要么放行 要么丢弃。若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)。遵循“匹配即停止”的原则, 一旦找到一条匹配规则将不再检查后续的其他规则,如果一直找不到匹配的规则,就按默认规则处理

用iptables -L可以查看默认规则,规则链后面出现(policy ACCEPT)即是默认放行 默认策略不参与链内规则的顺序编排

iptables -F 可以清空指定链中的所有规则,清空链时,默认策略不受影响

讲完了理论,接下来就该学习如何编写防火墙规则了

首先 Centos7 默认使用firewalld 防火墙,没有安装iptables,所以我们需要先关闭firewalld,然后yum install 安装iptables 

下载安装完成后,systemctl enable iptables.service  设置开机自启

iptables 的格式是:iptables -t [表名] 选项 [链名] [匹配条件] -j [控制类型]

表名和链名 顾名思义就是所要操作的表的名字和链的名字

选项就是比如插入删除增加规则等

匹配条件用来指定要处理的数据包的特征

控制类型指数据包的处理方式,如允许、拒绝等

需要注意的是,如果未指定链名,那么就是指表内所有链;除非设置链的默认策略,否则必须指定匹配条件;选项、链名、控制类型使用大写字母,其余均为小写

格式就是这样,接下来由一个小小的操作实例,来介绍各个参数的选项等

首先我们用 iptables -vnL --line-numbers  

来以详细、可读的格式列出当前的iptables规则,--line-numbers 就是输出每个规则的行号

我们添加一条新的规则   

iptables -t filter -A INPUT -p icmp -j REJECT          这条命令拒绝了任何人 ping 本机

然后我们打开另一终端,ping我们刚刚配置了新规则的机器,发现还是能ping的通,因为我们刚刚配置的规则是在最后一行,规则的匹配顺序是自上而下的,所以我们需要将 -A 追加改为 -I 插入,将新规则插入到第一行,此时我们再去另一台机器ping 本机,就ping不通了

-A 就是管理选项,追加,-p是匹配协议,-j 后面接控制类型,REJECT就是拒绝

接下来就列出常用的一些管理选项

ACCEPT:允许数据包通过

DROP:直接丢弃数据包,不给出任何回应信息

REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息

LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则

SNAT:修改数据包的源地址

DNAT:修改数据包的目的地址

MASQUERADE:伪装成一个非固定公网IP地址

常用的命令选项有

-A:在指定链的末尾追加一条规则

-I:在指定链中插入一条规则,如果不指定序号的话就是第一行

-D:从链中删除规则,可以通过行号或规则内容来删除

-R:修改、替换指定位置的规则

-L:列出当前链中的所有规则

-F:清楚链中所有规则

-X:清空自定义链的规则,不影响其他链

-P:设置默认规则 

匹配条件选项

-p:指定协议,tcp、udp、icmp等

-s:指定源ip地址或者网络

-d:指定目标ip地址或网络

--sport:指定源端口号

--dport:指定目标端口号

-i:入站网络接口

-o:出站网络接口

其实还不止列出的这些,就不一一列举了,有的用的也非常的少

现在再回过头来看那两条命令

ip iptables -vnL --line-numbers      vnL顺序不能乱,vn顺序随便,L一定在最后,一般都组合起来用

tables -t filter -A INPUT -p icmp -j REJECT

现在应该就能看懂了吧

有新增当然有删除,删除防火墙规则的方式也很简单

iptables -D,

例如,若要删除 filter 表 INPUT 链中的第五条规则

iptables -D INPUT 5

清空指定链或表中的所有防火墙规则,使用管理选项“-F”。例如,若要清空 filter 表 INPUT

iptables -F INPUT

iptables 的各条链中,当找不到任何一条能够匹配数据包的规则时,会则执行默认策略,默认策略的控制类型一般为 ACCEPT和DROP

只需在添加规则时,加上 -P 就可以添加默认规则,同样的 -F -P清除默认规则时需要慎重考虑,建议清除之前 iptables-save > /保存的目录,进行备份,如果没有-P就没事,加了 -P 一清除远程都会断开

注:
1.若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条

2.按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错

3.按内容匹配删数时,确保规则存在,否则报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值