searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Iptables原理和使用例子

2024-01-03 01:22:02
34
0

使用场景

接收到网络包,对网络包到达的某个阶段进行hook操作实现网络包过滤(fileter),修改(nat)

 

实现原理

可以hook的地方

数据包到达会经过几个阶段,在这几个阶段配置hook

5个hook点说明:

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

 

每个hook动作类型(不同动作类型放到不同表)

表说明

  • filter:一般的过滤功能
  • nat:用于nat功能(端口映射,地址映射等)
  • mangle:用于对特定数据包的修改
  • raw:优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能
    • RAW 表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链 上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.
      • RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。

表优先级:

  • 如果存在多个场景的表,iptables会按raw -> mangle -> nat -> filte表r的顺序执行表里的规则

 

命令使用说明

iptables -t filter -I INPUT -s 192.168.1.2 -p tcp --dport 22 -j DROP

在【某个hook】,【某个表】上面,加上【规则+动作】

在INPUT这个hook,在filter表上添加规则【来源ip是192.168.1.2,访问tcp22端口的】+【动作:丢弃包】

参数详解:

  • -t指定表(table),如果把所有的规则混放在一起肯定会特别乱,因此iptables根据功能划分为不同的表,过滤包的放在filter表,做NAT的放nat表等,还有raw表、mangle表、security表,共5个表。如果不指定该参数,默认会选中filter表
  • -I表示insert操作,在最前面插入这条规则,相对应的还有-A参数,表示从末尾追加规则,-I、-A还可以在后面指定索引位置,将规则插入到指定的位置。
  • INPUT表示链hook名称,链可以看做是一个链表,链表元素为规则。iptables一共可操纵5条链,分别为PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。需要注意的是,所有的表都是共享这5条链的,当然并不是所有的表都同时需要这5条链,比如filter表就没有PREROUTING、POSTROUTING。如果多个table都在如上链上插入了规则,则根据raw -> mangle -> nat -> filter的顺序执行。
  • -s、-p、--dport都是条件,多个条件是与的关系,即只有满足指定的所有条件才能匹配该规则,如上
    • -s指定了源地址IP为192.168.1.2,
    • -p指定了协议为TCP,
    • --dport指定了端口22,即只有源地址访问目标的22 TCP端口才能匹配这条规则。
  • -j指定了行为,当然官方的叫法是目标(target),这里DROP表示丢弃包。

 

例子

通用操作

查看IPtables防火墙策略

查看某张表的所有链(内置的和自定义的)的规则

查看filter表

iptables -L -n -v 
  • 默认不指定,查的是filter表
  • --list -L [chain [rulenum]]
    • - List the rules in a chain or all chains 列出表的所有链的规则
  • --verbose -v verbose mode
    • 详细模式
  • -n numeric output of addresses and ports
    • 数字的形式显示ip和端口

 

查看nat表

iptables -t nat -L -v –n 

 

删除某条规则

完全匹配删除

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

-D参数表示删除

 

按行号删除

  1. 查看某个Chain的规则,包括行号
[root@kube-master ~]# iptables -L INPUT --line-numbers

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  anywhere             anywhere
3    INPUT_direct  all  --  anywhere             anywhere
4    INPUT_ZONES_SOURCE  all  --  anywhere             anywhere
5    INPUT_ZONES  all  --  anywhere             anywhere
6    ACCEPT     icmp --  anywhere             anywhere
7    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
  1. 删除第7行号的规则
  iptables -D INPUT 7 
[root@kube-master ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  anywhere             anywhere
3    INPUT_direct  all  --  anywhere             anywhere
4    INPUT_ZONES_SOURCE  all  --  anywhere             anywhere
5    INPUT_ZONES  all  --  anywhere             anywhere
6    ACCEPT     icmp --  anywhere             anywhere
  1. 发现没有第7行了

 

过滤功能(filter表)

限制来源ip

iptables -A INPUT -i eth0 -s 113.125.255.163 -p tcp -j ACCEPT
iptables -A INPUT -i eth0 -s 223.255.252.24 -p tcp -j ACCEPT
iptables -A INPUT -i eth0 -j DROP
  • -t filter指定操作表
    • 不指定-t参数默认值是filter
  • -A INPUT 在INPUT这个hook新增规则
    • -A将规则加到末尾
    • -I表示将规则加到最前面
  • 匹配条件
    • -i eth0
      • 指定操作的网卡是eth0
    • -s 113.125.255.163
      • 来源ip是113.125.255.163
      • 支持写网段:例如(113.125.255.163/24)
    • -p tcp
      • 协议是tcp的
  • -j 跳转到操作
    • -j ACCEPT 表示接收包
    • -j DROP 表示丢弃包

 

NAT功能(nat表)

配置端口转发

将所有到达 eth0 网卡 25 端口的流量重定向转发到 2525 端口

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

 

运维操作

保存IPtables规则

iptables-save > ~/iptables.rules 
  • 默认情况下,管理员对 IPtables 规则的操作会立即生效。但由于规则都是保存在内存当中的,所以重启系统会造成配置丢失
  • 要永久保存 IPtables 规则可以使用 iptables-save 命令
    • 但这个命令只是将规则永久保存到一个文件,重启后需要重启iptables-restore回去
  • 保存的名称大家可以自己改。

还原IPtables规则

  • iptables-restore < ~/iptables.rules

 

清空IPtables规则

清空所有表

iptables -F 

清空特定的表:可以使用 -t 参数进行指定

iptables -t nat –F 

0条评论
作者已关闭评论
q****n
20文章数
0粉丝数
q****n
20 文章 | 0 粉丝
q****n
20文章数
0粉丝数
q****n
20 文章 | 0 粉丝
原创

Iptables原理和使用例子

2024-01-03 01:22:02
34
0

使用场景

接收到网络包,对网络包到达的某个阶段进行hook操作实现网络包过滤(fileter),修改(nat)

 

实现原理

可以hook的地方

数据包到达会经过几个阶段,在这几个阶段配置hook

5个hook点说明:

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

 

每个hook动作类型(不同动作类型放到不同表)

表说明

  • filter:一般的过滤功能
  • nat:用于nat功能(端口映射,地址映射等)
  • mangle:用于对特定数据包的修改
  • raw:优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能
    • RAW 表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链 上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.
      • RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。

表优先级:

  • 如果存在多个场景的表,iptables会按raw -> mangle -> nat -> filte表r的顺序执行表里的规则

 

命令使用说明

iptables -t filter -I INPUT -s 192.168.1.2 -p tcp --dport 22 -j DROP

在【某个hook】,【某个表】上面,加上【规则+动作】

在INPUT这个hook,在filter表上添加规则【来源ip是192.168.1.2,访问tcp22端口的】+【动作:丢弃包】

参数详解:

  • -t指定表(table),如果把所有的规则混放在一起肯定会特别乱,因此iptables根据功能划分为不同的表,过滤包的放在filter表,做NAT的放nat表等,还有raw表、mangle表、security表,共5个表。如果不指定该参数,默认会选中filter表
  • -I表示insert操作,在最前面插入这条规则,相对应的还有-A参数,表示从末尾追加规则,-I、-A还可以在后面指定索引位置,将规则插入到指定的位置。
  • INPUT表示链hook名称,链可以看做是一个链表,链表元素为规则。iptables一共可操纵5条链,分别为PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。需要注意的是,所有的表都是共享这5条链的,当然并不是所有的表都同时需要这5条链,比如filter表就没有PREROUTING、POSTROUTING。如果多个table都在如上链上插入了规则,则根据raw -> mangle -> nat -> filter的顺序执行。
  • -s、-p、--dport都是条件,多个条件是与的关系,即只有满足指定的所有条件才能匹配该规则,如上
    • -s指定了源地址IP为192.168.1.2,
    • -p指定了协议为TCP,
    • --dport指定了端口22,即只有源地址访问目标的22 TCP端口才能匹配这条规则。
  • -j指定了行为,当然官方的叫法是目标(target),这里DROP表示丢弃包。

 

例子

通用操作

查看IPtables防火墙策略

查看某张表的所有链(内置的和自定义的)的规则

查看filter表

iptables -L -n -v 
  • 默认不指定,查的是filter表
  • --list -L [chain [rulenum]]
    • - List the rules in a chain or all chains 列出表的所有链的规则
  • --verbose -v verbose mode
    • 详细模式
  • -n numeric output of addresses and ports
    • 数字的形式显示ip和端口

 

查看nat表

iptables -t nat -L -v –n 

 

删除某条规则

完全匹配删除

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

-D参数表示删除

 

按行号删除

  1. 查看某个Chain的规则,包括行号
[root@kube-master ~]# iptables -L INPUT --line-numbers

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  anywhere             anywhere
3    INPUT_direct  all  --  anywhere             anywhere
4    INPUT_ZONES_SOURCE  all  --  anywhere             anywhere
5    INPUT_ZONES  all  --  anywhere             anywhere
6    ACCEPT     icmp --  anywhere             anywhere
7    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
  1. 删除第7行号的规则
  iptables -D INPUT 7 
[root@kube-master ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  anywhere             anywhere
3    INPUT_direct  all  --  anywhere             anywhere
4    INPUT_ZONES_SOURCE  all  --  anywhere             anywhere
5    INPUT_ZONES  all  --  anywhere             anywhere
6    ACCEPT     icmp --  anywhere             anywhere
  1. 发现没有第7行了

 

过滤功能(filter表)

限制来源ip

iptables -A INPUT -i eth0 -s 113.125.255.163 -p tcp -j ACCEPT
iptables -A INPUT -i eth0 -s 223.255.252.24 -p tcp -j ACCEPT
iptables -A INPUT -i eth0 -j DROP
  • -t filter指定操作表
    • 不指定-t参数默认值是filter
  • -A INPUT 在INPUT这个hook新增规则
    • -A将规则加到末尾
    • -I表示将规则加到最前面
  • 匹配条件
    • -i eth0
      • 指定操作的网卡是eth0
    • -s 113.125.255.163
      • 来源ip是113.125.255.163
      • 支持写网段:例如(113.125.255.163/24)
    • -p tcp
      • 协议是tcp的
  • -j 跳转到操作
    • -j ACCEPT 表示接收包
    • -j DROP 表示丢弃包

 

NAT功能(nat表)

配置端口转发

将所有到达 eth0 网卡 25 端口的流量重定向转发到 2525 端口

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

 

运维操作

保存IPtables规则

iptables-save > ~/iptables.rules 
  • 默认情况下,管理员对 IPtables 规则的操作会立即生效。但由于规则都是保存在内存当中的,所以重启系统会造成配置丢失
  • 要永久保存 IPtables 规则可以使用 iptables-save 命令
    • 但这个命令只是将规则永久保存到一个文件,重启后需要重启iptables-restore回去
  • 保存的名称大家可以自己改。

还原IPtables规则

  • iptables-restore < ~/iptables.rules

 

清空IPtables规则

清空所有表

iptables -F 

清空特定的表:可以使用 -t 参数进行指定

iptables -t nat –F 

文章来自个人专栏
云技术专栏
20 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
4
3