iptables的初级指南,Linux防火墙

Iptables是一个非常灵活的防火墙实用程序为Linux操作系统。 无论你是一个新手的Linux怪胎或系统管理员,可能有一些方法,iptables可以是一个伟大的使用你。 继续阅读,我们将向您展示如何配置最通用的Linux防火墙。

通过照片 ezioman

关于iptables

iptables是一个命令行防火墙实用程序,它使用策略链来允许或阻止流量。 当连接尝试在您的系统上建立自己时,iptables会在其列表中查找与之匹配的规则。 如果它没有找到一个,它采取默认操作。

iptables几乎总是预装在任何Linux发行版上。 要更新/安装它,只需检索iptables包:

sudo apt-get install iptables

还有像iptables的图形用户界面的替代品纵火 ,但iptables的是不是真的那么难,一旦你有几个命令下来。 你想在配置iptables规则时非常小心,特别是如果你SSH到服务器,因为一个错误的命令可以永久锁定你,直到它被手动固定在物理机。

链的类型

iptables使用三个不同的链:输入,前进和输出。

输入 -此链是用来控制进入连接的行为。 例如,如果用户尝试SSH到您的PC /服务器,iptables将尝试匹配IP地址和端口到输入链中的规则。

向前 -该链被用于未实际被局部递送传入连接。 想想路由器 - 数据总是被发送到它,但很少实际上注定为路由器本身; 数据只是转发到其目标。 除非你在你的系统上做某种路由,NATing或其他需要转发的东西,你甚至不会使用这个链。

有一个肯定的方式来检查您的系统是否使用/需要正向链。

iptables -L -v

上面的截图是一个已经运行了几个星期的服务器,并且没有对传入或传出连接的限制。 如您所见,输入链已处理11GB的数据包,输出链已处理17GB。 另一方面,正向链不需要处理单个分组。 这是因为服务器不进行任何类型的转发或用作传递设备。

输出 -这条链用于传出连接。 例如,如果您尝试ping howtoip.com,iptables将在确定允许或拒绝连接尝试之前检查其输出链,以查看有关ping和howtoip.com的规则。

警告

即使ping一个外部主机似乎只需要遍历输出链,请记住,要返回数据,输入链也将被使用。 当使用iptables锁定您的系统时,请记住很多协议将需要双向通信,因此输入和输出链将需要正确配置。 SSH是人们忘记在两个链上允许的公共协议。

策略链默认行为

在进入和配置特定规则之前,你需要决定你想要的三个链的默认行为是什么。 换句话说,如果连接不匹配任何现有规则,你想要iptables做什么?

要查看您的策略链当前配置具有无与伦比的流量做,运行iptables -L命令。

正如你可以看到,我们也使用grep命令给我们更干净的输出。 在截图中,我们的链条目前被认为接受流量。

有时候,您希望系统默认接受连接。 除非您以前更改了策略链规则,否则应该已经配置此设置。 不管怎样,这里是默认接受连接的命令:

iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT

默认情况下,接受规则,然后可以使用iptables拒绝特定的IP地址或端口号,同时继续接受所有其他连接。 我们将在一分钟内得到这些命令。

如果您想拒绝所有连接并手动指定要允许连接的连接,则应该将链的默认策略更改为丢弃。 这样做可能只对包含敏感信息的服务器有用,并且只有相同的IP地址连接到它们。

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

连接特定响应

配置默认链策略后,您可以开始向iptables添加规则,以便知道在遇到与特定IP地址或端口的连接时该怎么做。 在本指南中,我们将讨论三个最基本和常用的“响应”。

接受 -允许连接。

-断开连接,像什么都没发生。 这是最好的,如果你不想源实现您的系统存在。

拒绝 -不允许的连接,但回发错误。 这是最好的,如果你不想要一个特定的源连接到您的系统,但你希望他们知道你的防火墙阻止他们。

显示这三个规则之间的区别的最好方法是显示当PC尝试使用为每个设置配置的iptables ping Linux计算机时的样子。

允许连接:

删除连接:

拒绝连接:

允许或阻止特定连接

配置策略链后,现在可以配置iptables以允许或阻止特定地址,地址范围和端口。 在这些例子中,我们将设置连接DROP ,但你可以切换他们ACCEPTREJECT ,根据您的需求,以及如何配置你的政策链。

注意:在这些例子中,我们将使用iptables -A追加规则,以现有的链条。 iptables从列表的顶部开始,遍历每个规则,直到找到匹配的规则。 如果你需要插入另一以上的规则,可以使用iptables -I [chain] [number]指定它应该在列表中的号码。

从单个IP地址连接

此示例显示如何阻止来自IP地址10.10.10.10的所有连接。

iptables -A INPUT -s 10.10.10.10 -j DROP

来自一系列IP地址的连接

此示例显示如何阻止10.10.10.0/24网络范围内的所有IP地址。 您可以使用网络掩码或标准斜杠符号来指定IP地址的范围。

iptables -A INPUT -s 10.10.10.0/24 -j DROP

要么

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

连接到特定端口

此示例显示如何阻止来自10.10.10.10的SSH连接。

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

您可以用任何协议或端口号替换“ssh”。 -p tcp部分代码告诉什么样的连接协议使用iptables的。 如果你阻止使用UDP,而不是TCP协议,那么-p udp是必要的,而不是。

此示例显示如何阻止来自任何IP地址的SSH连接。

iptables -A INPUT -p tcp --dport ssh -j DROP

连接状态

正如我们前面提到的,很多协议都需要双向通信。 例如,如果要允许SSH连接到系统,输入和输出链将需要向其添加规则。 但是,如果你只想让SSH进入你的系统,怎么办? 不向输出链中添加规则也允许传出SSH尝试?

这就是连接状态进入的地方,它给你需要允许双向通信的能力,但只允许建立单向连接。 看看这个例子,允许从10.10.10.10的SSH连接,但是到10.10.10.10的SSH连接不允许。 但是,只要会话已经建立,允许系统通过SSH发送回信息,这使得这两个主机之间的SSH通信成为可能。

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

保存更改

您对iptables规则所做的更改将在下次重新启动iptables服务时废弃,除非您执行命令保存更改。 此命令可能因分发而异:

ubuntu:

sudo /sbin/iptables-save

红帽/ CentOS:

/sbin/service iptables save

要么

/etc/init.d/iptables save

其他命令

列出当前配置的iptables规则:

iptables -L

添加-v选项会给你包和字节的信息,并添加-n将数字列出一切。 换句话说 - 主机名,协议和网络被列为数字。

要清除所有当前配置的规则,可以发出flush命令。

iptables -F

赞 (0)
分享到:更多 ()