首页 > 系统相关 >Iptables使用

Iptables使用

时间:2024-05-19 12:08:59浏览次数:14  
标签:Iptables iptables -- 使用 NAT 规则 INPUT 数据包

netfiler(linux内核)
管理防火墙工具:
iptables firewalld nft ufw

image

三种报文流向
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING

iptables
五个表 (Tables)
Filter 表

功能: 处理数据包的过滤,是默认的表。
常用链: INPUT, FORWARD, OUTPUT
描述: 主要用于允许或拒绝数据包。所有默认情况下没有指定表的规则都存储在此表中。
NAT 表

功能: 处理网络地址转换(NAT)。
常用链: PREROUTING, POSTROUTING, OUTPUT
描述: 主要用于修改数据包的源地址或目的地址,常用于端口转发和 IP 伪装(如 Source NAT 和 Destination NAT)。
Mangle 表

功能: 修改数据包内容。
常用链: PREROUTING, OUTPUT, INPUT, FORWARD, POSTROUTING
描述: 用于特定类型的数据包修改,如修改 TOS(Type of Service)和 TTL(Time to Live)等字段。
Raw 表

功能: 数据包跟踪状态的设置。
常用链: PREROUTING, OUTPUT
描述: 用于处理数据包跟踪,主要用于标记数据包不被跟踪(NOTRACK)。
Security 表

功能: 实现安全相关的包过滤。
常用链: INPUT, OUTPUT, FORWARD
描述: 提供安全上下文的过滤规则,如 SELinux 的相关规则。
五个链 (Chains)
INPUT 链

作用: 处理所有进入本地系统的数据包。
典型使用: 控制哪些入站流量被允许访问系统。
FORWARD 链

作用: 处理所有转发的数据包,即那些目标地址不是本地系统的数据包。
典型使用: 用于路由和网关配置,决定数据包是否被允许通过系统转发。
OUTPUT 链

作用: 处理本地系统生成并发送的数据包。
典型使用: 控制出站流量。
PREROUTING 链

作用: 处理所有在路由决策前到达的数据包。
典型使用: 通常用于 NAT 表,用于修改数据包的目的地址。
POSTROUTING 链

作用: 处理所有在路由决策后准备发送的数据包。
典型使用: 通常用于 NAT 表,用于修改数据包的源地址。

优先级
security -->raw-->mangle-->nat-->filter

iptables-save > /PATH/TO/SOME_RULES_FILE #保存规则
iptables-restore < /PATH/FROM/SOME_RULES_FILE 加载规则

选项

  -A, --append:在指定链(chain)的末尾添加一个规则。
  -D, --delete:从指定链中删除一个规则。
  -I, --insert:在指定链的特定位置插入一个规则。
  -L, --list:列出指定链的所有规则。
  -F, --flush:清空指定链中的所有规则。
  -P, --policy:设置指定链的默认策略。
  -N, --new-chain:创建一个新的自定义链。
  -X, --delete-chain:删除一个自定义链。
  -E, --rename-chain:重命名一个自定义链。
  -P, --protocol:指定规则适用的协议。
  -s, --source:指定源 IP 地址或地址范围。
  -d, --destination:指定目标 IP 地址或地址范围。
  -p, --port:指定源或目标端口。
  -j, --jump:指定要执行的动作(跳转到另一个链或执行特定动作)。
  -i, --in-interface:指定数据包进入的网络接口。
  -o, --out-interface:指定数据包离开的网络接口。
  -m, --match:指定使用的匹配模块。
  -t, --table:指定要操作的表(filter、nat、mangle 等)。
  -v, --verbose:显示更详细的信息。
  -h, --help:显示帮助信息。

例子:
iptables -A INPUT -s 10.0.0.1 -j DROP #删除来自10.0.0.1的包
iptables -A INPUT -s 10.0.0.1 -j REJECT #拒绝来自10.0.0.1的包
iptables -A INPUT -s 10.0.0.1 -j ACCEPT #拒绝来自10.0.0.1的包
iptables -D INPUT 1 #删除第一条
iptables -R INPUT -d 10.0.0.1 -P icmp -j REJECT #不能使用icmp协议连接

规则管理
-A:append,追加
-I:insert, 插入,要指明插入至的规则编号,默认为第一条
-D:delete,删除
  (1) 指明规则序号
  (2) 指明规则本身
-R:replace,替换指定链上的指定规则编号
-F:flush,清空指定的规则链
-Z:zero,置零
  iptables的每条规则都有两个计数器
(1) 匹配到的报文的个数
(2) 匹配到的所有报文的大小之和

动作
ACCEPT
DROP
REJECT:--reject-with:icmp-port-unreachable默认
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志,dmesg
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
自定义链

优化
1.优先放行已建立连接
#在规则链的开头,放行所有状态为 ESTABLISHED 的入站和出站连接,提高效率。
2.谨慎放行新入站请求
3.限制特殊目的的访问
#在放行规则之前,添加拒绝规则以限制特定访问
4.特定规则放在前面
#同类规则中,匹配范围小的规则(如特定 IP)放在前面。
5.不同类规则中匹配范围大的放前面
#对不同类规则,匹配范围大的规则放在前面。
6.合并相似规则
#将多个可以用一条规则描述的规则合并,减少规则数量。
7.设置默认策略为白名单方式
#通过在规则链最后设置默认策略为白名单方式,仅放行特定连接。

规则保存
sudo iptables-save > /etc/iptables/ruules_1
规则恢复
cento6
规则覆盖保存至/etc/sysconfig/iptables文件中
cento7及以上
iptables-restore < /etc/iptables/ruules_1

扩展模块

隐式扩展(不需要写模块而是选项)
tcp 协议的扩展选项
[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围
[!] --destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围
[!] --tcp-flags mask comp
    mask 需检查的标志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST
    comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔tcp协议的扩展选项
例子:
--tcp-flags SYN,ACK,FIN,RST SYN      #表示要检查的标志位为SYN,ACK,FIN,RST四个,其中
SYN必须为1,余下的必须为0,第一次握手
--tcp-flags SYN,ACK,FIN,RST SYN,ACK  #第二次握手

udp 协议的扩展选项
[!] --source-port, --sport port[:port]:匹配报文的源端口或端口范围
[!] --destination-port,--dport port[:port]:匹配报文的目标端口或端口范围

**icmp扩展 **
[!] --icmp-type {type[/code]|typename}
type/code
0/0   echo-reply icmp应答
8/0   echo-request icmp请求
显示扩展

multiport扩展
多端口号
例子:
iptables -R INPUT 1 -p tcp -m multiport --dports 22,80 -j ACCEPT

iprange扩展
ip范围
例子:
iptables -A INPUT -m iprange --src-range 10.0.0.6-10.0.0.10 -j ACCEPT

mac扩展
mac地址(不需要目标地址,因为目标不是自己则抛弃)
例子:
iptables -A INPUT -s 172.16.0.100 -m mac  --mac-source 00:50:56:12:34:56 -j ACCEPT

string扩展
字符串匹配
--algo {bm|kmp} 字符串匹配检测算法
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
--from offset 开始偏移
--to offset   结束偏移
[!] --string pattern 要检测的字符串模式
[!] --hex-string pattern 要检测字符串模式,16进制格式
例子:
iptables -A OUTPUT -p tcp --sport 80 -m string --algo kmp --from 62  --string   "google" -j REJECT #出去带有google拒绝

time扩展
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]       时间
--timestop hh:mm[:ss]
[!] --monthdays day[,day...]   每个月的几号
[!] --weekdays day[,day...]   星期几,1 – 7 分别表示星期一到星期日
--kerneltz:内核时区(当地时间),不建议使用,CentOS 7版本以上系统默认为 UTC
注意: centos6 不支持kerneltz ,--localtz指定本地时区(默认)

connlimit扩展
连接数
--connlimit-upto N #连接的数量小于等于N时匹配
--connlimit-above N #连接的数量大于N时匹配
例子:
iptables -A INPUT  -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT

limit扩展
报文控制(比如限制能接收多少个包)
例子:
iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

state扩展
/proc/net/nf_conntrack
根据状态匹配
NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发
出的请求
ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信
状态
RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关

INVALID:无效的连接,如flag标记不正确
UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪
例子:
jiptables -A INPUT -m state --state ESTABLISHED -J ACCEPT
iptables -A INPUT -m state --state NEW -J REJECT
#先将所以用户都可以进入,然后拒绝新用户

Target
自定义链, ACCEPT, DROP, REJECT,RETURN,LOG,SNAT,DNAT,REDIRECT,MASQUERADE
LOG:非中断target,本身不拒绝和允许,放在拒绝和允许规则前,并将日志记录在/var/log/messages系
统日志中
--log-level level   级别: debug,info,notice, warning, error, crit, alert,emerg
--log-prefix prefix 日志前缀,用于区别不同的日志,最多29个字符
例子:
iptables -I INPUT -s 10.0.0.0/24 -p tcp -m multiport --dports
80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections:"
#直接记录再日志上

NAT 的类型
NAT 有多个类型,最常见的包括:
SNAT(Source NAT):
修改数据包的源地址。通常用于内部网络的设备访问外部网络时,将私有 IP 地址转换为公共 IP 地址。
主要用于出站流量。
DNAT(Destination NAT):
修改数据包的目标地址。通常用于外部网络的设备访问内部网络时,将公共 IP 地址转换为内部私有 IP 地址。
主要用于入站流量。
MASQUERADE:
是 SNAT 的一种特殊形式,主要用于动态分配的公共 IP 地址(如通过 DHCP 获取的 IP 地址)。
适合于那些 IP 地址可能变化的场景。
PAT(Port Address Translation),也叫 Overloading:
一种特殊的 SNAT,它不仅转换源地址,还转换源端口。多个内部设备可以通过一个公共 IP 地址访问外部网络,每个连接使用不同的源端口。

SNAT+DNAT
公网访问内网:NAT通过将自己的端口映射到内网主机的端口,当公网ip访问NAT端口时,则NAT转换到内网ip地址的方式通信
内网访问公网:内网通过端口通过NAT,NAT转换其他端口和自己的ip,让自己的ip和端口去访问公网

自定义链
iptables --N ssh_chain
iptables -A ssh_chain -p tcp --dport 22 -j ACCEPT
引用:
iptables -A INPUT -s 10.0.0.111 -j ssh_chain

#!/bin/bash

# 清空所有内置链的规则
sudo iptables -F

# 删除所有用户定义的链
sudo iptables -X

# 清除所有链的计数器(可选)
sudo iptables -Z

# 将所有内置链的默认策略设置为 ACCEPT
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

echo "iptables 规则已清空并重置"

标签:Iptables,iptables,--,使用,NAT,规则,INPUT,数据包
From: https://www.cnblogs.com/civetcat/p/18190976

相关文章

  • ASP.NET Core应用程序7:使用视图组件
      视图组件是类,为支持分部视图或者在父视图中注入少量Html或Json数据提供了应用程序逻辑。1准备工作  Models文件夹中添加City.cs类和CitiesData类,为CitiesData添加服务。publicclassCity{publicstringName{get;set;}publicstringCo......
  • Keil辅助工具推荐及使用
    前言再最近的学习当中无意间学到了一些关于Keil自动化运行脚本的方式,特此收集整理记录一下这里主要介绍三种收集而来的工具:Keil编译自动生成定制的Hex文件Keil自动化编译代码脚本Keil编译信息增强工具Keil编译自动生成定制的Hex文件参考链接:Keil编译自动生成定制的HEX文件......
  • wimlib可以处理多种Windows映像文件格式,包括WIM、ESD、VHD等,而且还支持高级功能,如压缩
    可以将wimlib视为DISM的替代品之一。虽然DISM是Windows操作系统中的内置工具,但wimlib提供了类似的功能,并且更加灵活和跨平台。wimlib可以处理多种Windows映像文件格式,包括WIM、ESD、VHD等,而且还支持高级功能,如压缩和转换映像文件格式、创建和挂载虚拟磁盘等。它是一个开源软......
  • vitepress使用createContentLoader时遇到["vitepress" resolved to an ESM file. ESM
    在使用vitepress构建一个所有博客的概览页的时候,使用到了createContentLoader这个api,但是在index.data.ts中定义并导出后,在md文件中调用遇到了下面这个问题:Buildfailedwith1error:node_modules/esbuild/lib/main.js:1374:27:ERROR:[plugin:externalize-deps]"vitepress......
  • 使用eclipse建立webservice服务和客户端new
    使用eclipse建立webservice服务和客户端 平时在练习使用webservice互相传数据时,可以使用eclipse建立一个服务端发布WSDL,当然自身也可以建立客户端。Webservice是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标......
  • 在 ASP.NET Core 中使用托管服务实现后台任务
    在ASP.NETCore中,后台任务作为托管服务实现。托管服务是一个类,具有实现 IHostedService 接口的后台任务逻辑。本文提供了三个托管服务示例:在计时器上运行的后台任务。激活有作用域的服务的托管服务。有作用域的服务可使用依赖项注入(DI)。按顺序运行的已排队后台任务......
  • H2 数据库介绍(2)--使用
    本文主要介绍H2的基本使用,文中所使用到的软件版本:Java1.8.0_341、H22.2.224、PostgreSQL驱动42.5.5。1、嵌入式(本地)模式直接使用JDBC连接数据库即可,如果数据库不存在会自动创建。1.1、持久数据库@TestpublicvoidlocalFile()throwsSQLException{Stringd......
  • php 异步并行后续--兼容FPM使用的组件
    上次给人推荐了这篇文章,关于PHP异步并行的文章,之后有人评论问这个组件能不能给fpm用,我测试了一下发现不行,于是又找到一个可以给fpm用的http请求组件.安装很简单,就这样  composerrequireguzzlehttp/guzzle 进行安装一下.然后代码示例如下:我们先建一个文件作为一个长......
  • WPS 表格使用与常用函数
    参考职场必用的9个表格函数20个常用函数及18个常用快捷键rank怎么锁定范围合集·Excel轻教程ExcelVBA入门到精通详细教程环境软件/系统版本说明WindowsWindows10专业版22H219045.4291WPS2024春季更新(16417)正文参考连接已非常清晰,不再cv。......
  • puppeteer使用一些技巧简单说明
    puppeteer是一个nodejs包提供了方便的基于devtools协议进行chrome/chromium控制,puppeteer默认运行在无头模式以下是对于puppeteer使用的一些简单总结一些问题browser&&page对象复用问题实际上还是结合实际,个人建议减少复用,除非自己对于browser&&page进行了比较......