ip6tables命令


ip6tables命令
ip6tables命令和iptables一樣,都是linux中防火牆軟件,不同的是ip6tables采用的TCP/ip協議為IPv6。
常用語法
語法

ip6tables(選項)
選項
-t<表>:指定要操縱的表;
-A:向規則鏈中添加條目;
-D:從規則鏈中刪除條目;
-i:向規則鏈中插入條目;
-R:替換規則鏈中的條目;
-L:顯示規則鏈中已有的條目;
-F:清楚規則鏈中已有的條目;
-Z:清空規則鏈中的數據包計算器和字節計數器;
-N:創建新的用戶自定義規則鏈;
-P:定義規則鏈中的默認目標;
-h:顯示幫助信息;
-p:指定要匹配的數據包協議類型;
-s:指定要匹配的數據包源ip地址;
-j<目標>:指定要跳轉的目標;
-i<網絡接口>:指定數據包進入本機的網絡接口;
-o<網絡接口>:指定數據包要離開本機所使用的網絡接口。
-c<計數器>:在執行插入操作(insert),追加操作(append),替換操作(replace)時初始化包計數器和字節計數器。

 

實例

在命令行窗口輸入下面的指令就可以查看當前的 IPv6 防火牆配置:

ip6tables -nl --line-numbers
 
/etc/sysconfig/ip6tables文件
使用編輯器編輯/etc/sysconfig/ip6tables文件:
vi /etc/sysconfig/ip6tables

 

可能會看到下面的默認 ip6tables 規則:

*filter
:INPUT accept [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d ff02::fb -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 32768:61000 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 32768:61000 ! --syn -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j reject --reject-with icmp6-adm-prohibited
COMMIT

 

與 IPv4 的 iptables 規則類似,但又不完全相同。
要開啟 80 端口(HTTP 服務器端口),在 COMMIT 一行之前添加如下規則:

-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT

 

-p tcp表示僅針對 tcp 協議的通信。--dport指定端口號。
要開啟 53 端口(DNS 服務器端口),在 COMMIT 一行之前添加如下規則:

-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT

 

同時針對 tcp 和 udp 協議開啟 53 端口。
要開啟 443 端口,在 COMMIT 一行之前添加如下規則:

-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT

 

要開啟 25 端口(SMTP 郵件服務器端口),在 COMMIT 一行之前添加如下規則:

-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT

 

對於那些沒有特定規則與之匹配的數據包,可能是我們不想要的,多半是有問題的。我們可能也希望在丟棄(DROP)之前記錄它們。此時,可以將最后一行:

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
COMMIT
改為:
-A RH-Firewall-1-INPUT -j LOG
-A RH-Firewall-1-INPUT -j DROP
COMMIT
 
保存並關閉該文件。然后重新啟動 ip6tables 防火牆:
# service ip6tables restart

 

然后重新查看 ip6tables 規則,可以看到如下所示的輸出:

# ip6tables -vnL --line-numbers

 

輸出示例:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1    42237 3243K RH-Firewall-1-INPUT  all      *      *       ::/0                 ::/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 RH-Firewall-1-INPUT  all      *      *       ::/0                 ::/0
Chain OUTPUT (policy ACCEPT 12557 packets, 2042K bytes)
num   pkts bytes target     prot opt in     out     source               destination
Chain RH-Firewall-1-INPUT (2 references)
num   pkts bytes target     prot opt in     out     source               destination
1        6   656 ACCEPT     all      lo     *       ::/0                 ::/0
2    37519 2730K ACCEPT     icmpv6    *      *       ::/0                 ::/0
3        0     0 ACCEPT     esp      *      *       ::/0                 ::/0
4        0     0 ACCEPT     ah       *      *       ::/0                 ::/0
5      413 48385 ACCEPT     udp      *      *       ::/0                 ff02::fb/128       udp dpt:5353
6        0     0 ACCEPT     udp      *      *       ::/0                 ::/0               udp dpt:631
7        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:631
8      173 79521 ACCEPT     udp      *      *       ::/0                 ::/0               udp dpts:32768:61000
9        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpts:32768:61000 flags:!0x16/0x02
10       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:22
11       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:80
12       0     0 ACCEPT     tcp      *      *       ::/0                 ::/0               tcp dpt:53
13    4108  380K ACCEPT     udp      *      *       ::/0                 ::/0               udp dpt:53
14      18  4196 REJECT     all      *      *       ::/0                 ::/0

 

 

IPv6 私有 IP
IPv4 通常默認即可保護內部局域網私有 IP 上的主機。但是 IPv6 的地址非常豐富,不再需要使用類似 NAT 等協議的私有網絡。這樣一來,所有的內部主機都可以擁有公網 IP 而直接連接到互聯網,也就同時暴露於互聯網上的各種威脅之中了。那么,如何配置 IPv6 防火牆使其默認將除了 ping6 請求之外的所有輸入數據包都丟棄呢?可以使用 FC00::/7 前綴來標識本地 IPv6 單播地址。
IPv6的特殊地址(本地單播地址):
   鏈路本地地址和唯一本地地址都屬於本地單播地址,在IPv6中,本地單播地址就是指本地網絡使用的單播地址,也就是IPV4地址中局域網專用地址。每個接口上至少要有一個鏈路本地單播地址,另外還可分配任何類型(單播、任播和組播)或范圍的IPv6地址。
(1)  鏈路本地地址(FE80::/10): 僅用於單個鏈路(鏈路層不能跨VLAN),不能在不同子網中路由。結點使用鏈路本地地址與同一個鏈路上的相鄰結點進行通信。例如,在沒有路由器的單鏈路IPv6網絡上,主機使用鏈路本地地址與該鏈路上的其他主機進行通信。
(2)  唯一本地地址(FC00::/7): 唯一本地地址是本地全局的,它應用於本地通信,但不通過Internet路由,將其范圍限制為組織的邊界。
ip6tables的nat轉發
1.常用命令
 顯示nat表規則:
  ip6tables -t nat -nL
 顯示編號:
  ip6tables -t nat -nL --line-number
 刪除對應編號:
  ip6tables -t nat  -D PREROUTING 1
  ip6tables -t nat  -D POSTROUTING 1
  添加轉發規則:
  ip6tables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to [本地IPv6地址]:8999  
  ip6tables -t nat -I POSTROUTING -p tcp --dport 8999 -j MASQUERADE
 
  注:SNAT,DNAT,MASQUERADE都是NAT,MASQUERADE是SNAT的一個特例。
  SNAT是指在數據包從網卡發送出去的時候,把數據包中的源地址部分替換為指定的IP,這樣,接收方就認為數據包的來源是被替換的那個IP的主機。
  MASQUERADE是用發送數據的網卡上的IP來替換源IP,因此,對於那些IP不固定的場合,比如撥號網絡或者通過dhcp分配IP的情況下,就得用MASQUERADE。
2.可能遭遇的問題:
  數據包進入PREROUTE鏈后,修改完DNAT,但未轉發到POSTROUTE臉。
  解決方案:開啟內核forward轉發
  查看:sysctl -a |grep ipv6 |grep forward
修改: sysctl -w net.ipv6.conf.all.forwarding=1
 
允許特定的 ICMPv6 通信
使用 IPv6 的時候需要允許比 IPv4 更多類型的 ICMP 通信以保證路由和 IP 地址自動配置等功能正常工作。有時候,如果你的規則設置太過苛刻,可能都無法分配到正確的 IPv6 地址。當然,不使用 DHCP 而是手動配置 IP 地址的除外。
下面是一些比較常見的 ipv6-icmp 配置實例:
:ICMPv6 - [0:0]
# Approve certain ICMPv6 types and all outgoing ICMPv6
# http://forum.linode.com/viewtopic.php?p=39840#39840
-A INPUT -p icmpv6 -j ICMPv6
-A ICMPv6 -p icmpv6 --icmpv6-type echo-request -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type redirect -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 141 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 142 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 148 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 149 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 130 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 131 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 132 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 143 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 151 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 152 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 153 -s fe80::/10 -j ACCEPT
-A ICMPv6 -j RETURN
-A OUTPUT -p icmpv6 -j ACCEPT

 

Linux上的MAP66(NAT)

IPv6的NAT也不例外。MAP66是一個基本遵循RFC6296建議的Linux實現,很簡單,和IPv4的iptables一樣:
1.配置正向的轉換規則, 將源地址fdca:ffee:babe::/64網段的地址轉換為2008:db8:1::/64網段的地址
ip6tables -t mangle -A POSTROUTING -s fdca:ffee:babe::/64 -o eth2 -j MAP66--src-to 2008:db8:1::/64
可以看出,沒有顯式指定任何具體地址,類似IPv4的MASQUERADE和IPv4的IP Pool,原理詳見第5節。
2.配置反向包的轉換規則,將正向包被轉換過的地址再轉換回去
ip6tables -t mangle -A PREROUTING -d 2008:db8:1::/64 -i eth2 -j MAP66 --dst-to fdca:ffee:babe::/64
可以看出,也沒有顯式指定任何具體的地址,更值得一提的是,內核並不維護任何關於NAT映射的信息,因此MAP66也不再依賴ip(6)_conntrack。
    如果使能上述兩條規則,ping一下對端地址,tcpdump抓包的結果如下:
 
IPv6一對一映射:
ip6tables -t nat -A PREROUTING -d 2001::4/128 -j DNAT --to-destination fd01::2002:3a4b:2aff:fee8:2
ip6tables -t nat -A POSTROUTING -s fd01::2002:3a4b:2aff:fee8:2/128 -o eth2 -j SNAT --to-source 2001::4/128
待映射的IPv6地址:2001::4/128
映射后的IPv6地址:fd01::2002:3a4b:2aff:fee8:2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM