找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 18304|回复: 1

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

[复制链接]
发表于 2013-3-25 21:39:59 | 显示全部楼层 |阅读模式
Ip6tables 是 Linux 核心中用于设置、维护和检测 IPv6 包的过滤规则的程序。使用中请注意 IPv4 版的是 iptables,而 IPv6 版的是 ip6tables。
  a' w8 G- g  o$ _7 E$ j7 r* [0 s, J
& v  A; `7 d- a  Q5 F在命令行窗口输入下面的指令就可以查看当前的 IPv6 防火墙配置:
8 g2 B& `' |; `: h ip6tables -nL --line-numbers
6 H. T5 n5 A# h( F' M7 r5 y( Z; O- S0 I5 b: @9 i% G
使用编辑器编辑 /etc/sysconfig/ip6tables 文件:
  V- q1 K% D$ h9 y! G) n6 C& b
; P* e7 l/ t2 C. o. C( \% {. `# vi /etc/sysconfig/ip6tables
# {  p0 `' y1 j0 {" ^可能会看到下面的默认 ip6tables 规则:(不同ip6table版本RH-Firewall-1-INPUT可能不通用请用INPUT替换)
! \7 }% q1 Q' A*filter. a7 [3 C0 @! o! O
:INPUT ACCEPT [0:0]
$ k; d9 B# T. V; x; @+ ]:FORWARD ACCEPT [0:0]% H" d" a: d3 {- q  ?
:OUTPUT ACCEPT [0:0]5 C; D+ U9 z9 O# F+ `1 |
:RH-Firewall-1-INPUT - [0:0]1 C) J+ S, l  N  _
-A INPUT -j RH-Firewall-1-INPUT
8 Q* q/ Y, b* M-A FORWARD -j RH-Firewall-1-INPUT0 q4 f9 n+ U6 y) R" {8 S! k
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
+ ~& Y) {: j3 M. P+ K+ s9 _-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT5 U2 x; s8 a* v& t: Z) P/ ?( n4 Z# i$ R
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
7 B3 h' c9 w3 p$ f# q5 |- V-A RH-Firewall-1-INPUT -p 51 -j ACCEPT$ J4 ^3 S5 `) o! L
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d ff02::fb -j ACCEPT7 z0 t+ Y! D! ]$ z+ c% }, e! G
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT# M: N( y) J, C/ e
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT/ \& M, ^" D2 b  \8 d5 g4 a
-A RH-Firewall-1-INPUT -p udp -m udp --dport 32768:61000 -j ACCEPT$ `& _, z# D4 h% \3 q9 _
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 32768:61000 ! --syn -j ACCEPT
  c5 q6 D1 h, T5 x-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 22 -j ACCEPT
4 @3 T1 C% U0 v( T9 ?  Y-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
2 q" C1 }( x) G# H. v( gCOMMIT4 r( x$ b% Q3 O/ A. R7 s2 n
与 IPv4 的 iptables 规则类似,但又不完全相同。" m* V' @! F* u; P+ S9 ?" b" h
" [4 V1 L3 P; b6 |* p7 s
要开启 80 端口(HTTP 服务器端口),在 COMMIT 一行之前(准确说应该是在默认操作之前,下同)添加如下规则:
" g8 O' ^( G* f, t3 V1 {1 G9 z, r( O) N# D" Q7 t6 q
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT
8 d* r1 D" ?1 [* j) Z  B-p tcp 表示仅针对 tcp 协议的通信。–dport 指定端口号。6 j# o4 Z# b* V" U. T+ Z

0 v& g' S" M  {要开启 53 端口(DNS 服务器端口),在 COMMIT 一行之前添加如下规则:; ]- V  y( ]% C0 P" P/ M

1 w9 E! S! R' i  M-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT3 W- _0 y. u$ @7 R
-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT. b. c2 \% J$ g# F' b% [4 M
同时针对 tcp 和 udp 协议开启 53 端口。6 t8 k' {* ~1 t  d! F
( S  ]  M* u6 ?( T' I7 S
要开启 443 端口(HTTPS 加密连接服务器端口),在 COMMIT 一行之前添加如下规则:) d: D; k/ ?! J, E7 Y3 ^: q! C
& N% [; _% Y  \1 z
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT' Y3 K7 L+ Q4 W; ?) C. @
要开启 25 端口(SMTP 邮件服务器端口),在 COMMIT 一行之前添加如下规则:
# |' Y5 U- E' I- y$ l7 F9 x8 E# V' Z. _
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT# L5 @7 ~* w8 ~% G
对于那些没有特定规则与之匹配的数据包,可能是我们不想要的,多半是有问题的。我们可能也希望在丢弃(DROP)之前记录它们。此时,可以将最后一行:) Q4 L! M1 `/ R5 E# b8 Y

7 }0 g" g5 M8 {-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
3 s9 J: `& i2 h1 [1 {  v% vCOMMIT2 C' ]9 n/ R. B6 \! q/ E, R: t
改为:1 P1 M$ s9 @( L& ]

5 N( w- j/ H2 T. B& U- Z& Y* F-A RH-Firewall-1-INPUT -j LOG. D. Q& g! Y7 W4 O& p; ~! m. g" a3 d
-A RH-Firewall-1-INPUT -j DROP
6 B# l1 I, ?8 J- y+ TCOMMIT
; L0 V% i& `# K, q. q保存并关闭该文件。然后重新启动 ip6tables 防火墙:
& W" y* k  D2 D% P( m4 o+ ]7 S- C$ [, z/ m6 D
# service ip6tables restart) x* P# p0 p3 S5 j3 h" p% m9 X$ v
然后重新查看 ip6tables 规则,可以看到如下所示的输出:
$ V# b% X# Y, g% t- D
. t1 ~2 {% u$ C6 |9 K' T, h& O( K7 A# ip6tables -vnL --line-numbers
# d5 \# |" q- q  q, K" u/ d5 ^5 w输出示例:: S3 D% c9 ^+ U" n4 u

1 F. n) p5 ]* A  y* r. M3 n$ c6 ?Chain INPUT (policy ACCEPT 0 packets, 0 bytes)" s4 ]% K7 h- \; ?( v& N8 d% d' _/ V
num   pkts bytes target     prot opt in     out     source               destination
8 G( |% {# _2 [) r% y+ A1    42237 3243K RH-Firewall-1-INPUT  all      *      *       ::/0                 ::/0! m; _0 G9 u0 z' H
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)* Q+ U% j4 q* U  s$ b
num   pkts bytes target     prot opt in     out     source               destination
, M9 c9 x- d: j  Q! N6 ~1        0     0 RH-Firewall-1-INPUT  all      *      *       ::/0                 ::/0
2 `3 }: Y* @% ~Chain OUTPUT (policy ACCEPT 12557 packets, 2042K bytes)
6 I6 M7 T$ S4 Q8 u: j* C  g4 pnum   pkts bytes target     prot opt in     out     source               destination# w/ Z/ d, Y8 ^
Chain RH-Firewall-1-INPUT (2 references)+ T' C- G. @+ i( T( s: W& x& q
num   pkts bytes target     prot opt in     out     source               destination
; |% Y  W  N) P1 C! `1        6   656 ACCEPT     all      lo     *       ::/0                 ::/0
& w# p$ s0 |, s* s2    37519 2730K ACCEPT     icmpv6    *      *       ::/0                 ::/0
9 I% T* h, U. v% Q3        0     0 ACCEPT     esp      *      *       ::/0                 ::/0* b* h* d# @9 v  M- y
4        0     0 ACCEPT     ah       *      *       ::/0                 ::/0
; Z6 @& H. X0 g5      413 48385 ACCEPT     udp      *      *       ::/0                 ff02::fb/128       udp dpt:5353
9 {2 V+ R5 N, a; Y" R: e5 {6        0     0 ACCEPT     udp      *      *       ::/0                 ::/0               udp dpt:631
4 u& P5 d+ [6 U2 g7        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:631
6 s$ G3 [0 ^6 O' T- ?. f; u8      173 79521 ACCEPT     udp      *      *       ::/0                 ::/0               udp dpts:32768:61000
2 J( ~$ w4 y+ v( }9        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpts:32768:61000 flags:!0x16/0x02
+ D; ~( @' h8 M. X& {) J6 C10       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:22
" V. l) s% U; C+ T6 N2 S0 [' {* r11       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:80- M  z, U$ Y3 X
12       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:53- ?4 n3 q# n5 [
13    4108  380K ACCEPT     udp      *      *       ::/0                 ::/0               udp dpt:53
5 L2 x* h/ o2 [1 U& `0 z14      18  4196 REJECT     all      *      *       ::/0                 ::/0
, u8 G$ Y. o' O" TIPv6 私有 IP¶
/ [. b+ U0 E+ l$ P  NIPv4 通常默认即可保护内部局域网私有 IP 上的主机(RFC 1918)。但是 IPv6 的地址非常丰富,不再需要使用类似 NAT 等协议的私有网络。这样一来,所有的内部主机都可以拥有公网 IP 而直接连接到互联网,也就同时暴露于互联网上的各种威胁之中了。那么,如何配置 IPv6 防火墙使其默认将除了 ping6 请求之外的所有输入数据包都丢弃呢?
2 G: V4 n2 R4 Z- a. I6 A* F& n; l1 X7 W6 d
不过,可以使用FC00::/7 前缀来标识本地 IPv6 单播地址。
+ Z) b/ K, Y- c  w3 S* W* l  r
, _5 ?9 g+ t+ @% E0 j自动配置 IPv6 防火墙示例脚本¶
! {( P6 Z0 t7 T  b  o与处理 IPv4 防火墙类似,我们除了可以通过直接编辑 ip6tables 的保存文件来配置防火墙之外,还可以使用类似下面的脚本来自动执行配置过程。3 O, u  y( F# U
0 V7 O7 [* K0 Y  g
#!/bin/bash( A* z' ?9 J3 K0 m( s
IPT6="/sbin/ip6tables"
0 \7 h- i8 L, a  rPUBIF="eth1"4 D9 B: d/ s' d1 d
echo "Starting IPv6 firewall..."
  w& `: t& F' J. D$IPT6 -F; R- q+ X( d+ ]- d8 o9 L
$IPT6 -X
$ q0 Q$ o  U  n$IPT6 -t mangle -F* x# H. f( ~: z+ {
$IPT6 -t mangle -X4 ?1 u$ m( k8 I/ ^" ?9 J
3 V: d5 _/ f1 F4 q* q9 q$ d( {
#unlimited access to loopback$ K6 }9 M; A2 |0 A+ `" o
$IPT6 -A INPUT -i lo -j ACCEPT
7 m0 ^& ~, f" d2 D. S$IPT6 -A OUTPUT -o lo -j ACCEPT
7 j+ @" Y; q) g0 n
3 I) A, ~6 \0 v4 O! B' r3 w0 j6 \# DROP all incomming traffic# G8 g5 l. ^$ L: T" a
$IPT6 -P INPUT DROP
8 R) y3 a1 N+ ]& \8 |, B$IPT6 -P OUTPUT DROP
2 V3 o( o2 x3 c8 `4 V" R$IPT6 -P FORWARD DROP
+ g1 ]$ L5 i5 ^
( S. \7 F0 G6 i$ I) _% n% q* B9 J# Allow full outgoing connection but no incomming stuff
) t3 O+ K2 p# b; H! p% `$IPT6 -A INPUT -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT  \6 E5 R4 t& g, v- a5 N9 t) f
$IPT6 -A OUTPUT -o $PUBIF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT& t. Q3 ~4 M6 W* Y$ q. r! C" w  N1 z

$ C* K" U3 G! y3 c/ ^# allow incoming ICMP ping pong stuff
0 i2 z" a6 K' r$IPT6 -A INPUT -i $PUBIF -p ipv6-icmp -j ACCEPT
  N2 K3 T$ i, f( p! l$ Q+ I$IPT6 -A OUTPUT -o $PUBIF -p ipv6-icmp -j ACCEPT
7 q1 S5 s* R& Q; _5 P7 [7 w) ~
+ m& }. j4 I% g$ d+ [4 d; v############# START 在下面添加上自己的特殊规则 ############
9 }/ ]( r& Q, V! p3 P2 y# c2 @5 C### open IPv6  port 80
* `* ], ?3 ]9 Q  x" j4 B$ u& B5 p1 I* U) o#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 80 -j ACCEPT
6 F* }  B! O# k/ g/ N### open IPv6  port 22
1 V# m9 i* R- w#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 22 -j ACCEPT
$ w! S& _: O: S" q: D### open IPv6  port 25$ ?' U! M! E8 q9 U) e/ {/ N6 d
#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 25 -j ACCEPT  b) Q. m6 C8 \7 j) Z
############ END 自己特殊规则结束 ################
( ?6 \+ S9 w' M5 v3 Q7 x) a
* L! C" J# @9 V/ W1 c4 ^- \$ o" [#### no need to edit below ###
) k7 r- j! o; z( X2 i# log everything else5 a9 e1 d7 t% R9 r- F2 E! R
$IPT6 -A INPUT -i $PUBIF -j LOG6 J+ o& S) _; B' f. q) f2 [6 Z
$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, 2026-6-17 13:09 , Processed in 0.052007 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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