1. IPtables概述
保护内部主机和内部网络的安全,通过过滤的方式对网络层的ip地址和端口进行处理,不同的硬件或者软件平台上存在不同的防火墙,例如硬件防火墙ASA, Linux上的软件防火墙iptables,window上的防火墙ISA。
2. iptables防火墙的结构
netfilter内核模块、iptables用户工具、firewall用户工具
3. 按功能划分的iptables表
raw(状态跟踪)、mangle(标记)、nat(修改)、filter(过滤)
- raw:主要是为了提高效率使用的,raw本身的含义是指“原生的”、“未经过加工 的”,符合raw表所对应规则的数据包将会跳过一些检查,这样就可以提高效率;
- mangle:mangle表的规则可以对数据包进行修改,比如修改ttl值等
- nat:进行源地址或目标地址修改转换
- 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 编写规则语法注意
- 省略表名,默认表示filter表,省略链名,表示表内所有链
- 除非设置默认规则,否则必须设置匹配的规则
- 选项、链名、动作必须大写,其他小写
5.2 匹配条件进行处理的动作
- ACCEPT:允许
- DROP:丢弃
- REJECT:拒绝
- LOG:日志
5.3 对链进行的增删改查的操作
- -A链的末尾添加、-I 链的指定位置添加,需要指定序号(若不指定,默认作为第一条规则)
- -D 删除一条规则,-F清空链内所有规则,例:iptables -D 链名 2
- -L -n 查看规则,-L -n -v 查看更详细的信息,-L -n —line-number显示规则的序号(大写为选项,后边小写为子选项,子选项需要跟在链名的后边)
- 设置默认规则:-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转换
- 原理:在路由前链PREROUTING将来自外网访问网关公网ip及对应端口的目的ip及端口修改为内部服务器的ip及端口,实现发布内网服务器;
- 应用场景:发布内网主机到公网
当集群中的服务器做了SNAT之后,是可以直接访问互联网上的应用服务器了,但是互联网上的用户如何访问到内网服务器上的应用服务器呢?
实现
先做好SNAT,能访问外部的网络
编写规则实现DNAT
外网客户端访问网关外网ip地址进行测试
SNAT与DNAT转换实践
共享公网IP实现ftp,http服务的端口访问