Linux代理服务器与防火墙安装与应用
生活随笔
收集整理的這篇文章主要介紹了
Linux代理服务器与防火墙安装与应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
環境介紹:兩臺Linux系統(一臺用于防火墻[兩張網卡,一張連接外網,一張連接內網],一臺XP客戶機測試用 在2.0內核中,網絡防火墻的操作工具名稱是ipfwadm 在2.2內核中,網絡防火墻的操作工具名稱是ipchains(IP規則鏈) 在2.4之后的內核中,網絡防火墻的操作工具名稱是iptables(IP表) netfilter與iptables 在Linux網絡防火墻的管理與配置中需要明確以下兩個概念 Linux的包過濾防火墻功能是由Linux的內核實現的,而不是由運行在Linux系統中的某個服務器程序實現的,在Linux的內核中是使用netfilter架構實現防火墻功能的 iptables實質上是Linux系統中為用戶提供的netfilter管理工具,系統管理員可以使用iptables管理工具實現對Linux內核中網絡防火墻的管理工作。管理工作主要包括防火墻策略的設定 iptables中的規則表與規則鏈 規則鏈 iptables的作用在于為netfilter的處理提供相關的規則,iptables默認具有5條規則鏈:PREROUTING(預先路由)、FORWARD(轉發)、POSTROUTING、INPUT、OUTPUT 規則表 iptables的 規則鏈組織在3個不同的規則表中:filter、nat、mangle。其中filter針對過濾系統,nat針對地址轉換系統,mangle針對策略路由和特殊應用。規則鏈分配如下: filter:INPUT、FORWARD和OUTPUT nat:PREROUTING、POSTROUTING、OUTPUT mangle:PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING 主機的安全性主要集中在filter表中的INPUT、OUTPUT規則鏈中,因此這兩個關鍵字在添加規則的時候會用到。在內核編譯了netfilter系統以后,系統會自動建立這5個規則鏈和3個規則表 iptables的基本配置管理 iptables的軟件包組成 在Linux的網絡防火墻管理中,netfilter功能是由Linux內核實現的,而iptables管理工具需要安裝名為iptables的軟件包,該軟件包在RHEL4系統中是默認安裝的,可以使用rpm命令查詢iptables軟件包的信息 iptables是主要的管理命令,對網絡防火墻功能的管理都是通過iptables命令實現的 iptables-save和iptables-restore是一對輔助的管理工具,iptables-save可以將當前系統中的防火墻設置進行保存,而iptables-restore命令可以將使用iptables-save命令保存的防火墻策略配置恢復到當前系統中 iptables服務的啟動與停止 iptables服務啟動腳本 iptables軟件包安裝后,在系統中以iptables服務程序運行, 服務的啟動腳本保存在/etc/rc.d/init.d/目錄中,腳本文件名是iptables iptables服務在系統運行級別3和5默認啟動 iptables配置文件與策略設置文件 /etc/sysconfig/目錄中iptables-config文件是iptables服務的配置文件,用于設置在iptables服務啟動時加載服務相關的內核模塊,管理員通常不需要對iptables-config文件進行設置 /etc/sysconfig/目錄中的iptables文件是RHEL4系統中iptables服務使用的防火墻策略設置文件,在iptables服務啟動時將調用iptables-restore命令將該文件中的策略設置內容應用到防火墻中 /etc/sysconfig/iptables文件通常是由iptables-save命令或其它的防火墻配置工具生成的一般也不需要管理員手動進行設置 iptables服務的啟動與停止 示:service? iptables? start/stop/restart/status iptables命令是對Linux中網絡防火墻配置管理的核心命令,具有以下特點: iptables命令提供了豐富的功能,可以對Linux內核中的netfilter防火墻進行各種策略的設置 iptables命令的設置在系統中即時生效的 使用iptables命令手動進行的防火墻策略設置如果不進行保存將在下次啟動時丟失 使用iptables-save命令保存設置 iptables-save命令提供了對Linux系統中配置保存功能,在使用iptables命令對防火墻進行設置后可以使用iptables-save命令將配置保存到文件中 iptables-save命令默認只將設置信息顯示到標準輸出(屏幕)中,因此如果需要將iptables-save命令的輸出保存,需要將命令輸出結果重定向到指定的文件中 示: iptables-save? >? ipt.v1.0(此為你保存的文件名) 在對防火墻進行調試時,可以使用iptables-save命令將不同的設置保存為不同的版本,以便對各版本進行對比和排錯 示:iptables-save? >? ipt.v1.1(此為保存的文件名) 使用iptables-restore恢復位置 在對Linux中的防火墻進行測試的過程中,經常需要將不同版本的配置恢復到系統中,這時需要使用iptables-restore命令: iptables-restore命令將標準輸入或輸入重定向文件中的設置內容恢復到Linux系統的防火墻中 示:iptables-restore? < ipt.v1.0 使用iptables腳本保存防火墻設置 當管理員已經對Linux防火墻設置完畢,并且需要永久保存防火墻的設置時,需要使用iptables啟動腳本將設置內容保存到/etc/sysconfig/iptables文件中,在進行保存之前最好先將/etc/sysconfig/iptables文件原有內容進行備份,以便出現錯誤時進行恢復 示:cp? /etc/sysconfig/iptables? iptables.bak 在RHEL4系統中,iptables腳本提供了save命令用于將當前的防火墻設置保存到/etc/sysconfig/iptables文件中,以便以后系統每次啟動時都讀取新的防火墻設置內容 使用防火墻的配置工具 在RHEL4系統中為用戶提供了字符界面中運行的防火墻配置工具,雖然該配置工具的功能有限,但是其操作簡單,對于Linux防火墻配置的初學者來說是很好的輔助工具 在字符界面下輸入system-config-securitylevel-tui命令將運行配置程序,再在界面下選擇Customize按鈕將進入防火墻的設置頁面 示:system-config-securitylevel-tui iptables命令的使用 iptables的操作對象 在netfilter/iptables網絡架構中,操作對象由以下幾個級別組成 規則表(table)由規則鏈的集合組成,不同的規則表用于實現不同類型的功能 規則鏈(chain)由規則的集合組成,保存在規則表中,在規則表中不同的規則鏈代表了不同的數據包流向 規則(rule)是最基本的設置項,用于對防火墻的策略進行設置,流經某個數據鏈的數據將按照先后的順序經過規則的過濾 從以上幾個由大到小的對象可以看出,netfilter/iptables網絡架構是相當復雜并且嚴謹的,使用iptables命令對不同的規則表、規則鏈、規則的設置,可以實現網絡防火墻的各種功能 系統默認的規則表:filter、nat、mangle 查看防火墻的基本狀態 示:iptables [- t? table] –L 使用iptables命令進行表配置查詢時,需要使用-L命令選項 iptables –L命令默認顯示filter規則表的內容,如果需要顯示其它的規則表需要使用-t選項指定規則表的名稱 示:iptables? -t? nat? -L 清空表中的規則 示:iptables? -F 刪除表中的自定義規則鏈 iptables –X命令用于刪除指定的規則鏈,如果不指定規則鏈名稱作為參數,將刪除表中所有的自定義規則鏈 示:iptables? -X iptables –X命令通常與iptables –F命令一同使用,用于在重新設置防火墻規則之前對防火墻進行初始化 清除流量統計 示:iptables? -Z 添加規則 iptables –A命令用于為指定的規則鏈末尾添加規則,在添加規則的命令中使用-A選項指定需要添加規則的鏈;使用-i選項指定數據包流入的網絡接口,使用-j選項設置對數據包的處理,-j ACCEPT表示允許通過,-j DROP表示丟棄數據包(丟棄并不反饋錯誤信息給客戶端),-j REJECT(拒絕并反饋錯誤信息給客戶端) 示:iptables? -A? INPUT? -i? lo? -j? ACCEPT 在INPUT規則鏈中添加規則,允許來自lo網絡接口中的所有數據包 示:iptables? -A? INPUT? -i? eth0? -s 192.168.1.0/24? -j? ACCEPT INPUT規則鏈中添加規則,允許eth0網絡接口來自192.168.1.0/24子網的所有數據包 刪除規則 iptables –D命令用于刪除指定規則鏈中的規則 示:iptables? -D? INPUT? -i? eth0? -s? 192.168.1.0/24? -j? ACCEPT 將INPUT規則鏈中最后添加的關于eth0網絡接口的規則刪除 設置內置規則鏈的默認策略 iptables 規則表的內建規則鏈具有“默認策略”的屬性,默認值是ACCEPT,即默認策略將接受不符合任何規則的數據包,iptables –P命令可以設置指定規則鏈的默認策略 示:iptables? -P? INPUT? DROP 更改INPUT規則鏈的默認策略為DROP(丟棄) 設置Linux作為網關服務器 在Linux中實現IP偽裝功能(NAT)主要由iptables命令實現,操作步驟: 設置Linux內核支持IP數據包的轉發 加載實現NAT功能主要的內核模塊 對iptables中的規則表進行初始化 設置規則鏈的默認策略 添加IP偽裝規則 由于設置IP偽裝的操作步驟比較復雜,因此我這里通過編寫shell腳本為完成(以便修改、調試、和執行),使用腳本進行防火墻的配置也是Linux中防火墻的常用配置方法 我這里把此腳本命名為:iptables_nat 示:iptables_nat 此腳本最后一行命令實現了IP偽裝的功能 示:iptables? -t? nat? -A? POSTROUTING? -s 172.16.0.0/16? -o? eth1 -j? MASQUERADE 有另一命令與上面的命令所達到的目的是一樣的: iptables? -t? nat? -A? POSTROUTING -o eth1 -j SNAT --to? +外網口的公網IP地址(如我這里的202.69.133.134) 以上iptables命令在nat規則表的POSTROUTING規則鏈中添加了規則,規則中-s 172.16.0.0/16表示數據包的源地址為172.16.0.0/16子網;-o? eth1表示數據包的流出網絡接口是eth1(一般為外網口),eth1網絡接口具有公網IP;-j? MASQUERADE表示對數據包進行的處理,即將符合條件的數據包進行IP偽裝。整個規則的作用是將來自172.16.0.0/16子網并由eth1網絡接口流出的數據進行IP偽裝,將數據包的源地址轉換為eth1網絡接口的公網IP地址 iptables_na腳本建立后需要使用chmod命令設置腳本對用戶具有執行權限(或直接使用bash命令執行) 此方法使用./iptables_nat來執行腳本 若直接使用bash命令執行則 示:bash? iptables_nat 查看nat規則表: 示:iptables? -t? nat? -L 添加規則允許80端口通過: 示:iptables? -A? INPUT? -i? eth0? -p?? tcp? --dport? 80? -j? ACCEPT iptablles? -A? OUTPUT? -o? eth1? -p?? tcp?? --dport? 80? -j? ACCEPT 在客戶機訪問: 緩存代理squid Squid 服務器主要具有如下功能 提供對HTTP和FTP協議的代理服務 緩存代理的內容,提高客戶端訪問網站的速度,節約網絡出口流量 對客戶端地址進行訪問控制,限制允許訪問squid服務器客戶機 對目標地址進行訪問控制,限制客戶端允許訪問的網站 根據時間進行訪問控制,限定客戶端可以使用代理服務的時間 Squid服務器的安裝 Squid服務器在RHEL4系統中已經默認安裝,作用rpm命令可以查詢squid軟件包的安裝狀態,如果需要手動(或重新)安裝squid服務器,可以在RHEL4的第2張安裝光盤中找到該軟件包 squid服務程序在RHEL4中默認不自動啟動,如作為服務器使用,需要用chkconfig命令設置squid服務在運行級別3和5中自動啟動 確認主機具有完整的域名 Squid服務器在初始化或運行時需要所在主機具有完整的域名,否則squid服務器無法成功啟動。Linux主機的完整域名需要在hosts文件中或在DNS服務器中進行解析(若有DNS服務器則,如主機名為hostSer時,區域名為yunjing.com,則完全合格域名為hostSer.yunjing.com),我這里沒有DNS服務器所以通過更改hosts文件來完成 示:vi? /etc/hosts squid服務器的初始化 第一次使用squid服務器之前需要先作用squid –z命令對squid服務器進行初始化 squid服務器初始化工作的主要作用是在squid服務器的工作目錄/var/spool/squid/中建立需要的子目錄(從上圖可看出在沒初始化前/var/spool/squid/目錄是為空) 只有在第一次啟動squid服務器之前才需要進行服務器的初始化工作,如果不手動執行squid –z命令,squid服務腳本在第一次啟動服務時也會自動完成相應的初始化工作,再啟動squid服務程序 squid服務的啟動與停止 squid服務器的啟動腳本位于/etc/init.d目錄中,腳本文件的名稱是squid,該腳本負責squid服務器的啟動和停止等任務管理 示:service? squid? start/stop/restart squid服務啟動后,使用netstat命令可以看到squid服務程序在3128端口進行代理服務的監聽,這與通常的代理服務器使用的8080端口是不同的 squid服務的配置文件 squid服務器在/etc/目錄下有獨立的配置目錄,目錄名稱為squid,該目錄中保存了squid服務器相關的配置文件 /etc/squid/目錄中的squid.conf是squid服務器的主配置文件,squid.conf.default文件是squid.conf文件的原始配置副本 服務端口 Squid服務器的服務端口使用http_port配置項設置,其默認設置值是3128,為了用戶使用方便,可以將服務端口更改為通用的8080,或在多個端口提供服務 示:vi? /etc/squid/squid.conf http_port? 3128 //改為 http_port 8080 //或 http_port 3128 8080 http_port配置項支持在多個端口提供代理服務 注:將http_port 3128 前的“#”注釋符去掉使此行生效 緩沖內存數量 Squid服務器的性能和squid服務器使用的緩沖內存數量有很大關系,一般來講,使用內存越多,squid服務器的性能會越好,在squid.conf配置文件中使用cache_mem進行代理服務器緩沖內存的設置,cache_mem默認設置只有8MB,遠遠不能滿足實際應用中代理服務器的要求,因此需要將該設置值重新設置。通常來講squid服務器中cache_mem的值設置為服務器物理內存的三分之一到四分之一比較合適(最好為16的倍數) 工作目錄 Squid服務器緩存的內容只有很少的一部分是保存在緩沖內存中的,而代理服務中使用的所有文件都會保存在squid的工作目錄中,在squid.conf配置文件中使用cache_dir設置squid服務器的工作目錄路徑和屬性 cache_dir設置項的默認值為/var/spool/squid,“100? 64? 256”分別表示目錄中最大的容量是64MB(這里與我們前面設置的cache_mem值一樣都是64MB),目錄中的一級子目錄的數量為16個,二級子目錄為256個 squid工作目錄的容量和子目錄的數量也會在一定程序上影響squid服務器代理服務的性能,在實際應用中可根據實際情況適當擴大工作目錄的總容量 訪問控制設置 Squid服務器中提供了強大的訪問控制功能,在squid.conf配置文件中,訪問控制功能是由http_access和acl配置項功能共同實現的 http_access用于設置允許或拒絕指定名稱的訪問控制列表(ACL)對象訪問squid服務器 Acl配置項用于設置訪問控制列表的內容,通過acl設置項的設置,管理員可以為特定的目標指定訪問控制名稱 例: 將源地址為0.0.0.0/0.0.0.0的對象命令為all 將源地址分為127.0.0.1/255.255.255.255的對象命名為localhost 將目標地址為127.0.0.0/8的對象命名為to_localhost 通過acl和http_access的設置,既可以對使用squid服務器的客戶機進行控制,也可以對客戶機可以訪問的目標地址進行控制 在squid.conf配置文件中默認只允許本機(localhost)使用squid服務器,這種策略也體現了squid服務器默認設置的嚴謹,為了讓同一局域網中的所有客戶機能夠通過squid的代理服務訪問外部網頁,需要在squid.conf文件中進行訪問控制策略的修改 我這里當前局域網的地址是172.16.0.0/16, 在squid.conf配置文件中需要添加進行如下配置 上圖中的clients是我為這張ACL表命的名稱 在squid.conf文件中的http_access deny all設置行之前添加相關內容 以上設置將在squid服務器的訪問控制策略中,在拒絕所有對象之前添加了允許名為clients的訪問控制對象進行訪問 重啟squid服務 注:每次修改squid.conf文件之后都必須重新啟動 squid服務程序 配置透明代理服務器 構建透明代理服務器需要對squid代理服務和iptables防火墻分別設置,配合使用才能實現透明代理功能 配置squid.conf文件 Squid服務器的默認配置中不支持提供透明代理服務的相關功能,因此需要在 squid.conf文件末尾添加如下行 示:vi? /etc/squid/squid.conf 在squid.conf文件中進行配置修改后,需要執行squid腳本使配置生效 示:service? squid? reload 修改防火墻配置腳本 在進行nat配置(IP偽裝)時曾建立有iptables_nat腳本,我們在此腳本末行加入如下iptables命令 在以上的iptables命令中,在nat規則表的PREROUTING規則鏈中添加規則,在規則中,-s 172.16.0.0/16表示數據包來自172.16.0.0/16;-p? tcp 表示數據包的協議為TCP,--dport 80表示數據包訪問的目的端口為80,即標準的www服務;-j REDIRECT表示將符合條件的數據包進行重定向;--dport? 3128表示將符合條件的數據包重定向到3128端口,3128端口是squid服務器提供網頁代理服務器的端口。整個規則的作用是將來自172.16.0.0/16子網,且訪問 www服務的數據包重定向到服務器主機的3128端口,由squid代理服務器進行處理 執行iptables_nat腳本后,Linux主機將具有透明代理功能,如果來自內部網絡中的數據包是訪問www服務的,那么它將重定向到squid服務器提供代理服務;如果數據包訪問的是非www服務,則將進行IP偽裝處理 從以上iptables命令的結果中可以看到nat表的PREROUTING規則鏈中已經存在實現透明代理的規則 為使其永久生效將其保存至/etc/sysconfig/iptables文件中 使用透明代理的客戶機需要將以上配置的Linux服務器設置為默認網關,如果能夠正確訪問外部網站,則說明透明代理配置成功
轉載于:https://blog.51cto.com/tom110/192313
總結
以上是生活随笔為你收集整理的Linux代理服务器与防火墙安装与应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开发指南专题十:JEECG微云快速开发平
- 下一篇: 文件系统(02):基于SpringBoo