美文网首页
iptables:强大的防火墙工具

iptables:强大的防火墙工具

作者: dshowing | 来源:发表于2019-05-26 12:44 被阅读0次

iptables是内置于多数发行版中的网络防火墙包过滤器。我也不知道该怎么解释,,别看很轻量化,但是功能很强大~
iptables的引入是用来替换掉老的ipchains,ipclains在Linux内核2.2系列中使用,用来作为封包过滤和防火墙的功能。但是ipchains的功能和定制化很局限。在Linux内核2.3系列开始引入了netfilter项目,其中iptables防火墙就是这个项目的一部分,在2.4内核中iptables取代了先前的ipchains作为内置的包过滤器。
对于iptables的历史我没有深究,这篇博客重点在于iptables的用法和规则设定。在网上简单了解一下发现,Linux包过滤功能的历史并不长,本篇参考了以下几个地方的内容:

iptables工作机制

iptables分为五个规则链:

  • PREROUTING 数据包进入路由表之前
  • INPUT 数据包入口
  • FORWARD 转发关卡
  • OUTPUT 数据包出口
  • POSTROUTING 数据包离开路由后
    这五个规则链是五个钩子函数(hook),只要是经过本机的数据包,一定会经过这五个链中的一个。那么就可以通过配置过滤规则来实现特定的场景。

和四个表:

  • filter 一般的过滤功能
  • nat 用于nat功能(端口转发、地址映射等)
  • mangle 对数据包进行修改(TOS、TTL)
  • raw 优先级最高,为了不让iptables做数据包的连接跟踪处理,以提高性能。
主机数据流

其中每个表对应多个链,都有不同,这是每个表的默认规则链:

  • filter:INPUT;FORWARD;OUTPUT;
  • nat:PREROUTING;POSTROUTING;OUTPUT;
  • mangle:PREROUTING;POSTROUTING;INPUT;OUTPUT;FORWARD;
  • raw:OUTPUT;PREROUTING;

iptables的策略

规则链确定了作用的位置;而表则划分出了不同的功能。filter表主要是过滤的功能,针对特定的IP、端口、网段进行限制;nat表主要定义地址转换的功能等。
iptables的策略主要分为两种:“通”策略和“堵”策略:

  1. 通策略,默认门是关着的,即默认规则为DROP,根据需要进行放行。
  2. 堵策略,默认门是开着的,即默认规则为ACCEPT,根据需要拦截数据包。

注意iptables的规则是严格按照先后顺序执行的,所以要将比较严格的规则前置,检查规则的时候是由上向下的顺序。
此外,iptables还支持自定义链,必须跟某种特定的链关联起来,在此先不做讨论。

iptables规则语法

iptables的命令格式:

iptables -t [tables] COMMAND chain rules -j ACTION
  • -t tables:四个表,缺省是filter表,可忽略此选项
  • COMMAND:命令,定义对规则采取的操作
  • chain:指定是在哪一条链上的操作
  • rules:指定匹配规则
  • -j ACTION:指定做出如何的处理

E.g.
禁止123.123.123.123地址对本机80端口的访问:

iptables -t filter -A INPUT -s 123.123.123.123 -p tcp --dport 80 -j DROP
iptables -t filter -A INPUT -s 123.123.123.123 -p tcp --dport 80 -j REJECT

默认OUTPUT链为“关”:

iptables -P OUTPUT DROP

查看详细规则:

iptables -L -n -v

COMMAND部分详解

链管理命令(立即生效)

-P:设置默认策略:开&&关

iptables -P OUTPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P OUTPUT REJECT

决定OUTPUT链默认接收或丢弃。不同的是REJECT是直接丢弃,而DROP是悄悄丢弃数据包。这在扫描端口的时候会有差别。

-F:清空规则链

iptables -t nat -F
iptables -F INPUT

分别是清空nat表的规则和清空filter表的INPUT链规则。
注意:由于是立即生效的命令,因此在清空filter表时先确定没有默认DROP的链,否则敲完回车后就会将你拒之门外了。有控制台还好,没有的话就麻烦的很了

-N:新建一个自定义链

iptables -N inboard_tcp_web

-X:用于删除用户自定义的空链
删除空链,因此删除之前最好先执行iptables -F

-E:用来给自定义链重命名

iptables -E oldname newname

-Z:清空链。清空链以及链默认规则的计数器:1.匹配数据吧个数;2.多少字节。

iptables -Z

规则管理命令

-A:追加规则。当前链的规则后新加一条规则。(iptables执行有前后顺序)
-I [num]:插入规则。插入为第几条规则

iptabels -t filter -I 1 -s 192.168.1.106 -p tcp --dport 80 -j DROP

-R [num]:替换。替换(修改)为第几条规则。相当于bash中的mv命令。
-D [num]:删除。删除第几条规则。

查看规则命令

iptables -L

子命令:

  • -v/vv/vvv 详细信息
  • -x 计数器显示精确值,不做单位换算
  • –line-numbers 显示规则行号
  • -t nat 显示指定位置的信息

关于规则匹配

地址匹配

  • -s:匹配源地址 IP | IP/Mask | 0.0.0.0/0.0.0.0
  • 感叹号!表示取反
  • -d:匹配目的地址
  • -p:匹配通信协议(TCP/UDP/ICMP)
  • -i eth0:指定数据包流入的网卡
  • -o eth1:指定数据包流出的网卡

协议匹配

-p tcp:匹配TCP通信协议:

  • --dport XX/XX-XX 指定目的端口,只能表示连续端口,不可指定非连续端口号
  • --sport XX/XX-XX 指定源端口,同上

-p tcp --tcp-flags 指定TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)。一般格式如下:

iptables -A INPUT -p tcp --tcpflags syn,ack,fin,rst  syn  ...
iptables -A INPUT -p tcp --syn  ...

一般分为前后两部分:syn,ack,fin,rst表示受检查的标志位;syn表示匹配必须为1的标志位,而且其他的必须为零。常用来匹配三次握手的第一个数据包。另一种写法是直接写成--syn

-p udp:匹配UDP通信协议(同tcp):

  • --dport XX/XX-XX 指定目的端口,只能表示连续端口,不可指定非连续端口号
  • --sport XX/XX-XX 指定源端口,同上

-p icmp:匹配icmp数据包,通常是ping包:

  • -p icmp --icmp-type 8 回显icmp请求
  • -p icmp --icmp-type 0 回显icmp应答

E.g.
以下操作中INPUT,OUTPUT默认丢弃
开放本机icmp请求权限:

iptables -A OUTPUT -s 192.168.1.100 -p icmp --icmp-type 8 -j ACCEPT

但是此时仍无反应,接下来开放本机的icmp应答权限:

iptables -A INPUT -d 192.168.1.100 -p icmp --icmp-type 0 -j ACCEPT

这时候就会成功ping通外部机器。但是此时外部主机是ping不通本机的,这就需要分别在INPUT和OUTPUT上做相反的规则,在此不做赘述。

-m 启用扩展模块:

  • -m multiport -p tcp --dport 21,22,23,80 启用多端口扩展模块
  • -m state --state NEW,ESTABLISH 增加状态检测模块

ACTION部分

DROP:悄悄丢弃。一般使用DROP,效果与REJECT相同,可以隐藏身份和防火墙结构。
REJECT:明示拒绝,端口扫描显示被拒绝。
ACCEPT:接收数据包。

这三个是常用动作,续更…

状态检测

通常,对于整个TCP协议来讲,是一个保持连接的通信协议。在三次握手四次挥手过程中,第一次握手称之为NEW连接;从第二次握手以后,标志位ack都等于1,称之为已建立的连接:ESTABLISH;类似FTP连接,监听端口独立于数据传输端口而存在,包括20,21两个端口,我们称之为RELATED;对于我们无法识别的状态,称之为INVALID。

  • NEW 新建立的连接
  • ESTABLISH 已存在的连接
  • INVALID 无法识别的连接
  • RELATED 有联系的连接(没用过,不深究)

这样做,可以指定源地址可以连接,禁用其他连接:

iptables -A INPUT -s 192.168.1.106/24 -d 192.168.1.100 -p tcp --dport 22 -m state --state NEW,ESTABLISH -j ACCEPT
iptables -A OUTPUT -d 192.168.1.106 -m state --state ESTABLISH -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

在OUTPUT链仅开放192.168.1.106的规则太严格了,如果需要其他连接,可以改成这样:

iptables -R OUTPUT 1 -m state --state ESTABLISH -j ACCEPT

相关文章

  • Tomcat性能分析

    防火墙 service iptables stopservice iptables start jmx分析 工具路...

  • iptables相关以及sudo

    (一)、详述iptables五链 iptables: 包过滤型的防火墙 firewall: 防火墙,隔离工具;工作...

  • iptables总结

    iptables manpage iptables 简介 iptables是linux防火墙管理工具,位于/sbi...

  • iptables:强大的防火墙工具

    iptables是内置于多数发行版中的网络防火墙包过滤器。我也不知道该怎么解释,,别看很轻量化,但是功能很强大~i...

  • iptables

    第1章 iptables介绍 1.iptables是什么? iptables是开源的基于数据包过滤的防火墙工具。 ...

  • Iptables防火墙

    第1章 iptables介绍 1.iptables是什么? iptables是开源的基于数据包过滤的防火墙工具。 ...

  • iptables

    第1章 iptables介绍 1.iptables是什么? iptables是开源的基于数据包过滤的防火墙工具。 ...

  • linux.network.iptables

    iptables 是操作 netfilter 模块 实现防火墙和 nat 等功能的工具 iptables 内置了三...

  • Linux防火墙--iptables学习

    iptables是Linux系统提供的一个强大的防火墙工具,可以实现包过滤、包重定向、NAT转换等功能。iptab...

  • Iptables AND Firewalld

    iptables与firewalld都是防火墙规则生成工具。iptables设置好策略后交由内核层面的netfil...

网友评论

      本文标题:iptables:强大的防火墙工具

      本文链接:https://www.haomeiwen.com/subject/dwmxtctx.html