介绍
介绍
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是功能非常强大,学习起来有一点难度。我们可以根据自己的日常需要由浅入深的学习它。