iptables防火墙的基本配置

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
云防火墙,500元 1000GB
简介:

    在Internet中,通过架设各种服务器为用户提供各种网络服务,怎样保护这些服务器,过滤恶意的访问、入侵呢?这里主要介绍Linux系统中的防火墙——netfilter和iptables,包括防火墙的结构和匹配流程,以及如何编写防火墙规则


Linux防火墙基础

    Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包进行过滤和限制,属于典型的包过滤防火墙。它基于内核编码实现,具有非常稳定的性能和高效率,也因此得到了广泛的应用。netfilter和iptables都可以用来指Linux防火墙,它们的区别如下:

netfilter:在Linux内核中实现防火墙的内部结构,不以文件或程序的形成存在,属于“内核态”的防火墙功能体系

iptables:用来管理Linux防火墙的命令程序,通常位于/sbin/iptables目录下,属于“用户态”的防火墙管理体系


1. iptables中的表、链结构(四表五链)

    为了更加方便地组织和管理防火墙规则,iptables采用了“表”和“链”的分层结构,如下图所示:

杨书凡07.png


(1)规则表(四表)

    iptables管理中四个不同的规则表,其功能分别由独立的内核模块实现。表的名称、包含的链及用途如下:

filter表:用来对数据包进行过滤,确定是否放行,对应的内核模块为iptables_filter,表中包含三个链,即INPUT、OUTPUT、FORWARD

nat表:网络地址转换,修改数据包中的源、目标IP地址或端口,内核模块为iptables_nat,表中包含三个链,即PREROUTING、POSTROUTING、OUTPUT

mangle表:为数据包设置标记,以实现流量整形、策略路由等高级功能,内核模块为iptables_mangle,表中包含五个链,即PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

raw表:确定是否对该数据包进行状态跟踪,内核模块为iptables_raw,表中包含两个链,即OUTPUT、PREROUTING


(2)规则链(五链)

    在处理数据包时,根据防火墙规则的不同介入时机,默认划分为五个不同的规则链,具体如下:

*INPUT:处理入站数据包

*OUTPUT:处理出站数据包

*FORWARD:处理转发数据包

*POSTROUTING链:在进行路由选择后处理数据包

*PREROUTING链:在进行路由选择前处理数据包


2. 数据包过滤的匹配顺序

    iptables管理着四表五链,各种规则依次存放在链中,那么当一个数据包到达防火墙时,优先使用哪个表,哪个链中的规则?

(1)规则表之间的顺序

    当数据包抵达防火墙时,应用的顺序为*raw——mangle——nat——filter(如果规则同时存在)


(2)规则链之间的顺序

    规则链之间的应用顺序取决于数据包的流向,具体如下:

1)入站数据流向:(PREROUTING——INPUT)当外界的数据包到达防火墙时,首先被PREROUTING链处理,然后进行路由选择,如果数据包的目标地址是本机,那么就将其传递给INPUT链进行处理,通过以后交给上层的应用程序进行响应

2)转发数据流向:(PREROUTING——FORWARD——POSTROUTING当外界的数据包到达防火墙时,首先被PREROUTING链处理,然后进行路由选择,如果数据包的目标地址是其他外部地址,则将其传递给FORWARD链进行处理,最后交给POSTROUTING链进行处理

3)出站数据流向:(OUTPUT——POSTROUTING)防火墙本机向外部发送数据包时,首先被OUTPUT链处理,然后进行路由选择,再交给POSTROUTING链进行处理

杨书凡01.png


(3)规则链内部的各条防火墙规则匹配顺序

*    当数据包经过每条规则链时,按顺序依次检查,匹配即停止(LOG策略例外),*若找不到相匹配的规则,则按该链的默认策略处理



编写防火墙规则

1. iptables命令基本语法    

    基本的命令格式如下:

iptables  [-t 表名] 管理选项  [链名]  [匹配条件]  [-j 控制类型]

    其中

表名、链名:指定iptables命令所操作的表和链,未指定时默认使用filter表

管理选项:表示iptables规则的操作方式,如增加、删除、插入、查看等

匹配条件:指定要处理的数据包特征,不符合指定条件的数据包将不会处理

控制类型:指定数据包的处理方式,如允许、拒绝、丢弃等,常用的几种控制类型如下

(1)ACCEPT:允许数据包通过

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

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

(4)LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,不必遵循“匹配即停止”的规则


2. iptables命令的基本操作

杨书凡02.png

(1)添加新的规则    

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

*-I:在链的开头(或指定序号)插入一条规则

1
2
3
[root@localhost ~] # iptables -A INPUT -p tcp -j ACCEPT         //在filter表INPUT链的末尾添加一条规则,允许TCP协议的数据包通过
[root@localhost ~] # iptables -I INPUT -p udp -j ACCEPT         //在filter表INPUT链的首行添加一条规则,允许UDP协议的数据包通过
[root@localhost ~] # iptables -I INPUT 2 -p icmp -j ACCEPT      //在filter表INPUT链的第二行添加一条规则,允许icmp协议的数据包通过


(2)查看规则列表

*-L:列出所有的规则条目,如未指定链名,则列出表中所有链

*-n:以数字形式显示地址、端口等信息

*-v:以更详细的方式显示规则信息

*--line-numbers:查看规则时,显示规则的序号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost ~] # iptables -L INPUT --line-numbers         //查看filter表INPUT链的所有规则,并显示规则序号
Chain INPUT (policy ACCEPT)
num  target     prot opt  source         destination
1    ACCEPT     udp  --  anywhere      anywhere
2    ACCEPT     icmp --  anywhere      anywhere
3    REJECT     icmp --  anywhere      anywhere     reject-with icmp-port-unreachable
4    ACCEPT     tcp  --  anywhere      anywhere
 
[root@localhost ~] # iptables -nL INPUT                  //以数字形式查看filter表INPUT链的所有规则
Chain INPUT (policy ACCEPT)
target     prot opt  source           destination
ACCEPT     udp  --  0.0.0.0 /0        0.0.0.0 /0
ACCEPT     icmp --  0.0.0.0 /0        0.0.0.0 /0
REJECT     icmp --  0.0.0.0 /0        0.0.0.0 /0        reject-with icmp-port-unreachable
ACCEPT     tcp  --  0.0.0.0 /0        0.0.0.0 /0


(3)删除、清空规则

-D:删除链内指定序号(或内容)的一条规则

*-F:清空所有的规则

1
2
3
4
5
6
[root@localhost ~] # iptables -D INPUT 3           //删除filter表INPUT链的第三条规则
[root@localhost ~] # iptables -F INPUT             //清空filter表INPUT链所有的规则
[root@localhost ~] # iptables -F                   //清空filter表
[root@localhost ~] # iptables -t nat -F            //清空nat表
[root@localhost ~] # iptables -t mangle -F         //清空mangle表
[root@localhost ~] # iptables -t raw -F            //清空raw表


(4)设置默认策略

*-P:为指定的链设置默认规则

    当找不到任何一条策略匹配数据包的规则时,将执行默认策略,默认策略的控制类型为ACCEPT、DROP

1
2
[root@localhost ~] # iptables -P FORWARD DROP      //将filter表FORWARD链的默认策略设为丢弃
[root@localhost ~] # iptables -P OUTPUT ACCEPT     //将filter表OUTPUT链的默认策略设为允许

   当使用-F清空链时,默认策略不受影响;若要修改默认策略,必须通过-P重新设置


3. 规则的匹配条件

    根据数据包的各种特性,结合iptables模块,匹配条件的设置包括三大类:通用匹配、隐含匹配、显式匹配

(1)通用匹配

    也称为常规匹配,可以独立使用,不依赖于其他条件和扩展模块,包括协议匹配、地址匹配、网络接口匹配

1)协议匹配:“-p 协议名”,用来检查数据包所使用的网络协议,如tcp、udp、icmp、all(所有IP数据包)等

1
2
[root@localhost ~] # iptables -I INPUT -p icmp -j DROP                //丢弃通过icmp协议访问本机的数据包
[root@localhost ~] # iptables -A FORWARD ! -p icmp -j ACCEPT             //允许转发除了icmp协议之外的数据包

2)地址匹配:“-s 源地址”“-d 目标地址”,用来检查数据包的源地址和目标地址,不建议使用主机名、域名(解析过程影响效率)

1
2
[root@localhost ~] # iptables -A FORWARD -s 192.168.1.11 -j REJECT        //拒绝转发源地址为192.168.1.11的数据
[root@localhost ~] # iptables -I INPUT -s 10.20.30.0/24 -j DROP           //丢弃源网段为10.20.30.0/24访问本机的数据

3)网络接口匹配:“-i 入站网卡”“-o 出站网卡”,用来检查数据包从防火墙的哪一个接口进入或发出

1
2
3
[root@localhost ~] # iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP     //丢弃从外网访问本机且防火墙为私有地址的数据包
[root@localhost ~] # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
[root@localhost ~] # iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP


(2)隐含匹配

    要求以指定的协议为前提条件,相当于子条件,因此无法独立使用,常见的隐含匹配包括端口匹配、TCP标记匹配、ICMP类型匹配

*1)端口匹配:“--sport 源端口”“--dport 目的端口”,用来检查数据包的源端口、目标端口,可以使用单个端口和以冒号分隔的端口范围,不能使用多个不连续的端口

1
2
3
[root@localhost ~] # iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT   //允许为网段192.168.4.0/24网段转发DNS查询数据包
[root@localhost ~] # iptables -A FORWARD -d 192.168.4.0/24 -p udp --sport 53 -j ACCEPT
[root@localhost ~] # iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT             //允许通过访问本机FTP服务的数据包

2)*TCP标记匹配:“--tcp-flags 检查范围 被设置的标记”,用来检查TCP数据包的特定标志,如SYN、ACK、FIN、RST等

1
2
3
[root@localhost ~] # iptables -A INPUT -p tcp  --tcp-flags ALL FIN,URG,PSH -j DROP        //防止Xmas扫描
[root@localhost ~] # iptables -A INPUT -p tcp  --tcp-flags ALL NONE -j DROP                //防止TCP Null扫描
[root@localhost ~] # iptables -A INPUT -p tcp  --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP   //拒绝TCP标记为SYN/ACK,但连接状态为NEW的数据包,防止ACK欺骗

3)*ICMP类型匹配:“--icmp-type ICMP类型”,用来检查ICMP数据包的类型,如Echo-Request(代码8)、Echo-Reply(代码0)、Destination-Unreachable(代码3)分别对应ICMP协议的请求、回显、主机不可达

1
2
3
4
5
[root@localhost ~] # iptables -A INPUT -p icmp --icmp-type 8 -j DROP          //禁止从其他主机ping本机,但允许本机ping其他主机
[root@localhost ~] # iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@localhost ~] # iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
[root@localhost ~] # iptables -A INPUT -p icmp -j DROP
[root@localhost ~] # iptables -p icmp -h                           //查看可用的ICMP协议类型


(3)显式匹配

    要求有额外的内核模块提供支持,必须手动以“-m 模块名称”的形式调用相应的模块,然后设置匹配条件。常见的显式匹配包括多端口匹配、IP范围匹配、MAC地址匹配、状态匹配

1
[root@localhost ~] # lsmod | grep xt_                //查看相关的内核扩展模块

*1)多端口匹配:“-m multiport --sport 源端口列表”“-m multiport --dport 目的端口列表”,多端口以逗号分隔

1
[root@localhost ~] # iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT     //允许本机开放25、80、110、143端口,以便提供电子邮件服务

2)*IP范围匹配:“-m iprange --src-range IP范围”“-m iprange --drc-range IP范围”,检查数据包的源、目的IP地址范围

1
[root@localhost ~] # iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT    //允许转发192.168.4.21与192.168.4.28之间的TCP数据包

3)*MAC地址匹配:“-m mac --mac-source MAC地址”,用于检查数据包的源MAC地址,只适用于网络内部

1
[root@localhost ~] # iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP     //禁止其MAC地址访问本机的任何应用

*4)状态匹配:“-m state --state 连接状态”,基于iptables的状态跟踪机制用来检查数据包的连接状态,如NEW(与任何连接无关的)、ESTABLISHED(响应请求或以建立连接的)、RELATED(与已有连接有相关性的)

1
2
3
4
5
[root@localhost ~] # iptables -I INPUT -p tcp -m state --state NEW -p tcp ! --syn -j DROP    //禁止转发与正常TCP连接无关的--syn请求数据包,如伪造的网络攻击数据包
 
[root@localhost ~] # iptables -P INPUT DROP               //只开放本机的web服务,但对发给本机的TCP应答数据包予以放行,其他入站数据包都丢弃
[root@localhost ~] # iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
[root@localhost ~] # iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT









本文转自 杨书凡 51CTO博客,原文链接:http://blog.51cto.com/yangshufan/2056496,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
监控 网络协议 安全
华为配置防火墙直连路由器出口实验
华为配置防火墙直连路由器出口实验
193 6
|
5月前
|
网络安全 数据中心
百度搜索:蓝易云【Proxmox软件防火墙的配置教程】
现在,你已经完成了Proxmox软件防火墙的配置。请确保你的防火墙规则设置正确,以保护你的Proxmox VE环境免受未经授权的访问和网络攻击。
180 5
|
5月前
|
网络协议 安全 Linux
linux配置防火墙 Centos7下 添加 端口白名单
linux配置防火墙 Centos7下 添加 端口白名单
889 0
|
1月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
193 73
|
18天前
|
运维 监控 安全
网络管理:防火墙和安全组配置详解
网络管理:防火墙和安全组配置详解
31 1
|
2月前
|
监控 安全 网络安全
防火墙配置与管理技巧深度解析
【8月更文挑战第19天】防火墙的配置与管理是网络安全工作的重中之重。通过明确安全策略、精细的访问控制、日志与监控、更新与维护等配置技巧,以及权限管理、自动化与集成、应急响应计划等管理技巧,可以显著提升防火墙的安全防护能力。然而,网络安全是一个持续的过程,需要不断学习和适应新的威胁和挑战。因此,建议网络安全从业人员保持对新技术和新威胁的关注,不断提升自己的专业技能和应对能力。
|
2月前
|
安全 网络安全 数据安全/隐私保护
手把手教你用eNSP模拟器配置防火墙源NAT
手把手教你用eNSP模拟器配置防火墙源NAT
|
2月前
|
网络安全
如何用HCL模拟器配置防火墙IRF?
如何用HCL模拟器配置防火墙IRF?
|
2月前
|
网络协议 Ubuntu 安全
在Ubuntu上安装和配置配置服务器防火墙(CSF)的方法
在Ubuntu上安装和配置配置服务器防火墙(CSF)的方法
41 1
|
2月前
|
安全 Linux 测试技术
在Linux中,如何配置防火墙和安全规则?
在Linux中,如何配置防火墙和安全规则?