<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[小小工程師的日常筆記]]></title> 
<link>https://xdeath.tw/index.php</link> 
<description><![CDATA[]]></description> 
<language>zh-tw</language> 
<copyright><![CDATA[小小工程師的日常筆記]]></copyright>
<item>
<link>https://xdeath.tw/read.php?83</link>
<title><![CDATA[vmware中centos 7增加硬碟空間]]></title> 
<author>admin &lt;tszheng@twnic.net.tw&gt;</author>
<category><![CDATA[linux]]></category>
<pubDate>Mon, 21 Sep 2020 18:25:04 +0000</pubDate> 
<guid>https://xdeath.tw/read.php?83</guid> 
<description>
<![CDATA[ 
	首先將虛擬機關機後，第一步要先增加系統HD的容量<br/><br/>如果你的centos是安裝在PC上的vmware workstation上的話<br/><br/>安裝的目錄上有一個vmware-vdiskmanager.exe的命令可以使用<br/><br/>在cmd的模式下執行(擴充到50G)<br/><br/>如果這個guest os沒有做任何的snapshop的話，在設定->硬碟中<br/><br/>還有一個expand的選項可以直接增加硬碟的容量<br/><br/>vmware-vdiskmanager.exe -x 50G guestos.vmdk(實際占很大空間的那個檔案)<br/><br/>如果是安裝在Esxi上的話，則是使用vmkfstools<br/><br/>vmkfstools -X 50G guestos.vmdk<br/><br/>到這邊guest os的硬碟容量應該已經擴充到50G了，但是實際上我們系統用df看還是很小<br/><br/>這是因為多出來的空間現在都是無法辨識的狀態，如果是guest是windows系統的話<br/><br/>則只需要在磁碟管理中去調整硬碟空間大小就可以了，Centos則是需要依照以下的步驟<br/><br/>首先看一下系統用了多少容量<br/><br/><div class="code"><br/>&#91;root@localhost ~&#93;# df -h<br/>檔案系統&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 容量&nbsp;&nbsp;已用&nbsp;&nbsp;可用 已用% 掛載點<br/>devtmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 470M&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;470M&nbsp;&nbsp;&nbsp;&nbsp;0% /dev<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;487M&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;487M&nbsp;&nbsp;&nbsp;&nbsp;0% /dev/shm<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;487M&nbsp;&nbsp;8.4M&nbsp;&nbsp;478M&nbsp;&nbsp;&nbsp;&nbsp;2% /run<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;487M&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;487M&nbsp;&nbsp;&nbsp;&nbsp;0% /sys/fs/cgroup<br/>&#91;color=#FF0000&#93;/dev/mapper/centos-root&nbsp;&nbsp; 17G&nbsp;&nbsp;4.8G&nbsp;&nbsp; 13G&nbsp;&nbsp; 28% /&#91;/color&#93;<br/>/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1014M&nbsp;&nbsp;173M&nbsp;&nbsp;842M&nbsp;&nbsp; 17% /boot<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 98M&nbsp;&nbsp; 12K&nbsp;&nbsp; 98M&nbsp;&nbsp;&nbsp;&nbsp;1% /run/user/42<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 98M&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 98M&nbsp;&nbsp;&nbsp;&nbsp;0% /run/user/1000<br/></div><br/><br/>看起來系統只用了20G，接著檢查硬碟<br/><br/><div class="code"><br/>&#91;root@localhost ~&#93;# fdisk -l<br/><br/>Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors<br/>Units = sectors of 1 * 512 = 512 bytes<br/>Sector size (logical/physical): 512 bytes / 512 bytes<br/>I/O 大小 (最小/最佳化)：512 位元組 / 512 位元組<br/>Disk label type: dos<br/>磁碟識別碼：0x000c35eb<br/><br/>所用裝置 開機&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;開始&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 結束&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;區塊&nbsp;&nbsp; 識別號&nbsp;&nbsp;系統<br/>/dev/sda1&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2048&nbsp;&nbsp;&nbsp;&nbsp; 2099199&nbsp;&nbsp;&nbsp;&nbsp; 1048576&nbsp;&nbsp; 83&nbsp;&nbsp;Linux<br/>/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2099200&nbsp;&nbsp;&nbsp;&nbsp;41943039&nbsp;&nbsp;&nbsp;&nbsp;19921920&nbsp;&nbsp; 8e&nbsp;&nbsp;Linux LVM<br/></div><br/><br/><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-1292700168892016" data-ad-slot="3191226934" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle = window.adsbygoogle &#124;&#124; []).push(&#123;&#125;);</script>&nbsp;&nbsp;<br/>可以看到現在/dev/sda確實有53.7G，但是系統實際上只用了20G<br/><br/>使用fdisk新增一個partition(不想看的話fdisk /dev/sda後打p、n、p、3、w)<br/><br/><div class="code"><br/>&#91;root@localhost ~&#93;# fdisk /dev/sda<br/>Welcome to fdisk (util-linux 2.23.2).<br/><br/>Changes will remain in memory only, until you decide to write them.<br/>Be careful before using the write command.<br/><br/><br/>命令 (m 以獲得說明)：p<br/><br/>Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors<br/>Units = sectors of 1 * 512 = 512 bytes<br/>Sector size (logical/physical): 512 bytes / 512 bytes<br/>I/O 大小 (最小/最佳化)：512 位元組 / 512 位元組<br/>Disk label type: dos<br/>磁碟識別碼：0x000c35eb<br/><br/>所用裝置 開機&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;開始&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 結束&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;區塊&nbsp;&nbsp; 識別號&nbsp;&nbsp;系統<br/>/dev/sda1&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2048&nbsp;&nbsp;&nbsp;&nbsp; 2099199&nbsp;&nbsp;&nbsp;&nbsp; 1048576&nbsp;&nbsp; 83&nbsp;&nbsp;Linux<br/>/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2099200&nbsp;&nbsp;&nbsp;&nbsp;41943039&nbsp;&nbsp;&nbsp;&nbsp;19921920&nbsp;&nbsp; 8e&nbsp;&nbsp;Linux LVM<br/><br/>命令 (m 以獲得說明)：n<br/>Partition type:<br/>&nbsp;&nbsp; p&nbsp;&nbsp; primary (2 primary, 0 extended, 2 free)<br/>&nbsp;&nbsp; e&nbsp;&nbsp; extended<br/>Select (default p): p<br/>分割區編號 (3,4, default 3): 3<br/>起初 sector (41943040-104857599, 預設 41943040)：<br/>使用預設值 41943040<br/>最後 sector, +sectors 或 +大小&#123;K,M,G&#125; (41943040-104857599, 預設 104857599)：<br/>使用預設值 104857599<br/>Partition 3 of type Linux and of size 30 GiB is set<br/><br/>命令 (m 以獲得說明)：w<br/>分割表已變更！<br/><br/>呼叫 ioctl() 以重新讀取分割表。<br/><br/>WARNING: Re-reading the partition table failed with error 16: 裝置或系統資源忙碌中.<br/>The kernel still uses the old table. The new table will be used at<br/>the next reboot or after you run partprobe(8) or kpartx(8)<br/>同步磁碟。<br/></div><br/><br/>到這邊用fdisk -l就會看到多了一個/dev/sda3<br/><br/>接著要create一個Volume，並且重新設定大小，接著進行擴展<br/><div class="code"><br/>&#91;root@localhost ~&#93;# partprobe<br/>Warning: 無法開啟 /dev/sr0 以讀寫 (唯讀的檔案系統)。/dev/sr0 已用唯讀的方式開啟<br/>&#91;root@localhost ~&#93;# pvcreate /dev/sda3<br/>&nbsp;&nbsp;Physical volume &quot;/dev/sda3&quot; successfully created.<br/>&#91;root@localhost ~&#93;# pvresize /dev/sda3<br/>&nbsp;&nbsp;Physical volume &quot;/dev/sda3&quot; changed<br/>&#91;root@localhost ~&#93;# vgextend centos /dev/sda3<br/>&nbsp;&nbsp;Volume group &quot;centos&quot; successfully extended<br/>&#91;root@localhost ~&#93;# lvextend -L +29G /dev/mapper/centos-root<br/>&nbsp;&nbsp;Size of logical volume centos/root changed from &lt;46.00 GiB (11775 extents) to&nbsp;&nbsp;&lt;54.00 GiB (13823 extents).<br/>&#91;root@localhost ~&#93;# xfs_growfs /dev/mapper/centos-root<br/></div><br/>這時候再用df -h看，就會發現根目錄變大了<br/><div class="code"><br/>&#91;root@localhost ~&#93;# df -h<br/>檔案系統&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 容量&nbsp;&nbsp;已用&nbsp;&nbsp;可用 已用% 掛載點<br/>devtmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 470M&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;470M&nbsp;&nbsp;&nbsp;&nbsp;0% /dev<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;487M&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;487M&nbsp;&nbsp;&nbsp;&nbsp;0% /dev/shm<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;487M&nbsp;&nbsp;8.4M&nbsp;&nbsp;478M&nbsp;&nbsp;&nbsp;&nbsp;2% /run<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;487M&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;487M&nbsp;&nbsp;&nbsp;&nbsp;0% /sys/fs/cgroup<br/>&#91;color=#FF0000&#93;/dev/mapper/centos-root&nbsp;&nbsp; 46G&nbsp;&nbsp;4.8G&nbsp;&nbsp; 42G&nbsp;&nbsp; 11% /&#91;/color&#93;<br/>/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1014M&nbsp;&nbsp;173M&nbsp;&nbsp;842M&nbsp;&nbsp; 17% /boot<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 98M&nbsp;&nbsp; 12K&nbsp;&nbsp; 98M&nbsp;&nbsp;&nbsp;&nbsp;1% /run/user/42<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 98M&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 98M&nbsp;&nbsp;&nbsp;&nbsp;0% /run/user/1000<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 98M&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 98M&nbsp;&nbsp;&nbsp;&nbsp;0% /run/user/0<br/></div><br/><br/>...<br/>
]]>
</description>
</item><item>
<link>https://xdeath.tw/read.php?82</link>
<title><![CDATA[yum 與 pip離線安裝模組]]></title> 
<author>admin &lt;tszheng@twnic.net.tw&gt;</author>
<category><![CDATA[linux]]></category>
<pubDate>Mon, 21 Sep 2020 17:29:12 +0000</pubDate> 
<guid>https://xdeath.tw/read.php?82</guid> 
<description>
<![CDATA[ 
	當我們系統安裝在正式環境中，可能前端會有防火牆或是其他網路設備<br/><br/>導致我們沒辦法連線到internet去安裝一些套件，這時候就可以利用離線安裝<br/><br/>的方式，到一台相同版本，但是可以連上internet的機器上，將相關的模組下載下來<br/><br/>傳送到要安裝的系統進行安裝，這樣就可以避免為了安裝某個套件，而去修改防火牆<br/><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-1292700168892016" data-ad-slot="3191226934" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle = window.adsbygoogle &#124;&#124; []).push(&#123;&#125;);</script>&nbsp;&nbsp;<br/>以centos用yum安裝套件來說，如果我要安裝python的virtualenv<br/><br/><div class="code"><br/>#下載目錄為./，要下載的模組是python-virtualenv<br/>yum install --downloadonly --downloaddir=./ python-virtualenv&nbsp;&nbsp; <br/></div><br/><br/>他會把所有依賴的套件全部下載下來，你就會看到在目錄底下有這些檔案<br/><br/>python2-rpm-macros-3-32.el7.noarch.rpm<br/>python-devel-2.7.5-88.el7.x86_64.rpm<br/>python-rpm-macros-3-32.el7.noarch.rpm<br/>python-srpm-macros-3-32.el7.noarch.rpm<br/>python-virtualenv-15.1.0-4.el7_7.noarch.rpm<br/><br/>接著我們可以把這五個檔案傳送到要安裝的系統上，接著一樣使用yum去安裝他<br/><br/><div class="code"><br/>#安裝使用localinstall的方式，nogpgcheck表示不要進行驗證<br/>yum localinstall -y --nogpgcheck python-virtualenv-15.1.0-4.el7_7.noarch.rpm<br/></div><br/><br/>正常來說因為依賴的套件都已經下載傳送過來了，所以就可以直接安裝成功<br/><br/>但是有一種情況是，你在下載的時候，例如已經安裝過python-rpm-macros-3-32.el7.noarch.rpm<br/><br/>那系統會判斷你不需要python-rpm-macros-3-32.el7.noarch.rpm這個套件，就不會下載<br/><br/>這樣傳送過去就會少了這個套件，安裝的時候yum只好再透過internet去找，這時候因為無法連上網際網路<br/><br/>安裝就會失敗，所以使用這種方式的時候要拿來下載套件的機器最好是很乾淨，沒有安裝過太多模組。<br/><br/><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-1292700168892016" data-ad-slot="3191226934" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle = window.adsbygoogle &#124;&#124; []).push(&#123;&#125;);</script>&nbsp;&nbsp;<br/><br/>python的pip也是類似的方式<br/><br/>例如我要安裝django以及flask，首先下載相關模組<br/><br/><div class="code"><br/>pip download django<br/>pip download flask<br/></div><br/><br/>這樣我們就可以取得Django-3.1.1-py3-none-any.whl以及相對應依賴的whl檔案<br/><br/>接著我們把所有whl檔傳送到要安裝的設備上後，直接指定whl進行安裝<br/><br/><div class="code"><br/>pip install Django-3.1.1-py3-none-any.whl<br/>pip install Flask-1.1.2-py2.py3-none-any.whl<br/></div><br/><br/>那如果一次有很多個套件要安裝呢，最簡單的方式我們先用一個乾淨的虛擬環境<br/><br/>安裝好我們所需要的模組<br/><br/><div class="code"><br/>pip install django<br/>pip install flask<br/>#導出模組清單<br/>pip freeze &gt; requirements.txt<br/>#下載requirements.txt中安裝的所有模組<br/>pip download -r requirements.txt<br/></div><br/><br/>接著我們把所有*.whl檔案以及requirements.txt傳到要安裝的設備上<br/><br/>接著就可以使用本地安裝一次安裝好所有套件了<br/><br/><div class="code"><br/>pip install --no-index --find-links=./ -r requirements.txt<br/></div><br/><br/>
]]>
</description>
</item><item>
<link>https://xdeath.tw/read.php?79</link>
<title><![CDATA[PPTP server]]></title> 
<author>admin &lt;tszheng@twnic.net.tw&gt;</author>
<category><![CDATA[linux]]></category>
<pubDate>Wed, 03 Apr 2019 06:28:18 +0000</pubDate> 
<guid>https://xdeath.tw/read.php?79</guid> 
<description>
<![CDATA[ 
	[ubuntu]<br/><br/>首先安裝pptp<br/><br/>apt-get install pptpd<br/><br/>修改/etc/pptpd.conf，找到以下兩行，將註解拿掉<br/><br/>localip 192.168.99.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#建議用192.168.99.1之類的，192.168.0.X很容易衝到<br/>remoteip 192.168.99.128-255&nbsp;&nbsp;&nbsp;&nbsp; #連上後取得的private ip，必須與上面同網段<br/><br/>設定/etc/ppp/pptpd-options中的DNS<br/>ms-dns 8.8.8.8&nbsp;&nbsp;&nbsp;&nbsp;#設定DNS<br/><br/>設定/etc/ppp/chap-secrets帳號密碼<br/><br/>帳號&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;&nbsp;&nbsp;&nbsp;密碼&nbsp;&nbsp;&nbsp;&nbsp;允許的IP<br/>username&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; password&nbsp;&nbsp; *<br/><br/>重啟pptpd，service restart pptpd<br/><br/>這時候應該已經可以連線了，只是連進來之後出不去，還需要把forward的功能開起來<br/><br/>修改系統參數 /etc/sysctl.conf<br/><br/>＃net.ipv4.ip_forward=1&nbsp;&nbsp;#取消註解<br/><br/>更新設定 sysctl -p<br/><br/>最後在防火牆裡啟用forward<br/><br/>iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o eth0 -j MASQUERADE&nbsp;&nbsp;<br/><br/>注意-s是VPN網段的IP範圍。<br/><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-1292700168892016" data-ad-slot="3191226934" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle = window.adsbygoogle &#124;&#124; []).push(&#123;&#125;);</script><br/>[centos]<br/><br/>安裝pptpd<br/><br/>yum install pptpd<br/><br/>修改/etc/pptpd.conf設定、系統設定等都與ubuntu相同<br/><br/>修改DNS設定，/etc/ppp/options.pptpd與ubuntu不一樣<br/><br/>修改防火牆開啟forward，修改/etc/sysconfig/iptables檔，在前面加上<br/><br/><div class="code"><br/>*nat<br/>:PREROUTING ACCEPT &#91;4:1992&#93;<br/>:POSTROUTING ACCEPT &#91;0:0&#93;<br/>:OUTPUT ACCEPT &#91;0:0&#93;<br/>-A POSTROUTING -s 192.168.99.0/24 -o eth0 -j MASQUERADE<br/>COMMIT<br/></div><br/><br/>開啟GRE以及1723，在filter區段加入以下兩行<br/><br/>-A INPUT -p gre -j ACCEPT<br/>-A INPUT -p tcp --dport 1723 -j ACCEPT<br/><br/>重啟防火牆即可。<br/>
]]>
</description>
</item><item>
<link>https://xdeath.tw/read.php?78</link>
<title><![CDATA[SSH 反向隧道與proxy]]></title> 
<author>admin &lt;tszheng@twnic.net.tw&gt;</author>
<category><![CDATA[linux]]></category>
<pubDate>Wed, 03 Apr 2019 02:29:47 +0000</pubDate> 
<guid>https://xdeath.tw/read.php?78</guid> 
<description>
<![CDATA[ 
	當家裡有一台linux 主機，而家中又是使用NAT，而分享器也不是你能夠控制的時候<br/><br/>當你人在外面，要連回去既不能設定DMZ也不能設定port forward，那要怎麼連回家中呢？<br/><br/>這時候就可以使用ssh的反向隧道<br/><br/>假設家中的伺服器A，這時候我們需要一台中繼用的伺服器B<br/><br/>B必須讓A能夠ssh連線，同時也要讓我們在想要控制A的地方能夠連線<br/><br/>連線方式是從A發起ssh連線到B，並設定反向隧道<br/><br/>ssh -fN -R 反向隧道的port:localhost:22 username@B_ip<br/><br/>接著當我們想要連回A的時候，先ssh登陸B，接著走這條反向隧道<br/><br/>ssh username@localhost:反向隧道的port<br/><br/>就可以連線回A了。<br/><br/>當要中斷這個服務的時候，因為是B在LISTEN這個PORT<br/><br/>所以在B上用netstat找到這個PORT的PID，kill掉就可以了。<br/><br/>這種方式是需要先登錄到B主機，也有另一種方式直接在B主機上開一個PORT LISTEN，做到直接轉發<br/><br/>首先修改SSHD的設定<br/><br/>vim /etc/ssh/sshd_config<br/><br/>找到GatewayPorts，把註解拿掉並加上clientspecified，重啟sshd<br/><br/>service sshd restart<br/><br/>從A建立反向連線<br/><br/>ssh -fN -R B_IP:B轉發PORT:localhost:22 B_user@B_IP<br/><br/>如果是RDP的話要改成localhost:3389<br/><br/>這樣以後只要ssh B_user@B_IP:B_PORT就可以直接連線回A了。<br/><br/>另外我們還可以利用這條連線讓其他服務進行存取，原理是這樣的<br/><br/>首先在使用自己電腦連上B的轉發PORT，在windows上你可以使用putty<br/><br/>或是有支援ssh的話(windows 10應該有支援)直接這樣下<br/><br/>ssh -D 8080 user@B_IP -p B轉發port&nbsp;&nbsp;# 8080是自訂的一個隨意的PORT<br/><br/>如果不支援ssh的話就下載putty或是pietty用putty mode<br/><br/>在host跟port的地方設定你要當作跳板的server資訊，接著點左方ssh的tunnel<br/><br/><a href="https://xdeath.tw/attachment.php?fid=10" target="_blank"><img src="https://xdeath.tw/attachment.php?fid=10" class="insertimage" alt="點擊在新視窗中瀏覽此圖片" title="點擊在新視窗中瀏覽此圖片" border="0"/></a><br/><br/>接著再source那邊填入你要當作跳板的port，選擇dynamic->add<br/><br/><a href="https://xdeath.tw/attachment.php?fid=11" target="_blank"><img src="https://xdeath.tw/attachment.php?fid=11" class="insertimage" alt="點擊在新視窗中瀏覽此圖片" title="點擊在新視窗中瀏覽此圖片" border="0"/></a><br/><br/>open之後打入帳號密碼登入就可以了<br/><br/>等等我們要讓其他服務的流量通過8080這個PORT到B再到A<br/><br/>保持這個連線的視窗不要關掉，接著到IE的工具->網際網路選項<br/><br/>選擇連線->lan設定，勾起自動偵測設定，以及為您的LAN使用PROXY<br/><br/>進入進階Socks，位址打上localhost，連接埠打上剛剛的8080<br/><br/>確定後測試一下，你連線網頁是不是先到B再到A再到你要瀏覽的網頁<br/><br/>直接用瀏覽器連http://ifconfig.me，如果看到自己的IP是A的IP那就表示成功了。<br/><br/>另外一種情境是防火牆內有一台windows的機器以及一台linux的機器<br/><br/>但是你只能夠連的到linux，需要透過linux對windows進行遠端，若是windows10本身內建ssh client<br/><br/>可以用以下的指令到linux建立tunnel讓你遠端windows<br/><br/>ssh -L 3390:windows_ip:3389 -l username linux_ip<br/><br/>然後再用windows內建的rdp軟體去連線localhost:3390就走tunnel到linux的3390<br/><br/>再繞到windows的3389 port，完成遠端桌面作業。
]]>
</description>
</item><item>
<link>https://xdeath.tw/read.php?77</link>
<title><![CDATA[rclone - 用command line存取各種雲端硬碟]]></title> 
<author>admin &lt;tszheng@twnic.net.tw&gt;</author>
<category><![CDATA[linux]]></category>
<pubDate>Fri, 15 Mar 2019 07:01:25 +0000</pubDate> 
<guid>https://xdeath.tw/read.php?77</guid> 
<description>
<![CDATA[ 
	會想到再linux上同步資料到google drive或是dropbox主要是有些比較重要的資料<br/><br/>加密之後放在公有雲上還是比放在自己的NAS之類的上面安全(至少不用維護)<br/><br/>畢竟有時候自己的檔案伺服器會碰到停電、斷網，甚至硬碟故障的問題才衍生出這個需求<br/>rclone是一套公開的軟體，支援的雲端硬碟非常多，我先用centos 7做範例<br/><br/>首先到官網直接<a href="https://rclone.org/downloads/" target="_blank">下載</a>相對應的rclone <br/><br/>下載後直接解壓縮，unzip 後裡面最主要就一個執行檔而已先測試一下你的版本對不對<br/><br/><div class="code"><br/>./rclone --version<br/>rclone v1.46- os/arch: linux/amd64- <br/>go version: go1.11.5<br/></div><br/>看起來沒錯，接下來進行設定，(以下建議找一台WINDOWS下載rclone後進行設定)<br/><div class="code"><br/>rclone config<br/>n) New remote<br/>s) Set configuration password<br/>q) Quit config<br/>n/s/q&gt; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #新建一個連線<br/>name&gt; test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#連線名稱<br/> 1 / A stackable unification remote, which can appear to merge the contents of several remotes<br/>&nbsp;&nbsp; &#92; &quot;union&quot;<br/> 2 / Alias for a existing remote<br/>&nbsp;&nbsp; &#92; &quot;alias&quot;<br/> 3 / Amazon Drive<br/>&nbsp;&nbsp; &#92; &quot;amazon cloud drive&quot;<br/> 4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)<br/>&nbsp;&nbsp; &#92; &quot;s3&quot;<br/> 5 / Backblaze B2<br/>&nbsp;&nbsp; &#92; &quot;b2&quot;<br/> 6 / Box<br/>&nbsp;&nbsp; &#92; &quot;box&quot;<br/>.....<br/>Edit advanced config? (y/n)<br/>y) Yes<br/>n) No<br/>y/n&gt; n<br/>Remote config<br/>Use auto config?<br/> * Say Y if not sure<br/> * Say N if you are working on a remote or headless machine<br/>y) Yes<br/>n) No<br/>y/n&gt; y<br/></div><br/><br/>我先用google drive做DEMO，選擇12，接著就一路enter，中間問你要給什麼樣的權限<br/><br/>接著是是否要進階設定，結束後會開啟瀏覽器讓你登入google帳號，點允許rclone權限<br/><br/><div class="code"><br/>If your browser doesn&#039;t open automatically go to the following link: http://127.0.0.1:53682/auth<br/>Log in and authorize rclone for access<br/>Waiting for code...<br/>Got code<br/>Configure this as a team drive?<br/>y) Yes<br/>n) No<br/>y/n&gt; y<br/></div><br/><br/>接著底下就是一個設定檔<br/><br/>[test]<br/>type = drive<br/>scope = drive.readonly<br/>token = &#123;"access_token":"xxx","token_type":"Bearer","refresh_token":"xxx","expiry":"2019-03-15T15:42:23.301164+08:00"&#125;<br/><br/>結束設定，把這段config複製到linux上的/root/.config/rclone/rclone.conf<br/><br/>接下來就可以直接操作了，以下列出一些比較簡單常用的指令<br/><br/>rclone ls --max-depth 1 test:/&nbsp;&nbsp; #列出第一層的檔案<br/><br/>./rclone copy -v 測試上傳 test:/測試上傳&nbsp;&nbsp; #上傳<br/><br/>./rclone copy -v:/測試下載 ./&nbsp;&nbsp; #下載<br/><br/>接下來只要搭配cronjob就可以定時的把一些重要資料送到公有雲上了
]]>
</description>
</item><item>
<link>https://xdeath.tw/read.php?62</link>
<title><![CDATA[Email介紹(二)]]></title> 
<author>admin &lt;tszheng@twnic.net.tw&gt;</author>
<category><![CDATA[linux]]></category>
<pubDate>Thu, 08 Jun 2017 01:39:22 +0000</pubDate> 
<guid>https://xdeath.tw/read.php?62</guid> 
<description>
<![CDATA[ 
	承前一章，我要如何用程式發信呢，首先我們要了解，一封合格的email主要分成兩個部分<br/><br/>，Header以及body。<br/><br/>Header主要描述這封email是來自哪裡，要傳送給誰，主旨是什麼，什麼時間寄出來的信，使用<br/><br/>什麼編碼等等...；而body就是這封信的內容，包含文字內容還有附檔等...。<br/><br/>如果你的信件有好幾個部分(內文、好幾個附檔...)，那就用一個unique id把每個部份隔開<br/><br/>Header大概像下面這樣<br/><br/><div class="code"><br/>X-Priority: 3<br/>MIME-Version: 1.0<br/>Content-Transfer-Encoding: 8bit<br/>Content-type: text/html;charset=utf-8<br/>Content-type: multipart/mixed; boundary=&quot;$id&quot;; charset=&quot;UTF-8&quot;<br/>From: $from<br/>Subject: $title<br/>To: $to<br/></div><br/><br/>因為mail box同一個人的信件其實會寫成一個很大的檔案，因此他需要判斷每一個信的開頭<br/><br/>與結尾，所以需要一個unique的ID，同時利用這個ID區分整個內容的Header以及Body有幾<br/><br/>個部分，在header會先宣告這個ID，下面每一個部分開頭就是--$id，結束的時候就是--$id--，<br/><br/>這封信就結束了，如果你的email有多個部分，則需要加上multipart/mixed<br/><br/>Body的部分則是長得像下面這樣<br/><br/><div class="code"><br/>--$id<br/>Content-type: text/plain; charset=&quot;UTF-8&quot;<br/>Content-Transfer-Encoding: 8bit<br/><br/>內容<br/></div><br/><br/>每一塊body前面還是要宣告他是什麼類型的內容，什麼編碼，是否經過MIME過(附件)，宣告<br/><br/>完之後空兩行在接內容，像上面這就是文字的部分，如果還有夾檔則是在加一塊<br/><div class="code"><br/>--$id<br/>Content-type: application/unknown;name=$filename<br/>Content-transfer-encoding: base64<br/>Content-disposition: attachment; filename=$filename<br/><br/>編碼後的檔案<br/></div><br/>像上面就是宣告用base64編碼，最後再用一個--$id--結束就可以了<br/><br/>以PHP的範例來說就像下面這樣<br/><br/><div class="code"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function mailto($from,$to,$subject,$msg,$filename=&#039;&#039;)<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$mailto = &#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(count($to) &gt; 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for($i = 0;$i &lt; count($to);$i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mailto .= &quot;$to&#91;$i&#93;,&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mailto = $to;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$boundary = uniqid(&quot;&quot;); // 產生分隔字串 <br/>&nbsp;&nbsp;&nbsp;&nbsp;$subject = &#039;=?utf-8?B?&#039;.base64_encode(&quot;$subject&quot;).&#039;?=&#039;; // 標題加密(防亂碼) <br/>&nbsp;&nbsp;&nbsp;&nbsp;$headers = &#039;&#039;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;$headers .= &quot;MIME-Version: 1.0&#92;r&#92;n&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;$headers .= &quot;Content-type: multipart/mixed; boundary=&#92;&quot;$boundary&#92;&quot;; charset=&#92;&quot;UTF-8&#92;&quot;&#92;r&#92;n&quot;; //宣告分隔字串 <br/>&nbsp;&nbsp;&nbsp;&nbsp;$headers .= &#039;From:&#039;.$from.&quot;&#92;r&#92;n&quot;; // 設定寄件者 <br/>&nbsp;&nbsp;&nbsp;&nbsp;$headers .= &quot;X-Mailer: PHP/&quot;.phpversion().&quot;&#92;r&#92;n&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;$body .= &quot;--$boundary&#92;r&#92;n&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;$body .= &quot;Content-type: text/plain; charset=&#92;&quot;UTF-8&#92;&quot;&#92;r&#92;n&quot;;// 信件本文header <br/>&nbsp;&nbsp;&nbsp;&nbsp;$body .= &quot;Content-Transfer-Encoding: 8bit&#92;r&#92;n&#92;r&#92;n&quot;;// 信件本文header <br/>&nbsp;&nbsp;&nbsp;&nbsp;$body .= $msg.&quot;&#92;r&#92;n&quot;; // 本文內容 <br/>&nbsp;&nbsp;&nbsp;&nbsp;//附加檔案處理<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(!is_array($filename))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$files&#91;0&#93; = $filename;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if( count($files) != 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for($i = 0;$i &lt; count($files);$i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mimeType = mime_content_type($files&#91;$i&#93;); // 判斷檔案類型 ，php.ini要開啟php_mime_magic.dll<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!$mimeType)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mimeType = &quot;application/unknown&quot;; // 若判斷不出則設為未知 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data = chunk_split(base64_encode(file_get_contents($files&#91;$i&#93;)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$file = basename($files&#91;$i&#93;); //傳回不包含路徑的檔案名稱(mail中會顯示的檔名)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$body .= &quot;--$boundary&#92;r&#92;n&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$body .= &quot;Content-type: $mimeType; name=$file&#92;r&#92;n&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$body .= &quot;Content-transfer-encoding: base64&#92;r&#92;n&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$body .= &quot;Content-disposition: attachment; filename=$file&#92;r&#92;n&#92;r&#92;n&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$body .= &quot;$data&#92;r&#92;n&quot;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$body .= &quot;--$boundary--&quot;;//郵件結尾<br/>&nbsp;&nbsp;&nbsp;&nbsp;mail($mailto, $subject, $body, $headers); // 寄出信件<br/>&nbsp;&nbsp;&#125;<br/></div><br/><br/>perl範例<br/><br/><div class="code"><br/>sub mailto<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;my ($from,$to,$title,$content,$file) = @_;<br/>&nbsp;&nbsp;&nbsp;&nbsp;my $id = &#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(my $i = 0;$i &lt;= 20;$i++)&#123;$id .= chr(97 + int(rand(26)));&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$title = &#039;=?utf-8?B?&#039;.substr(encode_base64($title),0,-1).&#039;?=&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;my $header = &quot;X-Priority: 3&#92;r&#92;nMIME-Version: 1.0&#92;r&#92;nContent-Transfer-Encoding: 8bit&#92;r&#92;nContent-type: text/html;charset=utf-8<br/>Content-type: multipart/mixed; boundary=&#92;&quot;$id&#92;&quot;; charset=&#92;&quot;UTF-8&#92;&quot;&#92;r&#92;nFrom: $from&#92;r&#92;nSubject: $title&#92;r&#92;nTo: $to&#92;r&#92;n--$id<br/>Content-type: text/plain; charset=&#92;&quot;UTF-8&#92;&quot;&#92;r&#92;nContent-Transfer-Encoding: 8bit&#92;r&#92;n&#92;r&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;#夾檔<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($file ne &#039;&#039;)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $filename = basename($file);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $data = encode_base64(`cat $filename`);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$content .= &quot;&#92;r&#92;n&#92;r&#92;n--$id&#92;r&#92;nContent-type: application/unknown;name=$filename&#92;r&#92;nContent-transfer-encoding: base64<br/>Content-disposition: attachment; filename=$filename&#92;r&#92;n&#92;r&#92;n$data&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$content .= &quot;--$id--&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;open(MM,&quot;&#124;/usr/lib/sendmail -oem -oi -f &#039;$from&#039; -t &#039;$to&#039;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;print MM &quot;$header$content&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;close(MM);<br/>&#125;<br/></div><br/><br/>
]]>
</description>
</item><item>
<link>https://xdeath.tw/read.php?61</link>
<title><![CDATA[Email介紹(一)]]></title> 
<author>admin &lt;tszheng@twnic.net.tw&gt;</author>
<category><![CDATA[linux]]></category>
<pubDate>Thu, 08 Jun 2017 01:14:15 +0000</pubDate> 
<guid>https://xdeath.tw/read.php?61</guid> 
<description>
<![CDATA[ 
	想了解一封Email是如何從我這邊發送到別人手上的，我們必須要先了解從我們寄信到對方收到<br/><br/>信，中間的有三個腳色MUA、MTA以及MDA幫我們作處理信件的動作。<br/><br/>MUA：簡單來說就是像Outlook、或是gmail的web介面，讓使用者可以透過這個介面<br/><br/>去與郵件主機作收發信的溝通動作。<br/><br/>MTA：就是用來寄信的部分，也就是SMTP SERVER，linux主機上預設就是postfix或是sendmail<br/><br/>MDA：則是用來處理收到信件後的一些動作，例如要分到哪個mailbox，是否要在轉寄出去，要<br/><br/>把他做篩選、過濾垃圾郵件等。<br/><br/>任何一台linux基本上預設都是可以發信的(25 port預設應該都是開啟的)，也就是即使你沒有網<br/><br/>域名稱，你一樣可以發email，但是對方收到會不會丟掉那又是另外一回事了，所以有時候如果<br/><br/>碰到妳發給某個特定的信箱沒辦法收到，不要懷疑你們家的MIS是不是設定錯了(MIS很辛苦，他<br/><br/>是無辜的)，比較大的可能是對方把你擋掉了(或是過濾掉了)。另外雖然沒有網域名稱可以寄信，<br/><br/>但是沒有網域名稱你一定是收不到對方的回信，所以真的要使用電子郵件，還是乖乖去申請一個<br/><br/>網域名稱吧。<br/><br/>至於郵件伺服器怎麼判斷要不要把你的信丟掉，Mail Server主要會抓幾個條件去判斷：<br/><br/>1.你的MX設定正不正確：當收到信的時候，會去查這封信是不是由這個網域名稱信任的郵件主<br/><br/>機寄出來的。<br/><br/>2.如上面講的，每一台主機都可以自己發信，假設你在公司內不想使用mail server發大量的信，<br/><br/>想另外找一台主機來發信的話，最簡單的方式就是在DNS裡面設定SPF，SPF是告訴對方這個網<br/><br/>域名稱信任的IP有哪些，從這些IP所發出去的email都是這個網域名稱允許的。<br/><br/>3.因為整個網路上垃圾郵件大概佔了所有郵件的90%，因此網路上也有提供一些郵件的黑名單<br/><br/>，郵件主機收到信以後會去查你這個IP是否在黑名單中，想知道自己的網域名稱或IP是否有被<br/><br/>列入國際的郵件黑名單可以搜尋RBLS，有好幾個組織有提供公開的黑名單列表讓大家作查詢。<br/><br/>4.你的內容，例如gmail或是商用的郵件主機，會發現他過濾垃圾郵件的功能非常的強(當然誤<br/><br/>判也多)，就是因為他會根據你的內容再去作過濾。<br/><br/>假設我要用程式透過自己的linux主機作大量發信的動作，這個部分我們就留到下一章再談。
]]>
</description>
</item><item>
<link>https://xdeath.tw/read.php?60</link>
<title><![CDATA[在centos 6.x 安裝dropbox(no gui)]]></title> 
<author>admin &lt;tszheng@twnic.net.tw&gt;</author>
<category><![CDATA[linux]]></category>
<pubDate>Wed, 05 Apr 2017 09:24:40 +0000</pubDate> 
<guid>https://xdeath.tw/read.php?60</guid> 
<description>
<![CDATA[ 
	首先下載dropbox相關程式，如果系統是centos x86版本<br/><br/>cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" &#124; tar xzf -<br/><br/>接著要安裝python，你可以先檢查python的版本python --version<br/><br/>yum install python<br/><br/>接著與自己的帳號做連接<br/><br/>~/.dropbox-dist/dropboxd<br/><br/>他會給你一個連結，點入後打入自己的帳號密碼即可<br/><br/>接著啟動dropbox<br/><br/>/root/.dropbox-dist/dropboxd start<br/><br/>如果啟用成功應該表示可以了<br/><br/>到dropbox目錄底下檢查是否有同步資料了<br/><br/>cd /root/Dropbox/<br/><br/>接著設定用哪個linux帳號啟用dropbox<br/><br/>vim /etc/sysconfig/dropbox<br/><br/>DROPBOX_USERS="root"<br/><br/>最後寫一個shell去啟用/停用dropbox<br/><br/>touch /etc/init.d/dropbox && chmod 755 /etc/init.d/dropbox && vi /etc/init.d/dropbox<br/><br/><div class="code"><br/><br/># chkconfig: 345 85 15<br/># description: Startup script for dropbox daemon<br/>#<br/># processname: dropboxd<br/># pidfile: /var/run/dropbox.pid<br/># config: /etc/sysconfig/dropbox<br/>#<br/><br/>### BEGIN INIT INFO<br/># Provides: dropboxd<br/># Required-Start: $local_fs $network $syslog<br/># Required-Stop: $local_fs $syslog<br/># Should-Start: $syslog<br/># Should-Stop: $network $syslog<br/># Default-Start: 2 3 4 5<br/># Default-Stop: 0 1 6<br/># Short-Description: Start up the Dropbox file syncing daemon<br/># Description:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dropbox is a filesyncing sevice provided by dropbox.com<br/>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This service starts up the dropbox daemon.<br/>### END INIT INFO<br/><br/># Source function library.<br/>. /etc/rc.d/init.d/functions<br/><br/># To configure, add line with DROPBOX_USERS=&quot;user1 user2&quot; to /etc/sysconfig/dropbox<br/># Probably should use a dropbox group in /etc/groups instead.<br/><br/>&#91; -f /etc/sysconfig/dropbox &#93; &amp;&amp; . /etc/sysconfig/dropbox<br/>prog=dropboxd<br/>lockfile=$&#123;LOCKFILE-/var/lock/subsys/$prog&#125;<br/>config=$&#123;CONFIG-/etc/sysconfig/dropbox&#125;<br/>RETVAL=0<br/><br/>start() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo -n $&quot;Starting $prog&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if &#91; -z $DROPBOX_USERS &#93; ; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo -n &quot;: unconfigured: $config&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo_failure<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm -f $&#123;lockfile&#125; $&#123;pidfile&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETURN=6<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $RETVAL<br/>&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;for dbuser in $DROPBOX_USERS; do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbuser_home=`cat /etc/passwd &#124; grep &quot;^$dbuser:&quot; &#124; cut -d&quot;:&quot; -f6`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;daemon --user $dbuser /bin/sh -c &quot;$dbuser_home/.dropbox-dist/dropboxd&amp;&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;done<br/>&nbsp;&nbsp;&nbsp;&nbsp;RETVAL=$?<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#91; $RETVAL = 0 &#93; &amp;&amp; touch $&#123;lockfile&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return $RETVAL<br/>&#125;<br/><br/>status() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for dbuser in $DROPBOX_USERS; do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbpid=`pgrep -u $dbuser dropbox &#124; grep -v grep`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#91; -z $dbpid &#93; ; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;dropboxd for USER $dbuser: not running.&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;dropboxd for USER $dbuser: running (pid $dbpid)&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;done<br/>&#125;<br/><br/>stop() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo -n $&quot;Stopping $prog&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for dbuser in $DROPBOX_USERS; do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbuser_home=`cat /etc/passwd &#124; grep &quot;^$dbuser:&quot; &#124; cut -d&quot;:&quot; -f6`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;killproc $dbuser_home/.dropbox-dist/dropbox<br/>&nbsp;&nbsp;&nbsp;&nbsp;done<br/>&nbsp;&nbsp;&nbsp;&nbsp;RETVAL=$?<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#91; $RETVAL = 0 &#93; &amp;&amp; rm -f $&#123;lockfile&#125; $&#123;pidfile&#125;<br/>&#125;<br/><br/># See how we were called.<br/>case &quot;$1&quot; in<br/>&nbsp;&nbsp;&nbsp;&nbsp;start)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;status)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;stop)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;restart)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;*)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $&quot;Usage: $prog &#123;start&#124;status&#124;stop&#124;restart&#125;&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETVAL=3<br/>esac<br/>exit $RETVAL<br/></div><br/><br/>這樣以後要啟用/停用dropbox只需要下<br/><br/>/etc/init.d/dropbox start/stop即可<br/><br/>轉自http://www.dropboxwiki.com/tips-and-tricks/install-dropbox-centos-gui-required
]]>
</description>
</item><item>
<link>https://xdeath.tw/read.php?48</link>
<title><![CDATA[ubuntu的防火牆-ufw]]></title> 
<author>admin &lt;tszheng@twnic.net.tw&gt;</author>
<category><![CDATA[linux]]></category>
<pubDate>Wed, 22 Jun 2016 00:56:24 +0000</pubDate> 
<guid>https://xdeath.tw/read.php?48</guid> 
<description>
<![CDATA[ 
	如果平常是使用Centos習慣的，一定很不習慣ubuntu的UFW<br/><br/>不像Centos直接改/etc/sysconfig/iptables就好，ubuntu是找不到設定檔的<br/><br/>完全要透過ufw的指令啟用/停止，也要手動一行一行下iptables<br/><br/>所以使用shell把所有規則刪除重新執行一次，同時放到開機執行<br/><br/>看起來是跟Centos的方式是類似的<br/><br/><code><br/>#!/bin/bash<br/><br/>iptables -F<br/>iptables -X<br/>iptables -Z<br/>iptables -P INPUT&nbsp;&nbsp; DROP<br/>iptables -P OUTPUT&nbsp;&nbsp;ACCEPT<br/>iptables -P FORWARD DROP<br/>iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT<br/>iptables -A INPUT -p icmp -j ACCEPT<br/>iptables -A INPUT -i lo -j ACCEPT<br/>iptables -A INPUT -s x.x.x.x/32 -p tcp --dport 22 -j ACCEPT<br/>iptables -A INPUT -s x.x.x.x/32 -p tcp --dport 22 -j ACCEPT<br/>iptables -A INPUT -s x.x.x.x/32 -p tcp --dport 22 -j ACCEPT<br/><br/>#iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited<br/>#iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited<br/></code><br/><br/>將這個檔案寫成iptables.sh放到/usr/local/bin/底下，權限改為chmod 755 iptables.sh<br/><br/>要重新reload就可以直接下 iptables.sh<br/><br/>接著在/etc/rc.local中增加一行<br/><br/>/usr/local/bin/iptables.sh 開機直接執行即可<br/><br/>要關閉防火牆&nbsp;&nbsp;ufw disable<br/><br/>開啟防火牆&nbsp;&nbsp;ufw enable<br/><br/>
]]>
</description>
</item><item>
<link>https://xdeath.tw/read.php?38</link>
<title><![CDATA[git client 基本使用]]></title> 
<author>admin &lt;tszheng@twnic.net.tw&gt;</author>
<category><![CDATA[linux]]></category>
<pubDate>Mon, 22 Feb 2016 03:42:19 +0000</pubDate> 
<guid>https://xdeath.tw/read.php?38</guid> 
<description>
<![CDATA[ 
	在上一篇我們有提到一些global 的設定<br/><br/>接著我們可以開始使用git管理我們的專案<br/><br/>第一種情況是我們在gitlab server那邊已經有現成的專案了，那我們就是把專案取下來<br/><br/>git clone https://hostip/user/project.git，打入帳號密碼後就可以看到一個project的資料夾<br/><br/>就可以在裡面進行程式碼的修改與維護<br/><br/>第二種是我們在本地已經開發了一些程式碼要上傳到gitlab server，一樣要先到gitlab server上開啟一個新的專案<br/><br/>接著在本地的專案資料夾初始化專案<br/><br/>git init&nbsp;&nbsp; ，接著上傳<br/><br/>git remote add origin https://hostip/user/project.git<br/><br/>git add .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#表示要把所有有更動的檔案都加入上傳清單<br/><br/>git commit -m 'first commit'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#commit的註解<br/><br/>git push -u origin master&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#上傳到gitlab server<br/><br/>另外專案中總會有一些檔案我們沒有要上傳，例如設定檔裡面可能含有密碼，金鑰等等<br/><br/>所以我們可以在專案資料夾底下建立一個.gitignore<br/><br/>裡面可以寫那些檔案不上傳，例如config.*, 隱藏檔.*、!.gitignore<br/><br/>假如git add後發現有些檔案不要上傳，那我們可以重設<br/><br/>git reset<br/><br/>以下是幾個情境<br/><br/>#-----------------------------------我要回復到特定版本<br/><br/>首先git log先檢查，會友一行是這樣(用git log --graph --oneline --all更清楚)<br/><br/>commit 7dcaebf51e72a6f825511a8fee1f47aac842f863<br/><br/>git checkout 7dcae.....就是回復到哪個版本<br/><br/>當然你也可以只還原某個檔案到某個版本<br/><br/>git checkout 7dcae...... filename<br/><br/>那push之後怎麼刪除遠端版本庫的呢~~<br/><br/>很像沒辦法的樣子XD，所以要push之前請先想清楚<br/><br/>#------------------------------------註解寫錯了要重寫<br/><br/>git commit --amend<br/><br/>#------------------------------------刪除檔案<br/><br/>要刪除檔案如果直接rm xxx，然後git add，這樣的刪除是不會成功的<br/><br/>必須用git rm，在git add .進行刪除<br/><br/>#------------------------------------其他人有更新了版本庫，我要下載之後再繼續工作<br/><br/>git pull&nbsp;&nbsp;&nbsp;&nbsp;就會把別人上傳到gitlab server的程式碼拉下來，方便我們繼續作業<br/><br/>#------------------------------------有時候上傳會發生Everything up-to-date的錯誤<br/><br/>這是表示你的分支branch跑掉了，先檢查自己在哪個branch上<br/><br/>git branch<br/>* (no branch)<br/>master<br/><br/>那我們要先切換回branch master才可以繼續上傳工作<br/><br/>git checkout master<br/><br/>#------------------------------------專案完成，要匯出程式碼相關檔案<br/><br/>git archive --format zip --output zipfile.zip master<br/><br/>
]]>
</description>
</item>
</channel>
</rss>