网络相关的命令工具研究报告:iptables
规则
iptables有5种chain:
- PREROUTING:数据包进入路由表之前
- INPUT:通过路由表后目的地为本机
- FORWARDING:通过路由表后,目的地不为本机
- OUTPUT:由本机产生,向外转发
- POSTROUTIONG:发送到网卡接口之前。
将报文分成三类,每类报文会经过不同的chain。
- 到本机某进程的报文:PREROUTING --> INPUT
- 由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
- 由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING
![]()
为了方便管理,把具有相同功能的规则的集合叫做table,不同功能的规则,放置在不同的table中进行管理,iptables中定义了4种table。四种表的功能为
- filter表:负责过滤功能,防火墙;内核模块:iptables_filter
- nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
- mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
- raw表:关闭nat表上启用的连接追踪机制;iptable_raw
四种table处理顺序由先到后为:raw→mangle→nat→filter。但除了OUTPUT外有全部的四种表规则外,其他的chain只有两三个表规则。
- PREROUTING :raw表,mangle表,nat表
- INPUT :mangle表,filter表,(centos7中还有nat表,centos6中没有)
- FORWARD:mangle表,filter表
- OUTPUT:raw表,mangle表,nat表,filter表
- POSTROUTING:mangle表,nat表
综上,结合table的iptables整体图如下

命令操作
命令格式
iptables [-t table] COMMAND chain CRETIRIA -j ACTION
-t table :不选默认filter
COMMAND:定义如何对规则进行管理
chain:指定你接下来的规则到底是在哪个链上操作的
CRETIRIA:指定匹配标准
-j ACTION :指定如何进行处理
COMMAND参数
| 参数 | 功能 |
|---|---|
| -F | 清空规则链 |
| -L | 查看规则链 |
| -A | 追加规则 |
| -I | 在头部插入规则 |
| -D | 删除规则 |
| -R | 修改规则 |
CRETIRIA参数
| 参数 | 作用 |
|---|---|
| -p | 协议(tcp/udp/icmp) |
| -s | 匹配指定源ip地址,加" ! "表示除这个IP外 |
| -d | 匹配指定目的ip的数据 |
| --sport | 匹特定配源端口的数据 |
| --dport | 匹配特定目的端口的数据 |
| -i | 匹配特定入口网卡的数据 |
| -o | 匹配特定出口网卡的数据 |
处理动作
DROP(丢弃),REJECT(拒绝),ACCEPT(接受),SANT(基于原地址的转换)
下面对"增删查改"四种操作进行示例
增
例如:禁止别人ping入,浪费服务器资源(但是自己仍然可以ping别人)
iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
例如:丢弃eth0网卡收到来自 192.168.1.0/24 的 1024:65535 端口的访问本机 ssh 端口的数据包
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65535 --dport ssh -j DROP
删
首先通过 --line-numbers列出指定的链的规则的编号来,然后通过iptables -t tables -D chain rulenum 来删除
sudo iptables -t filter -L INPUT --line-number
# 输出
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT icmp -- anywhere anywhere icmp echo-reply
# 删除number为1
sudo iptables -t filter -D INPUT 1
改
同删除,首先通过 --line-numbers列出指定的链的规则的编号来。
sudo iptables -t filter -L OUTPUT --line-number
# 输出
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT icmp -- anywhere anywhere icmp echo-request
# 修改accpet为reject
sudo iptables -R INPUT 1 -j ACCEPT
查
命令格式,--line-numner用来显示行号
sudo iptables -t tables -L chain --line-number

浙公网安备 33010602011771号