標籤

BAT (38) shell (34) Virtual Machine (33) Xubuntu (29) acfs (25) PHP (24) CentOS (21) Virtul Box (20) 編輯器 (17) 資料庫 (15) lubuntu (13) windows (13) CPP (12) ubuntu (12) chrome (11) laravel (10) Docker (9) Python (9) 5A88 (7) VMware (6) 資料結構 (6) Javascript (5) Node (5) Proxmox VE (5) 公告系統 (5) 程式積木 (5) Android Studio (4) ANN (3) OB2D2016x64 (3) Xoops (3) clonezilla (3) samba (3) 公文 (3) 其他 (3) 硬體 (3) API (2) Android (2) AppInvent2 (2) Html (2) Hyper-V (2) Nas (2) botnet (2) mbot (2) swift (2) wordpress (2) 樣板 (2) 防火牆 (2) AD的應用 (1) Ansible (1) Arduino (1) CSS (1) GitLab (1) HA Proxy (1) LegoEV3 (1) PowerShell (1) Scratch (1) VM (1) XenServer (1) kotlin (1) linuxmint (1) lxc (1)

2020年3月20日 星期五

學校防火牆的SRX練習機 vSRX虛擬機的介面可否新增虛擬網路介面(vNIC),並用cli的指令查詢IP

上篇文章,在VMware 完成虛擬機vSRX的架設。
安裝完,可以看到
         在Firefly Perimeter Getting Started Guide for VMware
         的Chapter 2 System Requirements ,可以看到下面的表格
        換言之,我們可在虛擬機最多可新增10個虛擬網路介面(vNIC)。而且介面ge-0/0/0 可以取得IP,介面ge-0/0/1~ge-0/0/3會分配IP。
        變更VM的設定:
        1.新增Global LAN Segments,新增名稱為LAN01、LAN02、LAN03
        2.變更網卡Network Adapter 2設定為LAN01
        3.變更網卡Network Adapter 3設定為LAN02
        
        現在我們需要知道vSRX的介面到底有幾個?我們有哪些的可用的介面來進行網路實驗?
在cli介面中,
cli                               從 root@% 進入 root>
show version              查詢版本
show interfaces terse 查詢介面狀況
exit                             離開root>  進入  root@%
login:root 使用root ,免密碼登入
可以看到
 ge-0/0/0.0  10.1.1.88/24
 ge-0/0/1.0  192.168.2.1/24
 ge-0/0/2.0  192.168.3.1/24       
      
那我們新增虛擬網卡(vNIC) 至虛擬機器
可以看到
 ge-0/0/0.0  10.1.1.88/24
 ge-0/0/1.0  192.168.2.1/24
 ge-0/0/2.0  192.168.3.1/24     
 ge-0/0/3.0  192.168.4.1/24     
多出一個interface ge-0/0/3.0
資料來源:
1.JNCIA-SP 快快樂樂裝 Juniper VSRX on VMware
2.Juniper SRX 初始化安裝(J-Web模式)

2020年3月15日 星期日

學校防火牆更換為Junior SRX 340,需要找虛擬機vSRX來練習防火牆規則

1.從資料來源1,可以下載相關資源。網頁內容如下:

2.點選進去,還可以看到
   請通通下載下來。壓縮檔檔名為junos-vsrx-12.1X47-D15.4.rar

3.虛擬機基本設定手冊電子書位置

   下載後,虛擬機基本設定手冊,檔名為security-virtual-perimeter-gsg-vmware-pwp.pdf

        虛擬機可按裝在VMware,所以我們決定用VMware workstation 來安裝。

        壓縮檔為junos-vsrx-12.1X47-D15.4.rar。解壓縮後,共有三個檔,如下圖:
4.開啟workstation:File->Open
5.找到OVF,並開啟。如下圖:

6.下圖中1.Browse 瀏覽適當位置,放置虛擬機檔案的位置,通常是C槽。2.Import 匯入。如果覺得C槽空間夠大,可以直接跳過步驟1.Browse,直接按下步驟2.Import按鈕
7.匯入後,就會出現下圖圖示
8.開啟虛擬機,其畫面如下:
        根據security-virtual-perimeter-gsg-vmware-pwp.pdf,login 的帳號為 root 沒有密碼。根據的截圖如下:

        另外,虛擬機第一個網路介面,為自動取得IP,那我要如何知道虛擬機的IP?
        然後,去查無線AP內的DHCP租約列表。以我的設備為例,虛擬機取得IP為 172.20.4.104如下圖:
9.在瀏覽器網址列,打上http://虛擬機取的IP(以我的虛擬機為例,http://172.20.4.104),即可看到設定頁面

下篇文章:學校防火牆的SRX練習機 vSRX虛擬機的介面可否新增虛擬網路介面(vNIC),並用cli的指令查詢
資料來源:
1.Download Juniper vSRX – Firefly & Juniper E-Books
2.SRX 防火牆管理手冊簡體字說明書
3.vSRX虛擬機說明
4.Installing Juniper Firefly Perimeter (vSRX) in VirtualBox


2020年3月9日 星期一

Nodejs 入門 筆記整理及心得

第一次看完 Node 入門,心裡只有驚呼!!哇!!但是對整個程式碼,並沒有很清楚,只殘留驚呼。於是,開始動起手來整理整個程式碼。希望能加深自己的印象。

1.第一個程式HelloWorld.js
   檔名:HelloWorld.js
   內容:console.log('Hello World');

2.一個完整的Node.js的Web應用
   目標:
    .用戶可以透過瀏覽器使用我們的應用。
    .當用戶請求http://domain/start時,可以看到一個歡迎頁面,頁面上有一個檔案上傳的表
     單。
    .用戶可以選擇一個圖片並送出表單,隨後檔案將被上傳到      http://domain/upload,該頁
     面完成上傳後會把圖片顯示
   (1)一個基礎的http伺服器腳本
        檔名:server.js
        內容:
        var http = require('http');

        http.createServer(function(request,response){
            console.log('Request received.');
            response.writeHead(200,{'Content-Type':'text/plain'});
            response.write('Hello World');
            response.end();
        }).listen(8888);
     
        console.log('Server has started');
   (2)一個基礎的http伺服器腳本(不同寫法)
        檔名:server.js
        內容:
        var http = require('http');

        function onRequest(request,response) {
              console.log('Request received.');
              response.writeHead(200,{'Content-Type':'text/plain'});
              response.write('Hello World');
              response.end();
        }
       
         http.createServer(onRequest).listen(8888);   
         console.log('Server has started');

     (3)一個基礎的http伺服器腳本放進函數start(),並匯出函數start()
        檔名:server.js
        內容:
        var http = require('http');

       function start() {       
          http.createServer(function(request,response){
            console.log('Request received.');
            response.writeHead(200,{'Content-Type':'text/plain'});
            response.write('Hello World');
            response.end();
          }).listen(8888);
     
        console.log('Server has started');
      }
      exports.start = start;
     
        檔名:index.js
        內容:
        var server = require('./server');     
        server.start();

   (4)一個基礎的http伺服器腳本(不同寫法)放進函數start(),並匯出函數start()
      檔名:server.js
      內容:
       var http = require('http');
     
       function start() {
          function onRequest(request,response) {
                console.log('Request received.');
                response.writeHead(200,{'Content-Type':'text/plain'});
                response.write('Hello World');
                response.end();
          }
       
         http.createServer(onRequest).listen(8888);   
         console.log('Server has started');
      }

      exports.start = start;

        檔名:index.js
        內容:
        var server = require('./server');     
        server.start();

3.路由
   (1)能找出瀏覽器請求的URL路徑的http伺服器腳本,並匯出函數start(),再加入加入路由
      檔名:server.js
      內容:
       var http = require('http');
       var url = require('url');
     
       function start(route) {       
          http.createServer(function(request,response){
            var pathname = url.parse(request.url).pathname;
            console.log('Request received.');
            route(pathname);
            response.writeHead(200,{'Content-Type':'text/plain'});
            response.write('Hello World');
            response.end();
          }).listen(8888);
     
        console.log('Server has started');
      }
      exports.start = start;

        路由擴充到index.js
        檔名:index.js
        內容:
        var server = require('./server');
        var router = require('./router');
   
        server.start(router.route);

        檔名:router.js
        內容:
        function route(pathname) {
             console.log('About to route a request for' + pathname);
        }
        exports.route = route;

  (2)能找出瀏覽器請求的URL路徑的http伺服器腳本(不同寫法),並匯出函數start(),再加入加入路由
      檔名:server.js
      內容:
       var http = require('http');
       var url = require('url');
     
       function start(route) {
          function onRequest(request,response) {
                var pathname = url.parse(request.url).pathname;
                console.log('Request received.');
                route(pathname);
                response.writeHead(200,{'Content-Type':'text/plain'});
                response.write('Hello World');
                response.end();
          }
       
         http.createServer(onRequest).listen(8888);   
         console.log('Server has started');
      }

      exports.start = start;

        路由擴充到index.js         
        檔名:index.js
        內容:
        var server = require('./server');
        var router = require('./router');
   
        server.start(router.route);

        檔名:router.js
        內容:
        function route(pathname) {
             console.log('About to route a request for' + pathname);
        }
        exports.route = route;

  (3)新增請求處理程序requestHandlers 模組,並匯出 start()、upload()。
       檔名:requestHandlers.js
       內容:
       function start() {
            console.log("Request handler 'start' was called.");
       }
       function upload() {
             console.log("Request handler 'upload' was called.");
       }
       exports.start = start;
       exports.upload = upload;

  (4)將requestHandlers 模組,引入到 index.js 中:
        檔名:index.js
        內容:
        var server = require('./server');
        var router = require('./router');
        var requestHandlers = require('./requestHandlers');   

        var handle = {}
        handle['/'] = requestHandlers.start;
        handle['/start'] = requestHandlers.start;
        handle['/upload'] = requestHandlers.upload;
        server.start(router.route,handle);

   (5)將requestHandlers 模組,當成參數傳遞給伺服器。
       檔名:server.js
       內容:
       var http = require('http');
       var url = require('url');
     
       function start(route,handle) {       
          http.createServer(function(request,response){
            var pathname = url.parse(request.url).pathname;
            console.log('Request received.');
            route(handle,pathname);
            response.writeHead(200,{'Content-Type':'text/plain'});
            response.write('Hello World');
            response.end();
          }).listen(8888);
     
        console.log('Server has started');
      }
      exports.start = start;

     或者

       檔名:server.js  (不同寫法)
       內容:
       var http = require('http');
       var url = require('url');
     
       function start(route,handle) {
          function onRequest(request,response) {
                var pathname = url.parse(request.url).pathname;
                console.log('Request received.');
                route(handle,pathname);
                response.writeHead(200,{'Content-Type':'text/plain'});
                response.write('Hello World');
                response.end();
          }
       
         http.createServer(onRequest).listen(8888);   
         console.log('Server has started');
      }

      exports.start = start;

  (6)將requestHandlers 模組,當成參數傳遞給路由。
        檔名:router.js
        內容:
        function route(handle,pathname) {
             console.log('About to route a request for' + pathname);
             if (typeof handle[pathname] === 'function') {
                handle[pathname]();
             } else {
                console.log('No request handler found for ' + pathname);
             }
        }
        exports.route = route;

    (7)


另外,阻塞處理與非阻塞處理程式碼範例
檔名:testBlock.js
/*阻塞處理*/
function testok01() {
   var st01 = new Date().getTime();
   while (new Date().getTime() < st01 + 3000); 
}
testok01();
console.log("testok01 finish!!");
console.log("Block !!");


檔名:testNonBlock.js
/*非阻塞處理*/
function testok01(ok) {
     setTimeout(() => {
        ok();
     },3000);
}
testok01(function () {
     console.log("testok01 finish!!");
});
console.log("NonBlock !!");

資料來源:
1.Node 入門
2.<<Node 入門>>學習
3.04★Node.js学习★非阻塞处理好难懂
4.Callback(回調)
5.同步(Synchronous)、異步(Asynchronous)、阻塞(Block)、非阻塞(Non-block)

2020年3月7日 星期六

如何用shell去變更 Proxmox VE 的 IP 與 Banner上的IP


現在 Proxmox VE 主機內的 Banner上的IP 192.168.25.165

一、在 Proxmox VE WebUI 變更:

1.
變更 [PVE]->[Hosts]->[192.168.25.165]改為[192.168.25.173]

2.
重開 Proxmox VE

3.
現在 Proxmox VE 主機內的 Banner上的IP 變更為 192.168.25.173

此時,Proxmox VE IP 仍然為 192.168.25.165

 4.變更 [PVE]->[網路]->[192.168.25.165/24]改為[192.168.25.173/24]


 5.
重開 Proxmox VE

6.在瀏覽器要打上 https://192.168.25.173:8006,才會看到 WebUI的登入畫面

二、在Proxmox VE 的主機上變更
1.
直接變更 /etc/hosts 內的IP
    #pico /etc/hosts


2.
直接變更 /etc/network/instrfaces 內的IP
   #pico /etc/network/interfaces

3.重開 Proxmox VE
   #reboot

三、用shell去變更 Proxmox VE IP Banner上的IP

感恩永靖國小邱顯錫老師的指導!!

尋找取代語法介紹:
sed -i 's/
尋找/取代/g' 絕對路徑+檔名
例如:要尋找 /etc/fstab 內的 defaults 並取代成 defaults,usrquota,grpquota
sed -i 's/
defaults/defaults,usrquota,grpquota/g' /etc/fstab
另外關於絕對路徑+檔名,可以改用
cd /etc
sed -i 's/defaults/defaults,usrquota,grpquota/g' fstab

檔名:ChangeBothIP.sh,其內容為

#!/bin/bash
sed -i 's/
192.168.25.165/192.168.25.173/g'  /etc/hosts
sed -i 's/
192.168.25.165/192.168.25.173/g' /etc/network/interfaces
reboot


資料來源:
1.解決 Proxmox VE 變更 IP Banner 沒有同步異動問題


2020年3月6日 星期五

xubuntu 16.04 用shell安裝 ssh 與安全性設定

1.更新
$sudo apt-get update

2.安裝 ssh 與 openssh-server
$sudo apt-get install ssh openssh-server -y

3.編輯 ssh 設定檔,取消root 的登入權限
$sudo pico /etc/ssh/sshd_config
將 PermitRootLogin prohibit-password 改成PermitRootLogin no

4.設定安全性,編輯可連線的主機群 ex 192.168.25.1
$sudo pico /etc/hosts.allow
  sshd:192.168.25.1:allow
$sudo pico /etc/hosts.deny
  sshd:all:deny

5.重啟ssh伺服器
$sudo /etc/init.d/ssh restart

6.現在要使用shell 來安裝與設定
檔名:sshInstall.sh
內容:
#!/bin/bash
apt-get update
apt-get install ssh openssh-server -y
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin no/g' /etc/ssh/sshd_config
echo "sshd:192.168.25.1:allow" >> /etc/hosts.allow
echo "sshd:all:deny" >> /etc/hosts.deny
/etc/init.d/ssh restart

資料來源:
1.Ubuntu 安裝和啟用 SSH 登入
2.Ubuntu 用 SSH + 憑證登入遠端主機
3.[Shell Script] 用echo將文字以附加(apppend)方式寫入檔案

2020年3月2日 星期一

在 Proxmox VE 中,將USB隨身碟當作備份碟

 1.環境示意圖:
 2.將USB插入Proxmox VE 機器中。登入 Proxmox VE 的Web管理介面後,檢查Proxmox VE 是否正確偵測到?此時裝置名稱為 /dev/sdb
3.在Proxmox VE 機器中,插入USB隨身碟(NTFS檔案系統)。
   需要安裝ntfs-3g套件。指令如下:
    #apt-get update
    #apt install ntfs-3g

4.掛載USB隨身碟(NTFS檔案系統)
   #mkdir /mnt/usbBackUp
   #mount /dev/sdb1 /mnt/usbBackUp


 另外會出現問題,其解決方案如下:
  (1)卸載/dev/sdb1
      #umount /dev/sdb1
  (2)修復/dev/sdb1
      #ntfsfix /dev/sdb1

5.檢查掛載情況。指令如下:
  #mount | grep usbBackUp

6.掛載為Directory。其步驟為
[資料中心]->[儲存]->[增加]->[Directory]

ID:usbBackUp
Directory:/mnt/usbBackUp
內容:VZDump 備份檔案
最大備份數:5
->增加

 7.可從[usbBackUp]->[概觀] 可知狀況。

8.實作後,才發現:當Proxmox VE 重開機後,USB隨身碟無法自動掛載!!
  需要對fstab做修改,才能開機時自動掛載。
  #pico /etc/fstab
  加上這句
  /dev/sdb1 /mnt/usbBackUp ntfs defaults 1 2
  離開之後,重開機
  #df

即可看見掛載
資料來源:
1.讓 Proxmox VE 將 USB 碟做為備份區使用
2.Proxmox 虛擬主機架設-從無到有(ZFS)之6.Storage 實作 
3.IT事件簿-掛載在Windows 10的硬碟無法在Linux使用 
4.Fix “NTFS Partition is in an Unsafe State” without Windows installed and ntfsfix refusing to operate
5.linux 開機自動掛載
6.增加硬碟做為 ZFS pool

在 Windows 10 x64 1909版,使用BAT快速安裝公文系統與人事服務網(自然人憑證)版

相關內容移往 https://skjhcreator.blogspot.com/2021/02/windows-10-x64-1909bat.html