网络相关的命令工具研究报告: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

posted @ 2019-11-27 00:12  zavierxing  阅读(167)  评论(1)    收藏  举报