久综合色-久综合网-玖草影视-玖草资源在线-亚洲黄色片子-亚洲黄色片在线观看

Hello! 歡迎來到小浪云!


使用Linux容器迅速搭建滲透測試環境(下篇)


avatar
小浪云 2025-01-02 136

在本文的上篇中,我們為讀者介紹了如何配制宿主機和網絡,在本文篇中,我們將為讀者介紹容器的創建和啟動等內容。

創建我們的第一個容器

lxc發行版附帶了許多工具來幫助用戶創建和管理容器。第一個是lxc-create,該工具可以通過模板為各種Linux平臺創建最小化的安裝。您可以通過查看/usr/share/lxc/templates目錄來查看當前可用的模板。在我的Slackware 14.2宿主機上,我的模板目錄如下所示。

使用Linux容器迅速搭建滲透測試環境(下篇)
我可以選擇部署其中的任何一種平臺。關于如何在Linux上創建一個帶有iptables的家庭路由器,網上可用的教程數不勝數,所以這里就不贅述了,同時,我覺得很多讀者可能早就有這方面的經驗了。讀者可以在計算機上部署dhcpd和bind或dnsmasq,同時為測試環境部署DNS和DHCP。接下來要介紹的是如何設置容器——我會繼續使用Slackware,但是,讀者可以使用自己喜好的系統。
lxc-create -n router -t slackware -B Btrfs
運行上述命令,并稍等片刻以便從Web上獲取所需文件,最終會得到一個新的容器,名為“router”。就像網絡名稱一樣,我總是喜歡保持簡潔明了,所以這里也是利用角色為其命名。
當lxc-create生成目錄后,將得到/var/lib/lxc/router,其中存放與新容器關聯的所有文件。值得注意的是,它將包含兩部分內容:定義容器的配置文件,以及保存容器文件系統的rootfs控制器(實際上是Btrfs子卷,稍后將詳細介紹)。
配置的具體內容如下所示。其中用紅色標識的內容,是我修改過的;對于這些內容,將在后面分別加以介紹。

# Template used to create this container: /usr/share/lxc/templates/lxc-slackware # Parameters passed to the template: # Template script checksum (SHA-1): 1d5a84ae1fd3725be88e7d347128402c61000d19 # For additional config options, please look at lxc.container.conf(5) # Uncomment the following line to support nesting containers: #lxc.include = /usr/share/lxc/config/nesting.conf # (Be aware this has security implications) lxc.start.auto = 1 #Probably change network.0 to dhcp inside the container at some point lxc.network.0.type = phys lxc.network.0.link = eth1 lxc.network.0.name = wan lxc.network.0.flags = up lxc.network.0.ipv4 = 192.168.1.20/24 lxc.network.0.ipv4.gateway = 192.168.1.1 lxc.network.0.hwaddr=DE:AD:BE:EF:FF:FF lxc.network.1.type = veth lxc.network.1.link = lab lxc.network.1.name = lab0 lxc.network.1.flags = up lxc.network.1.ipv4 = 192.168.16.254/24 lxc.network.1.hwaddr=DE:AD:BE:EF:00:FF lxc.rootfs = /var/lib/lxc/router/rootfs lxc.rootfs.backend = Btrfs lxc.utsname = router lxc.mount = /var/lib/lxc/router/fstab #lxc.console = none lxc.tty = 4 lxc.pts = 1024 lxc.rootfs = /var/lib/lxc/router/rootfs lxc.cgroup.devices.deny = a # /dev/null and zero lxc.cgroup.devices.allow = c 1:3 rwm lxc.cgroup.devices.allow = c 1:5 rwm # consoles lxc.cgroup.devices.allow = c 5:1 rwm lxc.cgroup.devices.allow = c 5:0 rwm lxc.cgroup.devices.allow = c 4:0 rwm lxc.cgroup.devices.allow = c 4:1 rwm # /dev/{,u}random lxc.cgroup.devices.allow = c 1:9 rwm lxc.cgroup.devices.allow = c 1:8 rwm lxc.cgroup.devices.allow = c 136:* rwm lxc.cgroup.devices.allow = c 5:2 rwm # rtc lxc.cgroup.devices.allow = c 254:0 rwm # we don’t trust even the root user in the container, better safe than sorry. # comment out only if you know what you’re doing. lxc.cap.drop = sys_module mknod mac_override mac_admin sys_time setfcap setpcap # you can try also this alternative to the line above, whatever suits you better. # lxc.cap.drop=sys_admin

首先,我將lxc.start.auto改為值1。大多數安裝了LXC的系統都提供了啟動腳本,該腳本會尋找將該值等于1的容器,并在系統引導時自動啟動它們。請記住,要使其正常工作,需要預先提供所需的網橋和文件系統。
下一個修改之處是lxc.network.0.type的值——我已將其設置為“phys”,它代表物理適配器。lxc.network.0.link的值為eth1——這是我想要傳遞給容器的宿主機的第二個NIC。請注意,它將從正在運行容器的宿主機的ifconfig輸出中消失。如果我們使用上行鏈路橋接器,那么類型將是“veth”,鏈路將是“uplnk”,以將其連接到宿主機上的橋接器上。最后,該接口在容器內部的名稱為“wan”。此外,我還添加了網關和hwaddr條目,這些無需多言。就我而言,這個容器上行連接到我的家用路由器。當容器啟動時,內核將這些值作為最初值分配給接口。根據安裝的操作系統的不同,其啟動腳本之后可能會重新配置該接口,也可能不會這樣做。
為了向容器添加更多接口,只需復制lxc.network.[N]節,并根據需要增加索引[N]的值即可。但是,只能包含一個gateway語句。該路由器將提供兩個適配器。在我的實際實驗室中,路由器有10個接口。為此,只需在主機上創建網橋,并為每個網橋添加相應的lxc.network節就行了。
另外需要注意的是,hwaddr語句是可選的,但是,沒有為其賦值的話,那么容器啟動時將選擇一個隨機值。雖然這確實有助于防止MAC地址沖突,但我在測試過程中發現,這會導致容器頻繁的重啟。因為它們在每次啟動時都會創建一個唯一的MAC,所以,很快就耗盡了DHCP地址池。所以,現在為會為容器指定MAC。但是,當IP地址總是在變化時,還是會令人非常抓狂。
最后需要注意的是:網絡的lxc.network.[N].name必須與鏈接名稱(網橋)不同,但可以跨容器進行復制。例如,您可以創建一個名為lan的網橋和一個容器,并且它的網絡也名為lan,如果在多個容器中的話,這時可以將其命名為lan0。
最后一個修改之處是lxc.mount語句,它指向容器目錄中名為fstab的文件。LXC能夠理解普通的/etc/fstab格式的文件。所有路徑都應該是相對于宿主機的相對路徑。容器啟動時,它將掛載其中規定的所有文件系統。搞定路由器容器后,我將在/var/lib/lxc/router/fstab創建fstab文件。

lxcpts /var/lib/lxc/router/rootfs/dev/pts devpts defaults,newinstance 0 0 none /var/lib/lxc/router/rootfs/proc proc defaults 0 0 none /var/lib/lxc/router/rootfs/sys sysfs defaults 0 0 none /dev/shm tmpfs defaults 0 0 none /run tmpfs defaults,mode=0755 0 0 /home /var/lib/lxc/router/home none bind,ro 0 0 /etc/hosts /var/lib/lxc/router/rootfs/etc/hosts none bind,ro 0 0 /etc/networks /var/lib/lxc/router/rootfs/etc/networks none bind,ro 0 0 /etc/passwd /var/lib/lxc/router/rootfs/etc/passwd none bind,ro 0 0 /etc/group /var/lib/lxc/router/rootfs/etc/group none bind,ro 0 0 /etc/shadow /var/lib/lxc/router/rootfs/etc/shadow none bind,ro 0 0 /etc/passwd /var/lib/lxc/router/rootfs/etc/passwd none bind,ro 0 0 /etc/shadow- /var/lib/lxc/router/rootfs/etc/shadow- none bind,ro 0 0 /etc/sudoers /var/lib/lxc/router/rootfs/etc/sudoers none bind,ro 0 0 /etc/sudoers.d /var/lib/lxc/router/rootfs/etc/sudoers.d none bind,ro 0 0 /etc/profile /var/lib/lxc/router/rootfs/etc/profile none bind,ro 0 0 /etc/profile.d /var/lib/lxc/router/rootfs/etc/profile.d none bind,ro 0 0 /etc/slackpkg/mirrors /var/lib/lxc/router/rootfs/etc/slackpkg/mirrors none bind,ro 0 0 /etc/resolv.conf /var/lib/lxc/router/rootfs/etc/resolv.conf none bind,ro 0 0

當然,我們也可以將普通的塊設備安裝到容器中,盡管這里并沒有這么做。我已經使用其特殊名稱掛載了proc和sysfs文件,以防容器中的啟動腳本沒有照顧到它們。它們將收到一個容器名稱空間范圍內的特殊視圖。
在這里,我想為大家介紹一下綁定裝載。利用它,我們可以將宿主機的文件系統掛載到容器名稱空間內的某個位置。這意味著,可以在宿主機和任意數量的容器間共享/home,而無需設置NFS服務器,只需將相同的文件夾綁定到多個容器即可。當然,這必須作為容器啟動的一部分來進行,但是如果在容器運行后這樣做,外部文件系統在容器的名稱空間中不可見。對于目錄的綁定,想必大家已經都很熟悉了,實際上,我們也可以對單個文件執行該操作。如果缺少任何掛載點,容器將無法啟動,這個問題將在后文加以介紹。
我認為路由器是可信基礎架構的一部分,因此,我選擇與宿主機共享許多關鍵的身份驗證文件,盡管是以只讀方式。通過綁定passwd、group、shadow和其他文件,我可以使用普通的用戶名和密碼進行登錄。為方便起見,我還可以共享一些配置文件。顯然,您可能不想在測試環境中對不受信任的系統執行這些操作,或者您可能需要指定自己的共享的文件。

啟動容器

現在我們的路由器已配置完畢,下面開始啟動它。從命令行中以手動方式啟動容器并不難,具體命令如下所示。

lxc-start -n router:

好吧,但是它能正常工作嗎?命令lxc-info -n router會告訴我們答案。如果容器正在運行,會得到這樣的結果
使用Linux容器迅速搭建滲透測試環境(下篇)
lxc-info命令的運行結果
如果啟動失敗,可以嘗試使用以下命令重新啟動:

lxc-start -n router -F

執行該命令后,容器將在前臺啟動,這樣就可以看到所有錯誤信息了。此外,您還可以使用命令lxc-top查看正在運行的容器的相關信息和統計數據。
接下來的步驟,是配置路由器,讓它完成路由和防火墻等任務。為了訪問它,可以使用lxc-console -n router連接到虛擬控制臺。退出時,可以使用。進入控制臺后,可以使用installpkg、apt、yum等添加所需的軟件包。然后,就可以使用ssh或xnest來管理它了。

為什么要使用Btrfs?

現在,是Btrfs的表演時間。假設需要將10個Ubuntu工作站加入我的測試域,為此,我將部署一個Ubuntu容器作為模板。

lxc-create -t ubuntu -n TubuntuWS -B Btrfs

然后,還需要進行進行配置,就像前面的路由器配置一樣。接下來,用單個veth接口設為lxc.network.0,并將lab設為鏈接。在這種情況下,就用不著使用特殊fstab了。同時,也不用設置lxc.start.auto。然后,通過lxc-start -n TubuntuWS命令啟動容器,并利用lxc-console進行連接,這樣就可以構建機器了。
如果一切都符合要求,就可以將其關閉了。為此,可以從宿主機的容器內部執行lxc-stop -n TubuntuWS命令。
現在,我可以使用BTRFS輕松創建大量的低開銷的副本。首先,在/var/lib/lxc/下為其他容器創建目錄。
然后,克隆模板容器,即TubuntuWS。

cat /var/lib/lxc/TubuntuWS/config | sed ‘s/TubuntuWS/ubuntuWS01/g’ > /var/lib/lxc/ubuntuWS01/config Btrfs subvolume snapshot /var/lib/lxc/TubuntuWS/rootfs /var/lib/lxc/ubuntuWS01/rootfs

好了,一個克隆完成了!當然,我們可能需要更改一些網絡設置。之后,可以使用lxc-create啟動它。由于Btrfs已經創建了模板rootfs的寫時復制快照,所以至少在進行大量更新之前,幾乎不會占用任何磁盤空間。
Btrfs也可以完成其他有用的事情。比如,可以根據需要制作任意數量的卷,創建快照的快照,也可以刪除原始源卷。
還記得路由器嗎?它所有的配置都是按照這里來的,所以請將其rootfs的快照創建為rootfs.bak。您甚至可以使用它來完成卷的增量式流備份。

相關閱讀

主站蜘蛛池模板: 亚欧在线观看 | 欧美亚洲综合视频 | 一区二区三区高清视频在线观看 | 国产成人一区二区 | 欧美三级在线视频 | 国产精品免费久久 | 日韩国产欧美成人一区二区影院 | 亚洲国产成+人+综合 | 孩交啪啪网址 | 国产亚洲人成在线影院 | 日产一区2区三区有限公司 日产一区两区三区 | 日本欧美一区二区 | 国产黄色三级三级三级 | 91久久精一区二区三区大全 | 亚洲综合无码一区二区 | 欧美在线观看一区 | 自拍在线视频 | 国产网站在线 | 情侣偷偷看的羞羞视频网站 | 国产黄色一级毛片 | 色视频网站大全免费 | 久久影院视频 | 天堂素人搭讪系列嫩模在线观看 | 日韩精品一区二区三区免费观看 | 日本一级特黄毛片高清视频 | 欧美一级片在线免费观看 | 男人把女人桶到喷白浆的视频 | 欧美精品成人3d在线 | 久草在线| 国产毛片一区二区三区精品 | avtt天堂网 手机资源 | 暖暖日本在线播放 | 国产在视频线在精品 | 在线精品播放 | 9丨精品国产高清自在线看 ⅹxx中国xxx人妖 | 成人伊人青草久久综合网 | 美女精品永久福利在线 | 一区二区日韩欧美 | 国产成人综合95精品视频免费 | 另类一区二区三区 | 东莞a级毛片 |