iptables指南

2020年12月29日17:23:06 发表评论 42 次浏览

了解如何在Ubuntu 14.04和CentOS 7上创建, 删除和管理iptables。iptables可用于基于IP地址, 端口等来允许或阻止流量。

要求

  • 带有Ubuntu 14.04或CentOS 7的notlogy云服务器

iptables基础

iptables是内置在Linux内核中的防火墙实用程序。这意味着, 与许多其他防火墙程序不同, 它已经安装在大多数现代Linux系统上。

iptables的学习和配置可能有些复杂, 但是它是功能强大且灵活的工具, 可用于过滤往返Linux服务器的流量。

iptables通过将流量与一组规则进行比较以查看数据包是否匹配来工作。如果数据包与策略匹配, 则执行指定的操作。如果不是, 则转到默认策略, 该策略通常是接受流量。

政策规定

iptables规则称为"策略"。你可以使用以下命令查看服务器上所有现有的iptables防火墙策略:

sudo iptables –L | grep policy

此命令通过iptables规则筛选单词政策仅显示有效的现有规则。默认情况下, 在大多数系统上, 输出将如下所示:

iptables指南
iptables指南

如你所见, 此系统设置为接受所有流量。

iptables策略有三个选项:

  • 接受:允许连接
  • DROP:静默断开连接
  • 拒绝:拒绝连接, 并显示一条错误消息

可以将iptables配置为按端口, IP地址或IP地址范围过滤流量。

链条

iptables规则被组织成链。链是处理规则的列表。 iptables链共有三种类型:

  • 输入(流量进入服务器)
  • 转发(流量由服务器转发, 路由器式)
  • 输出(流量离开服务器)

iptables始终检查与服务器之间的流量, 即使未将其配置为过滤该流量。要查看自上次服务器重置以来iptables的状态, 请使用以下命令:

sudo iptables -L -v

这将产生类似于以下内容的输出:

iptables指南
iptables指南

如你所见, 服务器已接受157M字节的传入流量, 5001K字节的转发流量和803M字节的传出流量。

保单

对于iptables, 策略的顺序很重要。 iptables从上到下检查策略文件。一旦找到匹配项, 它将执行指定的操作。

因此, 应始终从特定到一般列出规则。否则, 如果数据包与一般规则匹配, 则会将其发送出去-而不检查更具体的规则。

例如, 假设你正在编程一个机器人来对木块进行分类。你希望机器人将块分类为三个箱:

  • Bin 1:红色方块
  • Bin 2:红色三角形块
  • Bin 3:所有无法比拟的颜色和形状

机器人每次捡起一个块时, 都会遍历其规则列表以查找匹配项。一旦找到匹配项, 就放置该块。

假设我们以从一般到特定的顺序给出机器人规则开始:

  • 将所有不匹配的颜色和形状放入Bin 3
  • 将红色方块放在垃圾箱1中
  • 将红色三角形块放入容器2中

机器人拾起一个块(无论颜色如何)后, 都会将其放入Bin 3, 因为每种颜色和形状都符合此规则。机器人实际上从未达到第二或第三条规则。一天结束时, 存储区3已满, 存储区1和2已空。

第二天, 我们以不同的顺序为机器人赋予相同的规则:

  • 将红色方块放在垃圾箱1中
  • 将红色三角形块放入容器2中
  • 将所有不匹配的颜色和形状放入Bin 3

这里的结果更好。我们最终得到装满红色块(所有形状)的装箱1和装满其他所有物品的装箱3。不幸的是, Bin 2仍然是空的, 因为红色三角形块已被第一个规则匹配。

第三天, 我们按照从最具体到最一般的顺序为机器人分配规则:

  • 将红色三角形块放入容器2中
  • 将红色方块放在垃圾箱1中
  • 将所有无法比拟的颜色和形状放入Bin 3

成功!这导致所有块都正确排序。

iptables策略需要以相同的方式列出-首先是最具体的规则, 然后是最一般的规则。

保护你的连接

在更改iptables配置之前, 最好保护你与服务器的现有连接。否则, 可以锁定你自己与服务器的SSH连接。

你可以使用以下命令执行此操作:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT

此配置行告诉你的服务器继续接受任何已建立的连接(包括SSH连接)。

如果你不小心锁定了SSH连接, 则可以通过KVM控制台访问你的1&1云服务器纠正问题。

添加Iptables策略

警告:很容易通过错误的iptables策略配置将自己意外地锁定在服务器之外。如果在装有Linux的1&1云服务器上发生这种情况, 你可以通过KVM控制台访问服务器并从那里恢复访问。

因为策略链的顺序很重要, 所以首先使用以下命令列出所有现有链并显示行号:

sudo iptables -n -L -v --line-numbers

在添加了一些iptables链和策略的系统上, 输出将类似于以下内容:

iptables指南
iptables指南

行号允许你按顺序将策略插入链中, 以便正确处理流量。

你可以通过指定要检查的链来进一步缩小范围。例如, 要列出FORWARD链中的所有规则, 请使用以下命令:

sudo iptables -L FORWARD -n --line-numbers

这将返回FORWARD链中的策略列表, 并带有行号:

iptables指南
iptables指南

删除政策

要删除现有策略, 请使用以下命令:

sudo iptables -D [chain name] [line number]

例如, 要删除FORWARD链中第2行的策略, 命令将是:

sudo iptables -D FORWARD 2

新增政策

此命令会将策略附加到链的末尾:

sudo iptables -A [chain name] [policy parameters and flags]

例如, 如果要添加策略以将所有流量从特定IP地址丢弃到INPUT链的末尾, 则可以使用以下命令:

sudo iptables -A INPUT -s 192.168.0.1 -j DROP

指定新政策的位置

要将新策略插入现有链的中间, 请使用以下命令:

sudo iptables -I [chain name] [number of line to be inserted above] [policy parameters and flags]

例如, 如果要插入一个策略以将来自特定IP地址的所有流量都丢弃到INPUT链中, 然后将此策略放在第4行, 则可以使用以下命令:

sudo iptables -I INPUT 5 -s 192.168.0.1 -j DROP

删除所有现有策略

紧急情况下, 可以使用以下命令删除所有现有的iptables策略:

sudo iptables -F

使用此命令时要小心, 因为它无法撤消。如果要保留一些策略, 则需要手动删除不需要的策略。

保存你的策略:Ubuntu

在Ubuntu 14.04上保存iptables策略的最佳方法是安装iptables-永久使用命令:

sudo apt-get install iptables-persistent

然后可以使用以下命令保存现有的Iptables策略:

sudo invoke-rc.d iptables-persistent save

保存你的策略:CentOS 7

在CentOS 7上保存iptables策略的最佳方法是安装iptables服务使用命令:

sudo yum install iptables-services

安装完成后, 使用以下命令将iptables作为服务启用:

sudo systemctl enable iptables

然后可以使用以下命令保存现有的iptables策略:

sudo service iptables save

有用的通用Iptables政策

iptables作为防火墙, 可以创建多种配置。以下是一些最常用的策略。

丢弃来自特定IP地址的流量

要丢弃来自特定IP地址或范围的所有流量, 请使用以下命令:

sudo iptables -A INPUT -s [ip address] -j DROP

例如, 要丢弃来自IP地址192.168.0.1的所有流量, 命令将是:

sudo iptables -A INPUT -s 192.168.0.1 -j DROP

仅允许来自特定IP地址的SSH

你可以通过向INPUT链添加两个新策略来阻止除特定IP地址中的那些外的所有传入SSH连接:

  • 接受来自指定IP地址的SSH连接。
  • 从任何其他IP地址删除SSH连接。

注意:由于iptables从上到下遍历策略, 因此必须以确切的顺序添加这两个策略, 这一点很重要。首先"接受我的IP地址", 然后"丢弃所有其他IP地址"。

sudo iptables -A INPUT -p tcp -s [IP address] --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP

例如, 如果你要从IP地址192.168.0.1连接到服务器, 则阻止除你自己的传入SSH请求外的所有命令将为:

sudo iptables -A INPUT -p tcp -s 192.168.0.1 --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP

设置此规则时请小心。如果你不小心将自己锁定在外, 则可以通过虚拟KVM控制台访问服务器并重置你的iptables规则。

阻止服务器发送SMTP邮件

如果你的服务器不打算发送传出邮件, 则可能要阻止传出SMTP通信。这将防止你的服务器被垃圾邮件发送者劫持并用作邮件中继。

要阻止传出SMTP, 请使用以下命令:

sudo iptables -A OUTPUT -p tcp --dport 25 -j DROP

记录丢弃的数据包

好奇你的iptables流量下降了吗?你可以使用以下命令启用丢弃数据包的日志记录:

sudo iptables -I INPUT 1 -m limit --limit 3/min -j LOG --log-prefix "Dropped: " --log-level 7

这会将所有丢弃的数据包记录到前缀为" Dropped:"的syslog中, 并包含有关丢弃的数据包的更多信息。

Ubuntu 14.04

iptables消息将被记录到/ var / log / syslog。你可以使用以下命令检查此文件中有关丢弃数据包的消息:

more /var/log/syslog | grep Dropped

CentOS的7

要在CentOS 7上启用iptables登录, 请编辑/etc/rsyslog.conf文件:

sudo nano /etc/rsyslog.conf

向下滚动到文件底部, 然后添加以下行:

# Log Iptables messages
kern.warning /var/log/iptables.log

将这些行添加到转发规则之上, 该规则以以下行开头:

# ### begin forwarding rule ###

这样文件看起来像这样:

iptables指南
iptables指南

保存并退出文件。

创建日志文件:

sudo touch /var/log/iptables.log

然后使用以下命令重新启动syslog:

sudo service rsyslog restart

这将开始将iptables消息记录到/var/log/iptables.log。你可以使用以下命令检查此文件中有关丢弃数据包的消息:

more /var/log/iptables.log | grep Dropped

如果你将自己拒之门外:通过KVM控制台访问服务器

编辑防火墙规则时请务必谨慎。可以阻止与服务器的所有连接, 包括SSH连接。

如果你锁定了Linux上的Cloud Server上的所有SSH连接, 则可以通过KVM控制台访问服务器以解决此问题。

在控制面板中, 单击1and1云面板.

iptables指南
iptables指南

单击以选择你的服务器。

iptables指南
iptables指南

请点击动作然后访问KVM控制台.

iptables指南
iptables指南

这将加载KVM控制台, 这将使你可以访问服务器, 就像坐在直接连接到计算机的键盘上一样。

iptables指南
iptables指南

你可以从此处以root用户身份登录并更正问题。

一盏木

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: