iptables详解
本文最后更新于15 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一,iptables

1,iptales简介

netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,

iptables和netfilter的关系:

iptables只是Linux防火墙的管理工具而已,真正实现防火墙功能的是netfilter,Netfilter 是 Linux 内核中的一个框架,用于实现网络数据包的过滤、网络地址转换(NAT)和其他数据包处理功能。

2,iptables的表与链

2.1,Netfilter 在内核网络栈中设置了5个关键的钩子点(也称为链)

  • 数据包会依次通过这些点:
  1. PREROUTING:数据包进入网络栈后,在进行路由判断之前
  2. INPUT:数据包目标是本机,路由判断后
  3. FORWARD:数据包需要转发到其他主机,路由判断后
  4. OUTPUT:本机产生的数据包,发送出去之前
  5. POSTROUTING:数据包即将离开网络栈之前

3、4个表

3.1,Netfilter 将规则组织在4个表中,每个表有特定的用途:

  1. filter表:负责过滤数据包(接受、拒绝或丢弃)
  • 包含的链:INPUT、FORWARD、OUTPUT
  1. nat表:负责网络地址转换(NAT)
  • 包含的链:PREROUTING、OUTPUT、POSTROUTING
  1. mangle表:用于修改数据包内容(如TTL、TOS等)
  • 包含的链:所有5个链
  1. raw表:用于连接跟踪豁免等特殊用途
  • 包含的链:PREROUTING、OUTPUT

3.2,表的作用

3.2.1.filter 表(过滤表)

作用:默认表,用于数据包过滤,决定是否允许数据包通过(如DROP、ACCEPT、REJECT、LOG)

包含的链

  • INPUT:处理目标是本机的入站数据包
  • FORWARD:过滤所有不是本地产生的并且目的地不是本地(即本机只是负责转发)的包
  • OUTPUT:处理本机产生的出站数据包,过滤所有本地生成的包

3.2.2.nat 表(网络地址转换表)

作用:用于网络地址转换(IP/MASQUERADE/PORT)修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)

包含的链

  • PREROUTING:在路由决策前修改数据包(常用于DNAT)
  • POSTROUTING:在数据包离开前修改数据包(常用于SNAT/MASQUERADE)
  • OUTPUT:对本机产生的数据包进行目的地址转换

3.2.3.mangle 表(修改表)

作用:用于特殊的数据包修改(如TTL、TOS、MARK等)强烈建议不要在这个表里做任何过滤

包含的链

  • PREROUTING:进入路由决策前修改
  • INPUT:进入本机前修改
  • FORWARD:转发数据包时修改
  • OUTPUT:本机发出数据包前修改
  • POSTROUTING:数据包离开前修改

3.2.4.raw 表(原始表)

作用:用于数据包跟踪豁免和连接跟踪前处理

包含的链

  • PREROUTING:在连接跟踪前处理
  • OUTPUT:对本机产生的数据包在连接跟踪前处理

3.2.5数据包处理流程中的表优先级

当数据包经过一个链时,各表的处理顺序是固定的:

  1. raw 表(连接跟踪豁免)
  2. mangle 表(通用数据包修改)
  3. nat 表(地址转换)
  4. filter 表(最终过滤决策)

3.3、表和链的对应关系

表名PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
raw
mangle
nat
filter

4,数据处理流程

  1. 入站数据包流程
    PREROUTING (raw→mangle→nat) → 路由判断 → INPUT (mangle→filter) → 本地进程
  2. 转发数据包流程
    PREROUTING (raw→mangle→nat) → 路由判断 → FORWARD (mangle→filter) → POSTROUTING (mangle→nat)
  3. 出站数据包流程
    本地进程 → OUTPUT (raw→mangle→nat→filter) → POSTROUTING (mangle→nat)
image.png

二、iptables 规则语法

1. 基本命令格式

iptables [-t 表名] 命令选项 [链名] [规则匹配条件] [-j 目标动作]

2. 常用命令选项

选项说明
-A在链尾追加规则
-I在指定位置插入规则
-D删除指定规则
-R替换指定规则
-L列出规则
-F清空链中所有规则
-N创建新链
-X删除自定义链
-P设置链的默认策略
-v显示详细信息
-n数字形式显示地址和端口

3. 常用匹配条件

通用匹配

  • -p 协议 (tcp, udp, icmp, all)
  • -s 源地址
  • -d 目标地址
  • -i 入站网卡
  • -o 出站网卡

TCP/UDP 扩展匹配

  • –sport 源端口
  • –dport 目标端口
  • –tcp-flags (SYN,ACK,FIN,RST,URG,PSH,ALL,NONE)

其他扩展匹配

  • -m state –state (NEW,ESTABLISHED,RELATED,INVALID)
  • -m limit –limit 限制速率
  • -m multiport 多端口匹配
  • -m time 时间匹配

4. 常用目标动作(-j)

动作说明
ACCEPT允许数据包通过
DROP丢弃数据包
REJECT拒绝数据包并返回错误信息
LOG记录日志
SNAT源地址转换
DNAT目标地址转换
MASQUERADE动态源地址转换(用于拨号网络)
REDIRECT端口重定向
RETURN返回调用链

5.iptables的基本操作

5.1查看规则

查看规则集

[root@ceshi ~]# iptables --list -n

加一个-n以数字形式显示IP和端口,而不是默认的服务名称

5.2修改规则

配置默认规则,不允许数据进入

[root@ceshi ~]# iptables -P INPUT DROP

允许转发

[root@ceshi ~]# iptables -P FORWARD ACCEPT

不允许数据流出

[root@ceshi ~]# iptables -P OUTPUT DROP

5.3添加规则

允许源IP地址为192.168.0.0/24网段的包流进(包括所有的协议,这里也可以指定单个IP)

[root@ceshi ~]# iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

允许所有的IP到192.168.0.22的访问

[root@ceshi ~]# iptables -A INPUT -d 192.168.0.22 -j ACCEPT

开放本机80端口

[root@ceshi ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

开放本机的ICMP协议

[root@ceshi ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

5.4删除规则

删除允许源地址进入的规则

[root@ceshi ~]# iptables -D INPUT -s 192.168.0.21 -j ACCEPT

三,iptables操作实例

1.清空所有规则

# 清空所有规则
iptables -F
#清空自定义规则
iptables -X
#清空防火墙的统计数据
iptables -Z

iptables -t nat -F #清空nat表里的所有规则
iptables -t nat -X 
iptables -t mangle -F
iptables -t mangle -X

2.添加(删除)规则拒绝用户访问22端口

#拒绝用户访问22端口
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
#查看规则并加上序号
iptables -t filter -nL --line-number
#删除规则
iptables -t filter -D INPUT 1 #根据序号删除

#只允许192.168.0.3的机器进行SSH连接
iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
#允许或限制一段IP地址可用192.168.0.0/24
iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
#只允许除了192.168.0.3的主机外都能进行SSH连接
iptables -A INPUT -s ! 192.168.0.3 -p tcp --dport 22 -j ACCEPT

3.开启某些端口

#允许用户访问服务器80端口(服务器80是用户角度的目标端口)
[root@ceshi ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#允许从本机发出的、源端口为 80 的 TCP 数据包通过防火墙。
[root@ceshi ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

#开启邮件服务的25、110端口
[root@ceshi ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@ceshi ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT

#允许icmp服务进出
[root@ceshi ~]# iptables -A INPUT -p icmp -j ACCEPT
[root@ceshi ~]# iptables -A OUTPUT -p icmp -j ACCEP

4.封ip,屏蔽某个ip

#屏蔽单个IP的命令
iptables -I INPUT -s 123.45.6.7 -j DROP
#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
#查看已添加的iptables规则
iptables -L -n -v

5.添加白名单

“`bash

允许机房内网机器可以访问

iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT

允许183.121.3.7访问本机的3380端口

iptables -A INPUT -p tcp -s 183.121.3.7 –dport 3380 -j ACCEPT

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇