找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17405|回复: 1

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

[复制链接]
发表于 2013-3-25 21:39:59 | 显示全部楼层 |阅读模式
Ip6tables 是 Linux 核心中用于设置、维护和检测 IPv6 包的过滤规则的程序。使用中请注意 IPv4 版的是 iptables,而 IPv6 版的是 ip6tables。
3 W$ @& W* v( j4 k! q( j+ }9 n) Q+ ^+ Q) H+ v5 u
在命令行窗口输入下面的指令就可以查看当前的 IPv6 防火墙配置:# j4 D* u# Z( H! ~
ip6tables -nL --line-numbers
8 {5 L- s3 G5 |9 N# d
1 q# Y% S4 d' t( @; ^0 S" Y; F+ a使用编辑器编辑 /etc/sysconfig/ip6tables 文件:
  Q6 ?- V: G& K5 _
3 Q' ]5 s6 w& e* X4 e  E4 c# vi /etc/sysconfig/ip6tables
3 Z! [" W) h0 ?可能会看到下面的默认 ip6tables 规则:(不同ip6table版本RH-Firewall-1-INPUT可能不通用请用INPUT替换)
. Z" Y$ }. [5 c+ a& q*filter  D0 S( b1 f, T$ W3 ~# i) g
:INPUT ACCEPT [0:0]
2 w% j3 {$ `2 m! H: o8 a7 k# X:FORWARD ACCEPT [0:0]+ e6 _- r9 _* `& E. ]& P, g
:OUTPUT ACCEPT [0:0]  B4 J. Q' \6 i6 q* }. u
:RH-Firewall-1-INPUT - [0:0]
4 D4 Y5 u7 [9 B5 K( X3 C+ V- o-A INPUT -j RH-Firewall-1-INPUT
! T% h' o! S8 l-A FORWARD -j RH-Firewall-1-INPUT" v" m) z; P2 m
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
- _1 R1 q( V2 @" A: L" ?. V-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
8 q7 {5 i/ X: O; w-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
  g; l$ ?9 [, v( [3 s3 n" r-A RH-Firewall-1-INPUT -p 51 -j ACCEPT7 a! o0 L3 _$ B* k) ]' Z- j
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d ff02::fb -j ACCEPT3 {9 S, \' T! k1 b
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
+ J* i1 f. u$ I9 n7 \-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT& K/ d: }! V+ a
-A RH-Firewall-1-INPUT -p udp -m udp --dport 32768:61000 -j ACCEPT
  U8 k' ^+ o1 p-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 32768:61000 ! --syn -j ACCEPT
  v7 X2 T3 W% p  t: j) `-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 22 -j ACCEPT
/ s  u- U6 u+ X( s- u! n# R7 P6 n-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited- `. C, E3 Z% z# |3 m/ }+ B0 Z% E
COMMIT1 C1 m, x4 m& |" X& P0 a* ?
与 IPv4 的 iptables 规则类似,但又不完全相同。0 I, y( ^. w# u
* m# t8 h3 |  q! N4 i
要开启 80 端口(HTTP 服务器端口),在 COMMIT 一行之前(准确说应该是在默认操作之前,下同)添加如下规则:
( q7 U  Y1 b) t; Y6 M+ \7 P  V1 I
3 }0 x4 y! K8 i' O+ O-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT
$ n& \( j$ m, a7 _! W& J1 E-p tcp 表示仅针对 tcp 协议的通信。–dport 指定端口号。) q2 M. Q0 {0 c

0 E  c" E8 M& r要开启 53 端口(DNS 服务器端口),在 COMMIT 一行之前添加如下规则:  f$ w' e/ ]: j
- R+ t# ?& o% J5 f" G- b
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT
6 H% G" _# A6 a-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT7 `! B: o) V0 ~5 }9 K4 E" o/ D& v# }
同时针对 tcp 和 udp 协议开启 53 端口。
8 d/ f5 `; Q/ Y' \2 k: E( Y& a
# u2 p' c* B& C' K! k! w* G1 h要开启 443 端口(HTTPS 加密连接服务器端口),在 COMMIT 一行之前添加如下规则:7 T, C) g! X" d+ f( v

* Y. q! X, ^1 ~' D# W' V! ?0 Y1 u" _8 r-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT
; R/ ]* W3 ~% Z7 X6 r3 r5 q要开启 25 端口(SMTP 邮件服务器端口),在 COMMIT 一行之前添加如下规则:
4 M; h* W, W* A) h3 J+ E) l  Z) b6 c9 W/ |
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT
) ~( |$ L5 ?) l, T  D对于那些没有特定规则与之匹配的数据包,可能是我们不想要的,多半是有问题的。我们可能也希望在丢弃(DROP)之前记录它们。此时,可以将最后一行:3 w4 i& W) j$ v+ X
/ j2 ^  {5 R8 }' ~) `% h; v$ F: {
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
( U0 S" a+ r6 v9 GCOMMIT3 T% x2 C9 w1 P+ r. n) n0 ?/ G
改为:9 J, `# J' z1 e9 j6 s9 }
3 I3 w9 Y3 j# M# x, @( r% ^
-A RH-Firewall-1-INPUT -j LOG
1 x/ r* s' g2 [' `* p6 q-A RH-Firewall-1-INPUT -j DROP# q) e6 M7 J! j$ W
COMMIT. G" ]; A. m9 t" C4 ~! O* c
保存并关闭该文件。然后重新启动 ip6tables 防火墙:
6 x1 g6 E9 k( N5 g- O. u6 m8 K" H- l5 O2 v% t$ z" E
# service ip6tables restart6 _) q- C7 d7 ~# C& l* L; ^/ ]9 u2 y
然后重新查看 ip6tables 规则,可以看到如下所示的输出:8 W* H$ A; Z' s( a

9 y; t3 l0 H5 Y5 J# ip6tables -vnL --line-numbers
7 A1 z3 t& l4 b; i输出示例:
* F4 m" ]% N. d$ N( c. q: D4 X' @& b
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
+ z  E7 |3 j) c$ V' U$ rnum   pkts bytes target     prot opt in     out     source               destination7 X% s9 T, g+ l6 M6 o* f
1    42237 3243K RH-Firewall-1-INPUT  all      *      *       ::/0                 ::/0
  ]* ]- e! p/ H& ^0 t  QChain FORWARD (policy ACCEPT 0 packets, 0 bytes)3 S" ]. i( N2 y1 {
num   pkts bytes target     prot opt in     out     source               destination
. I8 J' s4 [7 a* [- T1        0     0 RH-Firewall-1-INPUT  all      *      *       ::/0                 ::/05 [' i5 i/ X, ?& ?% P: J2 B
Chain OUTPUT (policy ACCEPT 12557 packets, 2042K bytes)
) h$ F5 c3 t+ [7 O( P3 `num   pkts bytes target     prot opt in     out     source               destination: ]5 C1 c: D. m* A! Q
Chain RH-Firewall-1-INPUT (2 references)  k9 ^- B  k6 V" R$ S1 ^
num   pkts bytes target     prot opt in     out     source               destination0 X, B) {- G" I- w5 [
1        6   656 ACCEPT     all      lo     *       ::/0                 ::/0
; q$ f% K# g1 h  A  p) _2    37519 2730K ACCEPT     icmpv6    *      *       ::/0                 ::/0& _" k4 u) c( X0 |4 O+ r6 q
3        0     0 ACCEPT     esp      *      *       ::/0                 ::/0) H; V! ~7 I' `% k+ ]9 X0 _
4        0     0 ACCEPT     ah       *      *       ::/0                 ::/00 ~8 p$ u% H/ z3 C' r; Q( a; u2 M* {
5      413 48385 ACCEPT     udp      *      *       ::/0                 ff02::fb/128       udp dpt:5353
( a$ H' s+ y- F+ Y. k7 D  S1 g* Q6        0     0 ACCEPT     udp      *      *       ::/0                 ::/0               udp dpt:631+ b; a2 u  r  K- I/ \& M
7        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:631
3 R2 Q8 S) I+ W8      173 79521 ACCEPT     udp      *      *       ::/0                 ::/0               udp dpts:32768:61000( L) @# n5 h1 Y3 W
9        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpts:32768:61000 flags:!0x16/0x02
5 @3 @. k3 e- r! |10       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:22
- n  y& Z5 m4 F, i2 T% ^11       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:80* k- B. C5 d5 |
12       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:53
- R7 N: \9 z. k2 Q3 d' I/ D- N13    4108  380K ACCEPT     udp      *      *       ::/0                 ::/0               udp dpt:53
8 p% |6 c4 T& `" i4 B14      18  4196 REJECT     all      *      *       ::/0                 ::/0$ q$ L1 _& X7 e6 B- j
IPv6 私有 IP¶& i1 ^9 }. q% z0 h) }; C
IPv4 通常默认即可保护内部局域网私有 IP 上的主机(RFC 1918)。但是 IPv6 的地址非常丰富,不再需要使用类似 NAT 等协议的私有网络。这样一来,所有的内部主机都可以拥有公网 IP 而直接连接到互联网,也就同时暴露于互联网上的各种威胁之中了。那么,如何配置 IPv6 防火墙使其默认将除了 ping6 请求之外的所有输入数据包都丢弃呢?
% d8 V( i3 E* H3 U4 v3 I
& N" [. s& S' t不过,可以使用FC00::/7 前缀来标识本地 IPv6 单播地址。/ v1 \! s6 @1 h+ c: {
" U: N  T1 z6 h# I
自动配置 IPv6 防火墙示例脚本¶
6 K4 g# ?/ F7 V9 D4 z- H) s与处理 IPv4 防火墙类似,我们除了可以通过直接编辑 ip6tables 的保存文件来配置防火墙之外,还可以使用类似下面的脚本来自动执行配置过程。
& n* F7 ?3 }. T9 Z* g) O5 ]- G+ }% C* V" P
#!/bin/bash
+ M8 R: T" I0 H! N/ h' S' VIPT6="/sbin/ip6tables"& S  e& \  S- U+ z
PUBIF="eth1"
5 M1 [8 e5 m" V/ @. @echo "Starting IPv6 firewall..."
  t+ U" q9 w; l$IPT6 -F
) {9 J$ ?* W3 q" V5 V$IPT6 -X
5 r: q7 s5 p7 D! m$IPT6 -t mangle -F
) G7 p( X  U( ~% D4 s$IPT6 -t mangle -X8 U+ U( D9 U2 B, m: A! R
0 t! {' o( I' g4 ?/ ^4 F
#unlimited access to loopback; E7 A/ _9 ?3 g# n6 a+ h/ S
$IPT6 -A INPUT -i lo -j ACCEPT
3 A" w* G/ [. g4 ^3 F+ R2 a$IPT6 -A OUTPUT -o lo -j ACCEPT
6 y% K: `+ f. H/ D+ N% p& k$ _+ u% P5 w
# DROP all incomming traffic
7 }4 q% f' f; q4 R7 W2 a- i: v$IPT6 -P INPUT DROP" T! t& Z) N! }' a
$IPT6 -P OUTPUT DROP
& o+ d, w/ ]% G9 k$IPT6 -P FORWARD DROP4 X( G5 K9 a, ?5 _2 F: v$ c

8 ?. P- _7 Q0 K$ h0 @# Allow full outgoing connection but no incomming stuff  |0 _4 D8 ~  H: [
$IPT6 -A INPUT -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT' S8 O; _+ ~6 y
$IPT6 -A OUTPUT -o $PUBIF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT2 L0 @$ j7 S2 C& i. V5 H* `  e. m# @
# s7 z' T8 Y: v) |% V7 E- N' b
# allow incoming ICMP ping pong stuff
7 i) ~5 ^2 r9 S$ t1 [" N4 m) m' o- k$IPT6 -A INPUT -i $PUBIF -p ipv6-icmp -j ACCEPT
3 @6 s$ {& H" O" V2 i) }( k5 [$IPT6 -A OUTPUT -o $PUBIF -p ipv6-icmp -j ACCEPT2 o& C- Y/ b6 M+ a4 G1 f* w
9 N8 _& C9 b2 _. f& s* D: Q$ K9 }0 J
############# START 在下面添加上自己的特殊规则 ############
+ n4 G0 @. P8 l& |0 M### open IPv6  port 80
% I( E- t+ A: s" c. R#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 80 -j ACCEPT; l0 F- [5 N# w
### open IPv6  port 22/ G1 T8 W' C/ g# u7 k" z
#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 22 -j ACCEPT
0 q" c* {+ g, h5 q) L### open IPv6  port 25; w3 C2 V4 ~, P9 S
#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 25 -j ACCEPT
  A: f% b8 Y! T8 j) ?5 |5 ?############ END 自己特殊规则结束 ################. s4 K' D' w/ Y9 t( N4 L. n" C. t

- d: S5 [5 H% r0 c! \2 I9 x0 V#### no need to edit below ###' M" ?  ?  u, d5 x
# log everything else
& i* E' Q: ]/ \; ~: M$IPT6 -A INPUT -i $PUBIF -j LOG8 u: t) R. g4 ~. S
$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-3-26 06:35 , Processed in 0.078758 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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