Iptables深入浅出

1、iptables的基本概念

众所周知iptables是Linux系统下自带免费的包过滤防火墙。其实不然,iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter。

netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。

Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

  1. 网络地址转换(Network Address Translate)
  2. 数据包内容修改
  3. 数据包过滤的防火墙功能(最常用的功能

2、iptables规则、表和链

我们知道iptables是按照规则来办事的,我们就来说说规则(rules),规则其实就是网络管理员预定义的条件,规则一般的定义为”如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

这些规则在iptables中都是(tables)和链(chains)来描述的,iptables的规则表和链:
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现以下功能。

  1. filter表:负责过滤功能,防火墙;内核模块:iptables_filter
  2. nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
  3. mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
  4. raw表:关闭nat表上启用的连接追踪机制;iptable_raw

链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

表和链的关系:

1、每个链上的规则都具有一定的功能, 相同功能的规则存在于特定的表中。

2、每个表中都都具有很多规则,这些规则可以被那些链使用。

3、iptables的转发流程

根据实际情况的不同,报文经过”链”可能不同。如果报文不需要转发,则经过input链进入本地的服务,本地服务处理之后再经过output链转发出来。如果报文需要转发,那么报文则不会经过input链发往用户空间,而是直接在内核空间中经过forward链和postrouting链转发出去的。

所以,根据上图,我们能够想象出某些常用场景中,报文的流向:

到本机某进程的报文:PREROUTING –> INPUT

由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING

由本机的某进程发出报文(通常为响应报文):OUTPUT –> POSTROUTING

结合上述所有的描述,我们可以将数据包通过防火墙的流程总结为下图:

4、iptables的相关命令

4.1 查询命令

# iptables -L  默认不指定的话是filter表

# iptables -t raw -L、iptables -t mangle -L、iptables -t nat -L、iptables -t filter -L

# iptables -L INPUT  查询filter表中的指定链

# iptables -nvL INPUT  查询filter表中指定链的详细信息。v参数表示详细信息,n参数表示不对IP地址进行名称解析

# iptables --line-number -nvL INPUT   显示规则行号查询

4.2 清除规则

# iptables -F

# iptables -F INPUT 清除filter表中的指定链

根据行号删除指定规则, 先查询出行号然后根据行号删除

# iptables --line-number -nvL INPUT

# iptables -D INPUT 3

根据具体的匹配条件与动作删除规则

# iptables -t filter -D INPUT -s 2.2.2.2 -j drop

4.3 增加规则

在filter表的INPUT链的最前面插入一条规则,对于来自源IP是2.2.2.2的数据包全部丢弃

# iptables -t filter -I INPUT -s 2.2.2.2 -j drop

在filter表的INPUT链的最后追加一条规则,对于来自源IP是2.2.2.2的数据包全部接受

# iptables -t filter -A INPUT -s 2.2.2.2 -j accept

在filter表的INPUT链的的指定行增加规则,即第二行

#  iptables -t filter -A INPUT  2 -s 2.2.2.2 -j accept

对端口进行限制

# iptables -t filter -A INPUT -p udp --dport 123 -j REJECT

思考?两条规则都是对源地址是2.2.2.2的地址进行处理,第一条是丢弃,第二条是接受,实际第二条是不生效的。如果报文已经被前面的规则匹配到,iptables则会对报文执行对应的动作,即使后面的规则也能匹配到当前报文,也没有机会再对报文执行相应的动作了。

参数:

-A 追加

-D 删除

-j  执行动作ACCEPT/DROP/REJECT等

-p 指定协议

-s 源地址

-d 目标地址

-i 输入接口

-o 输出接口

-sport 源端口

-dport 目的端口

4.4 修改规则

# iptables -t filter -R INPUT -s 2.2.2.2 -j drop

修改指定链的默认策略(此处一定要谨慎)

# iptables -t filter -P INPUT DROP

4.5 保存规则

在默认的情况下,我们对”防火墙”所做出的修改都是”临时的”,换句话说就是,当重启iptables服务或者重启服务器以后,我们平常添加的规则或者对规则所做出的修改都将消失,为了防止这种情况的发生,我们需要将规则”保存”。

# service iptables save   该命令即可保存规则,规则默认保存在/etc/sysconfig/iptables文件中

# iptables-save > /etc/sysconfig/iptables

重载规则

# iptables-restore < /etc/sysconfig/iptables

或者

# iptables-save > /etc/iptables.cfg.save

# echo "iptables-restore -n < /etc/iptables.cfg.save >/dev/null 2>&1" >> /etc/init.d/boot.local

5、iptables一般的添加原则

1、先添加白名单

# iptables -A INPUT -s 127.0.0.1 -j ACCEPT

# iptables -A INPUT -p icmp -j ACCEPT

# iptables -A INPUT -s XX.XX.XX.XX/24 -j ACCEPT

2、再添加黑名单

# iptables -A IPUT -j REJECT --reject-with icmp-port-unreachable

6、iptables得nat表

Linux本身可以转发数据包,自身就会形成了一个小路由器,可以充当网关来使用
开启了数据包转发功能,iptables的NAT表才可以正常使用。

如何开启转化?

使能数据转发功能:
# echo 1 > /proc/sys/net/ipv4/ip_forward   
禁⽌数据转发功能:
# echo 0 > /proc/sys/net/ipv4/ip_forward

网络地址转换 NAT(Network Address Translation),被广泛应用于各种类型 Internet 接入方式和各种类型的网络中。原因很简单,NAT 不仅完美地解决了 IP 地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。默认情况下,内部 IP 地址是无法被路由到外网的,内部主机 192.168.1.234 要与外部 Internet通信,IP 包到达 NAT 路由器时,IP 包头的源地址 192.168.1.234 被替换成一个合法的外网 IP,并在 NAT 转发表中保存这条记录。当外部主机发送一个应答到内网时,NAT 路由器收到后,查看当前 NAT 转换表,用 192.168.1.234  替换掉这个外网地址。NAT 将网络划分为内部网络和外部网络两部分,局域网主机利用 NAT 访问网络时,是将局域网内部的本地地址转换为全局地址(互联网合法的 IP 地址)后转发数据包;

SNAT和DNAT

NAT工作在网络层和传输层,实现地址重写,实现端口重写。分为DNAT和SNAT(互相对应的,需要查找NAT会话表)

   SNAT:只是修改请求报文的源地址(为了隐藏真实服务器的IP地址)

   DNAT:只是修改请求报文的目标地址;(为了让客户机利用私网地址访问公有地址)

SNAT和DNAT是互相映射的,一个SNAT必须映射一个DNAT, 一个DNAT必须映射一个SNAT

nat修改:在prerouting, postrouting上面做改动

SNAT原理图:

DNAT原理图:

配置iptables的NAT表

配置SNAT

iptables -t nat -A POSTROUTING [-s 内_IP/MASK] -d D_IP/MASK -j SNAT --to-source F_IP

配置DNAT

iptables -t nat -A PREROUTING [-s 外_IP/MASK] -d FIP [-p tcp --dport 80] -j DNAT --to-destination 内_IP[:PORT]

iptables详解(1):iptables概念-朱双印博客 (zsythink.net)icon-default.png?t=N7T8https://www.zsythink.net/archives/1199

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值