ip6tables
linux中防火墙软件
补充说明
ip6tables命令 和iptables一样,都是linux中防火墙软件,不同的是ip6tables采用的TCP/ip协议为IPv6。
语法
1 | ip6tables(选项) |
选项
1 | -t<表>:指定要操纵的表; |
实例
在命令行窗口输入下面的指令就可以查看当前的 IPv6 防火墙配置:
1 | ip6tables -nl --line-numbers |
/etc/sysconfig/ip6tables文件
使用编辑器编辑/etc/sysconfig/ip6tables
文件:
1 | vi /etc/sysconfig/ip6tables |
可能会看到下面的默认 ip6tables 规则:
1 | *filter |
与 IPv4 的 iptables 规则类似,但又不完全相同。
要开启 80 端口(HTTP 服务器端口),在 COMMIT 一行之前添加如下规则:
1 | -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT |
-p tcp
表示仅针对 tcp 协议的通信。--dport
指定端口号。
要开启 53 端口(DNS 服务器端口),在 COMMIT 一行之前添加如下规则:
1 | -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT |
同时针对 tcp 和 udp 协议开启 53 端口。
要开启 443 端口,在 COMMIT 一行之前添加如下规则:
1 | -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT |
要开启 25 端口(SMTP 邮件服务器端口),在 COMMIT 一行之前添加如下规则:
1 | -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT |
对于那些没有特定规则与之匹配的数据包,可能是我们不想要的,多半是有问题的。我们可能也希望在丢弃(DROP)之前记录它们。此时,可以将最后一行:
1 | -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited |
改为:
1 | -A RH-Firewall-1-INPUT -j LOG |
保存并关闭该文件。然后重新启动 ip6tables 防火墙:
1 | # service ip6tables restart |
然后重新查看 ip6tables 规则,可以看到如下所示的输出:
1 | # ip6tables -vnL --line-numbers |
输出示例:
1 | Chain INPUT (policy ACCEPT 0 packets, 0 bytes) |
IPv6 私有 IP
IPv4 通常默认即可保护内部局域网私有 IP 上的主机。但是 IPv6 的地址非常丰富,不再需要使用类似 NAT 等协议的私有网络。这样一来,所有的内部主机都可以拥有公网 IP 而直接连接到互联网,也就同时暴露于互联网上的各种威胁之中了。那么,如何配置 IPv6 防火墙使其默认将除了 ping6 请求之外的所有输入数据包都丢弃呢?可以使用FC00::/7 前缀来标识本地 IPv6 单播地址。
允许特定的 ICMPv6 通信
使用 IPv6 的时候需要允许比 IPv4 更多类型的 ICMP 通信以保证路由和 IP 地址自动配置等功能正常工作。有时候,如果你的规则设置太过苛刻,可能都无法分配到正确的 IPv6 地址。当然,不使用 DHCP 而是手动配置 IP 地址的除外。
下面是一些比较常见的 ipv6-icmp 配置实例:
1 | :ICMPv6 - [0:0] |