前言

虽然更喜欢 ufw的简单,忘记当时为啥必须要用 iptables了

Iptables 是一个很大的软件,不止可以做防火墙,还有 Nat、转发等。本篇关注作为防火墙时,“入方向” 的拦截规则

总结

  • 抛开其他的功能,了解 iptables的结构及基本命令,就可以很快上手“防火墙”的操作了

开始

1. 软件运行结构

iptables 包含 4个表并存在优先级,依次是(从左到右)

rawmanglenatfilter
链接跟踪前处理改写封包网址转译工作封包过滤(防火墙)
filter 是默认表,操作中如不指定表,即为对 filter表操作

表中有一些链,其中 filter表中的链有

INPUTFORWORDOUTPUT
进入的包通过的包本地生成的包

现在我们知道,iptables 默认选择的 filter 表的 INPUT 链即为:"防火墙入方向"

2. 操作命令

链本身(INPUT)的操作有哪些?

  • -L 查看链详情、规则
iptables -L    # 查看 filter表下所有链
iptables -L INPUT    #  查看 INPUT链
#  --line 附带规则行号。可根据行号进行删除规则
#  -n  不解析主机名,将显示 IP地址
iptables -L INPUT --line -n    
  • -P 指定链的默认动作

iptables -P 链名 (DROP/ACCEPT)

iptables -P INPUT ACCEPT    #  设置 input链默认允许通过
  • -F 清空链规则
iptables -F    #  清除 filter 表下所有链的规则
iptables -F INPUT   #  清除 INPUT链所有规则
为什么执行 iptables -F 要小心?为什么会断网失联?
如果默认动作为拒绝,清除规则后网络连接会被阻止。所以执行前要确保默认动作不是 DROP
  • 其他操作 本篇不涉及
-N 指定名字建立新的链  -X 删除用户自定义链  -E 重命名链名称

3. 规则操作

链(INPUT)上的规则怎么操作?

有 3个步骤:操作 -> 匹配 -> 动作

操作

参数定义备注
-N新的规则
-A追加规则
-D删除规则删除指定序号
-R修改规则修改指定序号
-I插入规则在指定序号之前增加

匹配

参数定义备注
-p指定协议tcp、udp、icmp
-s来源地址192.168.1.1
-d目的地址192.168.1.1
--sport来源端口8080
--dport目的端口80
-i指定入口网卡eth0
-o指定出口网卡eth1

动作
-j [DROP 丢弃 | REJECT 拒绝 | ACCEPT 接受]

4. 完整规则操作命令

根据上表,将操作 -> 匹配 -> 动作组合出来即可

iptables -N INPUT -s 192.168.2.1 -p tcp --dport 80 -j DROP
-N 新加一条 -s 从192.168.2.1来 -p tcp协议的 --dport 80 去80端口的 -j DROP 丢弃

删除规则需要和添加规则语句一致,将添加动作(NAI等)换为删除动作(D)

iptables -D INPUT -s 192.168.2.1 -p tcp --dport 80 -j DROP

或者通过行号(--line)

iptables -D INPUT 1

5. 其他


规则的行号越小(越靠上)优先级越高
规则保存

service iptables save

如无法保存,则保存至文件,启动时执行规则恢复

iptables-save > /etc/iptables.rules
iptables-restore < /etc/iptables.rules

/etc/network/if-pre-up.d/custom

[附录]


表名优先级包含的链特性
raw1 链接跟踪前处理,处理后跳过 nat表
mangle2 改写封包
nat3PREROUTING
INPUT
OUTPUT
POSTROUTING
一对一、一对多、多对多等网址转译工作
filter4INPUT
FORWARD
OUTPUT
预设规则表,进行封包过滤

-t 指定不同表

iptables -t [nat | mangle | filter]
不使用 -t 指定表的话 默认使用的 filter表。