iptables深度总结--基础篇

news2024/11/15 2:12:14

iptables

五表五链

链:INPUT OUTPUT FORWARD PREROUTING POSTROUTING

表:filter、nat、mangle、raw、security

数据报文刚进网卡,还没有到路由表的时候,先进行了prerouting,进入到路由表,通过目标地址判断出来,如果是给自己发的,就直接INPUT,如果是通过自己到转发别的目标的,就进行forward。如果是访问本机的,那么经过INPUT之后,需要往外出,那么就会用到OUTPUT链。OUTPUT出去之后就要查询路由表,就和forward chain汇总到一个出口上,经理最后的过程就是POSTROUTING CHAIN。

三条路径:

  1. 进入本机:PREROUTING --> INPUT

  2. 穿过本机的:PREROUTING --> FORWARD --> POSTROUTING

  3. 从本机往外走的:OUTPUT --> POSTROUTING

实验环境准备

  • Centos7:systemctl stop firewalld.service && systemctl disable firewalld. service

  • Centos6:service iptables stop && chkconfig iptables off && checonfig --list iptables

    卸载虚拟网卡
    yum info libvirt-deamon
    yum remove libvirt-deamon
    

    看看iptables来自于那个包

    rpm -ql `which iptables`
    

iptables规则

组成部分:根据规则匹配条件来尝试匹配报文,一旦匹配成功,就由规则定义的处理动作作出处理

  • 匹配条件:默认为与条件,同时满足 基本匹配:IP,端口,TCP的Flags(SYN,ACK等) 扩展匹配:通过复杂高级功能匹配
  • 处理动作:称为target,跳转目标 内建处理动作: ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG… 自定义处理动作:自定义chain,利用分类管理复杂情形
  • 规则要添加在链上,才生效;添加在自定义上不会自动生效
  • 链chain: 内置链:每个内置链对应于一个钩子函数 自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有 Hook钩子调用自定义链时,才生效

iptables命令

cent6和centos7查看帮助的方式不同,centos7把拓展分出去了

centos6: man iptables

centos7:man iptables && man iptables-extendisions

man 8 iptables
iptables [-t table] {-A|-C|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]

在这里插入图片描述

-t=table -A=appentd -s=source ip -j=jump

input=INPUT

暴力ping
ping -f 192.168.63.3
iptables -t filter -A INPUT -s 192.168.63.3 -j DROP
iptables -t filter -A INPUT -s 192.168.63.3 -j REJECT
iptables -t filter -A INPUT -s 192.168.63.0/24 -j REJECT
drop是丢弃 REJECT是不回应
对于ping而言 reject收到unreachable ,drop无显示
liunx小型抓包工具
tcpdump -i eth0 -nn
tcpdump -i eth0 -nn src 192.168.63.3
tcpdump -i eth0 -nn host 192.168.63.3
iptables -L (英文)
iptables -nL(包的字节数)
iptables -nvL (更为详细的包的字节数)
iptables -nxvL(精确)
iptables -nvL --line-number编号,先后顺序
iptables -D INPUT 1 删除 
iptables -t filter -I `--line-number` INPUT -s 192.168.63.0/24 -j ACCEPT

规则管理

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

全禁用 && 本地回环网络

iptables -t filter -A INPUT -s 0.0.0.0  -j DROP
iptables -p INPUT DROP
iptables -I INPUT 6 -s 127.00.1,192.168.663.250 -j ACCEPT
iptables -r INPUT 5 -i lo -j ACCEPT
iptables -P INPUT DROP 

备份

n分钟之后执行任务

echo wall warning | at now+1 minutes

iptables命令拓展

管理端口号
ss -tnl
ss -tn
  1. 查看帮助 CentOS 6: man iptables CentOS 7: man iptables-extensions

  2. muiltport拓展

    multiport扩展 以离散方式定义多端口匹配,最多指定15个端口
    --source-ports,--sports port[,port|,port:port]... 指定多个源端口
    --destination-ports,--dports port[,port|,port:port]... 指定多个目标端口
    --ports port[,port|,port:port]...多个源或目标端口 
    示例: iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT
    iptables -I INPUT 3 -s 192.168.37.6 -p tcp --dport 80 -j ACCEPT
    iptables -I INPUT 3 -s 192.168.37.6 -p tcp --dport 330:335 -j ACCEPT
    muiltport
    当不连续端口号 可以使用拓展模块 muiltport
    iptables -A INPUT  -s 192.168.37.6 -p tcp -m multiport --dports 139,445,11001:11032 -j ACCEPT
    
  3. iprange拓展

    iprange扩展 指明连续的(但一般不是整个网络)ip地址范围

    –src-range from[-to] 源IP地址范围

    –dst-range from[-to] 目标IP地址范围

    示例: iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --srcrange 172.16.1.5-172.16.1.10 -j DROP

icmp协议在网络层 网络层没有端口 
iptables -A INPUT  -s 192.168.37.6 -p tcp --syn -j REJECT
(curl 就用不了了,因为curl走的时候tcp协议)
tcp协议有端口
icmp协议中 编号中 0是返回报文 8是请求报文 
iptables -I INPUT 6 -s 192.168.63.251 -p icmp --icmp-type 0 -j ACCEPT  
250可以ping通251 251ping不通250 
  1. mac扩展 指明源MAC地址 适用于:PREROUTING, FORWARD,INPUT chains

    –mac-source XX:XX:XX:XX:XX:XX

    示例: iptables -A INPUT -s 172.16.0.100 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT iptables -A INPUT -s 172.16.0.100 -j REJECT

  2. string拓展

    string拓展 前62个应该是不会出现google字样了 、在传输层往后了

    数据帧:8个字节前导信息,6个字节目的mac06个字节目的mac、再加上两个字节type类型、然后到了ip头有固定了20个字节,tcp头又有20个

    对报文中的应用层数据做字符串模式匹配检测 --algo {bm|kmp}

    字符串匹配检测算法 bm:Boyer-Moore kmp:Knuth-Pratt-Morris

    –from offset 开始偏移 --to offset 结束偏移

    –string pattern 要检测的字符串模式

    –hex-string pattern要检测字符串模式,16进制格式 示例: iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp --sport 80 -m string - -algo bm --string “google" -j REJECT

  3. 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:内核时区,不建议使用,

    CentOS7系统默认为UTC 注意: centos6 不支持kerneltz ,–localtz指定本地时区(默认) 示例:本地时-8个小时 例如本地要写早9点就写1:00

    iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time - -timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP

  4. connlimit扩展

    根据每客户端IP做并发连接数数量匹配

    可防止CC(Challenge Collapsar挑战黑洞)攻击

    –connlimit-upto #:连接的数量小于等于#时匹配

    –connlimit-above #:连接的数量大于#时匹配

    通常分别与默认的拒绝或允许策略配合使用

    示例: iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit – connlimit-above 2 -j REJECT

    yum install -y gcc
    gcc xxx.c -o flood.out##如果不输就是a.out
    file flood 
    
  5. limit扩展

    基于收发报文的速率做匹配

    令牌桶过滤器

    –limit #[/second|/minute|/hour|/day]

    –limit-burst number

    示例: iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

    iptables -I INPUT 2 -p icmp -j REJECT

  6. state扩展

    根据”连接追踪机制“去检查连接的状态,较耗资源

    conntrack机制:追踪本机上的请求和响应之间的关系

    状态有如下几种:

    NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因 此,将其识别为第一次发出的请求

    ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之 前期间内所进行的通信状态

    RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连 接与命令连接之间的关系

    INVALID:无效的连接,如flag标记不正确 UNTRACKED:未进行追踪的连接,如raw表中关闭追踪

    –state state

    示例: iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT

    已经追踪到的并记录下来的连接信息库 /proc/net/nf_conntrack 调整连接追踪功能所能够容纳的最大连接数量 /proc/sys/net/nf_conntrack_max

    或者写在内核参数的配置文件上

    vi /etc/sysctl.conf  
    net.nf_conntrack_max = 6666
    sysctl -p #生效
    lsmod | grep conn
    

    不同的协议的连接追踪时长 /proc/sys/net/netfilter/

    注意:CentOS7 需要加载模块: modprobe nf_conntrack

    yum install -y vsftp
    ftp服务器被动模式端口不固定 
    可以通过此模块解决 
    modprobe nf_conntrack_ftp
    iptables -t filter -I INPUT 3 -m statr --state ESTABLISH,RELATED -j ACCEPT
    iptables -t filter -I INPUT 3 -p tcp -dport 21 -j ACCEPT
    开放被动的ftp服务器
    yum install vsftpd
    systemctl start vsftpd
    modprobe nf_conntrack_ftp
    iptables -F
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -vnL
    
  7. 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.1.0/24 -p tcp -m multiport --dports 80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections:

  8. 策略

    任何不允许的访问,应该在请求到达时给予拒绝
    规则在链接上的次序即为其检查时的生效次序
    基于上述,规则优化
    1 安全放行所有入站和出站的状态为ESTABLISHED状态连接
    2 谨慎放行入站的新请求
    3 有特殊目的限制访问功能,要在放行规则之前加以拒绝
    4 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理
    5 不同类的规则(访问不同应用),匹配范围大的放在前面
    6 应该将那些可由一条规则能够描述的多个规则合并为一条
    7 设置默认策略,建议白名单(只放行特定连接)
    1) iptables -P,不建议
    2) 建议在规则的最后定义规则做为默认策略

12 规则有效期限: 使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限

保存规则: 保存规则至指定的文件 CentOS 6

service iptables save 将规则覆盖保存至/etc/sysconfig/iptables文件中

CentOS 7 iptables-save > /PATH/TO/SOME_RULES_FILE

CentOS 6: service iptables restart 会自动从/etc/sysconfig/iptables 重新载入规则

CentOS 7 重新载入预存规则文件中规则:

iptables-restore < /PATH/FROM/SOME_RULES_FILE

-n, --noflush:不清除原有规则 -t

–test:仅分析生成规则集,但不提交

  1. 开机自启动

    开机自动重载规则文件中的规则:

    (1) 用脚本保存各iptables命令;让此脚本开机后自动运行 /etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE

    (2) 用规则文件保存各规则,开机时自动载入此规则文件中的规则 /etc/rc.d/rc.local文件添加 iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE

    (3)自定义Unit File,进行iptables-restore

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FFMPEG 关于smaple_fmts的理解及ffplay播放PCM

问题 当我将一个aac的音频文件解码为原始的PCM数据后&#xff0c;使用ffplay播放测试是否成功时&#xff0c;需要提供给ffplay 采样率&#xff0c;通道数&#xff0c;PCM的格式类型 3个参数&#xff0c;否则无法播放&#xff01; 所以使用ffprobe 查看原来的aac文件信息&…

Python手写板 画图板 签名工具

程序示例精选 Python手写板 画图板 签名工具 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<Python手写板 画图板 签名工具>>编写代码&#xff0c;代码整洁&#xff0c;规则&am…

别再回答面试官,toFixed采用的是四舍五入啦!

四舍五入大家都知道&#xff0c;但你知道银行家舍入法么&#xff1f;你知道JS里的toFixed实现用的是哪种吗&#xff1f; 前两天我写了篇《0.1 0.2 不等于 0.3&#xff1f;原来是因为这个》&#xff0c;大概就是说&#xff0c;0.1 0.2不等于0.3是因为浮点数精度问题。 结果在…

LinkedList 的特点及优缺点

现在来讲 LinkedList LinkedList 是链表集合&#xff0c;基于链表去存储数据&#xff0c;每一个数据视作一个节点 private static class Node<E> {// 存放的数据E item;// 下一个节点Node<E> next;// 上一个节点Node<E> prev;Node(Node<E> prev, E ele…

【unity实战】2D横版实现人物移动跳跃2——用对象池设计制作冲锋残影的效果(包含源码)

基于上一篇人物移动二段跳进一步优化完善 先看看最终效果 什么是对象池? 在Unity中,对象池是一种重复使用游戏对象的技术。使用对象池的好处是可以减少游戏对象的创建和销毁,从而提高游戏的性能。如果不使用对象池,每次需要创建游戏对象时,都需要调用Unity的Instantiate函…

国内几大技术网站,你最爱和哪个玩耍?

所谓“物以类聚&#xff0c;人以群分” 所谓“士为知己者死&#xff0c;女为悦己者容” 所谓“世上的乌鸦都一般黑&#xff0c;鸽子却各有各的白” CSDN&#xff0c;掘金&#xff0c;博客园等&#xff0c;说起来都是“技术”社区&#xff0c;每个却都有着不同的姿色和用处。至于…

初识Spring——IoC及DI详解

目录 一&#xff0c;什么是Spring Spring设计核心 Spring核心定义 Spring官网 二&#xff0c;什么是IoC IoC思想 控制权的反转 三&#xff0c;什么是DI DI的定义 DI和IoC的关系 一&#xff0c;什么是Spring Spring设计核心 我们常说的Spring其实指的是Spring Framewo…

ABP vNext电商项目落地实战(一)——项目搭建

一、落地条件&#xff1a; 1. .NET5版本 2. DDD 3. ABP vNext 4.ABP CLI &#xff08;ABP的命令行工具&#xff0c;包括ABP的各种模板&#xff09; 5.SQL Server 写在前面&#xff1a;我觉得这个框架的文件分层很凌乱&#xff0c;在企业的实际业务场景中&#xff0c;一般…

vscode+git浅尝

git 安装git以后初始化仓库分支重命名合并分支连接远程仓库推送项目 安装git以后 第一次使用git需要配置用户名和邮箱 任意处打开git终端&#xff0c;譬如鼠标右击点击git bash here 命令分别为&#xff1a; 设置用户名和邮箱 git config --global user.name “username” …

【QA】Python代码调试之解决Segmentation fault (core dumped)问题

Python代码调试之解决Segmentation fault 问题 问题描述排查过程1. 定位错误&#xff0c;2. 解决办法 参考资料 问题描述 Python3执行某一个程序时&#xff0c;报Segmentation fault (core dumped)错&#xff0c;且没有其他任何提示&#xff0c;无法查问题。 Segmentation fa…

jenkins gitlab asp.net core持续集成

什么是jenkins Jenkins直接取自其官方文档&#xff0c;是一个独立的开源自动化服务器&#xff0c;您可以使用它来自动执行与构建、测试、交付或部署软件相关的各种任务。 jenkins可以干什么 Jenkins 通过自动执行某些脚本来生成部署所需的文件来工作。这些脚本称为JenkinsFi…

叶酸聚乙二醇羟基FA-PEG-OH;了解高分子试剂 Folate-PEG-OH

FA-PEG-OH&#xff0c;叶酸-聚乙二醇-羟基 中文名称&#xff1a;叶酸聚乙二醇羟基 英文名称&#xff1a;FA-PEG-OH HO-PEG-FA Folate-PEG-OH 性状&#xff1a;黄色液体或固体&#xff0c;取决于分子量 溶剂&#xff1a;溶于水&#xff0c;DMSO、DMF等常规性有机溶剂 活性基…

【NestJs】使用连接mysql企业级开发规范

本篇将介绍如何建立 NestJs 的数据库连接、并使用数据库联表查询。 简介 Nest 与数据库无关&#xff0c;允许您轻松地与任何 SQL 或 NoSQL 数据库集成。根据您的偏好&#xff0c;您有许多可用的选项。一般来说&#xff0c;将 Nest 连接到数据库只需为数据库加载一个适当的 No…

Delphi DataSnap 流程分析(一)

DataSnap 有三种方式: 1、DataSnap REST Application: Create a DataSnap Server with support for REST Communication and with pages that invoke server methods using Java Script and JSON. 2、DataSnap Server: The DataSnap Server Wizard provides an easy way to i…

怎么把视频中动态的人物P掉,把视频中不要的人物去掉

怎么把视频中动态的人物P掉&#xff1f;很多小伙伴试过ps抠图&#xff0c;但是你试过视频人物抠图吗&#xff1f;其实道理是一样的&#xff0c;但是操作过程却变难了。今天就给大家带来一个简单的方法&#xff0c;轻松去除视频中的人物。不影响整个画面的呈现。 在拍摄旅游视频…

springcloud:快速上手定时任务框架xxl-job(十五)

0. 引言 实际开发中&#xff0c;我们常常遇到需要定时执行的任务&#xff0c;我们可以利用定时线程池或schedule框架等来实现定时任务&#xff0c;但这些方式都有效率、性能上的缺陷&#xff0c;在微服务框架下&#xff0c;我们期望一种更加规整、轻量、可靠的定时任务框架来帮…

【通信接口】UART、IIC、SPI

目录 一、预备知识 1、串行与并行 2、单工与双工 3、波特率 二、UART 三、IIC 四、SPI &#xff08;一对一、一对多&#xff09; 五、IIC、SPI异同点 参考文章&#xff1a;这些单片机接口&#xff0c;一定要熟悉&#xff1a;UART、I2C、SPI、TTL、RS232、RS422、RS485…

kafka-5 kafka的高吞吐量和高可用性

kafka的高吞吐量和高可用性 6.1 高吞吐量6.2 高可用&#xff08;HA&#xff09; 6.1 高吞吐量 kafka的高吞吐量主要是由4方面保证的&#xff1a; &#xff08;1&#xff09;顺序读写磁盘 Kafka是将消息持久化到本地磁盘中的&#xff0c;一般人会认为磁盘读写性能差&#xff…

【C++ 八】写文件、读文件

写文件、读文件 文章目录 写文件、读文件前言1 文本文件1.1 写文件1.2 读文件 2 二进制文件2.1 写文件2.2 读文件 前言 本文包含文本文件写文件、文本文件读文件、二进制写文件、二进制读文件。 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放 通…

中间表示- 活性分析

进行活性分析的动机 &#xff08;1&#xff09;在代码生成的讨论中&#xff0c;我们曾假设目标机器有无限多个&#xff08;虚拟&#xff09;寄存器可用&#xff0c;这简化了代码生成的算法&#xff0c;但对物理机器是个坏消息&#xff0c;因为机器只有有限多个寄存器&#xff…