https://docs.openstack.org/zh_CN/user-guide/cli-nova-configure-access-security-for-instances.html html
好不容易安裝好了OpenStack,發現沒法ping通instance,沒法ssh到instance:數據庫
最後折騰了半天發現是security group的問題:安全
Neutron 默認的安全組規則會禁止掉全部從外面訪問 instance 的流量。網絡
本節咱們會修改安全組的配置,容許 ping 和 ssh instance。
有兩種方法能夠達到這個目的: ssh
1. 修改 「default」 安全組。 2. 爲 cirros-vm1 添加新的安全組。 tcp
1、什麼是安全組ide
安全組,翻譯成英文是 security group。安全組是一些規則的集合,用來對虛擬機的訪問流量加以限制,這反映到底層,就是使用iptables,給虛擬機所在的宿主機添加iptables規則。工具
能夠定義n個安全組,每一個安全組能夠有n個規則,能夠給每一個實例綁定n個安全組,nova中老是有一個default安全組,這個是不能被刪除的。建立實例的時候,若是不指定安全組,會默認使用這個default安全組。ui
如今nova中安全組應該會移到quantum中,而且會增長對虛擬機外出流量的控制。如今nova中的安全組只是對進入虛擬機的流量加以控制,對虛擬機外出流量沒有加以限制。加密
https://docs.openstack.org/zh_CN/user-guide/cli-nova-configure-access-security-for-instances.html
當你啓動一個虛擬機,你能夠注入*key pair*,它爲你的實例提供了SSH訪問路徑。爲了能運行,鏡像必須包含’cloud-init’包
你能夠爲每一個項目至少建立一個密鑰對。你能夠在項目所屬的多個實例上使用該密鑰對。若是你使用外部工具生成密鑰對,那麼你能夠將它導入到OpenStack。
一個密鑰對屬於獨立用戶而不屬於項目。要想在多個用戶中共享密鑰,那麼每一個用戶須要導入該密鑰對。
若是鏡像使用一個靜態根密碼或者靜態密鑰集(都不推薦),那麼當你啓動實例的時候就不必提供一個密鑰。
一個*安全組*是一個被命名爲網絡訪問規則的集合,安全組被用來限制訪問實例流量的類型。當你啓動一個實例時,你能夠爲它指定一個或多個安全組。若是你沒有建立安全組,那麼新實例會自動分配一個默認安全組,除非你明確指定一個不一樣的安全組。
每一個安全組中的關聯*規則*控制着組中訪問實例的流量。任何進入的流量與規則不匹配將會默認被拒絕。你能夠在安全組中添加或刪除規則,而且能夠修改默認的或任何其餘安全組中的規則。
你能夠修改安全組中的規則來容許經過不一樣的端口和協議訪問實例。好比,你能夠爲實例上運行的DNS修改規則來容許經過SSH訪問實例,ping通實例或者容許UDP流量。你能夠爲規則指定如下參數。
規則在新建或者修改以後實時生效
你能夠生成一個祕鑰對或上傳一個現有的公鑰
要生成一個密鑰對,運行如下命令。
$ openstack keypair create KEY_NAME > MY_KEY.pem
這個命令生成一個你指定名爲KEY_NAME的祕鑰對,將私鑰寫入指定的」.pem」文件裏,且爲Nova數據庫註冊公鑰。
運行如下命令,設置」.pem」的權限爲只有你本人可讀寫。
$ chmod 600 MY_KEY.pem
若是你已經生成一個密鑰對且公鑰位於」~/.ssh/id_rsa.pub」裏面,那麼運行如下命令上傳公鑰。
$ openstack keypair create --public-key ~/.ssh/id_rsa.pub KEY_NAME
該命令將公鑰記錄在Nova數據庫裏且密鑰對的名字命名爲你指定的「KEY_NAME」。
爲確保密鑰對成功導入,將密鑰對像如下這樣列出:
$ openstack keypair list
列出當前項目的安全組,包括說明,輸入如下命令:
$ openstack security group list
要建立有指定名稱和描述的安全組,則輸入如下命令:
$ openstack security group create SECURITY_GROUP_NAME --description GROUP_DESCRIPTION
要刪除指定的組,請輸入如下命令:
$ openstack security group delete SECURITY_GROUP_NAME
您不能刪除一個項目的默認安全組。並且您也不能刪除已經指定給正在運行的實例的安全組。
使用命令:command:openstack security group rule`修改安全組規則。開始以前,使用source命令執行OpenStack RC文件。更多細節,參考:doc:../common/cli-set-environment-variables-using-openstack-rc`。
要列出安全組規則,則運行如下命令:
$ openstack security group rule list SECURITY_GROUP_NAME
要容許SSH訪問實例,則要選擇如下項中的其中一項:
容許全部IP訪問,指定IP子網 CIDR爲``0.0.0.0/0``:
$ openstack security group rule create SECURITY_GROUP_NAME \ --protocol tcp --dst-port 22:22 --remote-ip 0.0.0.0/0
僅容許訪問來自其餘安全組(源組)的IP地址訪問指定的端口:
$ openstack security group rule create SECURITY_GROUP_NAME \ --protocol tcp --dst-port 22:22 --remote-group SOURCE_GROUP_NAME
要容許ping通實例,選擇如下項中的其中一項:
容許全部IP訪問,指定IP子網 CIDR爲``0.0.0.0/0``。
$ openstack security group rule create --protocol icmp \ SECURITY_GROUP_NAME
這容許訪問全部代碼和全部ICMP的流量。
只容許其餘安全組(源組)的成員ping 通雲主機。
$ openstack security group rule create --protocol icmp \ --remote-group SOURCE_GROUP_NAME SECURITY_GROUP
爲了容許訪問UDP端口,好比容許訪問一臺虛擬機上面的DNS服務,選擇如下選項:
容許IP地址UDP訪問,以CIDR的方式指定IP網段爲``0.0.0.0/0``。
$ openstack security group rule create --protocol udp \ --dst-port 53:53 SECURITY_GROUP
只容許來自其餘安全組(源組)的IP地址訪問指定的端口。
$ openstack security group rule create --protocol udp \ --dst-port 53:53 --remote-group SOURCE_GROUP_NAME SECURITY_GROUP
要刪除一個安全組規則,請指定規則ID。
$ openstack security group rule delete RULE_ID
511 openstack keypair create mykey >mykey.pem
515 chmod 600 mykey.pem
517 openstack keypair list
538 openstack security group rule create 83da1f44-482d-4d9c-90dd-fc081b5756b7 --protocol tcp --dst-port 22:22 --remote-ip 0.0.0.0/0 541 openstack security group rule list 83da1f44-482d-4d9c-90dd-fc081b5756b7 542 openstack security group rule create --protocal icmp --remote-ip 0.0.0.0/0 543 openstack security group rule create --protocal icmp --remote-ip 0.0.0.0/0 83da1f44-482d-4d9c-90dd-fc081b5756b7 544 openstack security group rule create --protocol icmp --remote-ip 0.0.0.0/0 83da1f44-482d-4d9c-90dd-fc081b5756b7