Iptables使用

news/2024/11/17 10:48:46/文章来源:https://www.cnblogs.com/civetcat/p/18190976

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 ACCEPTecho "iptables 规则已清空并重置"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/708676.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cs01 CSS Syntax

A CSS comprises of style rules that are interpreted by the browser and then applied to the corresponding elements in your document. A style rule is made of three parts −Selector − A selector is an HTML tag at which a style will be applied. This could be …

手写Word2vec算法实现

1. 语料下载:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 【中文维基百科语料】 2. 语料处理 (1)提取数据集的文本 下载的数据集无法直接使用,需要提取出文本信息。 安装python库:pip install numpy pip install scipy pip install …

IP地址与子网掩码的关系

IP地址与子网掩码的关系IP地址与子网掩码的关系网站:http://shibowl.topgithub:https://github.com/hanbinjxnc博客园:https://www.cnblogs.com/hool 博客:https://blog.shibowl.top 作者:世博 2019年4月28日

2024/05/19

复盘金龙汽车 是趋势/不能突破买入,首次突破时假突破,有时候二次突破也是假突破,第三次才成功,假突破后会深度快速回踩深蹲,如果买入会吃大面!真突破后往往连续快速上涨,不会给上车机会。 像这种一涨三回头的票,经常有假突破,不适合用突破买入,适合用低吸,均线位置缩…

操作系统基础——01 操作系统基本概念

操作系统基础——01 操作系统基本概念目录计算机系统的层次结构操作系统的定义操作系统的功能和目标作为系统资源的管理者向上层提供方便易用的服务作为最接近硬件的层次操作系统的四个特征并发共享虚拟异步操作系统的发展与分类操作系统的运行机制中断和异常中断的作用中断类型…

SpringCloud(3)-OpenFeign相关配置

OpenFeign 是个声明式 WebService 客户端,使用 OpenFeign 让编写 Web Service 客户端更简单。 Spring Cloud 对 OpenFeign 进 行 了 封 装 使 其 支 持 了 Spring MVC 标 准 注 解 和 HttpMessageConverters。 OpenFeign 可以与 Eureka 和 Ribbon 组合使用以支持负载均衡。1.配…

如此丝滑的API设计,用起来真香

谈及软件中的设计,无论是架构设计还是程序设计还是说API设计, 原则其实都差不多,要能够松耦合、易扩展、注意性能。遵循上述这些API的设计规则, 相信大家都能设计出比较丝滑的API。当然如果还有其他的API设计中的注意点也欢迎在评论区留言。分享是最有效的学习方式。 博客:…

《user-agent(UA)识别 Api 接口助力智能应用开发》

在现代智能应用的开发中,往往需要对用户的设备和浏览器进行识别,以便适配不同的操作系统和浏览器。而user-agent是一种非常重要的信息,它包含了用户设备、操作系统和浏览器的相关信息。在本文中,我们将介绍一个强大的user-agent识别 API 接口,它可以帮助开发者轻松实现用户…

科学时如何更快进行DNS解析及微信双开

如何更快进行DNS解析科学了,发现访问很慢,有时还无法访问,明显是被某种神秘的东方力量给阻断了。 DNS解析就起作用了。可以快速寻址,目前国内比较知名的且比较快的就是阿里云的:223.5.5.5。但是呢,这还需要看你自己的网络是哪家的,去访问国际的时候路由节点是否在国内来…

eclipse安装tomcat

一、确保Tomcat服务器处于关闭状态在配置之前确保tomcat服务器处于关闭状态,若tomcat处于启动状态则将其关闭,Service Status的值为Stopped表明Tomcat已经关闭 二、在Eclipse中配置Tomcat打开Eclipse---->点击Window---->点击Preferences点击Server---->点击Runtime…

Redis安装之集群-集群(cluster)模式

一、背景 Redis 哨兵模式在一定程度上解决的系统的高可用问题,但单 master 节点的写入也成为了系统处理高并发请求时的瓶颈。 二、方案原理采用多个 master 节点集群模式实现 Redis 水平扩容,提供并发请求处理能力; cluster 自带 sentinel 故障转移机制,无需再使用哨兵功能…