🤣iptables

Linux上常用的防火墙软件

补充说明

iptables命令 是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

  • 补充说明

    • 语法

    • 选项

  • 基本参数

    • 命令选项输入顺序

    • 工作机制

    • 防火墙的策略

    • 防火墙的策略

    • 实例

      • 清空当前的所有规则和计数

      • 配置允许ssh端口连接

      • 允许本地回环地址可以正常使用

      • 设置默认的规则

      • 配置白名单

      • 开启相应的服务端口

      • 保存规则到配置文件中

      • 列出已设置的规则

      • 清除已有规则

      • 删除已添加的规则

      • 开放指定的端口

      • 屏蔽IP

      • 指定数据包出去的网络接口

      • 查看已添加的规则

      • 启动网络转发规则

      • 端口映射

      • 字符串匹配

      • 阻止Windows蠕虫的攻击

      • 防止SYN洪水攻击

语法

选项

基本参数

参数
作用

-P

设置默认策略:iptables -P INPUT (DROP

-F

清空规则链

-L

查看规则链

-A

在规则链的末尾加入新规则

-I

num 在规则链的头部加入新规则

-D

num 删除某一条规则

-s

匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。

-d

匹配目标地址

-i

网卡名称 匹配从这块网卡流入的数据

-o

网卡名称 匹配从这块网卡流出的数据

-p

匹配协议,如tcp,udp,icmp

--dport num

匹配目标端口号

--sport num

匹配来源端口号

命令选项输入顺序

工作机制

规则链名包括(也被称为五个钩子函数(hook functions)):

  • INPUT链 :处理输入数据包。

  • OUTPUT链 :处理输出数据包。

  • FORWARD链 :处理转发数据包。

  • PREROUTING链 :用于目标地址转换(DNAT)。

  • POSTOUTING链 :用于源地址转换(SNAT)。

防火墙的策略

防火墙策略一般分为两种,一种叫策略,一种叫策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。

我们现在用的比较多个功能有3个:

  1. filter 定义允许或者不允许的,只能做在3个链上:INPUT ,FORWARD ,OUTPUT

  2. nat 定义地址转换的,也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING

  3. mangle功能:修改报文原数据,是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。

小扩展:

  • 对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT

  • 对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING

  • 而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。

iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。

注意:规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。

表名包括:

  • raw :高级功能,如:网址过滤。

  • mangle :数据包修改(QOS),用于实现服务质量。

  • nat :地址转换,用于网关路由器。

  • filter :包过滤,用于防火墙规则。

动作包括:

  • ACCEPT :接收数据包。

  • DROP :丢弃数据包。

  • REDIRECT :重定向、映射、透明代理。

  • SNAT :源地址转换。

  • DNAT :目标地址转换。

  • MASQUERADE :IP伪装(NAT),用于ADSL。

  • LOG :日志记录。

  • SEMARK : 添加SEMARK标记以供网域内强制访问控制(MAC)

实例

清空当前的所有规则和计数

配置允许ssh端口连接

允许本地回环地址可以正常使用

设置默认的规则

配置白名单

开启相应的服务端口

保存规则到配置文件中

列出已设置的规则

iptables -L [-t 表名] [链名]

  • 四个表名 rawnatfiltermangle

  • 五个规则链名 INPUTOUTPUTFORWARDPREROUTINGPOSTROUTING

  • filter表包含INPUTOUTPUTFORWARD三个规则链

清除已有规则

删除已添加的规则

将所有iptables以序号标记显示,执行:

比如要删除INPUT里序号为8的规则,执行:

开放指定的端口

屏蔽IP

指定数据包出去的网络接口

只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。

查看已添加的规则

启动网络转发规则

公网210.14.67.7让内网192.168.188.0/24上网

端口映射

本机的 2222 端口映射到内网 虚拟机的22 端口

字符串匹配

比如,我们要过滤所有TCP连接中的字符串test,一旦出现它我们就终止这个连接,我们可以这么做:

阻止Windows蠕虫的攻击

防止SYN洪水攻击

添加SECMARK记录

更多实例

用iptables搭建一套强大的安全防护盾 http://www.imooc.com/learn/389

iptables: linux 下应用层防火墙工具

iptables 5链: 对应 Hook point netfilter: linux 操作系统核心层内部的一个数据包处理模块 Hook point: 数据包在 netfilter 中的挂载点; PRE_ROUTING / INPUT / OUTPUT / FORWARD / POST_ROUTING

iptables & netfilter image.png

iptables 4表5链 image.png

iptables image.png

  • 4表

filter: 访问控制 / 规则匹配 nat: 地址转发 mangle / raw

  • 规则

数据访问控制: ACCEPT / DROP / REJECT 数据包改写(nat -> 地址转换): snat / dnat 信息记录: log

使用场景实例

  • 场景一

开放 tcp 10-22/80 端口 开放 icmp 其他未被允许的端口禁止访问

存在的问题: 本机无法访问本机; 本机无法访问其他主机

  • 场景二

ftp: 默认被动模式(服务器产生随机端口告诉客户端, 客户端主动连接这个端口拉取数据) vsftpd: 使 ftp 支持主动模式(客户端产生随机端口通知服务器, 服务器主动连接这个端口发送数据)

  • 场景三

允许外网访问: web http -> 80/tcp; https -> 443/tcp mail smtp -> 25/tcp; smtps -> 465/tcp pop3 -> 110/tcp; pop3s -> 995/tcp imap -> 143/tcp

内部使用: file nfs -> 123/udp samba -> 137/138/139/445/tcp ftp -> 20/21/tcp remote ssh -> 22/tcp sql mysql -> 3306/tcp oracle -> 1521/tcp

  • 场景四

nat 转发

  • 场景五

防CC攻击

这有帮助吗?