1 | ip6tables
|
2 | ===
|
3 |
|
4 | linux中防火墙软件
|
5 |
|
6 | ## 补充说明
|
7 |
|
8 | **ip6tables命令** 和iptables一样,都是linux中防火墙软件,不同的是ip6tables采用的TCP/ip协议为IPv6。
|
9 |
|
10 | ### 语法
|
11 |
|
12 | ```shell
|
13 | ip6tables(选项)
|
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
|
43 | ip6tables -nl --line-numbers
|
44 | ```
|
45 |
|
46 | **/etc/sysconfig/ip6tables文件**
|
47 |
|
48 | 使用编辑器编辑`/etc/sysconfig/ip6tables`文件:
|
49 |
|
50 | ```shell
|
51 | vi /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
|
75 | COMMIT
|
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
|
113 | COMMIT
|
114 | ```
|
115 |
|
116 | 改为:
|
117 |
|
118 | ```shell
|
119 | -A RH-Firewall-1-INPUT -j LOG
|
120 | -A RH-Firewall-1-INPUT -j DROP
|
121 | COMMIT
|
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
|
139 | Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
|
140 | num pkts bytes target prot opt in out source destination
|
141 | 1 42237 3243K RH-Firewall-1-INPUT all * * ::/0 ::/0
|
142 | Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
|
143 | num pkts bytes target prot opt in out source destination
|
144 | 1 0 0 RH-Firewall-1-INPUT all * * ::/0 ::/0
|
145 | Chain OUTPUT (policy ACCEPT 12557 packets, 2042K bytes)
|
146 | num pkts bytes target prot opt in out source destination
|
147 | Chain RH-Firewall-1-INPUT (2 references)
|
148 | num pkts bytes target prot opt in out source destination
|
149 | 1 6 656 ACCEPT all lo * ::/0 ::/0
|
150 | 2 37519 2730K ACCEPT icmpv6 * * ::/0 ::/0
|
151 | 3 0 0 ACCEPT esp * * ::/0 ::/0
|
152 | 4 0 0 ACCEPT ah * * ::/0 ::/0
|
153 | 5 413 48385 ACCEPT udp * * ::/0 ff02::fb/128 udp dpt:5353
|
154 | 6 0 0 ACCEPT udp * * ::/0 ::/0 udp dpt:631
|
155 | 7 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:631
|
156 | 8 173 79521 ACCEPT udp * * ::/0 ::/0 udp dpts:32768:61000
|
157 | 9 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpts:32768:61000 flags:!0x16/0x02
|
158 | 10 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22
|
159 | 11 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80
|
160 | 12 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:53
|
161 | 13 4108 380K ACCEPT udp * * ::/0 ::/0 udp dpt:53
|
162 | 14 18 4196 REJECT all * * ::/0 ::/0
|
163 | ```
|
164 |
|
165 | **IPv6 私有 IP**
|
166 |
|
167 | IPv4 通常默认即可保护内部局域网私有 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 |
|