死磕Linux防火墙(iptables和firewalld)

对于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,代表是接受。

修改源端口(60001 -> 60000):

iptables -t nat -A POSTROUTING  -p udp -d 110.186.137.115 --sport 60001 -j SNAT --to-source :60000 

在nat表中POSTROUTING,增加一个规则, udp协议、目的ip是110.186.137.115 源端口是60001,修改成60000

注意:这里netfilter会在PREROUTING中自动添加一条反向策略(60000 -> 60001),这条策略不能通过iptables命令查看到

 

四、服务管理

我们启动/关闭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使用以及各个参数表达含义。希望通过此篇帮助像我一样的小白。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值