文章目录
参考文章
1. linux iptables详解 作者:JackLiu16
2. Linux网络服务之iptables防火墙工具 作者:白幽幽白
3. 【操作系统】安全管理/防火墙 作者:"sudo
一、防火墙简介
我的另一篇文章,很简单的写了一下防火墙:【操作系统】安全管理/防火墙
相同或类似的内容,本文就不再重复了
本文主要是想记录一下iptables。重点在iptables,不在firewalld
1.Netfilter
- netfilter是一个linux内核 功能,用于在 网络数据包 从网络堆栈进入或者离开时进行包过滤和操作。
- Netfilter 称为防火墙的“内核态”。
2.firewalld和iptables
- Firewalld和iptables都不是防火墙,是防火墙管理工具。被称为防火墙的“用户态”。
- Centos 7中默认管理防火墙规则的工具是firewalld。
二、防火墙管理工具:iptables
1. 定义
- 由软件包iptables提供的命令行工具
- 工作在用户空间,用来编写规则,写好的规则被送往Netfilter-告诉内核如何去处理信息包。
2. 报文流向
记:需要后续完善~20240324
# 1.流入本机
PREROUTING -- INPUT -- 用户空间进程
# 2.流出本机
用户空间进程 -- OUTPUT -- POSTROUTING
# 3.转发
PREROUTING -- FORWARD -- POSTROUTING
3.基本语法
iptables [-t 规则表] 管理选项 [规则链] [匹配条件] [-j 处理动作]
3.1 “四表”
规则表 | 功能 |
---|---|
raw表 | 关闭启用的连接跟踪机制,加快封包穿越防火墙的速度 |
mangle表 | 给数据包设置标记 |
nat表 | 地址转换规则表 |
filter表 | 过滤规则表,根据预定义的规则 过滤符合条件的数据包(默认表) |
3.2 “五链”
规则链的作用:容纳各种防火墙规则,对数据包进行过滤或处理。
规则链 | 功能 |
---|---|
INPUT链 | 处理入站数据包 |
OUTPUT链 | 处理出站数据包 |
FORWARD链 | 处理转发数据包 |
PREROUTING链 | 在进行路由选择前处理数据包 |
POSTROUTING链 | 在进行路由选择后处理数据包 |
3.3 管理选项
可使用iptables -h
进行查询
下表列举一些常用的,并不全
操作类型 | 管理选项 | 描述 |
---|---|---|
增 | -A | 向规则链中添加一条规则,末尾追加 |
增 | -I | 在规则链的指定位置插入一条规则,未指定徐皓,默认作为第一条 |
增 | -N | 创建一个新的自定义规则链 |
删 | -D | 从规则链中清除一条规则 |
删 | -F | 清除链中所有规则 |
删 | -X | 删除一个自定义规则链 |
“改” | -R | 替换规则链中的一条规则 |
“改” | -E | 重命名规则链 |
查 | -L | 列出规则链中的所有规则 |
查 | –line-number | 查看规则编号 |
3.4 匹配条件
指定匹配条件的选项 | 描述 |
---|---|
-p | 指定要匹配的协议类型,例如TCP、UDP、ICMP等 |
-s | 指定源IP地址或地址范围 |
-d | 指定 目标IP地址或地址范围 |
-i <网络接口> | 指定 输入网络接口 |
-o <网络接口> | 指定 输出网络接口 |
-m | 指定 扩展模块,用于进一步定义匹配条件 |
–icmp-type | 指定ICMP类型 |
–sport | 指定源端口号或端口范围 |
–dport | 指定目标端口号或端口范围 |
3.5 处理动作
处理动作 | 描述 |
---|---|
DROP | 丢弃数据包,不给与任何回应信息 |
REJECT | 拒绝数据包通过,会给数据发送端一个响应信息 |
ACCEPT | 允许数据包通过(默认) |
SNAT | 修改数据包的源地址 |
DNAT | 修改数据包的目的地址 |
LOG | 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则 |
MASQUERADE | 伪装成一个非固定公网IP地址 |
4. 基础实例
4.1 增
即: 增加规则,添加规则
#一般只对INPUT和PREROUTING规则链进行处理
#不处理OUTPUT POSTROUTING FORWARD
# 实例1 :允许来自192.168.1.0/24子网的数据包进入INPUT链
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
# iptables [-t filter] -A INPUT -s ***.***.***.*** -j DROP/REJECT
# 实例2 :在INPUT链的第2条规则之前插入一条允许来自192.168.1.0/24子网的数据包进入的规则
iptables -I INPUT 2 -s 192.168.1.0/24 -j ACCEPT
# iptables -I INPUT 编号 -s ***.***.***.*** -j DROP
4.2 删
即:删除规则
# iptables -D <规则链> <要删除的规则>
# iptables -D <规则链> n #n为规则编号
# 实例1 : 删除允许来自192.168.1.0/24子网的数据包进入INPUT链的规则
iptables -D INPUT -s 192.168.1.0/24 -j ACCEPT
4.3 改
即:修改 替换规则
# 将INPUT链中的第2条规则替换为拒绝来自192.168.1.0/24子网的数据包的规则
iptables -R INPUT 2 -s 192.168.1.0/24 -j DROP
4.4 查
iptables -vnL #查看所有规则表的规则
# -t 指定查看某个规则表,默认filter表
# -v 详细信息
# -n 数字形式显示
# -L 查看规则列表
三、默认策略(可略)
详细内容可参考 <参考文章第二篇~>
此处不多做介绍
比较常见的
# 允许SSH进入
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许HTTP和HTTPS流量
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT