当前位置:   article > 正文

iptables详解_iptables -save命令永久保存?

iptables -save命令永久保存?

一:Linux包过滤防火墙概述

1.1:netfilter

  • 位于Linux内核中的包过滤功能体系
  • 称为Linux防火墙的“内核态”

1.2:iptables

  • 位于/sbin/iptables,用来管理防火墙规则的工具
  • 称为Linux防火墙的“用户态”

netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

二:iptables的表、链结构

2.1:5种规则链

  • 规则的作用:对数据包进行过滤或处理
  • 链的作用:容纳各种防火墙规则
  • 链的分类依据:根据处理数据包的不同时机

5种规则链

  • INPUT:处理入站数据包
  • OUTPUT:处理出站数据包
  • FORWORD:处理转发数据包
  • PREROUTING:在进行路由选择前处理数据包
  • POSTROUTING:在进行路由选择后处理数据包

2.2:4个规则表

  • 表的作用:容纳各种规则链
  • 表的划分依据:防火墙规则的作用相似

4个规则表:

  • raw表:确实是否对数据包进行状态跟踪
  • mangle表:拆解报文,做出修改,并重新封装 的功能
  • nat表:网络地址转换功能
  • filter表:包过滤功能

2.3:表、链结构示意图

在这里插入图片描述

三:数据包过滤的匹配流程

  • 规则表之间的顺序
    raw–>mangle–>nat–>filter
  • 规则链之间的顺序
    入站:PREROUTING–>INPUT
    出站:OUTPUT–>POSTROUTING
    转发:PREROUTING–>FORWORD–>POSTROUTING
  • 规则链里的匹配顺序
    按顺序依次检查、匹配即停止
    若找不到相应的匹配规则,则按该链的默认策略处理

在这里插入图片描述

四:iptables的语法格式

4.1:语法构成

iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

注意事项:

  • 不指定表名时,默认指filter表
  • 不指定链名时,默认指表内的所有链
  • 除非设置链的默认策略,否则必须指定匹配条件
  • 选项、链名、控制类型使用大写字母,其余均为小写

4.2:数据包的常见控制类型

  • ACCEPT:允许通过
  • DROP:直接丢弃,不给任何回应
  • REJECT:拒绝通过,必要时会给出提示
  • LOG:记录日志信息,然后传给下一条规则继续匹配
  • SNAT:源地址转换
  • DNAT:目标地址转换

4.3:常用选项

4.3.1:添加新的规则

  • -A:在链的末尾追加一条规则
  • -I:在链的开头(或指定序号)插入一条规则
[root@server ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT 
[root@server ~]# iptables -t filter -I INPUT -p udp -j ACCEPT
[root@server ~]# iptables -t filter -I INPUT 2 -p icmp -j ACCEPT 
  • 1
  • 2
  • 3

4.3.2:查看规则列表

  • -L:列出所有规则列表
  • -n:以数字形式显示地址、端口等信息
  • -v:以更详细的方法显示规则信息
  • –line-numbers:查看规则时,显示规则的序号
[root@server ~]# iptables -nvL INPUT --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        7   993 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3      370 23696 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.3.3:删除、清空、修改规则

  • -D:删除链内指定序号(或内容)的一条规则
  • -F:清空所有的规则
  • -R:修改规则
[root@server ~]# iptables -t filter -D INPUT 2 
[root@server ~]# iptables -nvL INPUT --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        9  1127 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           
2      441 27884 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0   
[root@server ~]# iptables -t filter -F INPUT
[root@server ~]# iptables -nvL INPUT --line-numbers
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)
num   pkts bytes target     prot opt in     out     source               destination       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4.3.4:设置默认策略

  • -P:为指定的链设置默认规则
[root@server ~]# iptables -nvL INPUT 
Chain INPUT (policy ACCEPT 47 packets, 2804 bytes)  #默认规则为ACCEPT
 pkts bytes target     prot opt in     out     source               destination   
 [root@server ~]# iptables -P INPUT DROP  #更改默认规则为DROP
 [root@server ~]# iptables -nvL INPUT
Chain INPUT (policy DROP 22 packets, 1888 bytes)  #默认规则变为DROP
 pkts bytes target     prot opt in     out     source               destination  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.4:规则的匹配条件

4.4.1:通用匹配

可直接匹配,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
常用的通用匹配条件:

  • 协议匹配:-p 协议名
  • 地址匹配:-s 源地址、-d 目的地址
  • 接口匹配:-i 入站网卡、-o 出站网卡
[root@server ~]# iptables -I INPUT -s 192.168.209.138 -p icmp -j REJECT 
[root@server ~]# iptables -I INPUT -i ens33  -s 192.168.209.140 -p tcp -j REJECT
  • 1
  • 2

使用-s选项或者-d选项即可匹配报文的源地址与目标地址,而且在指定IP地址时,可以同时指定多个IP地址,每个IP用"逗号"隔开,但是,-s选项与-d选项并不能一次性的指定一段连续的IP地址范围,如果我们需要指定一段连续的IP地址范围,可以使用下面显式匹配中的iprange扩展模块。

4.4.2:隐含匹配

要求以特定的协议匹配作为前提,包括端口、tcp标记、icmp类型等条件。
常用的隐含匹配条件:

  • 端口匹配:–sport 源端口、–dport 目的端口
  • ICMP类型匹配:–icmp-type ICMP类型
#拒绝来自192.168.10.10的ssh请求
[root@server ~]# iptables -t filter -I INPUT -s 192.168.10.10 -p tcp --dport 22 -j REJECT
#拒绝192.168.10.10主机访问本机的22-25端口
[root@server ~]# iptables -t filter -I INPUT -s 192.168.10.10 -p tcp --dport 22:25 -j REJECT
#拒绝192.168.10.10主机访问本机的0-25端口
[root@server ~]# iptables -t filter -I INPUT -s 192.168.10.10 -p tcp --dport :25 -j REJECT
#拒绝192.168.10.10主机访问本机的25端口以及其后的所有端口(直到65535)
[root@server ~]# iptables -t filter -I INPUT -s 192.168.10.10 -p tcp --dport 25: -j REJECT
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
#禁止所有icmp类型的报文进入本机
[root@server ~]# iptables -t filter -I INPUT -p icmp -j REJECT
#本主机能ping通其他主机,其他主机不能ping通本主机
[root@server ~]# iptables -t filter -I INPUT -p icmp --icmp-type 8 -j REJECT  #8表示请求,0表示回应,3表示不可达
  • 1
  • 2
  • 3
  • 4

借助tcp隐含匹配的–sport或者–dport都可以指定一个连续的端口范围,但是无法同时指定多个离散的、不连续的端口,如果想要同时指定多个离散的端口,需要借助显式匹配的"multiport"多端口匹配。

4.4.3:显式匹配

要求以“-m扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件。
常用的显式匹配条件:

  • 多端口匹配:-m multiport --sports 源端口列表
    -m multiport --dports 目的端口列表
  • IP范围匹配:-m iprange --src-range IP范围
  • MAC地址匹配:-m mac --mac-source MAC地址
  • 状态匹配:-m state --state 连接状态
#禁止来自192.168.10.10的主机上的tcp报文访问本机的22号端口、36号端口以及80号端口
[root@server ~]# iptables -t filter -I INPUT -s 192.168.10.10 -p tcp -m multiport --dports 22,36,80 -j DROP
#拒绝来自192.168.10.10至192.168.10.20之间的主机报文访问本主机
[root@server ~]# iptables -t filter -I INPUT -m iprange --src-range 192.168.10.10-192.168.10.20 -j REJECT
  • 1
  • 2
  • 3
  • 4

使用iprange扩展模块可以指定"一段连续的IP地址范围",用于匹配报文的源地址或者目标地址。

为了让"提供服务方"能够正常的"响应"我们的请求,于是在主机上开放了对应的端口,开放这些端口的同时,也出现了问题,别人利用这些开放的端口,"主动"的攻击我们,他们发送过来的报文并不是为了响应我们,而是为了主动攻击我们,
问题就是:怎样判断这些报文是为了回应我们之前发出的报文,还是主动向我们发送的报文呢?
我们可以通过iptables的state扩展模块解决上述问题。
对于state模块的连接而言,"连接"其中的报文可以分为5种状态,报文状态可以为NEW、ESTABLISHED、RELATED、INVALID、UNTRACKED。
我们只要放行状态为ESTABLISHED的报文即可。

[root@server ~]# iptables -t filter -I INPUT -m state --state ESTABLISHED  -j ACCEPT 
[root@server ~]# iptables -t filter -A INPUT -j REJECT
  • 1
  • 2

五:SNAT/DNAT策略

在这里插入图片描述
防火墙配置

#SNAT
iptables -t nat -I POSTROUTING -s 192.168.1.10 -o ens33 -j SNAT --to-source 12.0.0.1
#DNAT
iptables -t nat -I PREROUTING -d 12.0.0.1 -i ens33 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10
  • 1
  • 2
  • 3
  • 4

六:iptables-save与iptables-restore

iptables-save:保存防火墙规则,上述所有操作都是临时的,重启时规则会失效,想要永久保存,可以用iptables-save重定向到/etc/sysconfig/iptables-config,也可以备份到指定文件中,如/opt/iptables.bak
iptables-restore:恢复防火墙规则,当原有的防火墙规则被破坏时,可用备份文件进行恢复
iptables-restore < /opt/iptables.bak

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/631913
推荐阅读
相关标签
  

闽ICP备14008679号