同福

iptables学习笔记

介绍

介绍

iptables是Linux操作系统控制系统防火墙的工具,是一个软件防火墙。

使用iptables可以实现针对服务器网络的完全定制化配置,无论是要限制内部到外部的访问,还是控制从外部进入内部的访问,又或者是给本地服务端口开放访问权限,这一切的一切都是基于iptables设置的。

可以说玩转了iptables就可以随心所欲地控制Linux操作系统的网络访问权限了。

使用

语法

iptables -t 链表名称 <-A|-I|-D|-R> 规则链名称 [规则号] <-i|-o 网卡名称> -p 协议名称 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

规则链

INPUT

数据包流入时候的规则

OUTPUT

数据包流出时候的规则

FORWARD

数据包转发规则

策略

默认

默认所有规则链的策略都是ACCEPT,也就是允许通过

常规

一般情况下,我们只需要限制流入的数据,也就是把INPUT的策略设置为DROP就可以了

iptables -P INPUT DROP

然后我们需要对每个开放的服务端口进行单独的规则设置

iptables -I INPUT -p tcp --dport=80 -j ACCEPT

如果希望机器不能连接外部网络的话,我们还可以现在OUTPUT的策略为DROP

iptables -P OUTPUT DROP

如果现在了流出的数据,则应该为所有开放的服务端口进行单独的规则设置

iptables -I OUTPUT -p tcp --sport=80 -j ACCEPT

开放服务端口

开放TCP服务端口

开放TCP服务端口的语法

iptables -I INPUT -p tcp --dport=80 -j ACCEPT
iptables -I OUTPUT -p tcp --sport=80 -j ACCEPT

关闭TCP服务端口

关闭TCP服务端口的语法

iptables -I INPUT -p tcp --dport=80 -j DROP
iptables -I OUTPUT -p tcp --sport=80 -j DROP

删除TCP服务端口

删除指定的INPUT和OUTPUT规则即可

iptables -D INPUT -p tcp --dport=80 -j ACCEPT
iptables -D OUTPUT -p tcp --sport=80 -j ACCEPT
iptables -D INPUT -p tcp --dport=80 -j DROP
iptables -D OUTPUT -p tcp --sport=80 -j DROP

NAT转发

NAT转发分为 PREROUTING 和 POSTROUTING 两种

PREROUTING

在源地址发送数据包到执行任何一条规则之前被处理

POSTROUTING

在源地址发送数据包到执行完所有的规则之后被处理

完整处理顺序

源地址 -> PREROUTING -> Rules -> POSTROUTING -> 目标地址

转发服务端口

PREROUTING

我们可以通过 PREROUTING(DNAT)进行服务地址端口的数据包转发,让服务器外面的用户可以访问到内部主机的内网地址上的服务
转发来自对外地址 192.168.1.80 的 80 端口上的数据包到内网地址 10.16.172.3 的 80 端口上

iptables -t nat -A PREROUTING -d 192.168.1.80 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.16.172.3:80

POSTROUTING

我们可以通过 POSTROUTING(SNAT)进行内网数据包转发,让内网主机可以连接到INTERNET

转发内网地址 192.168.1.133/24 的数据包到外网地址 126.37.65.78 上

iptables -t nat -A POSTROUTING -s 192.168.1.133/24 -j SNAT --to-source 126.37.65.78

总结

iptables是功能非常强大,学习起来有一点难度。我们可以根据自己的日常需要由浅入深的学习它。