关于iptables防火墙的介绍和使用

本文详细介绍了iptables防火墙的基本概念,包括其结构、工作原理以及如何通过一系列实用案例进行配置。涵盖iptables的表、链、规则关系,以及如何管理、设置防火墙规则,确保网络安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.Netfileter/iptables(以下简称iptables)防火墙简介 3

2.iptables四表五链介绍 3

2.1表、链、规则之间的关系 3

2.2iptables表的介绍 3

2.3规则链介绍 4

2.4规则链之间的优先顺序 5

3. 管理和设置iptables 5

3.1IPTABLES基本语法格式 5

3.2IPTABLES管理命令的管理控制选项 6

3.3防火墙处理包的方式 6

3.4IPTABLES防火墙规则的保存与恢复 6

3.5匹配规则 7

4.实际操作 7

4.1拒绝进入防火墙的所有ICMP数据包 7

4.2添加允许防火墙转发出icmp协议以外的所有数据包 7

4.3拒绝转发来自192.168.1.10主机信息,允许转发来自192.168.0.0/24网段的数据 7

4.4丢弃从外网接口进入防火墙本机的源地址为私网地址的数据包 8

4.5封堵网段172.16.0.0/12 2分钟后候解封 8

4.6只允许管理员从172.16.0.0/12使用远程登陆防火墙主机 9

4.7允许本机开放的端口从TCP端口20-1024提供的应用服务 9

4.8允许转发来自172.16.0.0/12局域网段的DNS请求数据包 10

4.9禁止其他主机ping防火墙主机,但允许从防火墙上ping其他主机 10

4.10禁止转发来自MAC地址和主机的数据包 11

4.11允许防火墙对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280 11

4.12禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包 11

4.13禁止转发与正常TCP连接无关的非--syn请求的数据包 12

4.14拒绝访问防火墙新数据包,但允许相应连接或已有连接相关数据包 12

4.15只开放本机WEB服务(80),FTP(20.21.20450-20480),放行外部主机主机发往服务器其他端口的应答数据包,将其他入站数据包均予以丢弃处理 13

5.错误记录 13

5.1添加允许防火墙转发除icmp协议以外的所有数据包 13

 

1.Netfileter/iptables(以下简称iptables)防火墙简介

  1. unix/linux自带的开源,且基于包过滤的防火墙工具
  2. 可对流入和流出服务器的数据包进行控制
  3. 可在低配的硬件上运行
  4. 是Linux2.4及2.6内核中集成的服务
  5. 在OSI七层的二、三、四层上工作
  6. iptables是防火墙的管理工具,位于/sbin/iptables,真正实现功能的是netfilter,他是Linux内核中实现包过滤的内部结构
  7. iptables包含四个表5个链,其中表是按照对应数据包的操作区分的,链是按照不同的HOOK点来区分的,表和链实际上是neifilter的两个维度

 

2.iptables四表五链介绍

2.1表、链、规则之间的关系

 

表(table)

iptables是表的容器,iptables包含的各个表

 

链(chains)

Iptables表是链的容器

INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

 

规则(Policy)

链是规则的容器

 

 

2.2iptables表的介绍

1.filter表(是iptables默认使用的表)

作用:过滤流经主机的数据包

内核模块:Iptables_filter

规则链

  1. INPUT
  2. FORWARD
  3. OUTPUT

 

 

 

2.nat表

作用:

  1. 负责网络地址转换,即来源与目的IP地址和port的转换;
  2. 和主机本身没有关系,一般用于局域网或者特殊的端口转换服务相关;
  3. nat功能相当于网络的ACL控制,和网络交换机的ACL类似.

内核模块:iptables_nat

规则链:

  1. OUTPUT
  2. PREROUTING
  3. POSTROUTING

 

3.Mangle表(基本用不倒)

作用:

  1. 修改数据包的服务类型、TTL;
  2. 可以配置路由实现QOS内核模块

内核模块:iptables_mangle

规则链:

  1. PERROUTING
  2. POSTROUTING
  3. INPUT
  4. OUTPUT
  5. FORWARD

 

4.Raw表(RHEL4没有此表)

作用:决定数据包是否被状态处理机制处理

内核模块:iptables_raw

规则链:

  1. OUTPUT
  2. PREROUTING

注意:表的处理优先级:Raw>mangle>nat>filter

 

 

2.3规则链介绍

INPUT:用来过滤目标地址是主机地址的数据包

OUTPUT:处理源地址是本机地址的数据包

PREROUTING:数据包到达防火墙时进行路由判断之前执行的规则,作用是改变数据包的目的地址和目的端口等

POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则,作用是改变数据包源地址,源端口,例如:我们现在的笔记本和虚拟机都是192.168.30.0/24,在出网的时候被我们的企业路由器把源地址改为了公网地址,主要应用在局域网共享上网

FORWARD:负责转发主机数据包,和NAT关系很大。LVS NAT模式,net.ipv4_forward=1

 

2.4规则链之间的优先顺序

2.4.1第一种情况

入站数据流向

  1. 从外界达到防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址);
  2. 之后进行路由选择(判断数据包应该发往何处),如果数据包的目标主机是防火墙本机(例如Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其转给INPUT链进行处理(决定那个是否能够通过);
  3. 通过以后再交给系统上层的应用程序(例如Apache服务器)进行响应

 

2.4.2第二种情况

转发数据流向

  1. 来自外界的数据包到达防火墙之后,先被PREROUTING规则连处理;
  2. 之后进行路由选择,如果数据包的目标地址是其他外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理,(是否转发或拦截);
  3. 然后再交给POSTROUTING规则链(是否修改数据包的地址)进行处理

 

2.4.3第三种情况

出站数据流向

  1. 防火墙本机想外部地址发送数据包(比如说在防火墙本机中测试公网DNS服务器时),首先被OUTPUT规格链处理;
  2. 之后进行路由选择,然后在传递给POSTROUTING规则连(是否修改数据包源地址等)进行处理

 

 

 

 

  1. 管理和设置iptables

3.1IPTABLES基本语法格式

Iptables[-t 表名] 命令选项 [链名]  [条件匹配] [ -j 目标动作和跳转]

说明:

  1. 表名,链名用于指定iptables命令所操作的表和链
  2. 命令选项:用于指定管理iptables规则的方式(如:插入、增加、删除、查看)
  3. 目标动作和跳转:用于指定数据包的处理方式(如:通过、拒绝、丢弃、跳转给其他的链处理)

 

3.2IPTABLES管理命令的管理控制选项

-A(append):在指定的链的末尾添加一条新的规则

-D(delete):指定链中的某一条规则,可以按规则序号和内容删除

-I(insert):在指定链中插入一条新的规则,默认在第一行添加

-R(replace):修改、替换指定链中的某一条规则,可以按照序号和内容进行替换

-L(list):指定链中所有的规则进行查看

-F(flush):清空所有的规则

-N(new-chain):一条用户自己定义的规则链

-X(delete-chain):删除指定表中用户自定义的规则链

-P(policy):设置指定链的默认策略

-N(numeric):使用数字显示输出结果

-V(version):查看版本

-h(help):获取帮助

3.3防火墙处理包的方式

ACCEPT:允许数据包通过

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

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

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

 

3.4IPTABLES防火墙规则的保存与恢复

3.4.1原理:

Iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载

 

3.4.2保存规则的方法

第一种

使用Iptables-save来保存

Iptables-save > /etc/sysconfig/iptables   //来生成保存规则的文件

 

第二种:

使用service iptables save  //他能把规则自动保存在/etc/sysconfig/iptables中

当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则

3.5匹配规则

a)规则从上往下匹配,只要匹配到就不往下匹配,如果没有匹配上就走默认规则

b)防火墙是层层过滤的,实际上是按照配置规则的顺序从上到下,从前到后进行匹配的

c)如果匹配上规则,则明确表明是阻止还是通过,数据包就不在匹配新的规则

d)如果所有规则中没有明确表明是阻止还是通过,也就是没有匹配规则,向下进行匹配,直到匹配默认得到明确的阻止还是通过

e)防火墙默认规则是对应链的所有规则执行完成后才会执行的

 

4.实际操作

4.1拒绝进入防火墙的所有ICMP数据包

命令:[root@localhost sysconfig]# iptables -I INPUT -p icmp -j REJECT

 

 

4.2添加允许防火墙转发出icmp协议以外的所有数据包

[root@localhost sysconfig]# iptables -A FORWARD  ! -p icmp -j ACCEPT

 

 

4.3拒绝转发来自192.168.1.10主机信息,允许转发来自192.168.0.0/24网段的数据

-s:指定源地址

命令:[root@localhost sysconfig]# iptables -I FORWARD -s 192.168.1.10 -j REJECT

 

 

命令:[root@localhost ~]# iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

 

 

4.4丢弃从外网接口进入防火墙本机的源地址为私网地址的数据包

-i:指定网卡

命令:

[root@localhost ~]# iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP

[root@localhost ~]# iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP

[root@localhost ~]# iptables -A INPUT -i eht0 -s 172.16.0.0/12 -j DROP

 

 

 

4.5封堵网段172.16.0.0/12 2分钟后候解封

命令:

[root@localhost Desktop]# iptables -A INPUT -s 172.16.0.0/12 -j DROP  //禁止172.16.0.0/12的网段

[root@localhost Desktop]# at now +2 minutes                     //增加一次性任务2分钟后删除此规则

at> iptables -D INPUT 1

at> <EOT>

job 5 at 2018-10-03 12:58

 

 

 

4.6只允许管理员从172.16.0.0/12使用远程登陆防火墙主机

命令:

[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -s 172.16.0.0/12 -j ACCEPT  //只允许源172.16.0.0/12的地址的22端口的tcp协议进入

[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j DROP                 //丢弃端口22的TCP协议

 

 

4.7允许本机开放的端口从TCP端口20-1024提供的应用服务

命令:

[root@localhost ~]# iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT      //在入站链中添加本机允许TCP20-1024端口进入的

[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT    //在出站链中添加的本机允许TCP20-1024端口出去

!!!此处特别注意:

对于INPUT链dsport指的是本地的端口

对于OUTPUT链sport指的是本地的端口

 

4.8允许转发来自172.16.0.0/12局域网段的DNS请求数据包

命令:

[root@localhost ~]# iptables -A FORWARD -s 172.16.1.20 -p udp --sport 53 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -d 172.16.1.20 -p udp --dport 53 -j ACCEPT

 

 

4.9禁止其他主机ping防火墙主机,但允许从防火墙上ping其他主机

命令:

[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP

[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT

[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT

 

 

 

 

4.10禁止转发来自MAC地址和主机的数据包

命令:

[root@localhost ~]# iptables -I INPUT -m mac --mac-source 80:18:44:DF:F6:81 -j DROP

说明:iptables中使用‘-m 模块关键字’的形式调用显示匹配。咱们这里用‘-m mac -mac-source’来表示数据包的源MAC地址

 

 

4.11允许防火墙对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280

命令:

[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT

说明:这里使用‘ -m multiport --dport ’来指定目的端口及范围

 

 

4.12禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包

命令:

[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

说明:此处用‘ -m iprange --src-range’来指定IP地址的范围

 

 

4.13禁止转发与正常TCP连接无关的非--syn请求的数据包

命令:

[root@localhost ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

说明:‘-m state’表明数据包的连接状态,‘NEW’表示与任何连接无关的

 

 

4.14拒绝访问防火墙新数据包,但允许相应连接或已有连接相关数据包

命令:

[root@localhost ~]# iptables -A INPUT -p tcp -m state --state NEW -j DROP //丢弃新建的TCP连接

[root@localhost ~]# iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT //接受已经建立的连接

说明:

‘ ESTABLISHED’表示已经响应或者已经建立连接的数据包,‘RELATED’表示与建立连接有相关性的连接

 

 

4.15只开放本机WEB服务(80),FTP(20.21.20450-20480),放行外部主机主机发往服务器其他端口的应答数据包,将其他入站数据包均予以丢弃处理

命令:

[root@localhost ~]# iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT //允许接受20.21.80端口

[root@localhost ~]# iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT //允许接受20450到20480端口

[root@localhost ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT //接受已响应连接和已建立连接

[root@localhost ~]# iptables -P INPUT DROP //为INPUT链建立默认规则,入站数据包全部丢弃

 

 

5.错误记录

5.1添加允许防火墙转发除icmp协议以外的所有数据包

 

解决:虽然会报错但是添加规则的命令还是会被执行,报错信息显示”Using intrapositioned negation is deprecated (` --option ! this`)”使用内部缺陷,属于BUG问题,”in favor of extrapositioned (` ! --option this`)”表是支持的方式为 ! --option this 这样就可以解决此报错问题

 

 

Using intrapositioned negation (`--option ! this`) is deprecated in favor of extrapositioned (`! --option this`).

Intrapositioned 内陷的

Negation      否定

Deprecated    贬低

Extrapositioned  外置 外部转换

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值