找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16668|回复: 1

简明centos IPv6 ip6tables 防火墙配置简介

[复制链接]
发表于 2013-3-25 21:39:59 | 显示全部楼层 |阅读模式
Ip6tables 是 Linux 核心中用于设置、维护和检测 IPv6 包的过滤规则的程序。使用中请注意 IPv4 版的是 iptables,而 IPv6 版的是 ip6tables。; B( ~, F: W$ b
6 {4 M; H* E' p" j+ I
在命令行窗口输入下面的指令就可以查看当前的 IPv6 防火墙配置:4 N' h" s) E% d3 w5 g! r3 \' f
ip6tables -nL --line-numbers3 a5 n1 g% m' Q

7 E( |$ {! y- j( S. \2 ^$ |使用编辑器编辑 /etc/sysconfig/ip6tables 文件:9 f% Q% L; c* I2 O# N: f0 |: [

0 S5 ^; X" a8 A4 ]2 s+ w# vi /etc/sysconfig/ip6tables% M6 x( l/ N- Q! L6 y7 f
可能会看到下面的默认 ip6tables 规则:(不同ip6table版本RH-Firewall-1-INPUT可能不通用请用INPUT替换)3 k$ G; F5 S8 }4 v# q
*filter4 Z9 f0 a- }  L: G
:INPUT ACCEPT [0:0]# n5 i" V- _+ H' O0 s6 {. a& r
:FORWARD ACCEPT [0:0]9 r8 B7 C* m* t# g1 q
:OUTPUT ACCEPT [0:0]
6 U9 s- T8 O; N) N* y1 S; S7 T' Z- V:RH-Firewall-1-INPUT - [0:0]7 B7 b2 X/ Y$ }; |
-A INPUT -j RH-Firewall-1-INPUT
  w8 x* s' p: G( p& B. Q-A FORWARD -j RH-Firewall-1-INPUT, |! x& d' u1 q4 N% J' r9 c: {# t
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
! W5 Q. U; K& @, P1 Z-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT' X4 x0 G0 I: }
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT3 S. F1 V& `" |. a
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
/ f. e6 G3 J! b-A RH-Firewall-1-INPUT -p udp --dport 5353 -d ff02::fb -j ACCEPT
# s8 }: W, r# H' n3 E1 q% y-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
1 k3 J- |" j# p6 V  i-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
1 j& A8 k+ Z$ d6 g1 L- z-A RH-Firewall-1-INPUT -p udp -m udp --dport 32768:61000 -j ACCEPT1 E. k9 |& c' b( U
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 32768:61000 ! --syn -j ACCEPT
  ^% C2 q2 P; m! V; L/ ~) m$ p4 x% o-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 22 -j ACCEPT' ]4 N0 n4 J( d% A( ?
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited. V0 B& P) I6 y' \! L" `4 X. a
COMMIT
% y' _2 N: f, ^( h与 IPv4 的 iptables 规则类似,但又不完全相同。
% {# X/ Y3 r/ n  S6 I6 J9 ?" i2 Z9 l) [- b3 ?! c! y, E: q  W
要开启 80 端口(HTTP 服务器端口),在 COMMIT 一行之前(准确说应该是在默认操作之前,下同)添加如下规则:- C# A: l- b( a$ \7 K) J# @

# T1 `4 L' E( I-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT4 r5 `3 n. G' M2 y
-p tcp 表示仅针对 tcp 协议的通信。–dport 指定端口号。
7 ^1 U" W' I  U0 H9 d" y
2 b' q* W- H8 J  I! S1 Z% B+ v- N要开启 53 端口(DNS 服务器端口),在 COMMIT 一行之前添加如下规则:
) {5 `1 ~2 q" ^' ^3 y: k) [9 c" k+ W+ Z* q
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT( @9 |) j, [4 _5 _
-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT4 D5 X! M$ M9 Q% T1 T
同时针对 tcp 和 udp 协议开启 53 端口。" b! V3 A7 x2 t7 `

; u9 [% Z/ r# E, F! l5 S3 @2 H要开启 443 端口(HTTPS 加密连接服务器端口),在 COMMIT 一行之前添加如下规则:: |7 A9 P, d* P
( s' X# g/ Q7 f  m! U+ s
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT; U, ]3 E' ^% E1 {3 P$ |' x5 W
要开启 25 端口(SMTP 邮件服务器端口),在 COMMIT 一行之前添加如下规则:0 y# g8 D- @* q& O" P0 w7 i3 P

* t: L$ \; n8 s3 B( E-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT* V/ t: j, }0 v, l5 N8 r
对于那些没有特定规则与之匹配的数据包,可能是我们不想要的,多半是有问题的。我们可能也希望在丢弃(DROP)之前记录它们。此时,可以将最后一行:
% X  `4 _3 ?( p! o2 M$ n3 n% k5 m
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
- F$ k7 j) b' c8 qCOMMIT+ u9 N. p! `) u3 e
改为:
0 q/ ^, ?1 C! P) X( i. p; N3 b: H2 D% @" x+ F- F1 g
-A RH-Firewall-1-INPUT -j LOG# j$ U: X% s5 h1 P" E% |
-A RH-Firewall-1-INPUT -j DROP9 x/ }5 A+ Z  I) t
COMMIT
  E, e8 ?, b8 p! y7 \保存并关闭该文件。然后重新启动 ip6tables 防火墙:
9 J# L3 n; L0 y* G8 H" F1 |% U9 l1 B( Q' {3 c* E, |& e8 a8 R5 ~8 n* R
# service ip6tables restart' [3 V+ Q8 b$ j* ]% v
然后重新查看 ip6tables 规则,可以看到如下所示的输出:
, F- t# x% x" L# [  h" q; u
( \$ g  Y% [  Q0 U4 E  ?! G" N# ip6tables -vnL --line-numbers5 M; u3 s; u9 z
输出示例:9 n/ B% e4 ~* T; M7 Z* J; a5 H# e/ l
% s; u3 J; S0 U$ c
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)! f7 ~! ?2 V6 R9 ~, X/ W
num   pkts bytes target     prot opt in     out     source               destination
$ n/ y* g8 J: L/ p8 W1    42237 3243K RH-Firewall-1-INPUT  all      *      *       ::/0                 ::/03 b( P$ ?$ g8 L+ A9 {1 z8 W! Z8 X0 Y
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)# k5 j6 Z/ m, F+ x1 L1 A5 M
num   pkts bytes target     prot opt in     out     source               destination
! A9 e( y8 E: E5 D% G/ e$ a6 u, C' R  G1        0     0 RH-Firewall-1-INPUT  all      *      *       ::/0                 ::/0. q7 y& T5 W6 I2 Y
Chain OUTPUT (policy ACCEPT 12557 packets, 2042K bytes)
% z/ n; W, z! O  @. cnum   pkts bytes target     prot opt in     out     source               destination
4 }* Y8 A; E/ d, T- j" X9 xChain RH-Firewall-1-INPUT (2 references)
# g/ F1 g, c2 G1 d5 W  k" Cnum   pkts bytes target     prot opt in     out     source               destination
8 ^/ ]5 \! r; g# `% V1        6   656 ACCEPT     all      lo     *       ::/0                 ::/0  Z6 p( F! G7 T
2    37519 2730K ACCEPT     icmpv6    *      *       ::/0                 ::/0; ^$ d$ b9 v- {3 u1 a+ E
3        0     0 ACCEPT     esp      *      *       ::/0                 ::/0
; ?+ w( T# z7 j% T  t4        0     0 ACCEPT     ah       *      *       ::/0                 ::/0
) V: d0 }  a2 y5      413 48385 ACCEPT     udp      *      *       ::/0                 ff02::fb/128       udp dpt:5353; k" W1 ~' u% C- b, q
6        0     0 ACCEPT     udp      *      *       ::/0                 ::/0               udp dpt:631
, O) Q* @: g& [% l+ l  n- |5 ?# a' q" Z! U7        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:6310 g  {' Z; i$ S4 }" ?4 s
8      173 79521 ACCEPT     udp      *      *       ::/0                 ::/0               udp dpts:32768:610007 l' E" g8 E* u9 D  P
9        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpts:32768:61000 flags:!0x16/0x023 B: P8 _5 S2 r( a6 y$ o3 m
10       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:22
  S  _4 F3 d' k+ _11       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:80  G$ l5 L5 N/ g
12       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:534 z4 A' J1 F3 b/ \+ A/ d, i
13    4108  380K ACCEPT     udp      *      *       ::/0                 ::/0               udp dpt:53
' g$ ^: Y2 R( M6 t/ l* K14      18  4196 REJECT     all      *      *       ::/0                 ::/02 S  T1 [* k. {, \: W# x
IPv6 私有 IP¶
8 y: _# t' b: K& Q. v) ?2 e# g6 KIPv4 通常默认即可保护内部局域网私有 IP 上的主机(RFC 1918)。但是 IPv6 的地址非常丰富,不再需要使用类似 NAT 等协议的私有网络。这样一来,所有的内部主机都可以拥有公网 IP 而直接连接到互联网,也就同时暴露于互联网上的各种威胁之中了。那么,如何配置 IPv6 防火墙使其默认将除了 ping6 请求之外的所有输入数据包都丢弃呢?
2 t2 M2 f; r& a. O
0 I! ^/ e1 ?1 v! x: H1 U7 S4 s不过,可以使用FC00::/7 前缀来标识本地 IPv6 单播地址。/ Y# w: G/ l' M* E

; p# E9 I; \# f. Y自动配置 IPv6 防火墙示例脚本¶3 j: A: C: W/ T9 B; x+ `8 z: x
与处理 IPv4 防火墙类似,我们除了可以通过直接编辑 ip6tables 的保存文件来配置防火墙之外,还可以使用类似下面的脚本来自动执行配置过程。7 `& P- J: v5 J' B, b- o8 t) `. D9 |
! C$ R( o2 Y2 V; W! T! [
#!/bin/bash+ b4 n9 E! {* o( I
IPT6="/sbin/ip6tables"# {4 q9 R% C7 W$ R
PUBIF="eth1"
7 {+ o3 A: H; u  i/ I0 E( W2 Mecho "Starting IPv6 firewall..."6 s( \$ S9 k% L4 g- i; I
$IPT6 -F
8 N6 ]" U" v0 Z/ v$IPT6 -X8 R% l! R% E) R* @7 E6 J( @
$IPT6 -t mangle -F$ ?+ E* i6 k# P& ]6 B. O
$IPT6 -t mangle -X
1 u9 k+ y& g! y2 U, P+ L, l( J
# V! T( \" _, A3 [. e  v7 N#unlimited access to loopback
4 H$ @- h. {# h' |" ~3 o5 g. h* M$IPT6 -A INPUT -i lo -j ACCEPT
2 X0 F2 {  {" Q" G" k) E* Q2 m$IPT6 -A OUTPUT -o lo -j ACCEPT
& g# Q$ R# |: ?1 k8 s0 v4 Y/ }' m5 [
# DROP all incomming traffic; R: D2 I1 l- }2 ?% ?
$IPT6 -P INPUT DROP$ y$ _/ L8 [1 S' k6 O2 l
$IPT6 -P OUTPUT DROP
* C: T2 d* [5 w+ L2 h$IPT6 -P FORWARD DROP0 d9 @& n$ Y, g# T2 r/ j
: y1 Y9 v6 s( j- j
# Allow full outgoing connection but no incomming stuff, C- U! N" {- D/ M5 }2 t  t3 C
$IPT6 -A INPUT -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
& p% i' \# u5 {4 [7 i, ^$IPT6 -A OUTPUT -o $PUBIF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
( D+ d$ e0 L% t- H# H
( j8 \5 t4 l+ A( ^- k4 b9 L0 N$ a# allow incoming ICMP ping pong stuff* y. n5 k1 q0 L: x
$IPT6 -A INPUT -i $PUBIF -p ipv6-icmp -j ACCEPT- j; ]0 J8 ~7 p3 g$ N9 ~- j7 m6 [! ]
$IPT6 -A OUTPUT -o $PUBIF -p ipv6-icmp -j ACCEPT& p$ p! z3 D1 m1 _
, H8 o2 i- u0 I
############# START 在下面添加上自己的特殊规则 ############2 T) G8 H) G  `
### open IPv6  port 80 0 c) N5 ]' i) n: g! K& U
#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 80 -j ACCEPT8 J: T0 k: E( Z: f+ R
### open IPv6  port 22  C2 E& K; Z  u
#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 22 -j ACCEPT
: f: {! G# u% ^5 H" y0 Q### open IPv6  port 25, b: w$ c; j1 S) q
#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 25 -j ACCEPT
8 |) j: ~1 B0 [+ A# Y############ END 自己特殊规则结束 ################3 N; |9 |: @# M

4 D8 s) {* S: ]#### no need to edit below ###
6 C; _+ S1 I) g1 S6 ?& y# log everything else5 ^- `+ D- P* G& x
$IPT6 -A INPUT -i $PUBIF -j LOG' Q6 W9 I: N7 D, k0 B# i  a
$IPT6 -A INPUT -i $PUBIF -j DROP
 楼主| 发表于 2013-3-25 22:35:23 | 显示全部楼层
-A INPUT -j REJECT --reject-with icmp6-adm-prohibited 将会导致外网访问需要icmp6数据的应用失效,最好删除!意思是阻止一切外部发起的icmp6数据访问,如果保留注意其执行顺序!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站论坛 ( 蜀ICP备06004864号-6 )

GMT+8, 2025-12-23 05:19 , Processed in 0.051427 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表