iptables
时间关系,仅整理要点
实际生产建议学习 nftables 与 firewalld
参考资料: 鸟哥 Debian Wiki:iptables
iptables 的规则是有顺序的! 数据包会按规则的排列顺序依次判断通过。
iptables 默认分 3 张 table ( 表 ) 而规则作为 chain 存储在对应的表中。
默认的表为:
filter 影响进入本机的数据包
nat 进行 NAT 时用到的表
mangle 与打标记的包有关,本例不讲述
iptables 语法
预设规则
预设规则指:当数据包不满足设定的规则时,则执行的默认操作。
如:设定 INPUT 的默认规则为 DROP
$ iptables -P INPUT DROP添加规则
仅针对网卡 ( 源与目标 IP 地址 )
keychain: 键名
interfaces: 网卡名
ip/cidr 源 IP 地址 ( 支持使用 IP/CIDR 格式 )
ACCEPT/REJECT/DROP 数据包动作:接受/拒绝/丢弃
例:放行来自本机回环地址的所有网络数据包:
针对端口 ( TCP 与 UDP 协议 )
按状态放行数据包:
NAT
一切的一切不要忘了打开 IP Forwarding!
修改 /etc/sysctl.conf
把 net.ipv4.ip_forward 改为 1 并重启。
结果应为:
iptable NAT 路径
先经过 NAT Table 的 PREROUTING Key
如果包不进入本机,则继续处理
再经过 Filter Table 的 FORWARD Key
最后经过 NAT Table 的 POSTROUTING Key,再发送出去
要将内网流量通过 NAT 转发至 WAN,即将内网的 RFC1918 私有地址转换为公网地址,需要使用 Source NAT
Source NAT 使用 POSTROUTING Key
其中 $INNET 为 NAT 后的内部 IP 地址,$EXTIF 为 NAT 后的出口 IP 地址或网卡名。
将内网的服务映射到 WAN,即做端口映射,需要配置 Destination NAT。
DNAT 使用 PREROUTING Key
例如,将 Web 服务的 80 端口转发到内网的 192.168.100.10 的 80 端口上:
查看防火墙规则使用 iptables -L
清除防火墙规则使用 iptables -F
不要忘记适当时候放行 ICMP 协议数据包!
如果想禁 ping 的话,最好不要禁掉所有 ICMP 数据包,而仅 DROP 掉 ICMP type 8.
例如:
由于 iptables 需要按顺序写入,为减小重复调试的工作量,强烈建议写一个 Shell 脚本,在脚本中修改 iptables 规则。
虽然完全可以插入规则,但是删掉重写比较。。。少记一点点东西。
保存 iptables 配置
方法一
导出配置使用 iptables-save,直接运行即可将配置输出至标准输出
将文件导出并保存后,编辑 /etc/network/if-pre-up.d/iptables
加入以下内容
给这个脚本加上运行权限:
方法二
安装 iptables-persistent,后运行:
这个也可以稍微看下:
(iptables防火墙的应用和SNAT/DNAT策略)[https://zhuanlan.zhihu.com/p/26325389]
最后更新于
这有帮助吗?