2012年4月12日 星期四

/etc/security/limits.conf 設定

/etc/security/limits.conf和 ulimit的功能是一樣的,差別在ulimit是及時設定,/etc/security/limits.conf是預設系統上所有使用者的限制!/etc/security/limits.conf格式如下:
#帳號 限制依據 限制項目 限制值

帳號限制類別限制項目限制值
@開頭代表群組,也可用*代表所有soft,hard和-,soft是警告設定。hard是嚴格設定。soft的值不能比hard大。用-表示同時設定了soft和hardcore file size,data seg size,scheduling priority,file size,pending signals ,max locked memory ,max memory size,open files,pipe size,POSIX message queues,real-time priority,stack size,cpu time,max user processes,virtual memory,file locks限制的數量
另外,limits.conf的設定要生效,須在/etc/pam.d/login的內容中有session    required   pam_limits.so這段內容!且由於 PAM是在程式呼叫時才設定,因此修改完成的資料, 對於已登入系統中的使用者是沒有效果的,需再次登入時才會生效!

檔案系統及程序的限制關係:ulimit


ulimit [-SHacdfltu] [配額數]
選項與參數:
-H  :hard limit ,嚴格的設定,不能超過這個設定值;
-S  :soft limit ,警告的設定,可以超過這個設定值,但是超過則有警告訊息。
      通常設定上, soft會比hard小,例如soft設定為90而hard設定為100,那麼你可以使用到95(因為沒有      超過100),但介於90~100之間時,系統會有警告訊息!
-a  :後面不接任何選項與參數,可列出所有的限制額度;
-c  :當某些程式發生錯誤時,系統會將該程式在記憶體中的資訊寫成檔案(除錯用),這種檔案被稱為核心       檔案(core file)。此設定限制每個核心檔案的最大容量。
-f  :限制可以建立的最大檔案容量單位為Kbytes
-d  :程序可以使用的最大斷裂記憶體(segment)容量;
-l  :可用於鎖定(lock)的記憶體量
-t  :可使用的最大 CPU 時間 (單位為秒)
-u  :單一使用者可以使用的最大程序(process)數量。
例:
列出目前身份的限制資料
mnw@ap:/$ ulimit -a
core file size          (blocks, -c) 0     <<---0代表沒有限制
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited  <<---可建立的單一檔案大小
pending signals                 (-i) 15924
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024  <<---可以同時開啟的檔案數量
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 15924
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

現在單一檔案容量上限10MB
mnw@ap:/$ ulimit -f 10240
mnw@ap:/$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) 10240  <<---10240 Kbyes=10 MB
pending signals                 (-i) 15924
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 15924
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

mnw@ap:/$ dd if=/dev/zero of=123 bs=1M count=20
dd: opening `123': Permission denied  <<---要建立20MB的檔案,失敗了!



Squid的安裝與設定

安裝
sudo apt-get install squid3
查看squid的版本
squid3 -v
編輯設定檔
sudo vim /etc/squid3/squid.conf
指定squid使用的port,可以只指定port,也可以ip:port的方式指定squid綁定的IP與port,例如http_port 192.168.123.254:3128
http_port 3128
squid是以存取控制清單的方式來辨別是否接受客戶端的存取要求!存取控制清單的格式為「acl <名稱> <種類> <設定值>」,<名稱>可以任意指定,但不可重複!squid一般只接受本地端網路的存取,可以建立一個允許本地端網路存取的清單,如:
acl mynetwork src 192.168.123.0/24
建立存取清單後,需設定squid接受(allow)或拒絕(deny)存取清單的連線要求。參數為「http_access」,例如:http_access allow mynetwork,表示接受mynetwork這ㄍ存取清單的要求,http_access deny mynetwork則為拒絕!http_access會依照設定的先後順序加以套用規則!
http_access allow mynetwork
squid預設已有許多http_access的設定去阻擋一些不必要的連線,建議保留這些設定,並避免把自己的設定值插在這些預設值當中!若要加入自己的設定,可以在設定檔中找到以下註解,
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
可以在此行之後依需求插入個人的設定。
若只允許本地端網路存取squid,可以加入「http_access deny !mynetwork」,表示只要不屬於mynetwork清單上的網路位址,即禁止存取!
http_access deny !mynetwork
squid預設不允許其他主機存取,所以會在所有的http_access設定值之後加上「http_access deny all」,表示存了先前已設定為允許存取的清單之外,禁止任何主機使用squid!建議不可拿掉此行設定,避免主機成為他人進行攻擊
的跳板!
http_access deny all
修改完設定檔後需重新啟動squid,才可使設定生效!若重新啟動squid時出現「無法決定主機位址」的錯誤訊息,可以在設定檔中加入一行「visible_hostname <網路位址>」的設定,如「visible_hostname localhost」,可以避免此錯誤訊息!

存取控制清單的格式
acl <名稱> <種類> <設定值>

種類名稱說明設定值
src 存取要求清單的來源位址 單一或區段IP位址,例如192.168.1.0/或192.168.1.0/24或192.168.1.0/255.255.255.0
dst 存取要求清單的目的位址,只會執行一次DNS查詢,確認主機的IP 單一或區段IP位址,例如192.168.1.0/或192.168.1.0/24或192.168.1.0/255.255.255.0
myip 用來表示squid所使用的IP位址,通常只有squid主機同時擁有兩個以上IP位址時才會使用這個設定 IP位址

種類名稱說明設定值
srcdomain 存取要求清單的來源網域名稱,會進行DNS反查以確認IP的正確性,若反查失敗則此設定值無法使用! 網域名稱,例如.demo.com
dstdomain 存取要求清單的目的網域名稱,每次使用時都進行DNS查詢,確認主機的IP,與dst參數相比可以取得較正確的資訊! 網域名稱,例如demo.com
需注意網域名稱前方是法有「‧」,例如「demo.com」代表demo.com這台主機,「.demo.com」代表任何以「demo.com」結尾的主機!

種類名稱說明設定值
port 指定遠端伺服器使用的port,以數字表示,可以是單一port,也可以是連續port 22,20-21
myport 指定自身提供的服務使用的port,以數字表示,可以是單一port,也可以是連續port 80,3128
例如下列設定:
acl http_acc myport 80 #開啟 80 port的加速功能
acl proxy myport 3128 #開啟 3128 port的proxy功能
acl my_net 192.168.1.0/24 #指定內部網段
http_access allow http_acc #允許任何機器存取80 port
http_access allow proxy my_net #只允許內部網段存取 3128 port
http_access deny proxy #拒絕其他機器存取proxy

時間種類控制清單:可以用來設定squid規則的有效時間
格式:acl 名稱 星期幾 h1:m1-h2:m2
acl名稱星期幾h1:m1-h2:m2
使用大寫英文字母代號,可同時指定二天以上開始至結束的時間
星期幾代號:
星期幾全部
代號SMTWHFAD
例如:
週一至週五,早上八點至下午六點為工作時間,設定如下
acl_work_hours MTWHF 08:00-18:00
每天上午七點至下午七點為工作時間,設定如下
acl day_hours D 07:00-19:00

maxconn:可以指定同一個IP位址同時間可以使用的最大連線數量
例如:
acl OverConneLimit maxconn 5
http_access deny OverConneLimit #表示每一個IP同時間最多只能有5個連線與squid溝通,超過即拒絕!

arp:指定網路裝置的MAC位址
例如:
acl bad_host arp 00:01:02:03:04:05
http_access deny bad_host #拒絕指定MAC位址的網路設備連線