死磕Linux防火墙(iptables和firewalld)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xxb249/article/details/85545533

对于Linux防火墙无论是使用方式上还是实现机制上理解的都不是很深刻。例如,在windows做端口映射很方便,但是到了linux下面却很头疼,今天打算彻底搞懂它。

一、Linux防火墙概述

1.1、背景

1) iptables和firewalld并不是真正的防火墙,他们两个只是管理工具。通过他们两个自身的服务(配置),去配置内核中Netfilter和TCPwrappers。对于日常工作,这两种配置方式只要熟练掌握其中一个即可。

2) 在centos7.0/redhat7.0以上版本,内置防火墙有两个iptables和firewalld。在centos6/redhat6中,防火墙只有一个iptables。

1.2、策略

所谓策略,是由两个部分组成,匹配原则和执行动作。对于防火墙来说,要么是允许通过,要是是被拒绝,只有这两种动作。策略分类:

策略 作用 备注
默认策略 系统提供策略 默认策略的动作,通过或者拒绝。
用户策略 由用户指定的策略 当一条报文流入防火墙,防火墙会依据当前报文,与防火墙现有策略进行匹配,如果匹配成功则只执行当前动作,如果匹配不成功则执行默认策略。

1.3、规则链

规则链 作用
INPUT 进入主机
OUTPUT 离开主机
PREROUTING 路由前操作
FORWARD 转发
POSTROUTING 路由后操作

以上是iptables内置规则链,其中常用链有INPUT、OUTPUT、FORWARD。 当然我们也可以自定义规则链,以便可以满足业务需求。

1.4、表

表是用来将相同规则进行统一化管理。

作用
filter 负责过滤功能,内核模块 iptables_filter,默认表
nat 负责进行网络地址转换,内核模块 iptable_nat
mangle 拆解报文,进行修改,重新封装,内核模块 iptable_mangle
raw 关闭 nat 表上启用的连接追踪机制,内核模块 iptable_raw

说明:

1)常用表是,filter、nat这两个表。如果添加规则的时候没有指定表,则默认是filter表。

2)优先级处理, raw>mangle>nat>filter

二、深入理解iptables

虽然在centos7.0以后增加了firewalld,以一种全新方式管理防火墙,但是发现业界还是使用iptables较多,例如:lvs、docker等,而且我对于iptables各种规则链也不是很清晰。所以打算彻底搞明白这个iptables。

2.1、查看规则链

通过命令行ipables -L <规则链名称>,具体如下:

说明:

1)蓝色框为内置规则链,红色框为自定义规则链。

2)规则链头部字段说明:

字段 说明
target 动作,例如接受、丢弃等,具体取值请看下文。
prot 协议名称,例如all,icmp,tcp等
opt 选项
source 源ip
destination 目的ip

3)target取值说明:

字段 说明
ACCEPT 接受报文,表示允许通过本机
DROP 丢弃报文,不给客户端任何响应
REJECT 拒绝报文,会给客户端发送一个响应(与DROP区别)
SNAT 源地址转换
MASQUERADE 是 SNAT 的一种特殊形式,适用于动态的、临时会变的 IP上
DNAT 目的地址转换
REDIRECT 重定向,主要用于端口映射
RETURN 返回,当进入自定义链中,执行完自定义链规则后可返回上一规则链
LOG 只记录报文,不对报文做任何操作

4)policy ACCEPT 表示默认策略为接受,此处policy取值为上面介绍target字段。

2.2、查看规则

上面是我的docker环境下面所有策略,这里详细介绍一下各个含义:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

修改INPUT链, FORWARD链,OUTPUT链默认策略为ACCEPT,这个操作对应上面通过iptables -L查看显示:policy ACCEPT。

-N DOCKER
-N DOCKER-ISOLATION

创建两个新链,名字为DOCKER,DOCKER-ISOLATION。

-A DOCKER -d 192.168.2.2/32 ! -i br-f9077321f368 -o br-f9077321f368 -p tcp -m tcp --dport 8999 -j ACCEPT

 说明:

1)向DOCKER链中增加一个规则,并且该规则的动作是ACCEPT(-j ACCEPT)

2)-A是在末尾添加,-I是在前面添加

3)匹配规则说明:

规则 说明
-d 192.168.2.2/32 目的ip是192.168.2.2/32
! -i br-f9077321f368 输入接口(网卡),不能br-f9077321f368。也就是说除br-f9077321f368以外的网卡,是可以接受的
-o br-f9077321f368 输出接口(网卡),br-f9077321f368
-p tcp 匹配协议为tcp协议
-m tcp --dport 8999 扩展匹配规则,tcp协议下端口为8999

这里注意:感叹号的作用,是取反的意思。 

三、使用

我们可以通过iptables命令行,增加、删除规则链,命令行形式为:iptables [-t table] command [match] [target],这个其实对应上面2.2小节。如果不指定table则默认是filter表。我们对上面规则进行详细说明:

红色:对应command字段,这里没有指定table,那么该规则追加到filter表。

紫色:对应match字段,可以根据业务需求进行设置。

黄色:对应target字段,此处为ACCEPT,代表是接受。

四、服务管理

我们启动/关闭iptables可使用sytemctl方式,具体如下:

[root@localhost ~[11:57]#systemctl start iptables
[root@localhost ~[11:57]#systemctl stop iptables
[root@localhost ~[11:57]#systemctl status iptables

我们通过命令行进行配置iptables,当我们主机重启后配置就会丢失,那么我们如何保存呢?可使用iptables-save命令行

五、总结

至此,通过实际例子,介绍iptables使用以及各个参数表达含义。希望通过此篇帮助像我一样的小白。

猜你喜欢

转载自blog.csdn.net/xxb249/article/details/85545533