『壹』 linux安全優化和內核參數優化方案有那些
入口安全優化
ssh配置優化
修改之前,需要將/etc/ssh/sshd_config備份一個,比如/etc/ssh/sshd_config.old, 主要優化如下參數:
Port 12011
PermitRootLogin no
UseDNS no
#防止ssh客戶端超時#
ClientAliveInterval 30
ClientAliveCountMax 99
GSSAuthentication no
主要目的更改ssh遠程埠、禁用root遠程登錄(本地還是可以root登錄的)、禁用dns、防止ssh超時、解決ssh慢,當然也可以啟用密鑰登錄,這個根據公司需求。
注意:修改以後需重啟ssh生效,另外需要iptables放行最新ssh埠。
iptables優化
原則:用到哪些放行哪些,不用的一律禁止。
舉下簡單的例子:敏感服務比如mysql這種3306控制,默認禁止遠程,確實有必要可以放行自己指定IP連接或者通過vpn撥號做跳板連接,不可直接放置於公網; 如單位有自己的公網IP或固定IP,那隻允許自己的公網IP進行連接ssh或者指定服務埠就更好了。
用戶許可權以及系統安全優化
非root用戶添加以及sudo許可權控制
用戶配置文件鎖定
服務控制
默認無關服務都禁止運行並chkconfig xxx off,只保留有用服務。這種如果是雲計算廠商提供的,一般都是優化過。如果是自己安裝的虛擬機或者託管的機器,那就需要優化下,默認只保留network、sshd、iptables、crond、以及rsyslog等必要服務,一些無關緊要的服務就可以off掉了,
內核參數優化
進程級文件以及系統級文件句柄數量參數優化
默認ulinit -n看到的是1024,這種如果系統文件開銷量非常大,那麼就會遇到各種報錯比如:
localhost kernel: VFS: file-max limit 65535 reached 或者too many open files 等等,那就是文件句柄打開數量已經超過系統限制,就需要優化了。
這個參數我們進程級優化文件如下:
vim /etc/security/limits.conf
# End of file
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
好了,退出當前終端以後重新登錄可以看到ulimit -n已經改成了65535。另外需要注意,進程級參數優化還需要修改文件:
/etc/security/limits.d/90-nproc.conf 這個會影響到參數。查看某一個進程的limits可以通過cat /proc/pid/limits查看。默認這個文件參數推薦設置:
[root@21yunwei 9001]# cat /etc/security/limits.d/90-nproc.conf
* soft nproc 65535
root soft nproc unlimited
系統級文件句柄優化
修改/etc/sysctl.conf添加如下參數:
fs.file-max=65535
內核參數優化(這個是非常重要的)。具體優化的文件為/etc/sysctl.conf,後尾追加優化參數:
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.conf.lo.arp_announce=2
net.ipv4.tcp_synack_retries = 2
#參數的值決定了內核放棄連接之前發送SYN+ACK包的數量。
net.ipv4.tcp_syn_retries = 1
#表示在內核放棄建立連接之前發送SYN包的數量。
net.ipv4.tcp_max_syn_backlog = 262144
#這個參數表示TCP三次握手建立階段接受SYN請求列隊的最大長度,默認1024,將其設置的大一些可以使出現Nginx繁忙來不及accept新連接的情況時,Linux不至於丟失客戶端發起的鏈接請求。
設置完以後執行命令sysctl -p使得配置新配置的內核參數生效。系統優化這個內核對系統本身安全以及高並發都非常的有效(可以解決大量TIME_WAIT帶來的無法訪問使用、系統文件句柄數量超出等等)。
net.ipv4.tcp_timestamps = 1 #開啟時間戳,配合tcp復用。如遇到區域網內的其他機器由於時間戳不同導致無法連接伺服器,有可能是這個參數導致。註:阿里的slb會清理掉tcp_timestampsnet.ipv4.tcp_tw_recycle = 1 #這個參數用於設置啟用timewait快速回收net.ipv4.tcp_max_tw_buckets = 6000 #參數設置為 1 ,表示允許將TIME_WAIT狀態的socket重新用於新的TCP鏈接,該參數默認為180000,過多的TIME_WAIT套接字會使Web伺服器變慢。net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 1 #當伺服器主動關閉鏈接時,選項決定了套接字保持在FIN-WAIT-2狀態的時間。默認值是60秒。net.ipv4.tcp_keepalive_time = 600 #當keepalive啟動時,TCP發送keepalive消息的頻度;默認是2小時,將其設置為10分鍾,可以更快的清理無效鏈接。net.ipv4.ip_local_port_range = 1024 65000#定義UDP和TCP鏈接的本地埠的取值范圍。fs.file-max=65535 #表示最大可以打開的句柄數;
設置完以後執行命令sysctl -p使得配置新配置的內核參數生效。這個內核對系統本身安全以及高並發都非常的有效(可以解決大量TIME_WAIT帶來的無法訪問使用、系統文件句柄數量超出等等)。
『貳』 linux內核完全注釋
AT T匯編、C語言、微機原理、操作系統原理 大概的基礎知識就是這些。不知道你現在是讀書還是已經出來工作了。因為研讀這些東西很費時間和腦力的,如果不是很高水平,很難靠這門技術拿來改善生活質量。不過見你那麼積極,著實應該鼓勵一下,你要是對Linux感興趣的話可以看下的《Linux就該這么學》作為入門的書籍。
『叄』 一般優化linux的內核,需要優化什麼參數
首先要知道一點所有的TCP/IP的參數修改是臨時的,因為它們都位於/PROC/SYS/NET目錄下,如果想使參數長期保存,可以通過編輯/ETC/SYSCTL.CONF文件來實現,這里不做詳細說明,只針對Linux的TCPIP內核參數優化列舉相關參數:
1、為自動調優定義socket使用的內存
2、默認的TCP數據接收窗口大小(位元組)
3、最大的TCP數據接收窗口
4、默認的TCP發送窗口大小
5、最大的TCP數據發送窗口
6、在每個網路介面接收數據包的速率比內核處理這些包速率快時,允許送到隊列的數據包最大數目
7、定義了系統中每一個埠最大的監聽隊列長度
8、探測消息未獲得相應時,重發該消息的間隔時間
9、在認定tcp連接失效之前,最多發送多少個keepalive探測消息等。
『肆』 想問一下LINUX系統內核參數怎麼調整
您指的是那個參數?
『伍』 一般優化linux的內核,需要優化什麼參數
首先要知道一點所有的/IP的參數修改是臨時的,因為它們都位於/PROC/SYS/NET目錄下,如果想使參數長期保存,可以通過編輯/ETC/SYSCTL.CONF文件來實現,這里不做詳細說明,只針對Linux的TCPIP內核參數優化列舉相關參數:
1、為自動調優定義socket使用的內存
2、默認的TCP數據接收窗口大小(位元組)
3、最大的TCP數據接收窗口
4、默認的TCP發送窗口大小
5、最大的TCP數據發送窗口
6、在每個網路介面接收數據包的速率比內核處理這些包速率快時,允許送到隊列的數據包最大數目
7、定義了系統中每一個埠最大的監聽隊列長度
8、探測消息未獲得相應時,重發該消息的間隔時間
9、在認定tcp連接失效之前,最多發送多少個keepalive探測消息等。
『陸』 linux內核優化參數
cat >> /etc/sysctl.conf << EOF
# kernel optimization
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
EOF # 《Linux就該這么學》
將上面的內核參數加入/etc/sysctl.conf文件中,執行如下命令使之生效:
sysctl -p
『柒』 linux內存為128的內核參數怎麼調整最優
處理器通過地址訪問內存單元,程序中用到的基址加偏移地址是線性地址,需要通過MMU將虛擬地址映射成物理地址。這給分配和釋放內存帶來方便:1)物理地址不連續的空間可以映射為邏輯上連續的虛擬地址。2)進程可以獲得比實際內存大的"空間",虛擬內存使得進程在這種情況下仍可正常運行。
linux內核為驅動程序提供了一致的內存管理介面,因此不用考慮不同體系結構如何管理內存的。
在linux內核中分配內存用kmalloc和kfree。
kmalloc分配時可以被阻塞,且不對所獲得的區域清零。它分配的區域在物理內存中也是連續的。
原型:
#include<linux/slab.h>
void *kmalloc(size_t size,int flags); //參數為分配大小及分配標志
flags參數:
GFP_KERNEL:內核內存通用分配方法,表示內存分配是由運行在內核空間的進程執行的。可休眠,所以使用GFP_KERNEL分配內存的函數必須是可重入的。
GFP_ATOMIC:用於在中斷處理常式或者運行在進程上下文之外的代碼中分配內存,不可休眠。內核通常會為原子性的分配預留一些空閑頁面。
所有標志定義在 <linux/gfp.h>中。
size參數:
內核是基於頁技術分配內存,以最佳的利用系統的RAM。
linux處理內存分配的方法是:創建一系列的內存對象池,每個池的內存大小事固定的,處理分配請求時,就直接在包含足夠大的內存塊中傳遞一個整款給請求者。內核只能分配一些預定義的固定大小的位元組數組。kmalloc能處理的的最小內存塊是32或者64,不大於128KB。
內存區段:
linux內核把內存分為3個區段:可用於DMA的內存,常規內存以及高端內存。kmalloc不能分配高端內存。內存區段在mm/page_alloc.c中實現。區段的初始化在對應的arch樹下的mm/init.c中。
後備高速緩存 (lookaside cache)
內核中普通對象進行初始化所需的時間超過了對其進行分配和釋放所需的時間,因此不應該將內存釋放回一個全局的內存池,而是將內存保持為針對特定目而初始化的狀態。例如,如果內存被分配給了一個互斥鎖,那麼只需在為互斥鎖首次分配內存時執行一次互斥鎖初始化函數(mutex_init)即可。後續的內存分配不需要執行這個初始化函數,因為從上次釋放和調用析構之後,它已經處於所需的狀態中了。
linux2.6中USB和SCSI驅動程序使用了這種高速緩存,是為一些反復使用的塊增加某些特殊的內存池。後背高速緩存管理也叫slab分配器,相關函數和類型在<linux/slab.h>中申明。
slab分配器實現高速緩存具有kmem_cache_t類型。
kmem_cache_t * kmem_cache_create( const char *name, size_t size, size_t align,
unsigned long flags;
void (*constructor)(void*,kmem_cache_t *, unsigned long),
void (*destructor)(void*, kmem_cache_t *, unsigned long));
用於創建一個新的高速緩存對象。
constructor用於初始化新分配的對象,destructor用於清除對象。
一旦某個對象的高速緩存被創建以後,就可以調用kmem_cache_alloc從中分配內存對象。
void * kmem_cache_alloc(kmem_cache_t *cache,int flags);
釋放內存對象使用kmem_cache_free
void kmem_cache_free(kmem_cache_t *cache,const void *obj);
在內存空間都被釋放後,模塊被卸載前,驅動程序應當釋放他的高速緩存。
int kmem_cache_destory(kmem_cache_t *cache);
要檢查其返回狀態,如果失敗,表明莫塊中發生了內存泄露。
基於slab的高速緩存scullc
kmem_cache_t *scullc_cache;
scullc_cache=kmem_cache_creat("scullc",scullc_quantum,0,SLAB_HWCACHE_ALIGN,NULL,NULL);
if(!scullc_cache)
{
scullc_cleanup();
return -ENOMEM;
}
if(!dpte->data[s_pos])
{
dptr->data[s_pos]=kmem_cache_alloc(scullc_cache,GFP_KERNEL);
if(!dptr->data[s_pos])
goto nomem;
memset(dptr->data[s_pos],0,scullc_quantum);
}
for(i=0;i<qset;i++)
{
if(dptr->data[i])
kmem_cache_free(scullc_cache,dptr->data[i]);
}
if(scullc_cache)
kmem_cache_destory(scullc_cache);
內存池:
內核中有些地方的內存分配是不允許失敗的,為確保能分配成功,內核建立一種稱為內存池的抽象,他試圖始終保持空閑狀態,以便緊急情況使用。
mempool_t * mempool_creat(int min_nr,
mempool_alloc_t *alloc_fn, //對象分分配 mempool_alloc_slab
mempool_free_t *free_fn, //釋放 mempool_free_slab
void *pool_data);
可以用如下代碼來構造內存池
cache=kmem_cache_creat(...); //創建一個高速緩存
pool=mempool_creat(MY_POOL_MINIMUM,mempool_alloc_slab,mempool_free_slab,cache);//建立內存池對象
void *mempool_alloc(mempool_t *poll,int gfp_mask);//分配對象
void *mempool_free(void *element,mempool_t *poll);//釋放對象
void mempool_destroy(mempool_t *poll);//銷毀內存池
注意:mempool會分配一些內存塊,空閑且不會被用到,造成內存的大量浪費。所以一般情況不要用內存池。
『捌』 Linux內核完全注釋的介紹
本書對Linux早期操作系統內核(v0.11)全部代碼文件進行了詳細全面的注釋和說明,旨在使讀者能夠在盡量短的時間內對Linux的工作機理獲得全面而深刻的理解,為進一步學習和研究Linux系統打下堅實的基礎。書中首先以Linux源代碼版本的變遷歷史為主線,詳細介紹了Linux系統的發展歷史,著重說明了各個內核版本之間的重要區別和改進方面,給出了選擇0.11(0.95)版作為研究的對象的原因。然後本書依據內核源代碼的組織結構對所有內核程序和文件進行了注釋和詳細說明。 在注釋的同時,還介紹了讀者應該了解的相關知識,並給出了相關的硬體信息。
『玖』 linux內核參數
"The story of _OSI(Linux)"注釋.此參數用於修改內核中的操作系統介面字元串(_OSI string)列表默認值,這樣當BIOS向內核詢問:...