UNPKG

8.24 kBMarkdownView Raw
1ip6tables
2===
3
4linux中防火墙软件
5
6## 补充说明
7
8**ip6tables命令** 和iptables一样,都是linux中防火墙软件,不同的是ip6tables采用的TCP/ip协议为IPv6。
9
10### 语法
11
12```shell
13ip6tables(选项)
14```
15
16### 选项
17
18```shell
19-t<表>:指定要操纵的表;
20-A:向规则链中添加条目;
21-D:从规则链中删除条目;
22-i:向规则链中插入条目;
23-R:替换规则链中的条目;
24-L:显示规则链中已有的条目;
25-F:清楚规则链中已有的条目;
26-Z:清空规则链中的数据包计算器和字节计数器;
27-N:创建新的用户自定义规则链;
28-P:定义规则链中的默认目标;
29-h:显示帮助信息;
30-p:指定要匹配的数据包协议类型;
31-s:指定要匹配的数据包源ip地址;
32-j<目标>:指定要跳转的目标;
33-i<网络接口>:指定数据包进入本机的网络接口;
34-o<网络接口>:指定数据包要离开本机所使用的网络接口。
35-c<计数器>:在执行插入操作(insert),追加操作(append),替换操作(replace)时初始化包计数器和字节计数器。
36```
37
38### 实例
39
40在命令行窗口输入下面的指令就可以查看当前的 IPv6 防火墙配置:
41
42```shell
43ip6tables -nl --line-numbers
44```
45
46 **/etc/sysconfig/ip6tables文件**
47
48使用编辑器编辑`/etc/sysconfig/ip6tables`文件:
49
50```shell
51vi /etc/sysconfig/ip6tables
52```
53
54可能会看到下面的默认 ip6tables 规则:
55
56```shell
57*filter
58:INPUT accept [0:0]
59:FORWARD ACCEPT [0:0]
60:OUTPUT ACCEPT [0:0]
61:RH-Firewall-1-INPUT - [0:0]
62-A INPUT -j RH-Firewall-1-INPUT
63-A FORWARD -j RH-Firewall-1-INPUT
64-A RH-Firewall-1-INPUT -i lo -j ACCEPT
65-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
66-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
67-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
68-A RH-Firewall-1-INPUT -p udp --dport 5353 -d ff02::fb -j ACCEPT
69-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
70-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
71-A RH-Firewall-1-INPUT -p udp -m udp --dport 32768:61000 -j ACCEPT
72-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 32768:61000 ! --syn -j ACCEPT
73-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 22 -j ACCEPT
74-A RH-Firewall-1-INPUT -j reject --reject-with icmp6-adm-prohibited
75COMMIT
76```
77
78与 IPv4 的 iptables 规则类似,但又不完全相同。
79
80要开启 80 端口(HTTP 服务器端口),在 COMMIT 一行之前添加如下规则:
81
82```shell
83-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT
84```
85
86`-p tcp`表示仅针对 tcp 协议的通信。`--dport`指定端口号。
87
88要开启 53 端口(DNS 服务器端口),在 COMMIT 一行之前添加如下规则:
89
90```shell
91-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT
92-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT
93```
94
95同时针对 tcp 和 udp 协议开启 53 端口。
96
97要开启 443 端口,在 COMMIT 一行之前添加如下规则:
98
99```shell
100-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT
101```
102
103要开启 25 端口(SMTP 邮件服务器端口),在 COMMIT 一行之前添加如下规则:
104
105```shell
106-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT
107```
108
109对于那些没有特定规则与之匹配的数据包,可能是我们不想要的,多半是有问题的。我们可能也希望在丢弃(DROP)之前记录它们。此时,可以将最后一行:
110
111```shell
112-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
113COMMIT
114```
115
116改为:
117
118```shell
119-A RH-Firewall-1-INPUT -j LOG
120-A RH-Firewall-1-INPUT -j DROP
121COMMIT
122```
123
124保存并关闭该文件。然后重新启动 ip6tables 防火墙:
125
126```shell
127# service ip6tables restart
128```
129
130然后重新查看 ip6tables 规则,可以看到如下所示的输出:
131
132```shell
133# ip6tables -vnL --line-numbers
134```
135
136输出示例:
137
138```shell
139Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
140num pkts bytes target prot opt in out source destination
1411 42237 3243K RH-Firewall-1-INPUT all * * ::/0 ::/0
142Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
143num pkts bytes target prot opt in out source destination
1441 0 0 RH-Firewall-1-INPUT all * * ::/0 ::/0
145Chain OUTPUT (policy ACCEPT 12557 packets, 2042K bytes)
146num pkts bytes target prot opt in out source destination
147Chain RH-Firewall-1-INPUT (2 references)
148num pkts bytes target prot opt in out source destination
1491 6 656 ACCEPT all lo * ::/0 ::/0
1502 37519 2730K ACCEPT icmpv6 * * ::/0 ::/0
1513 0 0 ACCEPT esp * * ::/0 ::/0
1524 0 0 ACCEPT ah * * ::/0 ::/0
1535 413 48385 ACCEPT udp * * ::/0 ff02::fb/128 udp dpt:5353
1546 0 0 ACCEPT udp * * ::/0 ::/0 udp dpt:631
1557 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:631
1568 173 79521 ACCEPT udp * * ::/0 ::/0 udp dpts:32768:61000
1579 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpts:32768:61000 flags:!0x16/0x02
15810 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22
15911 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80
16012 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:53
16113 4108 380K ACCEPT udp * * ::/0 ::/0 udp dpt:53
16214 18 4196 REJECT all * * ::/0 ::/0
163```
164
165 **IPv6 私有 IP**
166
167IPv4 通常默认即可保护内部局域网私有 IP 上的主机。但是 IPv6 的地址非常丰富,不再需要使用类似 NAT 等协议的私有网络。这样一来,所有的内部主机都可以拥有公网 IP 而直接连接到互联网,也就同时暴露于互联网上的各种威胁之中了。那么,如何配置 IPv6 防火墙使其默认将除了 ping6 请求之外的所有输入数据包都丢弃呢?可以使用FC00::/7 前缀来标识本地 IPv6 单播地址。
168
169 **允许特定的 ICMPv6 通信**
170
171使用 IPv6 的时候需要允许比 IPv4 更多类型的 ICMP 通信以保证路由和 IP 地址自动配置等功能正常工作。有时候,如果你的规则设置太过苛刻,可能都无法分配到正确的 IPv6 地址。当然,不使用 DHCP 而是手动配置 IP 地址的除外。
172
173下面是一些比较常见的 ipv6-icmp 配置实例:
174
175```shell
176:ICMPv6 - [0:0]
177# Approve certain ICMPv6 types and all outgoing ICMPv6
178# http://forum.linode.com/viewtopic.php?p=39840#39840
179-A INPUT -p icmpv6 -j ICMPv6
180-A ICMPv6 -p icmpv6 --icmpv6-type echo-request -j ACCEPT
181-A ICMPv6 -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
182-A ICMPv6 -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
183-A ICMPv6 -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
184-A ICMPv6 -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
185-A ICMPv6 -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
186-A ICMPv6 -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
187-A ICMPv6 -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
188-A ICMPv6 -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
189-A ICMPv6 -p icmpv6 --icmpv6-type redirect -j ACCEPT
190-A ICMPv6 -p icmpv6 --icmpv6-type 141 -j ACCEPT
191-A ICMPv6 -p icmpv6 --icmpv6-type 142 -j ACCEPT
192-A ICMPv6 -p icmpv6 --icmpv6-type 148 -j ACCEPT
193-A ICMPv6 -p icmpv6 --icmpv6-type 149 -j ACCEPT
194-A ICMPv6 -p icmpv6 --icmpv6-type 130 -s fe80::/10 -j ACCEPT
195-A ICMPv6 -p icmpv6 --icmpv6-type 131 -s fe80::/10 -j ACCEPT
196-A ICMPv6 -p icmpv6 --icmpv6-type 132 -s fe80::/10 -j ACCEPT
197-A ICMPv6 -p icmpv6 --icmpv6-type 143 -s fe80::/10 -j ACCEPT
198-A ICMPv6 -p icmpv6 --icmpv6-type 151 -s fe80::/10 -j ACCEPT
199-A ICMPv6 -p icmpv6 --icmpv6-type 152 -s fe80::/10 -j ACCEPT
200-A ICMPv6 -p icmpv6 --icmpv6-type 153 -s fe80::/10 -j ACCEPT
201-A ICMPv6 -j RETURN
202-A OUTPUT -p icmpv6 -j ACCEPT
203```
204
205