iptables防火墙工具的学习

本文详细介绍了iptables作为Linux防火墙的工作原理,包括内核、netfilter和iptables的角色,以及防火墙的功能、规则表和链结构。还讨论了iptables命令的使用,如设置规则、查看和清除规则,以及实验示例,如通过计划任务防止服务断开。此外,提到了iptables的匹配条件,如协议、端口和IP地址范围匹配。

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

目录

防护墙是什么呢?

防火墙是否可以防火、防盗、防病毒呢?

防火墙的一些功能:(保护功能)

​​​​​防火墙的组成:

iptables的学习概述

一、解释一下什么是内核、netfilter、iptables吧!

1、内核:是linux操作系统最核心的软件

2、netfilter:

3、iptables:

二、什么时候用户启用的进程状态可以变成内核态?

1、系统调用的时候2、中断的时候 --》 中断 --》中间运行的时候被打断 --》interrupt 中断    硬件出现问题的时候会出现中断(出现异常)    IO(进出或者读写)的时候 --》 input output --》网络IO  磁盘IO 

三、iptables的环境配置:

iptables是工作在TCP/IP的网络层​编辑

四、iptables的规则表\链结构:

1、规则链:规则堆放的一个位置 --》如ip、端口号、 协议等

2、规则表:规则表是规则链的集合

3、规则链的匹配顺序

4、linux路由转发功能的打开

五、iptables命令的使用:

1、iptables的语法规则:

2、注意事项:

3、设置规则内容:

4、列表查看规则:

5、清除规则:

6、自定义规则链:

7、其他:

8、新的链如何被使用?

9、我们在INPUT链上配置规则 --》 防护其他的主机访问我们防火墙本身(自身)

六、实验:在实际工作中、我们为了防止自己把防火墙全部设置为了DROP模式、导致无法连接上、因此可尝试在修改防火墙前设置计划任务,防止服务的断开

1、计划任务:每一分钟 更新一次防火墙规则步骤:

2、计划任务很大的坑:

七、iptables的匹配条件:(通用匹配条件、隐含匹配条件、MAC地址匹配、多端口匹配、IP地址范围匹配)

导入导出防火墙规则


防护墙是什么呢?

防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。

防火墙是否可以防火、防盗、防病毒呢?

防火墙的主要功能是:保护安全 --》 隔离防火墙认为的有危害的数据 --》攻击行为

防火墙像是:保安
只能用来保护安全、而不能杀死病毒

防护ddos攻击:不是一种病毒、 是人主动发起的
ddos:分布式拒绝服务攻击
将对方机器的CPU、内存、带宽、磁盘IO的资源消耗殆尽、不能继续给后面的新用户提供服务了

防火墙的一些功能:(保护功能)

1、防止来自被保护区域外部的攻击。

2、防止信息外泄和屏蔽有害信息。

3、集中安全管理。

4、安全审计和告警。

5、增强保密性和强化私有权。

6、访问控制和其他安全作用等。

​​​​​防火墙的组成:

netfilter 内核模块:实现数据包的过滤的
iptables:给内核里的netfilter 传递参数的工具

完整的防火墙:netfilter + iptables

iptables的学习概述

iptables --》 是一个防火墙工具 --》linux里的 --》 一个软件

iptables 软件防火墙

硬件防火墙:装有防火墙的服务器
linux的防火墙是基于linux内核实现的
内核中有一个包过滤机制 netfilter、 它才是真正起作用的方法
netfilter 是内核中一个数据过滤的模块 保安
iptables 是与人打交道的 给保安netfilter传递消息的对讲机

一、解释一下什么是内核、netfilter、iptables吧!

1、内核:是linux操作系统最核心的软件


kernel:内存 :和硬件打交道
    作用:
        1、对CPU进行调度管理
        2、对内存空间进行分配和管理
        3、对进程进行管理
        4、对磁盘里的文件系统进行管理
        5、对网络进行管理
        6、对其他硬件进行管理

2、netfilter:


    位于linux内核中的包过滤防火墙功能体系
    称为    linux防火墙的“内核态”
内核态:工作在内核空间的进程的状态 --》内核态
用户态:工作在用户空间的进程状态 --》用户态

3、iptables:


    位于/sbin/iptables、是用来管理防火墙的工具
    为防火墙体系提供过滤规则和策略、决定如何过滤或处理达到防火墙主机的数据包
    称为linux防火墙的“用户态”

用户态的进程不能访问内核空间
但是内核态的进程可以访问用户空间

二、什么时候用户启用的进程状态可以变成内核态?


1、系统调用的时候
2、中断的时候 --》 中断 --》中间运行的时候被打断 --》interrupt 中断
    硬件出现问题的时候会出现中断(出现异常)
    IO(进出或者读写)的时候 --》 input output --》网络IO  磁盘IO 

三、iptables的环境配置:

iptables是Linux自带的软件,用于配置和管理网络包过滤规则。

因此我们使用的环境是:

[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)          #centos版本
[root@localhost ~]# uname -r
3.10.0-1160.el7.x86_64                        #内核的版本
[root@localhost ~]# 
查看自己的内核等级
还有uname -a

iptables是工作在TCP/IP的网络层

四、iptables的规则表\链结构:

我们先看看下面这张图:

正如图片中写的,我们可以将五个链路比喻成三国中的五个角色,这样,四表五链的学习会简单很多。

1、规则链:规则堆放的一个位置 --》如ip、端口号、 协议等

规则链:
  规则的作用在于对数据包进行过滤或处理,根据处理时机的不同,各种规则被组织在不同的“链”中
  规则链是防火墙规则/策略的集合


默认的5种规则链:
  INPUT:处理入站数据包
  OUTPUT:处理出站数据包
  FORWARD:处理转发数据包
  POSTROUTING链:在进行路由选择后处理数据包
  PREROUTING链:在进行路由选择前处理数据包
规则链:规则堆放的一个位置 --》如ip、端口号、 协议等

2、规则表:规则表是规则链的集合


    具有某一类相似用途的防火墙规则、按照不同处理时机区被分配到不同的规则链、被归置到不同的“表”中

默认的4个规则表:
    raw表:确定是否对该数据包进行状态跟踪  --》记录状态、 你是新的数据包、 还是老的数据包
                tcp:syn 当处于 ESTABLISHED 可以快速连接
    mangle表:为数据包设置标记        --》可以给数据包插入标记
    nat表:修改数据包中的源、目标IP地址或端口 --》可以修改ip地址和端口号 --》***
    filter表:确定是否放行该数据包(过滤)    --》用的比较多****  默认展示的表
Chain : 链
blockChain:区块链
policy:策略 规则
ACCEPT:可接受的
target:目标

如下所示:

[root@localhost /]# iptables -t filter -L --》查看防火墙里的filter表里的规则链 ***
也可以通过这条命令查看其他表里的规则链
Chain INPUT (policy ACCEPT)
INPUT_direct  all  --  anywhere             anywhere            
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
INPUT_ZONES  all  --  anywhere             anywhere            

Chain FORWARD_OUT_ZONES_SOURCE (1 references)
target     prot opt source               destination         
目标 	   协议 选择 源                   目的地

Chain OUTPUT_direct (1 references)
target     prot opt source               destination          
[root@localhost /]# 

规则表里的优先顺序:raw、 mangle、 nat、 filter

3、规则链的匹配顺序

规则链间的匹配顺序:

入站数据:PREROUTING、INPUT

出站数据:OUTPUT、POSTROUTING

转发数据:PREROUTING、FORWARD、POSTROUTING

规则链内的匹配顺序:

1、按顺序异常进行检查、 找到相匹配的规则即停止
2、若在该链内找不到相匹配的规则、则按该链的默认策略处理
默认规则:policy ACCEPT

下面就是数据包过滤匹配图

4、linux路由转发功能的打开


[root@localhost /]# cat /proc/sys/net/ipv4/ip_forward
1
[root@localhost /]# 
表示打开了路由功能
[root@localhost /]# echo 0 >/proc/sys/net/ipv4/ip_forward
[root@localhost /]# cat /proc/sys/net/ipv4/ip_forward
0
[root@localhost /]# 
表示关闭了路由功能

五、iptables命令的使用:

1、iptables的语法规则:

    iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]

2、注意事项:

    1、不指定表名时、默认表示filter表
    2、不指定链名时、默认表示该表内所有链
    3、除非设置规则链的缺省策略、 否则需要指定匹配条件

3、设置规则内容:

    1、-A:在链表(末尾)追加一条新的规则
    2、-I:在指定位置(或链首)插入一条新的规则
    3、-R:修改、替换指定位置或内容的规则
    4、-P:设置指定链的默认策略

4、列表查看规则:

    1、-L:列表查看各条规则信息
    2、--line-numbers:查看规则信息时显示规则的行号
    3、-n:以数字形式显示IP地址、 端口等信息
    4、-v:显示数据包的个数、 字节数等详细信息
    5、--line:产生编号

5、清除规则:

    1、-D:删除指定位置或内容的规则
    2、-F:清空规则链内的所有内容

6、自定义规则链:

    1、-N:创建一条新的规则链
    2、-X:删除自定义的规则链

7、其他:

    1、-h:查看iptables命令的使用帮助

8、新的链如何被使用?

1、创建新链
[root@localhost shell]# iptables -t filter -N sanchuang   --》自定义链
[root@localhost shell]# iptables -t filter -I INPUT -p icmp -j sanchuang  -》给自定义的链赋值   
[root@localhost shell]# iptables -L sanchuang
Chain sanchuang (1 references)
target     prot opt source               destination    

[root@localhost ~]# iptables -L sanchuang
Chain sanchuang (0 references)
target     prot opt source               destination         
[root@localhost ~]# iptables -X sanchuang   --》删除自定义的链 删除前必须把链给清空 否则删除不了
[root@localhost ~]# iptables -L sanchuang
iptables: No chain/target/match by that name.

9、我们在INPUT链上配置规则 --》 防护其他的主机访问我们防火墙本身(自身)

[root@localhost /]# iptables -t filter -A INPUT -p tcp -j ACCEPT
#给我们的 filter表里的INPUT链 设置为 允许 TCP协议的通过
[root@localhost /]# iptables -I INPUT -p udp -j ACCEPT
#设置INPUT链 允许 UDP协议的通过
[root@localhost /]# iptables -I INPUT 2 -p icmp -j ACCEPT
#设置INPUT链 位置为第二个 允许ICMP协议的通过
[root@localhost /]# iptables -P INPUT DROP
#设置默认的INPUT链的规则是阻止所以协议的访问
[root@localhost /]# iptables -L INPUT --line-numbers
#查看iptables防火墙,并且查看行数
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  anywhere             anywhere            
2    ACCEPT     icmp --  anywhere             anywhere            
3    ACCEPT     tcp  --  anywhere             anywhere            
[root@localhost /]# 

将他写成脚本:

[root@localhost shell]# cat iptables.sh
#!/bin/bash

iptables -F -t filter    #清除filter表里的规则
iptables -t filter -A INPUT -p tcp -j ACCEPT
iptables -I INPUT -p udp -j ACCEPT
iptables -I INPUT 2 -p icmp -j ACCEPT
iptables -P INPUT DROP

[root@localhost shell]#

下面是一些实验中的命令: 

[root@localhost /]# nft list ruleset --》查看filter表

[root@localhost /]# firewall-cmd --list-all    --》firewall 防火墙
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
[root@localhost /]# 

[root@localhost /]# netstat -anplut|grep ssh    --》 查看ssh连接的端口号
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      4593/sshd: root@pts 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1074/sshd           
tcp        0      0 192.168.2.200:22        192.168.2.118:50347     ESTABLISHED 4593/sshd: root@pts 
tcp6       0      0 ::1:6010                :::*                    LISTEN      4593/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      1074/sshd           
[root@localhost /]# 
=====
[root@localhost shell]# ls -a    		--》 可查看隐藏文件
.               for2.sh      pos_var.sh           unused_ip.txt
..              for3.sh      scan_ip.sh           up.txt
creat_user.sh   for.sh       sc_mkpasswd.sh       used_ip.txt
delete_user.sh  if2.sh       .sc_mkpasswd.sh.swp  --》vim编辑过程中断网导致编辑失败、产生的警告文件
down.txt        if.sh        snat.sh              while2.sh
first.sh        lan_scan.sh  test.sh              while.sh
[root@localhost shell]# vim sc_mkpasswd.sh 
[root@localhost shell]# rm -rf .sc_mkpasswd.sh.swp   --》 删除警告文件 可去除警告
[root@localhost shell]# vim sc_mkpasswd.sh 
[root@localhost shell]# 

六、实验:在实际工作中、我们为了防止自己把防火墙全部设置为了DROP模式、导致无法连接上、因此可尝试在修改防火墙前设置计划任务,防止服务的断开


1、计划任务:每一分钟 更新一次防火墙规则
步骤:

[root@localhost shell]# cat clear_iptables.sh  --》清除iptables脚本
#!/bin/bash

iptables -F -t filter
iptables -F -t nat

iptables -P INPUT ACCEPT


[root@localhost shell]# 

[root@localhost shell]# crontab -e   --》 进行linux计划任务的编写
[root@localhost shell]# crontab -l   --》 查看crontab文件内的计划任务
*/1 * * * * bash /shell/clear_iptables.sh
[root@localhost shell]# 

[root@localhost shell]# cd /var/log  --》去寻找cron的日志
[root@localhost log]# ls
anaconda            maillog-20230115   sssd
chrony              ntpstats           vmware-network.4.log
cron  --》找到了               pluto              vmware-network.5.log
cron-20221221       ppp                vmware-network.6.log


[root@localhost log]# tail -f cron  --》动态检测cron日志
Feb 25 03:35:07 localhost crond[7825]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
Feb 25 03:36:01 localhost CROND[7843]: (root) CMD (bash /shell/clear_iptables.sh)
Feb 25 03:37:01 localhost CROND[7875]: (root) CMD (bash /shell/clear_iptables.sh) --》 成功执行
[root@localhost log]# cd /shell
[root@localhost shell]# ls
clear_iptables.sh  for3.sh      pos_var.sh      up.txt
creat_user.sh      for.sh       scan_ip.sh      used_ip.txt
delete_user.sh     if2.sh       sc_mkpasswd.sh  user.txt
down.txt           if.sh        snat.sh         while2.sh
first.sh           iptables.sh  test.sh         while.sh
for2.sh            lan_scan.sh  unused_ip.txt
[root@localhost shell]# bash clear_iptables.sh   --》这里执行
[root@localhost shell]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
[root@localhost shell]# 

为什么能在外面实行、但在crontab里面不能实行?
因为crontab在路径里找不到
所以我们只能在 clear_iptables.sh 里用绝对路径

[root@localhost shell]# which iptables  --》 查看绝对路径
/usr/sbin/iptables
[root@localhost shell]# cat clear_iptables.sh 
#!/bin/bash
/usr/sbin/iptables -F -t filter
/usr/sbin/iptables -F -t nat

/usr/sbin/iptables -P INPUT ACCEPT

[root@localhost shell]# tail -f /var/log/cron   --》查看动态日志
Feb 25 03:46:01 localhost CROND[8169]: (root) CMD (bash /shell/clear_iptables.sh)
Feb 25 03:47:01 localhost CROND[8192]: (root) CMD (bash /shell/clear_iptables.sh)
Feb 25 03:48:01 localhost CROND[8220]: (root) CMD (bash /shell/clear_iptables.sh)
Feb 25 03:49:02 localhost CROND[8245]: (root) CMD (bash /shell/clear_iptables.sh) --》成功执行

[root@localhost shell]# iptables -L INPUT
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            
[root@localhost shell]# iptables -L INPUT   --》成功实现了计划任务
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

2、计划任务很大的坑:


当写完了计划任务的脚本、 但是无法执行计划任务的时候、 可能是你的crontab的PATH地址里面没有你需要运行软件的地址、因此我们需要添加地址、防止出现无法执行的问题

调用的脚本里、 如果有些命令比使用绝对路径、 会导致命令查找不到、 从而不能被执行

七、iptables的匹配条件:(通用匹配条件、隐含匹配条件、MAC地址匹配、多端口匹配、IP地址范围匹配)

通用条件匹配:
    1、协议匹配 : -p 协议名  协议名可使用在“/etc/protpcols”文件中的定义的名称 如 TCP ICMP UDP等
    2、地址匹配 : -s 源地址    -d 目标地址  地址可以是某个IP地址、网络地址(带掩码长度)
    3、接口匹配 : -i 网络接口名(入)  -o 网络接口名(出) 分别对应接收、 发送数据包的网络接口

隐含条件匹配:
    1、端口匹配: --sport 源端口     --dport 目标端口    可采取范围 “端口1:端口2”指定范围内的端口
    2、TCP标记匹配: --tcp-flags 检测范围  被设置的标记  如:SYN、RST、ACK
    3、ICMP类型匹配: --icmp-type ICMP类型  ICMP类型可以使用类型字符串或者对应的数值、 例如:Echo-Request、 Echo-Reply

                      8                     0

iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT

[root@localhost ~]# iptables -A INPUT -p tcp --dport 2233 -j ACCEPT  --》 当使用dport端口号时、必须指明是那种协议、不然会报错 如TCP UDP ICMP 等
[root@localhost ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:infocrypt
[root@localhost ~]# 

[root@localhost ~]# iptables -A INPUT -p tcp --dport 2233:8000 -j ACCEPT  --》 端口号可用“:”隔开表示端口号的一个范围 
[root@localhost ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:infocrypt
ACCEPT     tcp  --  anywhere             anywhere             tcp dpts:infocrypt:irdmi
[root@localhost ~]# 

MAC地址匹配:使用 -m mac  结合 --mac-source MAC地址 的形式
多端口匹配: 使用 -m multiport 结合 --sports 源端口列表 或者 --dports 目标端口列表 的形式
                        多个端口号之间用 “,” 分隔、 连续端口号用 “:” 分隔
IP地址匹配范围:使用 -m iprange 结合  --src-range 源IP范围 或者 --dst-range 目标IP范围 的形式
                             以 “-”符号连接起始IP地址、结束IP地址

iptables -A INPUT -p -tcp -m multiport --dport 20, 21, 25, 110, 1250:1280 -j ACCEPT

导入导出防火墙规则

导出规则:

iptables-save

结合重定向输出 “>” 符号保存规则信息

导入规则:

iptables-restore

结合重定向输入 “<” 符号恢复规则信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值