1 | 官网:http://www.netfilter.org/ |
1 | iptables -V #查看iptables版本 |
概念理解
添加iptables规则时需要指定规则所属的链和链所属的表
Netfilter | 表(tables) | 链(chains) | 规则(policy) |
---|---|---|---|
一栋楼 | 楼里的房子 | 房子里的柜子 | 柜子里的衣服,摆放规则 |
iptables数据包处理流程
1 | - 按顺序依次检查,匹配即停止(LOG策略例外) |
1 | 根据规则链的划分原则,不同的链处理时机是比较固定的,因此规则链之间的应用顺序取决于数据包的流向,具体表现如下。 |
防火墙4个表(tables)5个链(chains)
默认包括4个规则表:
1 | raw表:确定是否对该数据包进行状态跟踪;对应iptable_raw,表内包含两个链:OUTPUT、PREROUTING |
默认包括5种规则链:
1 | INPUT:处理入站数据包 |
4个规则表之间的应用顺序
1 | raw表 --> mangle表 -->nat表 -->filter表 |
iptables命令
1 | iptables -L 查看现有iptables规则 |
1 | iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT |
初始化防火墙步骤
1 | /etc/sysconfig/iptables #初始化保存配置文件 |
测试:禁止10.0.0.10访问我本地10.0.0.8的80端口
1 | iptables -t filter -A INPUT -i eth0 -p tcp --dport 80 -d 10.0.0.8 -s 10.0.0.10 -j DROP |
1 | #模拟禁用整个地址段(也包括目标IP地址),此时目标服务器也无法ssh连接了 |
删除规则
1 | iptables -nL --line-number |
修改现有规则
1 | iptables -nL --line-number |
测试:除了10.1.0.0/24网段可以连接10.0.0.8服务器22端口,其他网段都禁止
1 | 前提:filter表需要默认允许,否则该方法会被拒 |
匹配多个端口
1 | 【匹配连续多个端口】 |
匹配多个IP或IP段
1 | 屏蔽多个IP地址或多个地址段 |
禁止Ping
资料参考: [Ping回显类型](http://www.cnitblog.com/yang55xiaoguang/articles/59581.ht
1 | 主要关注以下类型 |
状态机制配置
1 | New状态机制的包:说明这是三次握手第一次发出的SYN包 |
配置
1 | 防火墙服务配置在FTP服务器上时,需要配置以下策略 |
iptables对网络数据传输进行限速
1 | 原理图如上,它是基于逻辑上的令牌桶实现 |
配置
1 | iptables -A INPUT -s 10.0.0.253 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT |
iptables安全配置
基本配置
1 | /etc/sysconfig/iptables #初始化保存配置文件 |
业务配置
1 | iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT #开放80和443 Web端口 |
防火墙规则永久保存
1 | 方法1:/etc/init.d/iptables save 永久保存 |
1 | 方法2: iptables-save #查看当前规则 |
1 | 方法3: 放到脚本中,然后crontab定时加载一次。或者开启自加载 |
此时再重启iptables服务配置就不会丢失了
iptables线上配置规范
1 | 在测试环境测试OK后,再在线上机器配置 |
SNAT共享上网
1 | 环境说明: |
以下配置均在防火墙上配置
1 | #iptables上开启内核转发 |
1 | iptables配置内网172.16.1.51主机NAT |
1 | 最后,在172.16.1.51服务器上配置网关为172.16.1.50或配置如下路由 |
故障排查
1 | 内网机ping外网测试,如果Ping不通,则按照包转发流程排查 |
如果没有固定外网IP地址,可以使用以下NAT伪装命令
1 | iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE |
DNAT端口映射
1 | 访问我本机的10.0.0.8(公网IP)的9000端口,映射到172.16.1.51的22端口 |
####DNAT一对一映射
1 | iptables项目案例3:IP一对一映射 172.16.1.10 == 10.0.0.8(公网) |
映射多个外网IP上网
1 | 方法1: |
iptables自定义链
1 | 与shell变量定义类似,目的是方便使用 |
1 | #说明:创建名字为syn-flood自定义链 |
自定义链测试
1 | 需求:对多个网段数据包进行丢弃 |
iptables优化
1 | 系统防火墙与网络内核优化标准参数 |
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2018/02/10/iptables网络防火墙/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!