跳到主要內容

Linux操作不求人 - 肆章之柒 - 伺服器架設(VII) - 代理與動態主機設定伺服器 - Proxy 與 DHCP/NAT-DHCP

     代理伺服器(以下簡稱 Proxy,https://en.wikipedia.org/wiki/Proxy_server)是在網際網路中,瀏覽網頁常用的加速方式,而透過代理伺服器,您的上網位置,也可以暫被識別成代理伺服器的 IP位址,如圖4-63-1,若 Client 1 設定 Proxy Server,並要存取Internet的資料時,則會先詢問Proxy Server是否已有該網站資料供快取(Cache),若有,則直接給Client 1資料,若無,則由Proxy Server去先該網站存取資料,再傳遞給Client 1,所以若有設定 Proxy 的瀏覽器存取網際網路的網站有錯誤時,記得要檢查Proxy Server是否有成功運作,或是取消設定 Proxy Server 來排除。而在 CentOS6_x64 內的 Proxy伺服器軟體,則是以 squid ( http://www.squid-cache.org/ )最為普遍,但其實架設網站的 Apache 與 Nginx 伺服器軟體,也具有 Proxy 的功能模組可用。但筆者本篇主要介紹 squid 伺服器軟體的架設方式,且 squid 亦有 MS Windows 的版本,可在 MS Windows 下運作 Proxy 的服務。在CentOS6_x64下,同樣的利用 yum -y install squid 來下載,如圖4-63-2























(圖4-63-1)
































(圖4-63-2)

接著編輯設定檔 /etc/squid/squid.conf,相信讀者應該也習慣每個伺服器軟體大致放置的設定檔位置與規則。squid 的設定檔內容相當少,筆者將其列於圖4-64-1與4-64-2,並僅將須修改之處列出如下:

acl my_network src 192.168.100.0/24
acl my_network src 10.0.2.0/24
/*  設定允許存取來源的網域,亦可以設定可存取目的的網域,將 src 改為 dst,若用網域來限制,則換為  srcdomain 與 dstdomain 如 acl my_domain srcdomain  .linux.com  */

# acl  safe_ports  port  70
# acl  safe_ports  port  210
# acl  safe_ports  port  488
/*  加上符號 #,來停掉用不到該服務的 port  */ 

http_access  allow  my_network
/*  加在  http_access allow localhost 與  http_access deny all 之間  */

cache_dir ufs /var/spool/squid 1024  16  256
/*  快取資料夾大小1024MB,接著16為 /var/spool/squid 內的目錄個數, 256 為 16 個目錄下的子目錄數。若要修改預設資料夾,請記得修改 SElinux 檔案屬性。 */

cache_swap_low 80
cache_swap_high 90 
/*  快取啟動清除的上下限百分比  */

cache_mem 256 MB  
 /*  要小於快取資料夾的設定數值,否則會有警告訊息(圖4-65)。http://www.squid-cache.org/Doc/config/cache_mem/  */

http_port 3128 
/*  若想修改此預設值,請注意 SELinux 要開啟允許,如要改成 1978,則需利用指令
$ semanage port -a -t squid_port_t -p tcp 1978
 詳細可見 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/chap-Managing_Confined_Services-Squid_Caching_Proxy.html
*/
































(圖4-64-1)































(圖4-64-1)

接著若要防止允許網域內的人想盜用 Proxy 來抓取自己的資料,如通常放在 "我的D槽" 那些,我可以利用認證的方式來防止,如以下:
$  touch  /etc/squid/squid_htpasswd
$  chown  squid.squid  /etc/squid_htpasswd
$  htpasswd  /etc/squid/squid_htpasswd  newuser

在加入認證機制到 squid 設定檔  /etc/squid/squid.conf
$  echo 'auth_parm basic program /usr/lib64/squid/ncsa_auth  /etc/squid/squid_passwd'   \ >> /etc/squid.conf
$  echo 'acl  ncsa_users  proaxy_auth  REQUIRED'   \ >> /etc/squid.conf
$  echo 'http_access  allow  ncsa_users'   \ >> /etc/squid.conf

若想隱匿您的連線訊息,請加入以下參數:

request_header_access   Authorization  allow  all
request_header_access   www-Authorization  allow  all
request_header_access   Proxy-Authorization allow all
request_header_access   Cache-Control  allow all
request_header_access   Content-Encoding  allow all
request_header_access   Content-Length  allow all
request_header_access   Content-Type  allow all
request_header_access   Date allow  all
request_header_access   Host  allow all
request_header_access   If-Modified-Since  allow all
request_header_access   Pragma  allow all
request_header_access   Accept allow  all
request_header_access   Accept-Charset allow all
request_header_access   Accept-Encoding allow all

request_header_access   Accept-Language allow all
request_header_access   Content-Language allow all
request_header_access   Connection allow all
request_header_access   Proxy-Connection allow all
request_header_access   All deny all

 /*  http://www.squid-cache.org/Doc/config/request_header_access/  */

要限制某些網站使用 Proxy,可以使用 blocklist,如以下先產生 blocklist file
$ echo 'www.facebook.com' > /etc/squid/myblocklist
$ echo 'www.reddit.com' >>  /etc/squid/myblocklist

在 /etc/squid/squid.conf 加上 acl 的限制,如以下
acl myblocklist dstdomain " /etc/squid/myblocklist"
http_access deny myblocklist 

若是限制利用 Proxy 上暴力與色情相關網址,亦可以加上網址字串清單:
$ echo 'gore' > /etc/squid/myblockurlwords
$ echo 'porn' >>  /etc/squid/myblockurlwords
$ echo 'xxx'  >> /etc/squid/myblockurlwords




接著再加入 acl 限制於設定檔 /etc/squid/squid.conf
acl myblockwords url_regex  -i  " /etc/squid/myblockurlwords"
http_access deny myblockurlwords
 
以上設定完後,啟動或重啟動 squid,如圖4-65,若設定帳密認證,記得連入端亦要輸入 newuser 與其密碼:
$  service  squid  start











(圖4-65)


對 squid-cache 詳細設定有興趣的讀者,可以參考 http://wiki.squid-cache.org/ConfigExamples,或 http://www.squid-cache.org/Doc/config/

開啟 iptables 防火牆的允許與啟動開機載入
$  iptables  -A INPUT  -p  tcp  --dport   3128   -j   ACCEPT
$  service  iptables  save
$ chkconfig --level 235 squid on

連入主機端的瀏覽器設定為如圖4-66






























(圖4-66)

     如圖4-66在選項內,點選後,進入左邊進階選項,如圖4-47,在進階畫面內,再點選網路,並出現 Proxy 設定畫面,我們選擇手動設定,並輸入 Proxy server 的 IP 位址 10.0.2.15 與埠號 3128 即可使用 Proxy server 的服務。































 (圖4-67)
 
@DHCP
     若要讓很多電腦主機,共用一個實體IP,或是指定一組IP範圍,讓來賓或其他主機可以自動抓取IP,並短暫上網,此時就可以利用 DHCP 的方式(https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol) 來分派。此分派動態實體IP的方式,如示意圖4-68。在CentOS6_x64下,則利用 dhcpd伺服器軟體,與前面篇章相同的,直接利用 yum -y install dhcp 下載 (圖4-69)























(圖4-68)




























(圖4-69)


     接著直接編輯 dhcpd (for ipv4)設定檔  /etc/dhcp/dhcpd.conf,( /etc/dhcp/dhcpd6.conf 為 ipv6)。 進入後,可以看到說明提醒,範例檔為 /usr/share/doc/dhcp*/dhcpd.conf.sample,故我們便先利用指令 cp 將其複製到 /etc/dhcp 內,如圖4-70,並編輯新的 /etc/dhcp/dhcpd.conf









(圖4-70)

     若我們僅需要動態分配公用固定數量的 IP 範圍,可將設定檔修改如筆者列出之 /etc/dhcp/dhcpd.conf 需要修改之處:

authoritative;
ddns-update-style           none;
ignore  client-updates;

option     domain-name   "mylinux.com";
option     domain-name-servers  10.0.2.2  10.0.254.4;
/*  端看您的 DNS server IP 位址*/


default-lease-time           3600;   /* 每次租借時間,每次給連入端 1 小時  */

max-lease-time                86400;  /*  以最高租租借時間為主,以秒為單位,最高 24 小時  */

one-lease-per-client        true;
log-facility   local7;
ping-check   true;


subnet   10.0.2.0   netmask   255.255.255.0  {
     option   routers                      10.0.2.254;
     option   broadcast-address    10.0.2.255;
     range    dynamic-bootp          10.0.2.100     10.0.2.150;
     /*   使用 bootp 的方式(https://en.wikipedia.org/wiki/Bootstrap_Protocol)  */ 

}


若為分配虛擬位址給每台主機使用同一實體 IP位址(如圖4-71),需先使用NAT(Network Address Translation, https://en.wikipedia.org/wiki/Network_address_translation) 的方法,來將位址轉成單一的實體IP,指令如下:

$ iptables -A  INPUT -i eth1  -j  ACCEPT
/* 接受所有來自eth1(內網)的封包  */

$ iptables -A  POSTROUTING  -t  nat  -s  168.10.100.0/24  -o  eth0  -j  MASQUERADE
/* 將由虛擬 NAT 下的主機之虛擬 IP 主機之封包,藉由 eth0 來隱蔽傳遞出去  */

$ iptables  -I  FORWARD  -i  eth1  -j ACCEPT
$ iptables  -A  FORWARD  -o eth1  -j  ACCEPT 
/* 開啟 NAT 能力會用到 FORWARD */

$ service iptables save

接著修改參數檔 /etc/sysctl.conf
$ echo 'net.ipv4.ip_forward=1'  >> !  /etc/sysctl.conf  
/* 亦可用 vim 編輯,或是用 sed 取代參數名稱 net.ipv4.ip_forward之值  */

$ sysctl  -p
$ service network restart

以上便是 CentOS6_x64 藉由 iptables 啟動 NAT 的能力,利用轉換封包方式來節省真實 IP 數量的使用。




(圖4-71)

接著再利用 DHCP 伺服器軟體的能力,對連入的機器做動態分配虛擬 IP。
首先,我們需將 DHCP server 位址,設定成 router 位址,設定方式可如前面篇章,從設定檔 /etc/sysconfig/network-script/ifcfg-eth1,來修改,接著我們可將 dhcpd 設定檔修改為以下:
ddns-update-style            none;
authoritative;ignore  client-updates;

option     domain-name   "mylinux.com";
option     domain-name-servers  10.0.2.2  10.0.254.4;

default-lease-time            3600;  
max-lease-time                 86400;
one-lease-per-client         true;
log-facility   local7;
ping-check   true;

subnet   168.10.100.0   netmask   255.255.255.0  {
     option   routers                      168.10.100.254;   
     /*  路由器位址,通常為 DHCP Server IP 位址,將 eth1 之 IP 設定為 168.10.100.254 */
     option   broadcast-address   168.10.100.255;
     range    168.10.100.100     168.10.100.199;
     /*   使用 DHCP動態分配 100 個虛擬 IP   */ 

     host Intra_Server {
         hardware ethernet  a1:0c:59:78:a2:b4  /* 內網某主機乙太網路卡 MAC  */
         fixed-address  168.10.100.178;   /*在 DHCP 動態分配的IP範圍內,固定給某機器用  */     
     } 

     host intra_Printer_FX{       
         hardware ethernet  c1:d2:e3:78:a2:b4  /* 內網印表機乙太網路卡 MAC  */
         fixed-address  168.10.100.180;   /*在 DHCP 動態分配的IP範圍內,固定給印表機用 */     
     }

}

host Printer_HP {
     hardware ethernet  12:0b:56:78:a2:b4   /*  印表機乙太網路卡 MAC  */
     fixed-address   168.10.100.50;
}

若要變更僅有單張網路卡提供 dhcpd 服務,則需編輯 /etc/sysconfig/dhcpd,如以下
DHCPDRAGS=eth1

若要修改內部網路對應的 IP 與 hostname,請編輯檔案 /etc/hosts,方式設定如前面篇章。
啟動 dhcpd 服務,並開始於網域內廣播 DHCP Server 的服務
$ service dhcpd start

開啟 iptables 防火牆的允許與啟動開機載入
$  iptables  -A INPUT  -p  udp  --dport   67   -j   ACCEPT
$  service  iptables  save
$ chkconfig --level  235  dhcpd  on

     若有關 DHCP Server 在 SELinux 下的各項參數設定,可參考https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/ch13s02.html,其他設定可參考CentOS 舊版說明 https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-dhcp-configuring-server.html

     啟動 DHCP Server 後,連入端主機(Client)的設定,僅需在網路設定檔,如連入端 eth0 設定檔為
/etc/sysconfig/network-scripts/ifcfg-eth0,設定
BOOTPROTO = dhcp 

     若是使用 NetworkManager 的 GUI 介面的 Linux 捧油,請在 Gnome 或 KDE 桌面網路 icon 的位置,開啟設定,選擇自動取得 IP 與自動取得 DNSserver 即可,如圖4-70-1。連入端為 MS Windows 設定的部分,筆者以 Windows 10 為例,使用 控制台 -> 網路與網際網路 -> 網路與共用中心,進入網路與共用中心畫面後,左方有變更介面卡設定的選項,點選後會出現乙太網路。對著乙太網路按滑鼠右鍵 -> 選擇內容,出現如圖4-70-2






























(圖4-70-1)






















(圖4-70-2)

     圖4-70-2中,選擇網際網路通訊協定第4版(TCP/IPv4),在點選內容,會出現如圖4-70-3,此時選取 自動取得IP位址,與自動取得DNS伺服器位址即可,因為我們的 DHCP Server 已經有設定指派給連入端的 DNS Server 的 IP 位址了。

































(圖4-70-3)

     PROXY Server 與  DHCP/NAT-DHCP Server 在中小企業的網路環境很常用到,倘若某網頁服務需綁定某個 IP 才能使用,若要同時多人使用,就可能須靠 PROXY Server 或 / NAT-DHCP的能力來實現。在有限的真實 IP 網路環境下,DHCP Server 便是解決IP不足時,多台電腦主機輪流非同時間共用某幾個IP來上網,更甚是可從開啟 IPTABLES  NAT 的能力,讓多台電腦,同時使用一個真實 IP,實現連上網際網路,更簡單的方式,亦可從有/無線IP分享器,或WIFI無線網路路由器,便可設定這些實用的功能。這些方式可用於架構中小企業與學術單位研究室的內/外網路環境,若再搭配下節介紹的 VPN 伺服器軟體 ,便可以來設定內網的隱私通道,並隨時讓員工利用隱私通道連入內部網路,使用公司內部的網路資源。




If you have any feedback or question, please go to my forum to discuss.

這個網誌中的熱門文章

Linux操作不求人 - 伍章之伍 - make 巨集式編譯器

make是Linux下安裝軟體與程式一個相當重要的工具,如前章節所提的安裝軟體三劍客。 configure, make , make install。當我們完成自己所撰寫的C 或 fortran程式,通常會使用編譯器指令 gcc -cgfortran -c 來編譯成連結檔或物件檔函式庫(Library),如 .a (https://en.wikipedia.org/wiki/Static_library) .o .so等附檔名,而此函式庫又可以讓其他程式利用其中的函式與類別。何時要用到動態或靜態函式庫,stackoverflow有專業的回答(https://stackoverflow.com/questions/140061/when-to-use-dynamic-vs-static-libraries)。

假設我們要寫一個簡單的 C 程式,檔名為 hellomake.c,用 make 來編譯我們的程式,程式如下:
#include<stdio.h>
void main ( void )
{
   print ("This is my first c file."\n);
}

---------------------------------------------------
儲存離開後,利用autoscan 指令,便會產生如圖5-70的兩個檔 autoscan.log 與 configure.scan,而 configure.scan 便是需要產生標準的 GNU makefile 的關鍵檔。我們可以把他改成 configure.in 或 configure.ac,並利用 vim configure 來修改參數,如圖5-71,改為圖5-71右邊的參數











(圖5-70)





(圖5-71)


修改完 configure.in 內的參數後,再執行 aclocal 與 autoconf ,就會產生 autom4te.cache 的資料夾與 configure 的執行檔,此執行檔就是先前章節所要編譯原始碼前,會執行的 ./configure ,並會產生適合您的機器環境之 GNU Makefile,如圖5-72


(圖5-72)
接著編輯 Makefile.am 檔的內容,加入如下內容
AUTOMAKE_OPTION=foreign b…

Linux操作不求人 - 肆章之貳 - 伺服器架設(II) - 郵件伺服器 - postfix 與 dovecot

CentOS6_x64 在預設狀態下,通常已經有開啟發 email 的伺服器軟體 postfix,但僅限制在本機(localhost / 127.0.0.1 ) 使用,且僅是讓系統可以傳送錯誤訊息給 root。故我們要經由設定,讓電腦主機內的使用者帳號,皆可以收發 email,而我們用的送信軟體為 postfix,負責 smtp 的部分( https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol ) ,收信軟體則為 dovecot,負責 pop 或 imap ( https://en.wikipedia.org/wiki/Post_Office_Protocol,https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol )的部分,收發信機制的運作機制,可參考wikipedia,https://en.wikipedia.org/wiki/Email,筆者不再贅述,直接說明架設伺服器軟體的操作。先利用 rpm -qa | grep postfix 與 rpm -qa | grep dovecot 來查詢是否已經有安裝,若無,則利用 yum install postfix 與 yum install dovecot 來安裝。除此之外,再利用 chkconfig | grep postfix 與  chkconfig | grep dovecot 來確認是否有在開機時啟動,若想自動化開機啟動,再請設定 chkconfig --level 235 postfix on 與  chkconfig  --level 235 dovecot on 來載入。 如圖4-10與圖4-11:
































(圖4-10)
















(圖4-11)

     接著我們利用 vim 來修改 postfix 設定檔  /etc/postfix/main.cf 。相同地,我們先閱讀設定檔內容前面的說明,postfix 的作者相當細心,每個設定前的說明很詳細,故設定檔很長,請讀者要有耐心閱讀,如圖4-12-1 至 圖4-12-7。往後篇章若設定檔內容太長,筆者便不再列出,會直接說明新增與修改處,在此先說明。




























































































(圖4-12-1)




























































































(圖4-12-2)





























































































(圖4-12-3)





























































































(圖4-12-4…

Linux操作不求人- 肆章之壹 - 伺服器架設(I) - SSH(SFTP、SCP)、FTP伺服器與遠端連線

@ ssh, sftp 
    通常安裝好 CentOS6_x64 作業系統後,sshd, ssh daemon 的服務功能是預設開啟的,如筆者的前面篇章所述,預設的 iptables 防火牆設定,亦是開啟讓 ssh 的連線是可通過的,不僅可以連出,也可以被連入。若要確認是否有安裝 sshd 套件以及在啟動時的 runlevel 2 3 5 是否有被載入,可以使用以下指令搜尋:
$   rpm  -qa  |   grep  openssh    #  ssh 與 sshd 連線服務皆由 openssh 應用軟體提供。 或使用以下 $   rpm  -qa  |   grep  ssh        #  比用關鍵字 openssh 搜尋更模糊,故符合的條件更多。
     如圖4-1可以查詢到有關於 openssh-client 與 openssh-server 的套件, openssh-server 便是提供連入服務的軟體,openssh-client 為提供可以連出的工具。若無以上套件,則使用 yum install openssh ,則可下載安裝。


















(圖4-1)
再接著輸入以下指令查詢到 sshd 這個服務,是否有再開機程序內載入,如圖4-2 $ chkconfig | grep ssh  # 查詢 sshd 是否有於 開機 runlevel 啟動 再利用以下指令,來查詢是否防火牆有允許連線 $ iptables  -L  |  grep ssh   # 出現如圖4-2 允許通過之條件









(圖4-2)
     接下來,我們要先來調整 sshd 的設定檔,利用 vim  /etc/sshd/sshd_conf,如圖4-3-1與4-3-2。因為設定檔參數很多,筆者為方便說明,將 /etc/sshd/sshd_conf 檔案內容分成兩張圖。






































(圖4-3-1)






































(圖4-3-2)
     首先,筆者強烈建議設定前,先閱讀 /etc/ssh/sshd_config 檔案內容前幾行的說明,如之前我們做任何的服務設定前,務必閱讀說明文字。說明告訴我們,若要更動預設參數設定,可以移除符號 # ,並更改後面的參數值。而我們要改動的參數主要為以下幾項: Port   22 /*  一般 ssh 預設的 port 為 22,所以〝你知道、我知道、獨眼龍也知道〞,故建議可以更換預設 p…