LINUX憑藉其穩定性、安全性和代碼開放在這幾年中,風靡全球;做爲一種類UNIX系統,Linux正在互聯網的各個層面獲得應用,從科學計算到銀行取款機,從網絡web服務到高層的Oracle 數據庫應用。均可以看到linux的影子。而因爲Linux遵循於GPL協議(公共軟件許可證),任何人能夠獲得而且修改它的源代碼,因此他的安全性相較於其餘的非開源系統來講要高的多;而且它能夠從網絡中免費下載。從這2點來講他很是適合用於網絡信息閘(軟路由或網關)和自制防火牆(事實上國內的硬件防火牆廠商都是用工業X86硬件和linux來作他們的產品,雖然那不是真正意義上的硬件防火牆)。如今學校過於注重對windows及其windows平臺上的軟件、開發工具的學習。可是學生們沒有意識到,真正撐起這個互聯網的正是UNIX系統;就從我對Linux的看法爲你們展現UNIX系統的一角吧。linux
什麼是NAT?
NAT英文全稱是Network Address Translation,稱是網絡地址轉換,它是一個IETF標準,容許一個機構(包括多個網絡節點)以一個地址出如今Internet上。NAT將每一個局域網節點的地址轉換成一個IP地址,反之亦然。它也能夠應用到防火牆技術裏,把個別IP地址隱藏起來不被外界發現,使外界沒法直接訪問內部網絡設備,同時,它還幫助網絡能夠超越地址的限制,合理地安排網絡中的公有Internet 地址和私有IP地址 的使用。
爲何要進行NAT
假設校園網提供園區Internet接入服務,爲了方便管理,校園網絡中心分配給園區用戶的IP地址都是僞IP(內部IP),可是部分用戶要求創建本身的WWW服務器對外發布信息,這時候咱們就能夠經過NAT來提供這種服務了。咱們能夠在防火牆的外部網卡上綁定多個合法IP地址或端口,而後經過NAT技術使發給其中某一個IP地址的包轉發至內部某一用戶的WWW服務器上,而後再將該內部WWW服務器響應包假裝成該合法IP發出的包。
實驗環境介紹
本文全部到的實驗環境以下:
LINUX系統主機一臺(服務端):雙網卡 REDHAT 9.0 主機名:host
WINDOWS 98 系統主機一臺(客戶端):單網卡主機名:test
聯想D-link 8口 10M/100M交換機一個
【正文】
網絡的拓樸結構:
1、 RED HAT 9.0 安裝和注意點
Linux是一個獨立的操做系統,因此不能在其餘操做系統下進行安裝,他有本身的啓動方式,能夠採用如下兩種方法進行安裝。
● 從CD-ROM進行安裝
● 從FTP服務器進行安裝
因爲Linux系統安裝(第一種方法),有隨機參考手冊,難度不大,因此咱們着重介紹從ftp安裝。
在安裝以前製做啓動盤:
1. 在windows操做系統下將安裝盤放入光驅;
2. 運行 e:\dosutils\rawrite.exe(e盤爲光驅)
3. 在運行後的界面中輸入e:\p_w_picpaths\bootnet.img
4. 指定目標盤,輸入用戶軟盤盤符:a
這樣一張安裝程序的啓動盤就建好了。
用軟盤引導計算機,進入藍色界面後,輸入FTP服務器地址和ftp上的用戶名及口令就能夠下在安裝了。
RED HAT 9.0安裝界面爲中文,安裝中文說明基本能夠完成系統定製,在此要強調的是,分區的時候,/swap(交換分區)大小要是內存大小的2倍;既然是做nat 網關,要把/var(日誌分區)單分出來,而且不要少於500M,有充裕的空間存儲日誌,也爲未來未來系統故障或受到***作到有據可查。
二.LINUX的網絡設置和nat原理
2.1網絡設置
咱們把linux系統安裝完後,整個設置平臺算是搭建完畢,可是還要設置網絡;設置網絡以前,或者說讓linux上網前,應該把和這臺服務器應該起到做用的無關服務關掉。
能夠在命令行下敲入setup回車,會出現一個文本菜單,裏面有「系統服務」一項,直接用空格鍵取消服務前面的勾而後從新啓動系統就好了。
假如是UNIX的熟練用戶,能夠在取消服務後,不用從新啓動,在命令行行打入
psaux
會顯示如今在後臺運行的全部服務,看到要殺死的進程後,打入
kill -9
(-9表明強制殺掉進程)殺死進程。
而後進入/etc/sysconfig/network-scripts/目錄
viifcfg-eth0會出現如下內容
device=eth0
onboot=yes
bootproto=none
IPADDR=192.168.0.1 #(內網網卡IP)
netmask=255.255.255.0
TYPE=ETHERNET
USERCTL=NO
PEERDNS=NO
NETWORK=192.168.0.0(網絡號)
Broadcast=192.168.0.255(廣播號)
上面的設置的意思是:eth0對內的內網網卡,ip地址爲192.168.0.1,子網掩碼爲:255.255.255.0;
viifcfg-eth1會出現如下內容
device=eth1
onboot=yes
bootproto=none
IPADDR=202.204.208.5 #(外網網卡IP)
netmask=255.255.255.128
TYPE=ETHERNET
USERCTL=NO
PEERDNS=NO
NETWORK=202.204.208.0(網絡號)
Broadcast=202.204.208.127(廣播號)
上面的設置的意思是:eth1是對外的外網網卡,ip地址爲202.204.208.5。
網卡的設置就完成了
加入nat客戶端ip和名稱
vi /etc/hosts
格式爲:
ip地址 主機名
127.0.0.1 host
指定內網網關
vi /etc/sysconfig/network
gateway=202.204.208.7 #(網關地址,假如服務端的外網爲撥號,就不要指定)
設置DNS服務器
vi /etc/resolv.conf
格式爲
nameserver ip地址
nameserver 202.106.196.115
都設置好後,重新啓動系統,在命令行下打入
route -a #察看路由表,看一下默認網關是否爲202.204.208.7
假如是的話,服務端的網絡配置就已經所有完成。
下面是客戶端的網絡配置
由於是win 98系統,因此只給出配置參數,配置方法略
ip地址爲192.168.0.2
子網掩碼:255.255.255.0
域名服務器:202.106.196.115
網關:192.168.0.1
所有網絡設置完成web
2.2 NAT原理
2.2.1在進入NAT設置以前,咱們要先討論一下NAT的工做原理
在引言部分,咱們已經提到了一個NAT應用實例,從這個實例中能夠看出NAT和防火牆是一體的,換句話說,NAT就是防火牆。NAT對防火牆來講是子集的關係。
在本節,咱們會深刻討論NAT的原理部分,爲了更清晰的認識NAT,咱們借用INTERNET標準化組織發佈的RFC3022文檔的部份內容。
NAT有三種類型:靜態NAT(Static NAT)、網絡地址端口轉換DNAT(destination- NAT)、動態地址NAT(Pooled NAT)。咱們主要討論前面2種nat.
靜態nat解決問題的辦法是:在內部網絡中使用內部地址,經過NAT把內部地址翻譯成合法的IP地址在Internet上使用,其具體的作法是把IP包內的地址域用合法的IP地址來替換。NAT設備維護一個狀態表(路由表,因此也稱NAT爲軟路由),用來把非法的IP地址映射到合法的IP地址上去。每一個包在NAT設備中都被翻譯成正確的IP地址,發往下一級,這意味着給處理器帶來了必定的負擔。但對於通常的網絡來講,這種負擔是微不足道的。
網絡地址端口轉換NAT,也叫作反向NAT,他解決問題的方法是:在內部網絡中,使用內部地址的計算機開設了網絡服務(80,21等),當外部ip想訪問這些服務時,NAT網關把外部訪問ip翻譯成內部ip,也就是說,把內部開設的服務,映射到一個合法的ip和端口上,已供外部訪問。
假如想進一步瞭解他的工做原理,NAT其實就是一種IP包欺詐,也能夠說是對IP報頭的修改,請看下錶
4位版本
4位首部長度
8位服務類型
16位總長度(字節數)
16位標識
3位標誌
13位片偏移
8位生存時間(ttl)
8位協議
16位首部校驗和
32位源ip地址
32位目的ip地址
其餘選項
攜帶數據
IP數據包格式和報頭中的各字段
NAT網關(外202.204.208.5;內192.168.0.1)收到本地局域網內的客戶機(192.168.0.2),發來的ip數據,先判斷是不是本地子網中發來的,假如經過,則按照她的目的ip地址查找本地路由表進行轉發,NAT在包被繼續向前送出以前轉換32位源地址 192.168.0.1成202.204.208.5。相應的,IP包往回傳時依據相同的地址進行轉換。
2.2.2 NAT設置
咱們知道了NAT的原理,就能夠進行NAT的配置了,咱們前面說過了NAT就是防火牆,在RED HAT9.0下自帶防火牆 IPTABLS
咱們在作好網絡設置後,假如要實現客戶端(win98)經過服務端上網(靜態NAT),能夠在命令行下直接打入
iptables -t nat -A POSTROUTING -o eth1 -j SNAT - to 202.204.208.5
說明:
-t nat : 調用nat表,調用這個表說明遇到了產生新的鏈接的包。
-A :該命令將一條規則附加到鏈的末尾。
POSTROUTING:指定正當信息包打算離開防火牆時改變它們的規則。
-o eth1:輸出接口爲ETH1
-j SNAT:跳轉,也叫觸發條件,當知足Snat規則是便發生跳轉
整條語句的意思爲: 當防火牆遇到產生新的鏈接的包,則在他要離開防火牆時改變他的源ip爲202.204.208.5而且從ETH1出口送出。
nat的規則指定完成後,還要打開IP轉發功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
這樣,客戶端就能夠經過208.5上網了。
假如208.5的客戶端192.168.0.2開設了80端口的web服務,如何讓外部訪問到這個局域網內部的服務呢?
這就用到了Dnat(也叫反向nat,端口跳轉),在命令行下打入:
iptables -t nat -A PREROUTING -i eth1 -d 202.204.208.5 -p tcp -dport 80 -j DNAT -to-destination 192.168.0.2:80
語句說明:當有經過eth1接口的tcp協議訪問202.204.208.5的80端口的時候,則觸發跳轉,跳轉至局域網的192.168.0.2的80端口。
可是這同時也出現一個問題,在同一局域網內的機器,沒法訪問202.204.208.5的80端口。如下是緣由:
假設192.168.0.3不經過http://192.168.0.2:80這種方式進行瀏覽
在命令行下打入:
iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.0/24 -d 192.168.0.2/32 -j SNAT -to 192.168.0.1
語句解釋:當192.168.0.1-255這個範圍的ip訪問192.168.0.2這個ip的時候,當數據包離開的時候修改源ip地址爲 192.168.0.1,這至關於在局域網內部,又做了一次NAT轉換。局域網內部經過192.168.0.1做爲轉發,而不是直接進行通訊,這就避免了沒法訪問局域網內部ip的狀況。
目前,nat的功能就已經實現,可是並無對包進行過濾。
三.網絡***和防火牆
3.1什麼事網絡***
當混亂的Internet和你良好的、有序的Linux服務器網絡之間進行鏈接時,你最好能知道哪些東西能夠進入你的大門。這就須要制定包過濾策略,既然是包過濾,確定是要過濾掉那些對網絡有害的或者是無用的包,但哪些包是有害的呢?咱們既然是在防守,不妨聽聽敵人的想法。
做爲一個老練的***者,他並不會盲目的展開***和***,他首先會肯定本身的目標,固然,肯定目標的方法有2種,一是根據我的的好惡或審美觀點肯定目標,二是根據廣義掃描器(反饋結果簡單,可是速度很快的掃描器)的反饋結果,選擇總體安全性不高的網絡做爲***目標。
接下來要作的就是了解這個網絡服務器,就象和人交往同樣,你對那我的越瞭解,就越清楚那我的的弱點,從而你對它的傷害就越致命。對人的瞭解經過交談,對服務器的瞭解要經過掃描;首先要肯定的是這臺服務器都開有什麼服務,這很簡單,經過tcp協議的3次握手:
1. 當請求端對要掃描的服務器端口送一個包含SYN標誌的TCP報文,這個報文指明客戶端使用的端口以及TCP鏈接的初始端口。
2.服務器在接受到客戶端的SYN包問候,假如客戶端請求鏈接的端口存在,則返回一個SYN+ACK的報文,表示客戶端的請求被接受。同時TCP序號被加一。那麼掃描器接受到SYN+ACK報文後,會向***者報告,掃描的這個端口是打開的,從而使***者判斷這是什麼服務。
3. 客戶端也返回一個確認報文ACK給服務器端,一樣TCP序列號被加一,到此一個TCP鏈接完成。
4. 假如服務器的這個端口不存在,或者沒有返回SYN+ACK報文,則掃描端發出一個FIN標誌報文,撤銷這個TCP鏈接。
當肯定了服務器開設了什麼端口之後,有經驗的***者能夠從端口判斷出這臺服務器開設的具體服務,而後就是按照不一樣的服務進行漏洞***或***了。
從以上***步驟看出,不要讓服務器徹底暴露在網絡中,是很是重要的,也就是首先對端口進行過濾,只容許指定的服務經過制定的端口穿越防火牆。這也就引出了RFC2979規定的互聯網防火牆規則配置的基本準則之一:
一切未被容許的就是禁止的。
基於該準則,防火牆應該封鎖全部的信息流,而後對但願提供的服務逐項開放。這是一種很是實用的方法,能夠形成一種十分安全的環境,由於只有通過仔細挑選的服務才被容許實用。
3.2如何防護網絡***
從咱們上例來看,咱們只開設了web服務使用標準的80端口。
那咱們要在防火牆中進行以下設置:
iptables -P INPUT -j DROP #咱們用-P來攔截主機上全部通信
iptables -A INPUT -p tcp -dport 80 -j ACCEPT #打開80端口的tcp協議
假如咱們在未來還要還要添加適當端口,能夠用上句的格式逐一添加
這樣咱們就實現了對網絡服務器主機的端口過濾功能,這種方法也只是下降受到***的次數要防護這種***,還要分別制定防火牆策略。
1. 死亡之ping (ping of death)
ping,這個軟件是測試網絡間是否暢通用的,他應用於icmp協議,但並不依賴於哪一個端口,因爲在早期的階段,路由器對包的最大尺寸都有限制,許多操做系統對TCP/IP棧的實如今ICMP包上都是規定64KB,而且在對包的標題頭進行讀取以後,要根據該標題頭裏包含的信息來爲有效載荷生成緩衝區,當產生畸形的,聲稱本身的尺寸超過ICMP上限的包也就是加載的尺寸超過64K上限時,就會出現內存分配錯誤,致使TCP/IP堆棧崩潰,導致接受方當機。
爲了解決這個問題,咱們能夠在防火牆中加入如下內容
iptables -A INPUT -p icmp -icmp-type echo-request -i eth1 -j DROP
這句話的意思是,從接口eth1進入的icmp協議的請求所有丟棄。
2. SYN Flood (拒絕服務***)
SYN Flood 是目前最流行的拒絕服務***與分佈式拒絕服務***的方式之一,這是一種利用TCP協議缺陷,發送大量僞造的TCP鏈接請求,從而使得被***方資源耗盡的***方式。
前面已經提過TCP的三次握手,問題就出在TCP鏈接的三次握手中,假設一個用戶向服務器發送了SYN報文後忽然死機或掉線,那麼服務器在發出SYN+ ACK應答報文後是沒法收到客戶端的ACK報文的(第三次握手沒法完成),這種狀況下服務器通常會重試(再次發送SKY+ACK給客戶端)並等待一段是句丟棄這個未完成的鏈接,這段時間的長度咱們稱爲(SYN Timeout),通常來講這個時間是分鐘爲單位(半分鐘-2分鐘);一個用戶出現異常致使服務器的一個線程等待1分鐘並非什麼很大的問題,但若是有一個惡意的***者大量模擬這種狀況,服務器端將爲了維護一個很是大的半鏈接列表而消耗很是多的資源----數以萬計的半鏈接,即便是簡單的保存並遍歷也會消耗不少的CPU資源與時間,況且還要不斷對這個列表中的IP進行SYN+ACK的重試。實際上若是服務器的TCP/IP棧不夠強大,最後的結果每每是堆棧溢出崩潰---即便服務器端的系統足夠強大,服務器端也將忙於處理***者僞造的TCP鏈接請求而無暇理睬合法請求(客戶端的正常請求相較於非法請求來講很是小),此時從正常鏈接的角度來講,服務器失去了響應,這種狀況咱們稱爲服務器收到了洪水***。
從防護角度來講,能夠縮短SYN- Timeout時間,因爲SYN FLOOD***效果取決於服務器上保持的SYN半鏈接數,這個值等於SYN***的頻度* SYN Timeout,因此經過縮短從接受到SYN報文到區定這個報文物校並丟棄鏈接的時間,,能夠下降服務器的負荷。
咱們能夠在用IPTABLES執行以下語句:
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
在全部的IPTABLES規則制定完後,能夠用$ iptables-save > iptables-script把寫入的所有的規則寫入到文件,而後 在 /etc/rc.d/rc.local
加入:iptables-restore iptables-script
這樣每次從新啓動系統將自動載入iptables設定好的規則。
【結論】
本設計實現了Linux服務器在局域網內的代理上網應用和網絡防火牆應用,大量使用了Linux下的防火牆iptables。而且對tcp/ip協議做了透徹的講解,對網絡的典型***方式進行了明確的闡述。證實Linux在做爲網絡網關服務器有充分的方式,不只系統強壯,而且配置性很強。但願給廣大喜歡網絡及網絡管理的同窗提供了新的思路。數據庫
備註:windows
一、用防火牆關閉不需要的任何端口,別人PING不到服務器,威脅天然減小了一大半安全
防止別人ping的方法:服務器
1)命令提示符下打網絡
echo 1 > /proc/sys/net/ipv4/icmp_ignore_allssh
2)用防火牆禁止(或丟棄) icmp 包tcp
iptables -A INPUT -p icmp -j DROP分佈式
3)對全部用ICMP通信的包不予響應
好比PING TRACERT
二、更改SSH端口,最好改成10000以上,別人掃描到端口的機率也會降低
vi /etc/ssh/sshd_config
將PORT改成1000以上端口
同時,建立一個普通登陸用戶,並取消直接root登陸
useradd 'username'
passwd 'username'
vi /etc/ssh/sshd_config
在最後添加以下一句:
PermitRootLogin no #取消root直接遠程登陸
三、刪除系統臃腫多餘的帳號: userdel adm userdel lp userdel sync userdel shutdown userdel halt userdel news userdel uucp userdel operator userdel games userdel gopher userdel ftp 若是你不容許匿名FTP,就刪掉這個用戶賬號 groupdel adm groupdel lp groupdel news groupdel uucp groupdel games groupdel dip groupdel pppusers
四、更改下列文件權限,使任何人沒有更改帳戶權限: chattr +i /etc/passwd chattr +i /etc/shadow chattr +i /etc/group chattr +i /etc/gshadow
五、chmod 600 /etc/xinetd.conf
六、關閉FTP匿名用戶登錄