Linux iptables 防火墙配置

iptables 包过滤和网络地址转换

概述

  • 防火墙就是访问控制技术,由规则和动作组成
  • 工作在网络层

iptables 启停

  • 启停

    systemctl start firewalld.service
    systemctl restart firewalld.service
    systemctl stop firewalld.service
    

netfilter

  • netfilter 位于Linux 内核中的包过滤功能体系,称为Linux 防火墙的“内核态”。
  • iptables 位于/sbin/iptables,用来管理防火墙规则的工具,称为Linux 防火墙的“用户态”。
  • 以上两种称呼都可以标识Linux 防火墙,同时可以通过服务名firewalld.service 来管理防火墙。

查看 iptablles 规则

iptables -nvL

数据包五元组

  • 源 ip、目的 ip、源 port、目的 port、协议(tcp、udp、icpm……)

iptables 匹配逻辑

  • 不指定表名时,默认指 filter 表;
  • 不指定链名时,默认值表内所有链;
  • 除非设置链的默认策略,否则必须指定匹配条件;
  • 选项、链名、控制类型(动作)使用大写字母,其余均为小写;
  • 不指定序号的时,默认第一条规则(首链);
  • 从上到下,以此匹配;
  • 如果匹配到了规则,立即执行动作(控制类型),结束匹配;
  • 如果没有匹配到规则,则执行默认动作。

iptables 四表五链

规则表

表的作用就是容纳各种规则链,根据不同的功能,表有如下类别:

规则表名称作用说明
raw流量跟踪确定是否对该数据包进行状态跟踪
mangle流量“整容”为数据包设置标记
nat地址转换修改数据包中的源、目标IP 地址或端口
filter过滤,筛选确定是否放行该数据包

规则链

规则链的作用就是对数据包进行过滤或处理,链中可以容纳各种防护墙规则,根据处理数据包的不同时机,规则链有如下分类:

规则链名称作用说明
INPUT处理入站数据包数据访问本机时候所限制规则的编写位置
PREROUTING在进行路由选择前处理数据包
FORWARD处理转发数据包是否允许数据经过我进行转发
POSTROUTING在进行路由选择后处理数据包
OUTPUT处理出站数据包数据包向外发所写的规则限制(一般不写规则)

image-20231012151844826

匹配流程

规则表之间的顺序:raw-> mangle-> nat-> filter。

规则链之间的顺序。

  • 入站:PREROUTING INPUT
  • 出站:OUTPUT POSTROUTING
  • 转发:PREROUTING FORWARD POSTROUTING

规则链内匹配的顺序:

  • 按顺序依次检查,匹配即停止
  • 若找不到相匹配的规则,则按该链的默认策略处理

匹配流程示意图:

image-20231012213347711

image-20231012211304400

匹配条件

image-20231012212424658

通用匹配

独立使用,可以直接使用,不依赖与其他条件或扩展,包括网络协议、IP 地址、网络接口等条件。

常见通用匹配条件:

匹配条件参数可选参数
协议匹配-p 协议名{all| tcp| udp| icmp}
地址匹配-s 源地址 -d 目的地址全部 ip 0.0.0.0/0
特定 ip 192.168.1.100/32
接口匹配-i 入站网卡 -o 出站网卡

示例:

iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD ! -p icmp -j ACCEPT                 # ! 标识条件取反
iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -I INPUT -s 10.20.30.0/24 -j DROP
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP     # eth1 外网接口
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

隐含匹配

要求以特定的协议匹配作为前提,包括端口、TCP 标记、ICMP 类型的条件。

常用隐含匹配条件:

匹配方式选项说明
端口匹配–sport 源端口 --dport 目的端口
TCP 标记类型–tcp-flags 检查范围 被设置的标记
ICMP 类型–icmp-type ICMP 类型{8|0|3}
8 请求
0 回应
3 不可达

显式匹配

要求以“-m 扩展模块” 的形式明确指出类型,包括多端口、MAC 地址、IP 范围、数据包状态等等条件。

常用显式匹配条件:

匹配方式选项说明
多端口匹配-m multiport --sport 源端口列表 -m multiport --dport 目的端口列表
IP 范围匹配-m iprange --src-range IP 范围
MAC 地址匹配-m mac --mac-source MAC 地址
连接状态匹配-m state --state 连接状态

动作(控制类型)

控制类型动作说明
ACCEPT允许通过。
DROP直接丢弃,不给出任何回应。
REJECT拒绝通过,必要时给出提示。
LOG记录日志信息,然后传给下一条规则继续匹配。

基本语法

语法构成

  • 核心思想:

    iptables 操作哪个张表,哪个链,符合什么流量,执行什么动作

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

    image-20231012212214352

  • 例 iptables 的 SNAT 转换规则

    iptables -t nat -I POSTROUTING -p all -s 0.0.0.0/0 -o ens32 -j SNAT --to-source 10.4.7.130
    	-t	# table
    	-I	# Insert
    	-P	# protocol
    	-s	# source ip
    	-o	# output 出接口网卡
    	-j	# 控制类型
    

查看规则列表

iptables -nvL
# 列出所有表和链上的规则

iptables -t filter -nvL
# 列出 filter 表中的规则

iptables -nvL --line-numbers
# 在输出中显示规则的行号,方便查找和管理规则

watch -n1 iptables -t filter -nvL --line-numbers
# 动态监控 filter 表  -n1 表示一秒刷新一次

删除/清空规则

iptables -t filter -D INPUT 1
# 删除第一条规则(新插入的)

iptables -F
# 清空 filter 表中的所有规则

iptables -t nat -F
# 清空 nat 表中的所有规则

iptables -t mangle -F
# 清空 mangle 表中的所有规则

iptables -t raw -F
# 清空 raw 表中的所有规则

导入/还原

  • 导入

    iptables-save > /opt/iprules_all.txt
    head /opt/iprules_all.txt 
    
  • 还原(启动后)

    iptables-restore < /opt/iprules_all.txt
    

添加新规则

iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -I INPUT 2 -p icmp -j ACCEPT
iptables -t filter -I INPUT -p icmp -j ACCEPT

练习

禁止 ping 网关
  • 设置防火墙规则前

    连通性测试

    image-20231012171125138

    image-20231012171139642

  • GW 设置规则

    iptables -t filter -I INPUT -p icmp -s 0.0.0.0/0 -j REJECT
    

    image-20231012171217583

    连通性测试

    image-20231012171242846

    image-20231012171251852

只让 server ping 网关
  • 删除刚刚建立的规则

    iptables -t filter -D INPUT 1
    

    image-20231012171630066

    image-20231012171612407

  • 建立规则,禁止 server(172.16.1.100) ping 网关

    GW 设置规则

    iptables -t filter -I INPUT -p icmp -s 172.16.1.100/32 -j REJECT
    

    image-20231012171915423

  • 建立规则后,server 无法 ping 通网关

    image-20231012172005042

    Client 仍可以 ping 通 GW

    image-20231012172452892

开放dns 服务
  • 开启防火墙后,无法使用 DNS 解析功能

    image-20231012173911985

    image-20231012172712517

  • 防火墙新建规则开放 DNS 解析

    iptables -t filter -I INPUT -p udp -s 0.0.0.0/0 --dport 53 -j ACCEPT
    

    image-20231012173046141

    验证

    image-20231012174833639

    image-20231012173111659

    查看防火墙配置

    iptables -t filter -nvL --line-numbers
    
防火墙规则备份
  • 导出防火墙规则

    iptables-save > /opt/iprules_all.txt
    

    image-20231012175214828

重启防火墙
  • 重启

    systemctl restart firewalld.service
    

    image-20231012175255297

  • 重启后之前的规则失效

    • server ping GW 可以 ping

      image-20231012175404908

    • dns 无法解析

      image-20231012175505198

      image-20231012175514127

防火墙规则导入还原
  • 导入还原规则

    iptables-restore < /opt/iprules_all.txt
    

    image-20231012175544122

  • 验证

    • server ping GW 无法 ping

      image-20231012175614388

    • dns 可以解析

      image-20231012175643293

      image-20231012175656293

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gjl_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值