防火墙概述
防火墙是网络中的关键安全组件,作为网络的第一道防线,它用于监控和控制进出网络的数据流。防火墙可以按照逻辑和物理划分进行分类。
逻辑划分
- 主机防火墙:用于保护单个主机或本地计算机。
- 网络防火墙:用于保护一个或多个网络,包括内部网络和外部网络之间的边界。
物理划分
- 硬件防火墙:如思科、华为、天融信等提供的物理设备。
- 软件防火墙:如tcpwrappers、iptables等运行在操作系统上的软件工具。
iptables基础
iptables是Linux系统下的一个强大的网络数据包处理工具,它允许用户配置网络数据包过滤规则,实现防火墙功能。iptables不是防火墙本身,而是配置Linux内核中netfilter的接口工具。
iptables功能
- 数据包过滤:根据规则匹配数据包,决定是否允许其通过。
- 数据包重定向:即转发,改变数据包的目标地址或端口。
- 网络地址转换(NAT):包括源地址转换(SNAT)和目标地址转换(DNAT)。
iptables规则链与表
iptables中定义了四个表和五个链。
- 表:
- filter:用于过滤数据包(INPUT, OUTPUT, FORWARD链)。
- nat:用于网络地址转换(PREROUTING, OUTPUT, POSTROUTING链)。
- mangle:用于数据包修改(INPUT, FORWARD, OUTPUT, PREROUTING, POSTROUTING链,但通常不使用INPUT链)。
- raw:用于数据包跟踪(PREROUTING, OUTPUT链)。
- 链:
- INPUT:处理进入本机的数据包。
- OUTPUT:处理本机发出的数据包。
- FORWARD:处理经过本机的数据包。
- PREROUTING:用于数据包路由前修改目的地址(如DNAT)。
- POSTROUTING:用于数据包路由后修改源地址(如SNAT)。
iptables规则制定思路
- 选择表:根据处理需求选择合适的表。
- 选择链:确定数据包流经的位置。
- 设置条件:匹配数据包的具体特征。
- 指定动作:对匹配的数据包执行的操作(ACCEPT, REJECT, DROP等)。
iptables语法与参数
iptables的基本语法为:
iptables [ -t 表名 ] 管理选项 [ 链名 ] [ 条件匹配 ] [ -j 目标动作 ] |
常用参数:
-L
:列出规则。-n
:以数字形式显示地址和端口。-t
:指定要操作的表。-F
:清空指定链中的所有规则。-A
:在链的末尾添加规则。-I
:在链的指定位置插入规则。-D
:删除指定规则。-P
:设置链的默认策略。-p
:指定协议(如tcp, udp等)。-s
:指定源地址或源地址范围。-d
:指定目标地址或目标地址范围。-i
:指定入站网络接口。-o
:指定出站网络接口。-j
:指定匹配成功后的目标动作。
FTP协议与iptables配置
FTP协议(文件传输协议)是一个特殊的协议,它使用两个端口:控制端口(默认为21)和数据端口(通常随机)。在iptables中配置FTP需要特别处理数据端口的动态性。
FTP三次握手
- 建立连接:客户端向FTP服务器发送连接请求(SYN=1)。
- 已建立连接:服务器确认连接,双方进入数据传输状态。
- 断开连接:数据传输完成后,双方断开连接。
FTP端口处理
- 对于控制端口(21),可以直接设置iptables规则允许连接。
- 对于数据端口,由于它是动态分配的,需要使用iptables的模块(如ftp模块)来识别并允许这些端口的数据流。
iptables配置示例
允许FTP控制端口(21)的连接,并处理数据端口:
iptables的扩展匹配与动作
iptables不仅支持基本的协议、端口、地址匹配,还提供了一系列扩展匹配和动作,以应对更复杂的网络环境和安全需求。
扩展匹配
- 状态匹配 (
-m state
): 用于匹配连接的状态(如ESTABLISHED, NEW, INVALID等)。 - MAC地址匹配 (
-m mac
): 匹配数据包的MAC地址。 - 多端口匹配 (
-m multiport
): 允许同时指定多个端口进行匹配。 - 字符串匹配 (
-m string
): 在数据包中搜索指定的字符串。
扩展动作
- 记录日志 (
LOG
): 将匹配的数据包记录到系统日志中,但不阻止数据包。 - 返回拒绝消息 (
REJECT
): 拒绝数据包,并向发送方发送一个ICMP错误消息。 - 限速 (
LIMIT
): 限制匹配的数据包的速率。
FTP服务的iptables优化
对于FTP服务,由于数据端口是动态分配的,因此需要确保iptables能够正确处理这些动态端口。除了使用ftp模块外,还可以采取以下策略来优化FTP服务的iptables配置:
-
允许PASV模式:在FTP服务器上启用PASV(Passive)模式,这样客户端将使用服务器指定的端口进行数据传输,而不是默认的动态端口范围。然后,你可以在iptables中明确地允许这些端口。
-
使用端口范围:如果你知道FTP服务器使用的数据端口范围,你可以使用iptables的multiport扩展来允许这个范围内的所有端口。
-
使用IPtables的ftp模块:iptables的ftp模块可以自动处理FTP的数据连接,并允许通过FTP控制连接建立的任何数据连接。
-
配置NAT:如果你的FTP服务器位于NAT(网络地址转换)环境中,确保你的NAT规则允许FTP的数据连接通过。你可能需要使用iptables的NAT表来设置适当的规则。
-
监控和日志记录:使用iptables的LOG动作来记录FTP相关的数据包,以便你可以监控和分析FTP流量。这有助于你识别潜在的安全问题或性能瓶颈。
iptables规则保存与恢复
在Linux系统中,iptables规则默认在重启后会丢失。为了保存和恢复iptables规则,你可以使用以下方法:
-
使用service命令(适用于某些Linux发行版):
sudo service iptables save
sudo service iptables restart
-
使用iptables-save和iptables-restore命令:
sudo iptables-save > /etc/iptables/rules.v4
sudo iptables-restore < /etc/iptables/rules.v4
这里假设你将规则保存在
/etc/iptables/rules.v4
文件中。你可以根据需要修改这个路径。
注意事项
- 在配置iptables规则时,始终确保你有一种方法可以从外部访问你的系统(如SSH),以便在需要时可以远程登录并修改规则。
- 在应用新的iptables规则之前,最好先在测试环境中验证它们的有效性,以避免意外地切断对系统的访问。
- 定期审查和更新你的iptables规则,以确保它们仍然符合你的安全需求和业务需求。
# 允许FTP控制端口连接 | |
iptables -A INPUT -p tcp --dport 21 -j ACCEPT | |
# 允许FTP数据端口连接(使用ftp模块) | |
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT |