[译]使用iptables控制网络流量 |
您所在的位置:网站首页 › iptables内容过滤 › [译]使用iptables控制网络流量 |
iptables是一个允许用户配置特定规则的应用程序,这些规则由将由内核netfilter框架强制执行。它充当数据包过滤器和防火墙,可根据端口,协议和其他标准检查和定向流量。本指南将重点介绍iptables规则集的配置和应用,并提供常用方法的示例。
默认情况下,iptables工具包含在您的Linode提供的发行版中。要使用iptables,您需要root(sudo)权限。 使用Linux iptables管理IPv4流量 iptables命令
iptables命令可以使用许多选项。如上所述,iptables设置控制网络流量的规则。您可以定义不同的表来处理这些规则,通过链(chains)和与数据包子集匹配的规则列表。该表包含各种内置的链,但您可以添加自己的链。 基本iptables参数和语法
在我们开始创建规则之前,让我们回顾一下iptables规则的语法。
例如,以下命令将规则添加到链的开头,该规则将中删除所有来自地址198.51.100.0的数据包: iptables -I INPUT -s 198.51.100.0 -j DROP
上面的示例命令: 调用iptables程序使用-I选项进行插入(insertion)。使用带有插入选项的规则会将其添加到链的开头,并将被率先应用。您还可以使用带-I选项的数字来指定链中的特定位置。-s参数以及IP地址(198.51.100.0)表示源(source)。最后,-j参数代表跳转。它指定规则的目标以及如果数据包匹配将执行的操作。 参数 描述 -p, --protocol 协议,如TCP,UDP等。 -s, --source 可以是地址,网络名称,主机名等。 -d, --destination 地址,主机名,网络名称等 -j, --jump 指定规则的目标; 即如果数据包匹配该怎么办。 -g, --goto chain 指定过程将在用户指定的链中继续处理。 -i, --in-interface 命名接收数据包的接口。 -o, --out-interface 发送数据包的接口名称。 -f, --fragment 该规则仅适用于分段数据包的第二个和后续片段。 -c, --set-counters 使管理员能够以一条规则初始化数据包和字节计数器。 默认表
表由内置链组成,也可能包含用户定义的链。内置表将取决于内核配置和已安装的模块。
默认表如下: Filter - 这是默认表。它的内置链是: Input(输入):转到本地套接字的数据包Forward(转发):通过服务器路由的数据包Output(输出):本地生成的数据包Nat - 当数据包创建新连接时,使用此表。它的内置链是: Prerouting(前置路由):在数据包进入时指定数据包Output(输出):在路由发生之前本地生成的数据包Postrouting(后置路由):在出路时改变数据包Mangle - 用于特殊的数据包更改。它的链是: Prerouting(前置路由):传入的数据包Postrouting(后置路由):传出的数据包Output(输出):被更改的本地生成的数据包Input(输入):直接进入服务器的数据包Forward(转发):通过服务器路由的数据包Raw - 主要用于配置连接跟踪的例外。内置链是: Postrouting(前置路由):通过网络接口到达的数据包Output(输出):本地产生的过程Security - 用于强制访问控制(MAC)规则。在过滤表之后,接下来访问安全表。内置链是: Input(输入):进入服务器的数据包Output(输出):本地生成的数据包Forward(转发):通过服务器的数据包基本iptables选项
iptables命令可以使用许多选项:
选项 描述 -A --append 将一个或多个规则添加到所选链的末尾。 -C --check 检查与所选链中的规范匹配的规则。 -D --delete 从所选链中删除一个或多个规则。 -F --flush 逐个删除所有规则。 -I --insert 将一个或多个规则作为给定的规则编号插入所选链中。 -L --list 显示所选链中的规则。 -n --numeric 以数字格式显示IP地址或主机名和邮政编号。 -N --new-chain 创建一个新的用户定义链。 -v --verbose 与list选项一起使用时提供更多信息。 -X --delete-chain 删除用户定义的链。 插入,替换或删除iptables规则
iptables规则是自上而下强制执行的,因此规则集中的第一个规则应用于链中的流量,然后是第二个,第三个等等。这意味着用iptables -A或者ip6tables -A不一定会添加规则到带有的规则集中。相反,必须插入规则ptables -I或ip6tables -I。 插入(Insert)
插入的规则需要按照链中的其他规则以正确的顺序放置。要获取iptables规则的数字列表: sudo iptables -L -nv --line-numbers
例如,假设您要将规则插入到本指南中提供的基本规则集中,该规则将通过TCP协议接受到端口8080的传入连接。我们将根据网络流量规则将其作为规则7添加到INPUT链中: sudo iptables -I INPUT 7 -p tcp --dport 8080 -m state --state NEW -j ACCEPT
如果现在再次运行sudo iptables -L -nv,您将在输出中看到新规则。
替换(Replace)
替换规则类似于插入,但是使用iptables -R。例如,假设您希望将拒绝条目的记录减少到每分钟3次,而原始规则集中的记录减少到5。LOG规则在INPUT链中排名第九: sudo iptables -R INPUT 9 -m limit --limit 3/min -j LOG --log-prefix "iptables_INPUT_denied: " --log-level 7
删除(Delete)
使用规则编号也可以删除规则。例如,要删除我们刚为端口8080插入的规则: sudo iptables -D INPUT 7
警告编辑规则不会自动保存它们。有关分发的具体说明,请参阅有关部署规则集的部分。 查看您当前的iptables规则
IPv4: sudo iptables -L -nv
IPv6: sudo ip6tables -L -nv
在大多数发行版中,iptables没有IPv4和IPv6的默认规则。因此,在新创建的Linode上,您可能会看到下面显示的内容 - 三个没有任何防火墙规则的空链。这意味着允许所有传入,转发和传出流量。将入站和转发流量限制为仅限于必要的流量非常重要。 Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 配置iptables
iptables可以通过多种方式进行配置和使用。以下部分将概述如何按端口和IP配置规则,以及如何将地址列入黑名单(阻止)或白名单(允许)。 按端口阻止流量
您可以使用端口阻止特定接口上的所有流量。例如: iptables -A INPUT -j DROP -p tcp --destination-port 110 -i eth0
让我们来看看这个命令的每个部分是做什么的: -A 将规则添加或附加到链的末尾。INPUT 将规则添加到表中。DROP 表示丢弃数据包。-p tcp 表示该规则只会丢弃TCP数据包。--destination-port 110 过滤针对端口110的数据包。-i eth0表示此规则仅影响到达eth0接口的数据包。 重要的是要了解iptables 不识别网络接口上的别名。因此,如果您有多个虚拟IP接口,则必须指定目标地址以过滤流量。下面提供了一个示例命令: iptables -A INPUT -j DROP -p tcp --destination-port 110 -i eth0 -d 198.51.100.0
您也可以使用-D或--delete删除规则。例如,这些命令是等效的: iptables --delete INPUT -j DROP -p tcp --destination-port 110 -i eth0 -d 198.51.100.0 iptables -D INPUT -j DROP -p tcp --destination-port 110 -i eth0 -d 198.51.100.0 从一个IP中删除流量
要从特定IP地址中删除所有传入流量,请使用带有以下选项的iptables命令: iptables -I INPUT -s 198.51.100.0 -j DROP
要删除这些规则,请使用--delete或-D选项: iptables --delete INPUT -s 198.51.100.0 -j DROP iptables -D INPUT -s 198.51.100.0 -j DROP 按端口号阻止或允许流量以创建iptables防火墙
创建防火墙的一种方法是阻止系统的所有流量,然后允许某些端口上的流量。下面是一个示例序列,用于说明该过程: iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -m comment --comment "Allow loopback connections" -j ACCEPT iptables -A INPUT -p icmp -m comment --comment "Allow Ping to work as expected" -j ACCEPT iptables -A INPUT -p tcp -m multiport --destination-ports 22,25,53,80,443,465,5222,5269,5280,8999:9003 -j ACCEPT iptables -A INPUT -p udp -m multiport --destination-ports 53 -j ACCEPT iptables -P INPUT DROP iptables -P FORWARD DROP
让我们分解上面的例子。前两个命令向INPUT链添加或附加规则,以允许在特定端口上进行访问。在-p tcp和-p udp选项指定UDP或TCP数据包类型。该-m multiport功能根据源端口或目标端口匹配数据包,并且可以接受最多15个端口的指定。还接受多端口范围,例如8999:9003,只是15个数字中的两个,但相匹配的端口有8999,9000,9001,9002,和9003。下一个命令允许与现有连接关联的所有传入和传出数据包,以便它们不会被防火墙无意中阻止。最后两个命令使用该-P选项来描述默认策略对于这些链条。其结果是,通过处理所有的数据包INPUT,并FORWARD会在默认情况下被丢弃。
请注意,上述规则仅控制传入数据包,不限制传出连接。 按地址划分的白名单/黑名单流量
您可以使用iptables阻止所有流量,然后只允许来自某些IP地址的流量。这些防火墙规则限制对网络层特定资源的访问。下面是一个示例序列的命令: iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -m comment --comment "Allow loopback connections" -j ACCEPT iptables -A INPUT -p icmp -m comment --comment "Allow Ping to work as expected" -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -s 198.51.100.0 -j ACCEPT iptables -P INPUT DROP iptables -P FORWARD DROP
在第一个命令中,-s 192.168.1.0/24语句指定允许192.168.1地址空间上的所有源IP。您可以使用CIDR(无类别域间路由)表示法或单个IP地址指定IP地址范围,如第二个命令中所示。第三个命令允许与现有连接关联的所有传入和传出数据包。最后两个命令为所有INPUT和FORWARD链设置默认策略,丢弃所有数据包。 使用ip6tables管理IPv6流量
使用IPv6时,请记住iptables命令是不兼容的。相反,有一个ip6tables命令。附加,检查等选项是相同的。ip6tables使用的表是raw,security,mangle和filter。协议,源等参数是相同的。语法与IPv4基本相同。示例语法如下: ip6tables [-t table] -N chain
要查看为IPv6配置的规则,请使用以下命令: ip6tables -L 配置IPv6规则
ip6tables通过使用端口,黑名单的特定地址,协议等来工作。主要区别在于ip6tables可以使用带有-m或match选项的扩展数据包匹配模块,后跟模块名称。以下是一些扩展模块: addrtype - 根据数据包的地址类型匹配数据包。一些地址类型是:本地单播广播组播ah - 匹配IPsec数据包的认证头中的参数。cluster - 您可以在没有负载平衡器的情况下部署网关和后端负载共享群集。comment - 允许您向任何规则添加注释。connbytes - 匹配连接传输的字节数或数据包数,或每个数据包的平均字节数。 这不是一个完整或全面的列表。您可以使用以下man页面查看扩展模块的完整列表: man ip6tables
以下是ip6tables中使用的示例规则: # limit the number of parallel HTTP requests to 16 for the link local network ip6tables -A INPUT -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT ip6tables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
此规则细分如下: 第一行是注释。-A 是追加。INPUT 是将规则添加到表中。-p 用于协议,即TCP。--syn 仅匹配SYN位设置且清除ACK,RST和FIN位的TCP数据包。--dport 是目标端口,即80。-s 是源,它是本地地址范围fe80 :: / 64。-m 是为了匹配。connlimit 是扩展数据包模块名称,它是连接限制。--connlimit-above 16 表示如果连接数超过16,则仅使用前16个。--connlimit-mask 64 表示组主机使用的前缀长度为64。-j 是跳转,它告诉目标规则如果数据包匹配该怎么办。REJECT 表示数据包被丢弃。非静态IPv6分配的必需规则 # Below are the rules which are required for your IPv6 address to be properly allocated ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -m hl --hl-eq 255 -j ACCEPT ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -m hl --hl-eq 255 -j ACCEPT ip6tables -A INPUT -p icmpv6 --icmpv6-type redirect -m hl --hl-eq 255 -j ACCEPT 基本iptables IPv4和IPv6的规则集
合适的防火墙规则取决于正在运行的服务。下面是iptables规则集,用于在运行Web服务器时保护您的Linode。
警告这些规则仅作为示例给出。真正的生产Web服务器可能需要更多或更少的配置,并且这些规则不适用于数据库,Minecraft或V**服务器。Iptables规则总是可以在以后修改或重置,但这些基本规则集可用作演示。
IPv4
/tmp/V4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 *filter # Allow all loopback (lo0) traffic and reject traffic # to localhost that does not originate from lo0. -A INPUT -i lo -j ACCEPT -A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT # Allow ping. -A INPUT -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT # Allow SSH connections. -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT # Allow HTTP and HTTPS connections from anywhere # (the normal ports for web servers). -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # Allow inbound traffic from established connections. # This includes ICMP error returns. -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Log what was incoming but denied (optional but useful). -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables_INPUT_denied: " --log-level 7 # Reject all other inbound. -A INPUT -j REJECT # Log any traffic that was sent to you # for forwarding (optional but useful). -A FORWARD -m limit --limit 5/min -j LOG --log-prefix "iptables_FORWARD_denied: " --log-level 7 # Reject all traffic forwarding. -A FORWARD -j REJECT COMMIT
可选:如果您计划使用Linode Longview或Linode的NodeBalancers,请在允许HTTP和HTTPS连接的部分之后添加相应的规则: # Allow incoming Longview connections from longview.linode.com -A INPUT -s 96.126.119.66 -m state --state NEW -j ACCEPT # Allow incoming NodeBalancer connections -A INPUT -s 192.168.255.0/24 -m state --state NEW -j ACCEPT
IPv6的=
如果您希望使用IPv6补充Web服务器的IPv4规则,则此规则集将允许HTTP/S访问和所有ICMP功能。
/tmp/V6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 *filter # Allow all loopback (lo0) traffic and reject traffic # to localhost that does not originate from lo0. -A INPUT -i lo -j ACCEPT -A INPUT ! -i lo -s ::1/128 -j REJECT # Allow ICMP -A INPUT -p icmpv6 -j ACCEPT # Allow HTTP and HTTPS connections from anywhere # (the normal ports for web servers). -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # Allow inbound traffic from established connections. -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Log what was incoming but denied (optional but useful). -A INPUT -m limit --limit 5/min -j LOG --log-prefix "ip6tables_INPUT_denied: " --log-level 7 # Reject all other inbound. -A INPUT -j REJECT # Log any traffic that was sent to you # for forwarding (optional but useful). -A FORWARD -m limit --limit 5/min -j LOG --log-prefix "ip6tables_FORWARD_denied: " --log-level 7 # Reject all traffic forwarding. -A FORWARD -j REJECT COMMIT
注意APT命令尝试将镜像域解析为IPv6 作为apt-get update的结果。如果您选择完全禁用和拒绝IPv6,这将减慢Debian和Ubuntu的更新过程,因为APT在继续之前等待每个分辨率超时。 为了解决这个问题,取消对该行precedence ::ffff:0:0/96 100在/etc/gai.conf。 部署您的iptables规则集
部署iptables规则集的过程因您使用的Linux发行版而异: Debian / Ubuntu
UFW是Ubuntu附带的iptables控制器,但它也可以在Debian的存储库中使用。如果您更喜欢使用UFW而不是iptables,请参阅我们的指南:如何使用UFW配置防火墙。 创建文件/tmp/v4和/tmp/v6。将上述规则集粘贴到各自的文件中。立即使用以下命令导入规则集: sudo iptables-restore < /tmp/v4 sudo ip6tables-restore < /tmp/v6要在引导时自动应用iptables规则,请参阅有关配置iptables-persistent的部分。CentOS / Fedora
CentOS 7或Fedora 20及以上版本
在这些发行版中,FirewallD用于实现防火墙规则,而不是使用iptables命令。如果您更喜欢在iptables上使用它,请参阅我们的指南:CentOS上的FirewallD简介。 如果您更喜欢使用iptables,必须首先停止并禁用FirewallD。 sudo systemctl stop firewalld.service && sudo systemctl disable firewalld.service安装iptables-services并启用iptables和ip6tables: sudo yum install iptables-services sudo systemctl enable iptables && sudo systemctl enable ip6tables sudo systemctl start iptables && sudo systemctl start ip6tables创建文件/tmp/v4和/tmp/v6。将上面的规则集粘贴到各自的文件中。立即使用以下命令导入规则集: sudo iptables-restore < /tmp/v4 sudo ip6tables-restore < /tmp/v6保存每个规则集: sudo service iptables save sudo service ip6tables save删除临时规则文件: sudo rm /tmp/{v4,v6} CentOS 6 创建文件/tmp/v4和/tmp/v6。将上面的规则集粘贴到各自的文件中。从临时文件导入规则: sudo iptables-restore < /tmp/v4 sudo ip6tables-restore < /tmp/v6保存规则: sudo service iptables save sudo service ip6tables save 注意防火墙规则保存到/etc/sysconfig/iptables和/etc/sysconfig/ip6tables。删除临时规则文件: sudo rm /tmp/{v4,v6}Arch Linux 创建文件/etc/iptables/iptables.rules和/etc/iptables/ip6tables.rules。将上面的规则集粘贴到各自的文件中。立即使用以下命令导入规则集: sudo iptables-restore < /etc/iptables/iptables.rules sudo ip6tables-restore < /etc/iptables/ip6tables.rules默认情况下,在Arch中不运行iptables。启用并启动systemd单元: sudo systemctl start iptables && sudo systemctl start ip6tables sudo systemctl enable iptables && sudo systemctl enable ip6tables 有关在Arch中使用iptables的更多信息,请参阅其iptables的 Wiki条目和简单的状态防火墙。验证iptables规则集
使用v选项详细输出选项检查Linode的防火墙规则: sudo iptables -vL sudo ip6tables -vL
IPv4规则的输出应显示: Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo any anywhere anywhere 0 0 REJECT all -- !lo any loopback/8 anywhere reject-with icmp-port-unreachable 0 0 ACCEPT icmp -- any any anywhere anywhere icmp destination-unreachable 0 0 ACCEPT icmp -- any any anywhere anywhere icmp echo-request 0 0 ACCEPT icmp -- any any anywhere anywhere icmp time-exceeded 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh state NEW 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:http state NEW 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https state NEW 0 0 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 0 0 LOG all -- any any anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix "iptables_INPUT_denied: " 0 0 REJECT all -- any any anywhere anywhere reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 LOG all -- any any anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix "iptables_FORWARD_denied: " 0 0 REJECT all -- any any anywhere anywhere reject-with icmp-port-unreachable Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
IPv6规则的输出如下所示: Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all lo any anywhere anywhere 0 0 REJECT all !lo any localhost anywhere reject-with icmp6-port-unreachable 0 0 ACCEPT ipv6-icmp any any anywhere anywhere 0 0 ACCEPT tcp any any anywhere anywhere tcp dpt:http state NEW 0 0 ACCEPT tcp any any anywhere anywhere tcp dpt:https state NEW 0 0 ACCEPT all any any anywhere anywhere state RELATED,ESTABLISHED 0 0 LOG all any any anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix "ip6tables_INPUT_denied: " 0 0 REJECT all any any anywhere anywhere reject-with icmp6-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 LOG all any any anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix "ip6tables_FORWARD_denied: " 0 0 REJECT all any any anywhere anywhere reject-with icmp6-port-unreachable Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
您的防火墙规则现已到位并保护您的Linode。请记住,如果您安装其他需要网络访问的软件包,则可能需要稍后编辑这些规则。 iptables-persistent简介
Ubuntu和Debian有一个名为iptables-persistent的软件包,可以在启动时轻松重新应用防火墙规则。安装后,您可以将所有规则保存在两个文件中(一个用于IPv4,一个用于IPv6)。如果您已经配置并应用了iptables规则,iptables-persistent将自动检测它们并允许您将它们添加到相应的配置文件中。 安装iptables-persistent
在Debian或Ubuntu上使用以下命令检查是否iptables-persistent已安装: dpkg -l iptables-persistent
如果dpkg返回没有匹配的包,则需要安装iptables-persistent包: apt-get install iptables-persistent
在安装过程中,系统会提示您两次。第一个提示是询问您是否要保存当前的IPv4规则。
第二个提示是保存为IPv6配置的规则。
安装完成后,您应该看到iptables的子目录。再次运行ls /etc/iptables命令以验证输出类似于以下内容: rules.v4 rules.v6 使用iptables-persistent
要查看服务器上已配置的规则: iptables -L
您应该看到类似的输出: Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 198.51.100.0 anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination CHAIN OUTPUT (policy ACCEPT) target prot opt source destination
上述规则允许任何人访问所有内容。如果您的输出类似于此,则需要设置防止未经授权访问的规则。 iptables-persistent规则
使用rules.v4或rules.v6文件添加,删除或编辑服务器规则。可以使用文本编辑器编辑这些文件,以充当代理,NAT或防火墙。配置取决于服务器的要求以及所需的功能。以下是来自rules.v4和rules.v6文件的文件摘录:
/etc/iptables/rules.v4
1 2 3 4 5 6 # Generated by iptables-save v1.4.14 on Wed Apr 2 13:24:27 2014 *security :INPUT ACCEPT [18483:1240117] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [17288:2887358] COMMIT
/etc/iptables/rules.v6
1 2 3 4 5 6 7 # Generated by ip6tables-save v1.4.14 on Wed Apr 2 13:24:27 2014 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [27:2576] :POSTROUTING ACCEPT [27:2576] COMMIT
虽然已经在这些文件中配置了一些规则,但是可以随时编辑任一文件。更改表规则的语法与“ 配置iptables和配置IPv6规则”一节中的相同。 通过重启保存iptables-persistent规则
默认情况下,iptables-persistent规则仅在重新启动时保存IPv4。因此,如果同时运行IPv4和IPv6,则需要手动编辑rules.v4和rules.v6文件。在较旧的系统上,iptables-save用于将更改写入rules文件。现在这iptables-persistent是一个选项,不要使用iptables-save > /etc/iptables/rules.v4或iptables-save > /etc/iptables/rules.v6命令,因为任何IPv6更改都将被IPv4规则覆盖。
要强制执行iptables规则并确保它们在重新启动运行后仍然存在,dpkg-reconfigure并在出现提示时响应“ 是”。(如果您以后编辑过保存的规则,请使用相同的命令再次保存它们。) dpkg-reconfigure iptables-persistent
要在系统重新引导后验证规则是否已应用并可用,请使用以下命令: iptables -L ip6tables -L 网络锁定
当您应用网络规则时,尤其是IPv4和IPv6以及多个接口时,很容易将自己锁定。如果您应用规则但无法访问您的服务器,您可以通过Linode管理器中的Lish获得访问权限。以下步骤将指导您使用Linode的图形界面来访问您的服务器: 连接到您的Linode管理器。单击“远程访问”选项卡。在标题为“控制台访问”的部分下,单击Launch Lish Console链接。使用root或sudo用户名和密码登录。删除导致连接问题的所有规则。退出Lish窗口。尝试通过常规SSH会话登录。 此Lish控制台的功能与常规SSH终端会话类似。 故障排除:netfilter-persistent在重新启动时不会恢复。
如果您已从早期版本升级到Debian 8,您可能会看到在使用Linode内核时netfilter-persistent在启动期间无法启动的情况。控制台输出将显示类似于: [FAILED] Failed to start Load Kernel Modules. See 'systemctl status systemd-modules-load.service' for details. [DEPEND] Dependency failed for netfilter persistent configuration
您还可以使用journalctl -xn以查看systemd无法加载loop模块: systemd-modules-load[3452]: Failed to lookup alias 'loop': Function not implemented
为了解决这个问题,注释掉该行loop中/etc/modules: sed -i 's/loop/#loop/g' /etc/modules
然后重启netfilter-persistent: systemctl restart netfilter-persistent
它应该运行正常。确认: systemctl status netfilter-persistent
在Debian 8的新部署中不会发生此问题,因为该loop行不存在于/etc/modules。 更多信息
有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。 安全基础知识使用Linode Shell(Lish)iptables:基本Web服务器的Linux防火墙规则带有iptables的Linux防火墙 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |