防火墙之Iptables最佳实践

2021-11-15 17:28:18 浏览数 (1)

1. IPtables概述

保护内部主机和内部网络的安全,通过过滤的方式对网络层的ip地址和端口进行处理,不同的硬件或者软件平台上存在不同的防火墙,例如硬件防火墙ASA, Linux上的软件防火墙iptables,window上的防火墙ISA。

2. iptables防火墙的结构

netfilter内核模块、iptables用户工具、firewall用户工具

3. 按功能划分的iptables表

raw(状态跟踪)、mangle(标记)、nat(修改)、filter(过滤)

  1. raw:主要是为了提高效率使用的,raw本身的含义是指“原生的”、“未经过加工 的”,符合raw表所对应规则的数据包将会跳过一些检查,这样就可以提高效率;
  2. mangle:mangle表的规则可以对数据包进行修改,比如修改ttl值等
  3. nat:进行源地址或目标地址修改转换
  4. filter:通过过滤数据包的ip地址、mac地址、协议、端口,对数据包进行控制

4. 按照流量进入的时机划分的iptables链

INPUT(入站)、OUTPUT(出站)、FORWARD(转发)、PREROUTING(路由前)、POSTROUTING(路由后)

不同的表中存在不一致的链,如下: raw:PREROUTING、OUTPUT mangle:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING nat:PREROUTING、POSTROUTING、OUTPUT filter:INPUT、FORWARD、OUTPUT

表相当于内核空间的一个容器,在表容器中又包含不同的链,在链中包含不同的规则

iptables匹配流程:(根据数据流的方向确定匹配顺序)

  • 入站数据流向:PREROUTING、INPUT
  • 出站数据流向:OUTPUT、POSTROUTING
  • 转发数据流向:PREROUTING、FORWARD、POSTROUTING

表: raw—mangle—nat—filter

链内规则的匹配规则 链内规则匹配顺序:从上到下、匹配即停止、未匹配使用默认规则

5. iptables规则的编写

iptables -t 表名 选项 链名 条件 -j 动作

5.1 编写规则语法注意
  1. 省略表名,默认表示filter表,省略链名,表示表内所有链
  2. 除非设置默认规则,否则必须设置匹配的规则
  3. 选项、链名、动作必须大写,其他小写
5.2 匹配条件进行处理的动作
  1. ACCEPT:允许
  2. DROP:丢弃
  3. REJECT:拒绝
  4. LOG:日志
5.3 对链进行的增删改查的操作
  1. -A链的末尾添加、-I 链的指定位置添加,需要指定序号(若不指定,默认作为第一条规则)
  2. -D 删除一条规则,-F清空链内所有规则,例:iptables -D 链名 2
  3. -L -n 查看规则,-L -n -v 查看更详细的信息,-L -n —line-number显示规则的序号(大写为选项,后边小写为子选项,子选项需要跟在链名的后边)
  4. 设置默认规则:-P 链名 DROP或ACCEPT
5.4 匹配的条件
  • -p 协议 ##常用的协议ICMP、TCP、UDP协议;
  • -s 源地址 ##控制源地址访问,网段书写格式:192.168.1.0/24
  • -d 目的地址 ##控制目的地址访问
  • -i 入站网卡名称 ##控制传输数据的入站网卡
  • -o 出站网卡名称 ##控制传输数据的出站网卡
  • -p 协议 —dport 目的端口
  • -p 协议 —sport 源端口
  • -m multiport -p tcp或者udp —dports 端口号 ##指定多个端口,若连续端口11:22,若不连续端口11,22
  • ip地址范围:-m iprange —src-range 192.168.1.1-192.168.1.10 ##指定的ip地址范围是源地址
  • 数据包的状态:-m state —state NEW,ESTABLISHED,RELATED ##三个选项分别表示,新建,已经建立的连接,已经相关,例:默认规则为DROP并且无允许ssh22号端口,但是允许已经建立的连接,ssh不会断开,ss命令查看当前的连接

编写规则时,需要判断主机数据的流向,如INPUT链只能用-i入站网卡

6.案例

7. SNAT转换

  • 原理:在路由后链POSTROUTING将内网主机的ip地址转换成外网网卡的ip地址;
  • 应用场景:共享内部主机上网,在网关主机上设置;
实现

设置内外网网卡的网络参数

开启路由转发功能

编写规则

代码语言:javascript复制
iptables -t nat -I POSTROUTING -o 外网网卡 -s 内网的网段/24 -j MASQUERADE ##适用于网关服务器外网网卡地址不是固定的环境

做好安全控制:使用FORWARD时机进行控制,严格设置INPUT规则

配置客户端网关

8. DNAT转换

  1. 原理:在路由前链PREROUTING将来自外网访问网关公网ip及对应端口的目的ip及端口修改为内部服务器的ip及端口,实现发布内网服务器;
  2. 应用场景:发布内网主机到公网

当集群中的服务器做了SNAT之后,是可以直接访问互联网上的应用服务器了,但是互联网上的用户如何访问到内网服务器上的应用服务器呢?

实现

先做好SNAT,能访问外部的网络

编写规则实现DNAT

外网客户端访问网关外网ip地址进行测试

SNAT与DNAT转换实践

共享公网IP实现ftp,http服务的端口访问

0 人点赞