摘要
iptables是一个用于Linux系统的网络包过滤工具。它是一个基于内核的防火墙系统,用于配置和管理网络规则以控制网络流量。iptables可以对数据包进行过滤、转发、修改目的地、屏蔽IP等操作,可通过定义不同的规则和策略来确保网络的安全性和可靠性。
通过iptables命令,管理员可以定义规则集并将其应用到不同的网络链中,以便处理进出服务器的数据包。iptables基于规则集和链的组合来决定如何处理进入或离开系统的每个数据包。通过添加、删除和修改规则,管理员可以实现对网络流量的精确控制。
iptables命令提供了许多选项和参数,可以帮助管理员配置各种防火墙规则。它可以根据来源IP地址、目标IP地址、端口号、协议类型以及其他条件进行筛选和处理。iptables还支持不同的动作,如拒绝、接受、重定向等,以根据规则对数据包进行相应的操作。
总的来说,iptables命令是Linux系统中用于配置网络规则、过滤和控制数据包流动的强大工具。它提供了灵活、可定制的规则集管理功能,使管理员可以保护服务器的安全并控制网络流量的访问。
Simply put
iptables is a Linux-based firewall software that allows system administrators to configure and manage network rules to control the flow of network traffic. It is a powerful tool for filtering, forwarding, and manipulating packets at the kernel level.
iptables operates by creating and modifying rules, which are organized into different chains. Each chain consists of a series of rules that determine how packets are to be processed. When a packet enters or leaves a system, it is checked against the rules defined in the appropriate chain. Actions can be taken on packets based on various criteria, such as source/destination IP addresses, port numbers, protocols, and packet flags.
With iptables, administrators can define different rules and policies to control incoming and outgoing network traffic. It enables security measures like blocking unwanted traffic, allowing specific connections, forwarding packets between networks, performing network address translation (NAT), and implementing port forwarding.
iptables provides flexibility and granularity in defining rules and allows customization to meet specific security requirements. It is widely used to secure Linux servers and networks by protecting against malicious access, Denial-of-Service (DoS) attacks, and network intrusion attempts.
Overall, iptables is a powerful and versatile firewall tool for Linux systems that provides granular control over network traffic, enhancing network security and facilitating traffic management.
基本概念说明
-
Netfilter是Linux内核中实现包过滤、网络地址转换(NAT)和包处理的核心框架。它为Linux提供了强大的包处理功能,允许用户通过用户空间工具(如iptables)来配置和定制网络行为。Netfilter在数据包处理的各个阶段(例如接收、转发和发送)提供了钩子(hooks),使得可以在这些关键点上插入自定义的处理逻辑。
-
iptables是基于Netfilter框架的一个用户空间工具,用于设置、维护和检查IPv4的规则。它支持多个表(table)和链(chain),每个表代表一组具有特定功能的规则集。
- filter表:负责数据包的接受或拒绝,通常用于控制进出接口的数据流。
- nat表:用于网络地址转换(NAT),包括端口转发、MASQUERADE(源NAT)等。
- mangle表:用于修改数据包的头信息,例如更改TTL(Time To Live)值或重新分派数据包到其他链。
- raw表:用于设置连接跟踪标志,减少对数据包的处理开销。
每个表包含若干链,分别对应于数据包处理的各个阶段:
- INPUT、OUTPUT、FORWARD链分别处理进入、离开和转发的数据包。
- PREROUTING、POSTROUTING链分别在路由决策前和决策后处理数据包。
-
iptables规则中的匹配条件分为三类:
- 通用匹配(built-in matches):不需要加载任何模块即可使用,例如协议类型、源/目的IP地址等。
- 隐含匹配(implicit matches):当规则应用到某个链时自动生效,例如INPUT链隐含地匹配所有进入本机的数据包。
- 显示匹配(explicit matches):需要先加载相应的模块才能使用,例如负载均衡、状态检测等。这类匹配通常以"-m 模块名称"的形式出现在规则中。
iptables常用命令说明
当使用iptables命令时,可以使用不同的选项和参数来实现不同的功能和目的。下面是一些常用的iptables命令及其作用的说明:
-A
:添加规则到指定的链中。例如:iptables -A INPUT -p tcp --dport 80 -j ACCEPT
,将允许TCP流量通过端口80进入服务器。-D
:从指定的链中删除规则。例如:iptables -D INPUT -p tcp --dport 22 -j ACCEPT
,将删除之前允许SSH连接的规则。-L
:列出当前设置的iptables规则。例如:iptables -L
,将显示所有的iptables规则。-P
:设置默认策略。例如:iptables -P INPUT DROP
,将设置输入流量的默认策略为拒绝,只有明确允许的连接请求才会通过iptables。-s
:指定源IP地址或地址范围。例如:iptables -A INPUT -s 192.168.0.100 -j ACCEPT
,将允许来自IP地址为192.168.0.100的主机的连接。-d
:指定目标IP地址或地址范围。例如:iptables -A FORWARD -d 10.0.0.0/24 -j DROP
,将拒绝发送到10.0.0.0/24网络的数据包。-p
:指定协议类型。例如:iptables -A INPUT -p tcp --dport 80 -j ACCEPT
,将允许TCP流量通过端口80进入服务器。-j
:指定规则的动作。例如:iptables -A INPUT -p tcp --dport 22 -j ACCEPT
,将允许SSH连接到服务器。
这些是一些常用的iptables命令及其作用的简要说明。请注意,iptables命令具有复杂而强大的功能,还有其他选项和参数可用于更复杂的设置和配置。建议在使用之前,查阅iptables的文档或手册,以了解其更多的功能和用法。
iptables示例说明
这些命令是用来配置iptables规则和链的。下面是每个命令的作用解释:
sudo iptables -N LOG_CHAIN
: 创建一个名为LOG_CHAIN的新链,用于记录日志。sudo iptables -A INPUT -j LOG_CHAIN
:将输入流量定向到LOG_CHAIN链。sudo iptables -A LOG_CHAIN -j LOG --log-prefix "LOG_CHAIN: "
:在LOG_CHAIN链上添加一个日志规则,用于记录日志,并使用"LOG_CHAIN: "作为日志的前缀。sudo iptables -L |grep LOG_CHAIN
:显示所有iptables规则,并过滤出包含LOG_CHAIN字样的规则。iptables -nvL INPUT
:显示INPUT链上的所有规则,包括计数器和其他详细信息。iptables -nvL INPUT |grep LOG_CHAIN
:显示INPUT链上包含LOG_CHAIN字样的规则。iptables -D INPUT 7
:从INPUT链中删除第7条规则。iptables -F LOG_CHAIN
:清空LOG_CHAIN链上的所有规则。iptables -X LOG_CHAIN
:删除LOG_CHAIN链。
综上所述,这些命令的作用是创建一个新的链(LOG_CHAIN),将输入流量定向到该链以记录日志,并且可以使用其他命令来查看和管理该链的规则。随后的命令是用来清除或删除该链及相关规则。
nmcli (Network Manager Command Line Interface)
nmcli是用于管理NetworkManager的命令行工具。它提供了一种通过命令行界面(CLI)来配置和管理网络连接、网络设备、VPN等的方式。
下面是一些常用的nmcli命令及其说明:
查看网络设备信息:
nmcli device show
:显示已识别的网络设备列表和信息。nmcli device status
:显示网络设备状态,如连接状态、IP地址等。
网络连接管理:
nmcli connection show
:显示所有网络连接的列表。nmcli connection up <connection_name>
:启动指定名称的网络连接。nmcli connection down <connection_name>
:断开指定名称的网络连接。nmcli connection delete <connection_name>
:删除指定名称的网络连接。nmcli connection add ...
:添加新的网络连接。
Wi-Fi网络管理:
nmcli device wifi list
:显示可用的Wi-Fi网络列表。nmcli device wifi connect <SSID> password <password>
:连接到指定的Wi-Fi网络。
DNS设置:
nmcli connection modify <connection_name> ipv4.dns <DNS_IP>
:设置指定连接的IPv4 DNS服务器地址。nmcli connection modify <connection_name> ipv6.dns <DNS_IP>
:设置指定连接的IPv6 DNS服务器地址。
VPN管理:
nmcli connection show
:显示所有VPN连接的列表。nmcli connection up <connection_name>
:启动指定名称的VPN连接。nmcli connection down <connection_name>
:断开指定名称的VPN连接。
请注意,上述命令中的<connection_name>
是指网络连接的名称,可以通过nmcli connection show
查看现有连接及其名称。
IPVS(IP Virtual Server)
IPVS(IP Virtual Server)是Linux系统中的一种负载均衡技术,它基于Netfilter框架实现,可以工作在数据包到达四层协议栈时对数据包进行处理。IPVS通过在Netfilter框架中的不同位置注册自己的处理函数来捕获数据包,并根据与IPVS相关的信息表对数据包进行处理,按照IPVS规则中定义的不同的包转发模式,对数据包进行不同的转发处理。
IPVS支持多种包转发模式,包括NAT、IP tunneling和Direct Routing。其中,NAT模式通过修改数据包的源IP地址和目标IP地址实现负载均衡;IP tunneling模式通过在数据包外层添加一个新的IP头来实现负载均衡;Direct Routing模式则直接在路由表中添加新的路由项来实现负载均衡。
IPVS的工作原理是,当数据包到达IPVS监听的端口时,IPVS会根据预先设定的转发规则,将数据包转发到后端的真实服务器。IPVS支持多种负载均衡算法,如round robin、weight round robin、least-connection、weighted least-connection等,可以根据实际需求选择合适的算法。
The file contains a list of kernel modules that need to be loaded for IPVS (IP Virtual Server) to work properly.
These modules include:
- ip_vs: This module enables IPVS, which is a kernel component for load balancing and high availability.
- ip_vs_rr: This module provides the round-robin load balancing algorithm for IPVS.
- ip_vs_wrr: This module provides the weighted round-robin load balancing algorithm for IPVS.
- ip_vs_sh: This module provides the source hashing load balancing algorithm for IPVS.
- nf_conntrack_ipv4: This module enables connection tracking for IPv4, which is necessary for IPVS to work properly.
Round-robin load balancing algorithm
是一种常用的负载均衡算法,在分布式系统中用于将客户端请求均匀分配给服务器。
该算法基于一个假设,即所有的服务器具有相同的处理能力,并且每个请求的处理时间也相同。算法的原理如下:
首先,将所有可用的服务器按照一定顺序进行排序。这个顺序可以是服务器的IP地址,也可以是其他规则,比如轮询计数器。
当有新的请求到达系统时,轮询算法选择下一个服务器来处理该请求。具体选择哪个服务器的规则是,依次选择排序后的服务器列表中的下一个服务器。
一旦选择了一个服务器来处理请求,就将请求转发到该服务器上,并记录使用的服务器,以便下次请求时能继续选择下一个服务器。
如果所有的服务器都已经被使用过一次,算法会重新从第一个服务器开始循环选择。
这种算法的优势在于简单而且公平,在假设服务器处理能力和请求处理时间相同的情况下,可以保证每个服务器的负载均衡。然而,如果服务器间的处理能力不同或者请求的处理时间不同,该算法可能导致某些服务器负载过高,而其他服务器负载过低的情况。因此,实际应用中可能需要结合其他算法来更好地实现负载均衡。
iptables 相关的常用工具说明
这些都是在Linux系统中常用的命令或工具:
arptables(8):Arptables是Linux系统中的一个网络包过滤器,用于控制ARP协议的流量。
brctl(8):brctl是Linux Bridge工具的一部分,用于配置和管理Linux Bridge。
collectd.conf(5):collectd是一个性能测量工具,collectd.conf是其配置文件。
ebtables(8):Ebtables是Linux系统中的一个网络包过滤器,用于控制以太网帧的流量。
ferm(1):Ferm是一个强大的防火墙管理工具。
firehol(1):Firehol是一个用于配置IPv4/IPv6防火墙的脚本语言。
firehol.conf(5):firehol的配置文件。
fwsnort(8):Fwsnort是一个基于Snort的防火墙规则集的守护进程。
ip6tables-1.4.7(8):ip6tables是Linux系统中的一个网络包过滤器,用于控制IPv6协议的流量。
ipq_destroy_handle(3):这是libipq库的一个函数,用于销毁IPQ句柄。
ipq_get_msgerr(3):这也是libipq库的一个函数,用于获取消息错误。
ipq_perror(3):这也是libipq库的一个函数,用于打印错误信息。
ipq_read(3):这也是libipq库的一个函数,用于读取IPQ消息。
ipq_set_mode(3):这也是libipq库的一个函数,用于设置IPQ的模式。
ipq_set_verdict(3):这也是libipq库的一个函数,用于设置IPQ的裁决。
iptables-restore-1.4.7(8):iptables-restore是一个用于从文件恢复IP表的工具。
iptables-save-1.4.7(8):iptables-save是一个用于保存当前IP表到文件的工具。
iptables-xml-1.4.7(8):iptables-xml是一个将iptables规则转换为XML格式的工具。
iptables_selinux(8):iptables_selinux是一个用于处理SELinux策略的工具。
iptstate(8):iptstate是一个显示当前网络连接状态的工具。
ipvsadm(8):ipvsadm是一个用于配置和管理IP虚拟服务器(IPVS)的工具。
mountd(8):mountd是一个自动挂载远程文件系统的守护进程。
rpc.statd(8):rpc.statd是一个用于监控远程文件系统状态的守护进程。
shorewall(8):Shorewall是一个用于配置防火墙的工具。
shorewall-lite(8):Shorewall-lite是Shorewall的一个轻量级版本。
shorewall.conf(5):Shorewall的配置文件。
shorewall6-lite(8):Shorewall6-lite是Shorewall的一个IPv6版本的轻量级版本。
引用
https://linux.die.net/man/8/iptables
https://www.netfilter.org/
https://developer.aliyun.com/article/894025
https://github.com/lixiangyun/iptables_doc_ZH_CN
https://wiki.archlinux.org/title/Iptables