iptables防火墙的基本配置

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

Linux防火墙基础

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

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

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

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

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

(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链进行处理

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

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

编写防火墙规则

1. iptables命令基本语法

基本的命令格式如下:

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

其中

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

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

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

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

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

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

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

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

2. iptables命令的基本操作

(1)添加新的规则 

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

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

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

(2)查看规则列表

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

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

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

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

[[email protected] ~]# 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

[[email protected] ~]# 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:清空所有的规则

[[email protected] ~]# iptables -D INPUT 3           //删除filter表INPUT链的第三条规则
[[email protected] ~]# iptables -F INPUT             //清空filter表INPUT链所有的规则
[[email protected] ~]# iptables -F                   //清空filter表
[[email protected] ~]# iptables -t nat -F            //清空nat表
[[email protected] ~]# iptables -t mangle -F         //清空mangle表
[[email protected] ~]# iptables -t raw -F            //清空raw表

(4)设置默认策略

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

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

[[email protected] ~]# iptables -P FORWARD DROP      //将filter表FORWARD链的默认策略设为丢弃
[[email protected] ~]# iptables -P OUTPUT ACCEPT     //将filter表OUTPUT链的默认策略设为允许

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

3. 规则的匹配条件

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

(1)通用匹配

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

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

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

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

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

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

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

(2)隐含匹配

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

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

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

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

[[email protected] ~]# iptables -A INPUT -p tcp  --tcp-flags ALL FIN,URG,PSH -j DROP        //防止Xmas扫描
[[email protected] ~]# iptables -A INPUT -p tcp  --tcp-flags ALL NONE -j DROP                //防止TCP Null扫描
[[email protected] ~]# 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协议的请求、回显、主机不可达

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

(3)显式匹配

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

[[email protected] ~]# lsmod | grep xt_                //查看相关的内核扩展模块

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

[[email protected] ~]# 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地址范围

[[email protected] ~]# 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地址,只适用于网络内部

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

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

[[email protected] ~]# iptables -I INPUT -p tcp -m state --state NEW -p tcp ! --syn -j DROP    //禁止转发与正常TCP连接无关的--syn请求数据包,如伪造的网络攻击数据包

[[email protected] ~]# iptables -P INPUT DROP               //只开放本机的web服务,但对发给本机的TCP应答数据包予以放行,其他入站数据包都丢弃
[[email protected] ~]# iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
[[email protected] ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

原文地址:http://blog.51cto.com/yangshufan/2056496

时间: 2024-10-13 13:18:00

iptables防火墙的基本配置的相关文章

Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战

inux iptables防火墙详解 + 配置抗DDOS攻击策略实战 Linux 内核中很早就实现了网络防火墙功能,在不同的Linux内核版本中,使用了不同的软件实现防火墙功能.在2.0内核中,防火墙操作工具叫:ipfwadm在2.2内核中,防火墙操作工具叫:ipchains在2.4以后的内核,防火墙操作工具叫:iptables ipfwadm 和 ipchains 比较老,已成历史版本,本章主要介绍Iptables 一.iptable 操作命令参数详解 -A  APPEND,追加一条规则(放到

iptables防火墙网路安全实践配置

01:iptables防火墙网络安全前言介绍企业中安全配置原则:尽可能不给服务器配置外网IP,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网IP,可以开启防火墙服务.大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全. iptables防火墙概念介绍Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进

Linux下的配置iptables防火墙增强服务器安全

Linux下的配置iptables防火墙增强服务器安全 实验要求 iptables常见概念 iptables服务器安装及相关配置文件 实战:iptables使用方法 例1:使用iptables防火墙保护公司web服务器 例2:使用iptables搭建路由器,通过SNAT使用内网机器上网 例3:限制某些IP地址访问服务器 例4:使用DNAT功能把内网web服务器端口映射到路由器外网 实验环境 iptables服务端:xuegod-63   IP:192.168.1.63 iptables客户端:x

iptables防火墙配置详解

iptables简介 iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表. filter负责过滤数据包,包括的规则链有,input,output和forward: nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output: mangle表则主要应用在修改数据包内容上,用来做流量整形的,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING: inpu

CentOS下配置iptables防火墙 linux NAT(iptables)配置

CentOS下配置防火墙 配置nat转发服务CentOS下配置iptables防火墙 linux NAT(iptables)配置 CentOS下配置iptables 1,vim /etc/sysconfig/network   这里可以更改主机名称. NETWORKING=yesNETWORKING_IPV6=noHOSTNAME=BGI-TJ.localdomain GATEWAY=192.168.11.1(超算网关) 2.vim /etc/sysconfig/network-scripts/

IPTables系列:如何配置Ubuntu 14.04中的IPTables防火墙

IPTables基本命令 在向大家介绍复杂防火墙规则之前,还是先上一些简单的料,让大家对IPTables最为基本的命令有一些简单了解. 首先要说明的是IPTables命令必需以root权限运行,这意味着你需要使用root身份登录或者能够有权限使用su或sudo -i取得root Shell.下面的内容中我们都使用sudo,这也是Ubuntu系统上的首选方法. 最好的起点就是先通过“-L”参数来查看下当前系统的所有IPTables规则: sudo iptables -L 我们可以看到Linux中都

阿里云Centos配置iptables防火墙

虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 一.检查iptables服务状态 首先检查iptables服务的状态 [[email protected] ~]# service iptables status iptables: Firewall is not running. 说明iptables服务是有安装的,但是没有启动服务.如果没有安装的话可以直接yum安

2-10~2-11 配置iptables防火墙增强服务 selinux简单讲解

学习一个服务的过程: 1.此服务器的概述:名字,功能,特点,端口号 2.安装 3.配置文件的位置 4.服务启动关闭脚本,查看端口 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上,从内到外) ------------------------------------- iptables概述 netfilter/iptables : IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables 组成. netfilter/iptables 关系: netfilt

Ubuntu 14.04 配置iptables防火墙

Ubuntu默认安装是没有开启任何防火墙的,为了服务器的安全,建议大家安装启用防火墙设置,这里推荐使用iptables防火墙.如果mysql启本地使用,可以不用打开3306端口. # whereis iptables #查看系统是否安装防火墙可以看到: iptables: /sbin/iptables /usr/share/iptables /usr/share/man/man8/iptables.8.gz #表示已经安装iptables apt-get install iptables #如果