运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • 操作系统

  • 域名解析

  • 公有云

  • CI&CD

  • 数据库

  • 负载均衡&反向代理

  • 存储系统

  • 容器&容器编排

  • 批量管理

  • 邮件系统

  • 监控系统

  • Web服务

  • 虚拟化

  • 防火墙

    • iptables
      • match 匹配
        • 通用匹配
        • 隐含匹配
        • tcp match
        • UDP match
        • icmp match
        • 显示匹配
      • Action
        • accept
        • drop
        • reject
        • 常用的ACTION
      • 四表
      • 五链
      • 表和链的对应关系
        • 默认查看filter表
        • 查看特定的表
        • 屏蔽某个IP地址
        • 解封某个IP
        • 关闭特定端口
        • 根据源地址封IP
        • 封端口
        • 设置默认规则
        • 配置最安全的企业防火墙
        • linux服务器充当网关
        • iptables常用企业案例
    • iptables开启日志
  • 压测

  • 文件同步

  • 私有云

  • 日志系统

  • 代码仓库&版本管理

  • 安全审计

  • 远程拨号

  • 大数据

  • 统一认证

  • 消息队列

  • Apollo

  • 运维杂记
  • 防火墙
lyndon
2022-06-08
目录

iptables

# Iptables 写法

Iptables -t 表名 (filter/nat/mangle三个表中的一个,默认是filter表) 命令(command告诉程序如何做,比如:插入一个规则,还是删除等) chains (链,有五个,prerouting、postrouting、input、output、forward)  match匹配  -j action  (处理动作,accept、deny、drop、reject、snat、dnat)
1

command参数说明:

  • 1、 -A或者--append //将一条或多条规则加到链尾
  • 2、 -D或者--delete //从链中删除该规则
  • 3、 -R或者--replace //从所选链中替换一条规则
  • 4、 -L或者--list //显示链的所有规则
  • 5、 -I或者--inset //根据给出的规则序号,在链中插入规则。按序号的顺序插入,如是 “1”就插入链首
  • 6、 -X或者--delete-chain //用来删除用户自定义链中规则。必须保证链中的规则都不在使用时才能删除链。如没有指定链,将删除所有自定义链中的规则。
  • 7、 -F或者--flush //清空所选链中的所有规则。如指定链名,则删除对应链的所有规则。如没有指定链名,则删除所有链的所有规则。
  • 8、 -N或者--new-chain //用命令中所指定的名字创建一个新链。
  • 9、 -P或者--policy //设置链的默认目标,即策略。 与链中任何规则都不匹配的信息包将强制使用此命令中指定的策略。
  • 10、-Z或者--zero //将指定链中的所有规则的包字节计数器清零。

# match 匹配

分为四大类:

  • 通用匹配
  • 隐含匹配
  • 显示匹配
  • 针对非正常包的匹配

# 通用匹配

无论我们使用何种协议,装入何种扩展,通用匹配都可以使用。不需要前提条件

-p 或--protocol

用来检查某些特定协议。协议有TCP\UDP\ICMP三种。可用逗号分开这三种协议的任何组合。也可用“!”号进行取反,表示除该协议外的剩下的协议。也可用all表示全部协议。默认是all,但只代表tcp\udp\icmp三种协议。

$ iptable -A INPUT -p TCP,UDP
$ iptable -A INPUT -p ! ICMP   //这两种表示的意思为一样的。
1
2

-s 或 --source

以Ip源地址匹配包,根据源地址范围确定是否允许或拒绝数据包通过过滤器。可使用 “!”符号。 默认是匹配所有ip地址。

可是单个Ip地址,也可以指定一个网段。 如: 192.168.1.1/255.255.255.255 表示一个地址。 192.168.1.0/255.255.255.0 表示一个网段。

-d 或 --destination

用目的Ip地址来与它们匹配。与 source 的格式用法一样

-i

以包进入本地所使用的网络接口来匹配包。只能用INPUT \ FORWARD \PREROUTING 三个链中。用在其他任何链中都会出错。

可使用“+” “!”两种符号。

只用一个“+"号,表示匹配所有的包,不考虑使用哪个接口。如: iptable -A INPUT -i + //表匹配所有的包。

放在某类接口后面,表示所有此类接口相匹配。如: iptable -A INPUT -i eth+ //表示匹配所有ethernet 接口。

-o

以数据包出本地所使用的网络接口来匹配包。与-i一样的使用方法。

只能用OUTPUT \ FORWARD \POSTROUTING 三个链中。用在其他任何链中都会出错。

可使用“+” “!”两种符号。

-f 或 --fragment

用来匹配一个被分片的包的第二片或以后的部分。因一个数据包被分成多片以后,只有第一片带有源或目标地址。后面的都不带 ,所以只能用这个来匹配。可防止碎片攻击。

# 隐含匹配

这种匹配是隐含的,自动的载入内核的。如我们使用 --protocol tcp 就可以自动匹配TCP包相关的特点。

分三种不同协议的隐含匹配:

  • tcp
  • udp
  • icmp

# tcp match

tcp match 只能隐含匹配TCP包或流的细节。但必须有 -p tcp 作为前提条件。

TCP --sport

基于tcp包的源端口匹配包 ,不指定此项则表示所有端口。

iptable -A INPUT -p TCP --sport  22:80  //TCP源端口号22到80之间的所有端口。
iptable -A INPUT -p TCP --sport  22:   //TCP源端口号22到65535之间的所有端口。 
1
2

TCP --dport

基于tcp包的目的端口来匹配包。 与--sport端口用法一样。

TCP --flags

匹配指定的TCP标记。

iptable -p TCP --tcp-flags SYN,FIN,ACK  SYN
1

# UDP match

UDP --sport

基于UDP包的源端口匹配包 ,不指定此项则表示所有端口。

UDP --dport

基于UDP包的目的端口匹配包 ,不指定此项则表示所有端口。

# icmp match

icmp --icmp-type  
1

根据ICMP类型包匹配。类型 的指定可以使用十进制数或相关的名字,不同的类型,有不同的ICMP数值表示。也可以用“!”取反。

例:

iptable -A INPUT -p icmp-imcp-type 8 
1

# 显示匹配

显示匹配必须用 -m装 载。

limit match

必须用 -m limit 明确指出。 可以对指定的规则的匹配次数加以限制。即,当某条规则匹配到一定次数后,就不再匹配。也就是限制可匹配包的数量。这样可以防止DOS攻击。

限制方法: 设定对某条规则 的匹配最大次数。设一个限定值 。 当到达限定值以后,就停止匹配。但有个规定,在超过限制次数后,仍会每隔一段时间再增加一次匹配次数。但增加的空闲匹配数最大数量不超过最大限制次数。

  • --limit rate 最大平均匹配速率:可赋的值有'/second', '/minute', '/hour', or '/day'这样的单位,默认是3/hour。
  • --limit-burst number 待匹配包初始个数的最大值:若前面指定的极限还没达到这个数值,则概数字加1.默认值为5
iptable -A INPUT -m limit --limt 3/hour  //设置最大平均匹配速率。也就是单位时间内,可匹配的数据包个数。  --limt 是指定隔多 长时间发一次通行证。
iptable -A INPUT -m limit --limit-burst 5 //设定刚开始发放5个通行证,也最多只可匹配5个数据包。
1
2

mac match

只能匹配MAC源地址。基于包的MAC源地址匹配包

iptable -A INPUT -m mac --mac-source  00:00:eb:1c:24   //源地址匹配些MAC地址
1

mark match

以数据包被 设置的MARK来匹配包。这个值由 MARK TARGET 来设置的。

multiport match

这个模块匹配一组源端口或目标端口,最多可以指定15个端口。只能和-p tcp 或者 -p udp 连着使用。

多端口匹配扩展让我们能够在一条规则里指定不连续的多个端口。如果没有这个扩展,我们只能按端口来写规则了。这只是标准端口匹配的增强版。不能在一条规则里同时用标准端口匹配和多端口匹配。

三个选项: --source-port ; --destination-port ; --port

iptable -A INPUT -p TCP  -m multiport --source-port 22,28,115    
iptable -A INPUT -p TCP  -m multiport --destination-port 22,28,115 
iptable -A INPUT -p TCP  -m multiport --port 22,28,115
1
2
3

state match

状态匹配扩展要有内核里的连接跟踪代码的协助。因为是从连接跟踪机制得到包的状态。这样不可以了解所处的状态。

tos match

根据TOS字段匹配包,用来控制优先级。

ttl match

根据IP头里的TTL字段来匹配包。用来更改包的TTL,有些ISP根据TTL来判断是不是有多台机器共享连接上网。

iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64
iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-dec 1
# 离开防火墙的时候实际上TTL已经-2了,因为防火墙本身要-1一次。
iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-inc 1
# 离开防火墙的时候不增不减,tracert就不好用了。
1
2
3
4
5

owner match

基于包的生成者(即所有者或拥有者)的ID来匹配包。

owner 可以是启动进程的用户的ID,或用户所在的级的ID或进程的ID,或会话的ID。此只能用在OUTPUT 中。

此模块设为本地生成包匹配包创建者的不同特征。而且即使这样一些包(如ICMP ping应答)还可能没有所有者,因此永远不会匹配。

  • --uid-owner userid 如果给出有效的user id,那么匹配它的进程产生的包。
  • --gid-owner groupid 如果给出有效的group id,那么匹配它的进程产生的包。
  • --sid-owner seessionid 根据给出的会话组匹配该进程产生的包。

# Action

targets/jump:指由规则指定的操作,对与规则匹配的信息包执行什么动作。

# accept

这个参数没有任何选项。指定 -j accept 即可。 一旦满 足匹配不再去匹配表或链内定义的其他规则。但它还可能会匹配其他表和链内的规则。即在同一个表内匹配后就到上为止,不往下继续。

# drop

-j drop 当信息包与规则完全匹配时,将丢弃该 包。不对它做处理。并且不向发送者返回任何信息。也不向路由器返回信息。

# reject

与drop相同的工作方式,不同的是,丢弃包后,会发送错误信息给发送方。

iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with icmp-net-unreachable
1

# 常用的ACTION

  • DROP:悄悄丢弃,一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
  • REJECT:明示拒绝
  • ACCEPT:接受 custom_chain:转向一个自定义的链
  • DNAT
  • SNAT
  • MASQUERADE:源地址伪装
  • REDIRECT:重定向:主要用于实现端口重定向
  • MARK:打防火墙标记的
  • RETURN:返回,在自定义链执行完毕后使用返回,来返回原规则链。

# Iptables的四表五链

# 四表

  • Raw表:为了不再让iptables做数据包的链接跟踪,跳过nat表和ip_conntrack处理
  • Mangle表:用于改变数据包
  • Nat表:实现网络地址转换(端口映射、地址映射等)
  • Filter表:默认过滤表,具有一般的过滤功能

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

# 五链

  • PREROUTING:数据包进入路由表之前
  • POSTROUTIONG:发送到网卡接口之前
  • FORWARDING:通过路由表后,目的地不为本机
  • INPUT:通过路由表后目的地为本机
  • OUTPUT:由本机产生,向外转发

# 表和链的对应关系

img

Raw表是为了不再让iptables做数据包的链接跟踪,跳过nat表和ip_conntrack处理

内建的链:

  • Prerouting:处理传入连接
  • Output:处理本地生成的数据包

Filter表默认过滤表,具有一般的过滤功能

内建的链有:

  • Input:处理流入本地的数据包
  • Forward:处理通过系统路由的包
  • Output:处理本地流出的数据包

Nat表实现网络地址转换(端口映射、地址映射等)

内建的链有:

  • Prerouting:处理即将接受的数据包
  • Output:处理本地产生的数据包
  • Postrouting:处理即将传出的数据包

Mangle用于改变数据包

共五条链:

  • Output:处理本地生成的数据包
  • Input:处理报文
  • Prerouting:处理传入连接
  • Postrouting:处理即将传出的数据包
  • Forward:处理通过本机转发的数据包

# iptables策略配置示例

# 默认查看filter表

iptables –L –n –v  
1

# 查看特定的表

iptbales –t 表名 –L –n –v 
1

-F 清除防火墙策略

-X 清除自定义策略

-Z 计数器清零

# 屏蔽某个IP地址

iptables –A INPUT –s 屏蔽ip –j DROP
1

如果只是屏蔽tcp流量,使用-p参数指定协议

Iptables –A INPUT –p tcp –s 屏蔽ip –j DROP
1

# 解封某个IP

iptables –D INPUT –s 解封ip –j DROP
1

其中-D 参数表示从链中删除一条或多条规则

# 关闭特定端口

阻止特定的传出连接:

iptables –A OUTPUT –p tcp --dport 端口号 –j DROP
1

阻止特定的传入连接:

iptables –A INPUT –p tcp --dprot 端口号 –j DROP
1

# 根据源地址封IP

iptables –t filter –A INPUT –i eth0 –s 10.0.0.104 –j DROP
iptables –t filter –A INPUT –i eth0 ! –s 10.0.0.104 –j DROP   (取反)
1
2

匹配指定的网络接口:

-i:input,进站接口

-o:output,出站接口

# 封端口

iptables –A INPUT –p tcp --dprot 3306 –j DROP  (封目的端口为3306端口)

iptables –A INPUT –p tcp --sprot 3306 –j DROP  (封源端口为3306端口)
1
2
3

匹配端口范围:

iptables –A INPUT –p tcp --dprot 3300:4000 –j DROP (封目的端口3300~4000之间的端口)

iptables –A INPUT –p tcp –m multiport --dprot 21,22,23,24 –j DROP (封目的端口为21、22、23、24端口)
1
2
3

匹配协议:

-p all 匹配所有协议

iptables –A INPUT –p ! tcp  (匹配tcp以外的所有协议)

iptables –t filter –I INPUT –p icmp –icmp-type 8 –i eth0 ! –s 10.0.0.0/24 –j DROP
1
2
3
4
5

(禁ping)

iptables –A INPUT –p icmp –m icmp –icmp-type any –j ACCEPT (匹配所有icmp协议)
1

# 设置默认规则

iptables –P INPUT DROP

iptables –P OUTPUT ACCEPT

iptables –P FORWARD DROP
1
2
3
4
5

# 配置最安全的企业防火墙

iptables -F

iptables -X

iptables -Z

iptables –A INPUT -p tcp –dport 22 –s 10.0.0.0/24 –j ACCEPT

iptables –A INPUT –i lo –j ACCEPT

iptables –A INPUT –o lo –j ACCEPT

iptables –A OUTPUT –o lo –j ACCEPT
1
2
3
4
5
6
7
8
9
10
11
12
13

# linux服务器充当网关

两块网卡,内网卡不设网关

vim /etc/sysctl.conf      //开启路由转发功能

net.ipv4.ip_forward = 1
1
2
3

局域网共享的两种方法:

1.适合于有固定外网地址的:

iptables –t nat –A POSTROUTING –s 192.168.1.0/24 –o eth0 –j SNAT --to-source 10.0.0.7

1> -s 192.168.1.0/24   办公室或IDC内网网段

2> -o eth0    网关的外网卡接口

3> -j SNAT –to-source 10.0.0.7  网关外网卡IP地址
1
2
3
4
5
6
7

2.适合变化的外网地址(ADSL)

iptables –t nat –A POSTROUTING –s 192.168.1.0/24 –j MASQUERADE 伪装
1

映射多个外网IP上网

iptables –t nat –A POSTROUTING –s 10.0.0.0/24 –o eth0 –j SNAT --to-source 124.42.60.11-124.42.60.16
1

端口转换:

把网关的80端口映射到内网的9000端口

iptbales –t nat –A PREROUTING –d 10.0.0.7 –p tcp –dport 80 –j DNAT --to-destination 192.168.1.8:9000
1

# iptables常用企业案例

1、linux主机防火墙 (表:FILTER)

2、局域网机器共享上网(表:NAT 链:POSTROUTING)

3、外部地址和端口,映射为内部地址和端口(表:NAT 链:PREROUTING)

上次更新: 2022/06/12, 15:48:09
linux虚拟机修改网卡名
iptables开启日志

← linux虚拟机修改网卡名 iptables开启日志→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式