close

 

AWS Security group

廢言

AWS其實本身就算是系統管理的一部份,如果把程式設計師(Programmer)和管理資訊系統(MIS)二邊跟AWS作比較,AWS是偏向MIS那一邊的,

不過在台灣,老闆們才不會管那麼多,只會認為,那個不是你們(Programmer)的專業嗎?所以我們(Programmer)只好鼻子摸摸,自己想辦法處理了。

前面廢話那麼多,其實理由很簡單,因為這個AWS的Security group功能,會牽扯到網路概論,以一個WEB工程師的工作範疇來說,完完全全是MIS要負責的了,

但是工作嘛,你懂的,所以我們來談談這個Security group到底在幹什麼吧。

 

AWS Security group 功能

Security group的功能很簡單,他只是限定某個特定的IP、Port或是某範圍的IP、Port,限定這些東西能不能進出,可以把它視為一道非常簡單的防火牆,

設定完Security group後,再套用到某些機器上,來限制跟這台機器有關的網路進出,這就是Security group的功能。

 

AWS Security group的費用

Security group完全是免費的,所以大家可以不用擔心設定錯誤造成費用的產生,不過網路本身是必須收費的,所以一個好的Security group設定,可以幫助我們降低不當的網路流量所產成的費用。

 

設定AWS Security group

瞭解了Security group的設定後,我們可以來看一下Security group的設定介面:

首先我們來看一下

上方四個頁籤,最左邊的Description與最右邊的Tags,都是針對這一個Security group的設定,用來輔助使用者認出這個Security group而已,並沒有特別要講解的部份,而中間的

  Inbound:是針對網路可進來的部份,也就是我們的伺服器要對外開放的部份。

  Outbound:是針對網路可出去的部份,也就是我們的伺服器可否對外連線部份,通常不會限制。

再來是每一列所代表的意義:

  Type:AWS有設定好一些特定的Port來幫助我們快速設定,例如:MySQL的Port是3306之類的,如果不在AWS設定的範圍內的話,就要自行設定了。

  Protocol:基本上只有三種 ALL、TCP、UDP,ALL就是TCP+UDP,不過這一欄都是系統幫忙設定,我們可以不用太去在意。

  Port Range:顧名思義,這欄是用來設定可以開放的Port範圍,可以指定單一Port,或是連續的Port,例如:0-65535。

  Source:設定來源端的IP,也就是說我們可以設定特定的IP來限制誰才能進來訪問我們的伺服器。

我們上面看了那麼多,其實重點在最後這一項,也就是這個Source到底要怎麼去設定呢? 0.0.0.0/0 又代表著什麼?

在繼續說明之前,有一件事是讀者必須先懂的,那就是子網路遮罩的計算。

 

子網路遮罩與計算

在之前大學時代很流行的「網路芬鄰」,將檔案分享在宿舍網路上,同學們便連線過來抓資料,不過,也會有找不到同學電腦的情況,此時會有一些疑問,究竟為什麼某些同學的電腦永遠都找不到?

其實網路芬鄰的功能很簡單,他們幫我們掃瞄所有相同網段的電腦,讓我們更方便連到同一網段的電腦來存取該台電腦的資料。

換句話說,不同網段的電腦,就不會出現在網路芬鄰裡了。那麼,網段又是什麼?

網段

按字面意義來說,就是將網路切成一段一段,至於切分的方法,就要去看看我們的IP與netmask(網路遮罩)這兩者的運算了,以下方一個範例:

電腦A的IP位置為

  192.168.43.215

電腦A的子網路遮罩為

  255.255.255.0

至於網段的運算,即是將這二者進行AND的運算,我們先在運算前,將所有數字轉為二進位:

  192.168.43.215 → 11000000 . 10101000 . 00101011 . 11010111

  255.255.255.0 →   11111111 . 11111111 . 11111111 . 00000000

將二者進行AND運算

  192.168.43.0 → 11000000 . 10101000 . 00101011 . 00000000

簡單來看,遇到255的數字,AND之後會等同原來的數字,而遇到0的數字,則運算後會變為0,所以這台電腦運算後得出的數字就是192.168.43.0,這一串數字可以做什麼呢?這一串數字單獨存在是沒有意義的,而是要跟另外一台電腦來比較,假設電腦B的

  IP:192.168.43.222

  遮罩:255.255.255.0

根據剛剛的運算方式,可以得出電腦B的網段是192.168.43.0,留心一下的話,可以發現電腦A計算出來的數值跟電腦B算出來的數值是一樣的,換句話說:電腦A與電腦B是在同一個網段上

假設電腦C的

  IP:192.168.100.222

  遮罩:255.255.255.0

所以電腦C的網段是192.168.100.0,也就是說,電腦C與電腦A在不同的網段上,所以電腦C並不會出現在電腦A的網路芬鄰中。

 

CIDR

回到我們所看到的,在Security group中的設定,0.0.0.0/0,這個數值是有一個特定意義的,斜線的左方是IP,右方是子網路遮罩,這一串文字有一個特定的名詞:Classless Inter-Domain Routing,簡稱CIDR,有興趣的人可以上線搜尋,這邊要談的是怎麼分解這一串數值。

我們先來看一下172.16.1.1/20要分解為IP與遮罩:

  IP:172.16.1.1

  遮罩:20 (?)

IP我們可以理解,但遮罩0要怎麼運算呢?拆解這個遮罩數值是有技巧的,首先這個遮罩是必須是0~32的其中一種數值,再來我們將網路遮罩中的IP分為

  第一段 . 第二段 . 第三段 . 第四段

這樣子的東西,之後將這個數值取走8,可以取出來數值即是第一段的數值,以此例來說,遮罩的20要取出8,因為取出來不是問題,所以取出來的數值是8,而這個8會變成第一段的數字,變成:

  8 . 第二段 . 第三段 . 第四段

第二段會由第一段取出後剩下的數字,也就是12,12取出8也不是問題,所以第二段也是8:

  8 . 8 . 第三段 . 第四段

第三段由於剩下4,所以只能取出4,而這個4就給第三段,第四段只能是0了,所以最後的網路遮罩會變成:

  8 . 8 . 4 . 0

這裡要注意一點的是,這一串並不是IP,要轉成IP前還需要一個步驟,那就是根據這個數值,來填入1,而且是左邊開始填入,第一段的數字8,代表要填入8個1,第三段的4,代表要填入4個1,而且是由左邊開始填入,所以最後會變為:

  11111111 . 11111111 . 11110000 . 00000000  → 255.255.240.0

回頭來看172.16.1.1/20這個數值,會變成:

  IP:172.16.1.1

  遮罩: 255.255.240.0

所以網段會變成172.16.0.0,我們已經算出這個數字代表的網段了,但是依剛剛的經驗,單一個網段是沒有意義的,所以我們來假設有一台電腦A的IP為172.16.41.211,要連入我們的伺服器,此時我們計算它的網段是不是我們符合我們的網段,而網路遮罩則是使用20這個數字,也就是255.255.240.0:

  IP:172.16.15.211

  遮罩: 255.255.240.0

我們直接用計算機來算吧,所以得到的網段是172.16.0.0,計算出來的網段與172.16.1.1/20計算出來的網段相同,所以電腦A可以通過Security group;假設電腦B的IP是:172.16.16.211,所以:

  IP:172.16.16.211

  遮罩: 255.255.240.0

算出來的網段是172.16.16.0,所以電腦B會被Security gruop擋下,無法連線我們的伺服器。

 

特殊的CIDR

看到這邊,我相信讀者已經大概瞭解了Security group中的CIDR設定,不過這其中有幾個比較特殊的,我們再拿出來說明:

  • 限定單一IP

限定單一IP的CIDR很簡單,只要把子網路遮罩設為255.255.255.255,寫成CIDR就是32,例如:1.2.3.4/32,這樣的數值,在這個範例中運算出來的網段即是1.2.3.4,所以假設有一台電腦IP是1.2.3.5,這樣在255.255.255.255的遮罩下運算出來的網段也是1.2.3.5,所以這台電腦無法通過Security group的設定,只有IP是1.2.3.4的電腦才能通過1.2.3.4/32的設定,通常這種設定用在SSH連入EC2時,只開放公司的IP才能透過SSH的方式連入。

  • 不限IP

另外一種特殊的CIDR就是不限IP,不限IP也很簡單,只要把子網路遮罩設為0.0.0.0即可,寫成CIDR就是0,例如:1.2.3.4/0,因為不管任何IP,透過0.0.0.0的子網路遮罩運算出來的網段都是0.0.0.0,所以也就是開放所有IP的意思。

 

結論

真心覺得,台灣的工程師還真不簡單,不單單是本職的工程師(Programmer)專業,連非本職的MIS專業也得多少懂一點,不然還真難混,大家真是辛苦了。

arrow
arrow

    JAVA Programmer 發表在 痞客邦 留言(1) 人氣()