本指南将尝试解释如何在易于理解的语言中使用linux上的iptables。
概览
iptables是一个基于规则的防火墙,它将按顺序处理每个规则,直到找到匹配的规则。Todo:包括这里的例子
用法
iptables实用程序通常预先安装在您的linux发行版上,但实际上并没有运行任何规则。大多数发行版都会发现这个实用程序:
/sbin/iptables
阻止单个IP地址
您可以使用-s
参数阻止IP,将10.10.10.10
替换为您要阻止的地址。在这个例子中你会注意到,我们使用-I
参数(或者-insert
也是这样),而不是追加,因为我们要确保这个规则首先出现在任何允许规则之前。
/sbin/iptables -I INPUT -s 10.10.10.10 -j DROP
允许来自IP地址的所有流量
您可以通过使用与上述相同的命令来交替地允许来自IP地址的所有流量,但用ACCEPT
替换DROP
。在任何DROP
规则之前,您需要确保此规则首先出现。
/sbin/iptables -A INPUT -s 10.10.10.10 -j ACCEPT
阻止所有地址的端口
您可以通过使用-dport
开关并添加要阻止的服务的端口来完全阻止端口通过网络访问。在这个例子中,我们将阻止mysql端口:
/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP
允许从单个IP单个端口
您可以添加-s
命令以及-dport
命令来进一步将规则限制在特定端口:
/sbin/iptables -A INPUT -p tcp -s 10.10.10.10 --dport 3306 -j ACCEPT
查看当前规则
您可以使用以下命令查看当前规则:
/sbin/iptables -L
这应该给你一个类似于以下内容的输出:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 192.168.1.1/24 anywhere
ACCEPT all -- 10.10.10.0/24 anywhere
DROP tcp -- anywhere anywhere tcp dpt:ssh
DROP tcp -- anywhere anywhere tcp dpt:mysql
当然,实际的输出会更长一些。
清除当前规则
您可以使用flush
参数清除所有当前的规则。如果您需要将规则放在正确的顺序中,或者当您进行测试时,这非常有用
/sbin/iptables --flush
分配特定
虽然大多数Linux发行版都包含一种iptables形式,但其中的一些也包括使管理更容易的包装。这些“插件”通常采用初始化脚本的形式,这些脚本在启动时可以初始化iptables,尽管一些发行版还包括尝试简化常见情况的全面封装应用程序。
Gentoo
Gentoo上的iptables初始化脚本能够处理许多常见的情况。对于初学者,它允许您配置iptables在启动时加载(通常是您想要的):
rc-update add iptables default
使用init脚本,可以使用易于记忆的命令加载和清除防火墙:
/etc/init.d/iptables start
/etc/init.d/iptables stop
init脚本处理在启动/停止时持久保留当前防火墙配置的详细信息。因此,您的防火墙始终处于您离开的状态。如果需要手动保存新的规则,init脚本也可以处理这个:
/etc/init.d/iptables save
此外,您可以将防火墙还原到先前保存的状态(对于您正在尝试使用规则,现在要恢复以前的工作配置):
/etc/init.d/iptables reload
最后,init脚本可以将iptables置于“panic”模式,其中所有传入和传出的流量都被阻止。我不知道为什么这种模式是有用的,但所有的Linux防火墙似乎都有
/etc/init.d/iptables panic
警告:如果通过SSH连接到服务器,请不要启动紧急模式;你将被断开连接!您应该将iptables置于恐慌模式中的唯一时间是您身体在电脑前。