前言
在大企业中防火墙角色主要交给硬件来支持,效果自然没话说只是需要增加一点点成本,但对于大多数个人或者互联网公司来说选择系统自带的 iptables
或者第三方云防火墙似乎是更加合适的选择,通过一些合理的优化和灵活的配置,我们也可以很轻松实现硬件防火墙的部分功能,够用就好。
建立防火墙白名单机制很重要
扩展阅读
Linux 防火墙和 iptables - http://liaoph.com/iptables/
iptables 零基础快速入门系列 - http://www.zsythink.net/archives/tag/iptables/
基础知识
Netfilter 与 iptables 的关系
Linux 系统在内核中提供了对报文数据包过滤和修改的官方项目名为 Netfilter,它指的是 Linux 内核中的一个框架,它可以用于在不同阶段将某些钩子函数(hook)作用域网络协议栈。Netfilter 本身并不对数据包进行过滤,它只是允许可以过滤数据包或修改数据包的函数挂接到内核网络协议栈中的适当位置。这些函数是可以自定义的。
iptables 是用户层的工具,它提供命令行接口,能够向 Netfilter 中添加规则策略,从而实现报文过滤,修改等功能。Linux 系统中并不止有 iptables 能够生成防火墙规则,其他的工具如 firewalld 等也能实现类似的功能。
使用 iptables 进行包过滤
iptables 策略是由一组有序的规则建立的,它告诉内核应该如何处理某些类别的数据包。每一个 iptables 规则应用于一个表中的一个链。一个 iptables 链就是一个规则集,这些规则按序与包含某种特征的数据包进行比较匹配。
表
iptables 默认有 4 个表
- nat 表(地址转换表)
- filter 表(数据过滤表)
- raw 表(状态跟踪表)
- mangle 表(包标记表)
链
每个表都有一组内置链,用户还可以添加自定义的链。最重要的内置链是 filter 表中的 INPUT、OUTPUT 和 FORWARD 链。
- INPUT 链(入站规则)
- OUTPUT 链(出站规则)
- FORWARD 链(转发规则)
- PREROUTING 链(路有前规则)
- POSTROUTING 链(路由后规则)
下图展现了一个数据包是如何通过内核中的 net 和 filter 表的:
iptables 的 4 表 5 链
1 | iptables --> 四表五链 |
匹配
每个 iptables 规则都包含一组匹配和一个目标动作,后者定义了复合规则的数据包应该采取什么处理行为。iptables 匹配指定是数据包必须匹配的条件,只有当数据包满足所有的匹配条件时,iptables 才能根据规则的目标所指定的动作来处理该数据包。
每个匹配都在 iptables 的命令行中指定。下面是一些常用的基本匹配:
参数 | 作用 |
---|---|
-P | 设置默认策略 |
-F | 清空规则链 |
-L | 查看规则链 |
-A | 在规则链的末尾加入新规则 |
-I num | 在规则链的头部加入新规则 |
-D num | 删除某一条规则 |
-s | 匹配来源地址 IP/MASK,加叹号 “!” 表示除这个 IP 外 |
-d | 匹配目标地址 |
-i 网卡名称 | 匹配从这块网卡流入的数据 |
-o 网卡名称 | 匹配从这块网卡流出的数据 |
-p | 匹配协议,如 TCP、UDP、ICMP |
–dport num | 匹配目标端口号 |
–sport num | 匹配来源端口号 |
防火墙的匹配规则
- 匹配即可停止
- 匹配有先后顺序
- 默认规则的优先级最低
基础语法
表名作用:
raw:高级功能,如:网址过滤。
mangle:数据包修改(QOS),用于实现服务质量。
net:地址转换,用于网关路由器。
filter:包过滤,用于防火墙规则。
规则链作用:
INPUT 链:处理输入数据包。
OUTPUT 链:处理输出数据包。
PORWARD 链:处理转发数据包。
PREROUTING 链:用于目标地址转换(DNAT)。
POSTOUTING 链:用于源地址转换(SNAT)。
动作作用:
accept:接收数据包。
DROP:丢弃数据包。
REJECT :拒绝数据包
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
MASQUERADE:IP 伪装(NAT),用于 ADSL。
LOG:日志记录。
1 | # 规则的观察与清除 |
注意事项与规律
- 可以不指定表,默认为 filter 表
- 可以不指定链,默认为对应表的所有链
- 除非设置默认策略,否则必须指定匹配条件
- 选项 / 链名 / 目标操作用大写字母,其余都小写
配置 iptables 白名单机制
配置 iptables 白名单是相对简单有效的管理手段
1 | # 清除所有规则(慎用) |
设置 crontab 脚本
便于运维集中化管理扩展
1 | vim /root/start_iptables.sh |
CentOS7 配置 iptables
1 | # 配置好 yum 源以后安装 iptables-service |
开启 Linux 路由转发
1 | # 关闭路由转发 |
配置 NAT Tunnel
俗称跳板机
1 | # 配置 iptables |
常用的 iptables 配置文件
1 | # dnat |
Ansible 管理 iptables
1 | --- |