當前位置:學者齋 >

計算機 >操作系統 >

linux下防火牆設置

linux下防火牆設置

引導語:大部分發行版都為用户提供了一個可以自動加載的文件,讓用户在其中編輯規則集,並且大部分發行版都會有一個已經預先配置好的防火牆。不同的發行版的配置文件位置不盡相同,我們可以使用命令locate iptables來找到配置文件。

linux下防火牆設置

cat /etc/sysconfig/iptables

查看防火牆狀態:

/etc/init.d/iptables status

暫時關閉防火牆:

/etc/init.d/iptables stop

禁止防火牆在系統啟動時啟動

/sbin/chkconfig --level 2345 iptables off

重啟iptables:

/etc/init.d/iptables restart

我是打開防火牆配置文件

>vi /etc/sysconfig/iptables

增加了一行配置

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5900 -j ACCEPT

然後重啟防火牆,就可以正常訪問VNC了

-A 新加規則

INPUT 進口 OUTPUT出口

構築Linux防火牆之什麼是Linux防火牆

前面介紹了iptables的基本概念和用法,下面我們就開始正式使用iptables來創建我們的防火牆。啟動和停止iptables的方法取決於所使用的Linux發行版,你可以查看所使用Linux版本的文檔。在Red Hat中,啟動iptables用:

一般情況下,iptables已經包含在了Linux發行版中,可以運行iptables --version來查看系統是否安裝了iptables。在我使用的Fedora Core 1中,安裝的版本是iptables v1.2.8。如果你的系統確實沒有安裝iptables,那麼可以從以下地址下載:

查看規則集

雖然上文對iptables的用法作一個簡單介紹,但現實中我們可能需要知道更完整的信息,這時我們可以運行man iptables來查看所有命令和選項的完整介紹,也可以運行iptables help來查看一個快速幫助。要查看系統中現有的iptables規劃集,可以運行以下命令:

下面是沒有定義規劃時iptables的樣子:

如上面的例子所示,每一個數據包都要通過三個內建的鏈(INPUT、OUTPUT和FORWARD)中的一個。 filter是最常用的表,上文所示設置所有的表規則的基本語法:iptables [-t table] command [match] [target]。

現實中,不一定要用到這裏所列出的所有選項,也不一定是以這個順序。當然,這是一種慣例,因為規則一般都比較長,為了清晰起見,最好能夠按照這個順序。

在沒有指定規則表的情況下,缺省時使用的filter表。在filter表中最常用的三個目標是ACCEPT、DROP和REJECT。DROP會丟棄數據包,不再對其進行任何處理。REJECT會把出錯信息傳送至發送數據包的主機。雖然有時會有一些預想不到的影響,但在很多時候它還是非常有用。

增加規則

本例中的規則將會阻止來自某一特定IP範圍內的數據包,因為該IP地址範圍被管理員懷疑有大量惡意的攻擊者在活動:

要了解有關iptables詳細的參數和命令格式,請使用man iptables查看。可以説,現在我們對於網絡上的惡意攻擊者已經深惡痛絕,但不管怎麼説,我們也不能因為憎恨它們就以同樣的方法對其實行簡單的報復,至少這種事情不能在你的網絡裏發生。因此,我們也可以很輕易地阻止所有流向攻擊者IP

地址的`數據包,該命令也只是稍有不同:

注意這裏的A選項,如前所述,使用它説明是給現有的鏈添加規則。 刪除規則

網絡上的惡意攻擊者總是在變化着的,因此我們也要不斷改變IP。假設我們瞭解的一個網上攻擊者轉移到了新的IP地址,而其老的IP地址被分配給了一些清白的用户,那麼這時這些用户的數據包就無法通過你的網絡了。這種情況下,我們可以使用帶

-D選項的命令來刪除現有的規則:

缺省的策略

創建一個具有很好靈活性,可以抵禦各種意外事件的規則需要花大量的時間。對於那些不想這樣做的人,最基本的原則就是“先拒絕所有的數據包,然後再允許需要的”。下面我們來為每一個鏈設置缺省的規則:

這裏選項-P用於設置鏈的策略,只有三個內建的鏈才有策略。這些策略可以讓信息毫無限制地流出,但不允許信息流入。但很多時候,我們還是需要接收外部信息的。這時可使用以下命令:

SYN的使用

我們不能關閉所有的端口,那將會把我們自己完全“與世隔絕”。我們也不能只指定某些端口處於打開狀態,因為我們無法預見哪一個端口將會被使用。事實上,只簡單地允許目的地為某一特定端口的數據流通過將對阻止惡意的攻擊毫無意義。那麼我們怎樣才能設置一個有效的規則,即可以允許普通用户正常通過,又可以阻止惡意攻擊者訪問我們的網絡呢?

對於剛開始使用iptables的人,我們可以充分利用syn標識來阻止那些未經授權的訪問。因為iptables只檢測數據包的報頭,所以不會增加有效負荷。事實上,除iptables以外,很多其它有用的數據包分析都是基於報頭的。

比如,在進行Web衝浪時,一個請求從你的PC發送至其它某一個地方的Web服務器之上,接着該服務器就會響應請求並且向你發回一個數據包,並且得到你的系統上的一個臨時端口。與響應請求不同的是,服務器並不關心你所傳送的內容。這們可以利用這種特點,來設置一個規則,讓它阻止所有沒有經過你的系統授權的TCP連接:

這裏的-i指的是網卡,-p則是指協議,--syn則表示帶有syn標識設置的TCP數據包。從中我們可以看出,對TCP/IP的瞭解將非常有利於維護網絡安全。SYN用於初始化一個TCP連接,如果你在自己的機器上沒有運行任何服務器,別人自然也就不會向你發送SYN數據包了。

就這點而言,有人會説:何必如此麻煩?的確,我們有更簡單的創建防火牆的方法,也有很多不錯的軟件也可以幫助我們來構建自己的規則集,但是我們應該清楚,最簡單的辦法,往往不是最好的方法。既然我們有更好的方法,為什麼不使用呢?

共享一個Internet連接

網絡地址翻譯和IP偽裝都可以實現多台主機共享一個Internet連接,而這個局域網可以是Linux和Windows系統組成的多系統局域網。假設現在我們有一台機器有兩個網卡,其中eth0為“公共”網卡,eth1為“私有”網卡。

換句話説,eth0被分配了一個靜態的,可路由的IP地址,而eth1則被分配給了一個私有的、不能路由的IP,也就是説該IP是屬於該局域網子網的。要實現上述功能,我們需要向nat和filter表中添加一些鏈:

這顯示了有狀態的數據包檢測的價值。請注意,我們這裏是如何實現流入數據包只有在屬於一個已經存在的連接時才被允許的,而所有來自局域網內流向外的數據包則都允許通過 (注意:這裏的filter是缺省的表,但它並不是必須的)。

第一條規則讓所有流出的信息看起來都是來自防火牆機器的,而並不會顯示出防火牆後面還有一個局域網。

下面的例子是為FORWARD和POSTROUTING鏈設置了缺省的策略,在使用偽裝時,有一個缺省的POSTROUTING DROP策略是非常重要的,否則,就有可能有心懷惡意的用户突破網關後偽裝它自己的身份。

下面的例子是為了撥號連接設置的,它可以動態地分配IP地址:

規則的保存

使用腳本更改規則的問題是:改動每個規則都要調用命令iptables,而每一次調用iptables,它首先要把netfilter內核空間中的整個規則集都提取出來,然後再插入或附加,或做其他的改動,最後,再把新的規則集從它的內存空間插入到內核空間中,這顯然會花費很多時間。

為了解決這個問題,可以使用命令iptables-save和restore 。iptables-save用來把規則集保存到一個特殊格式的文本文件裏,而iptables-restore則用來把這個文件重新裝入到內核空間中。

這兩個命令最好的地方在於一次調用就可以裝載和保存規則集,而不像腳本中每個規則都要調用一次iptables。

iptables-save運行一次就可以把整個規則集從內核裏提取出來,並保存到文件裏,而iptables-restore每次裝入一個規則表。換句話説,對於一個很大的規則集,如果用腳本來設置,那這些規則就會反覆地被卸載、安裝很多次,而我們現在可以把整個規則集一次就保存下來,安裝時則是一次一個表,這可是節省了大量的時間。所以,一旦測試結果令你滿意,你就可以將它們保存為腳本:

現在,信息包過濾表中的所有規則都被保存在文件iptables-script中。無論何時再次引導系統,都可以使用 iptables-restore 命令將規則集從該腳本文件恢復到信息包過濾表,恢復指令如下所示:

如果您願意在每次引導系統時自動恢復該規則集,則可以將上面指定的這條命令放到任何一個初始化shell腳本中。

標籤: LINUX 防火牆 設置
  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-hk/jsj/caozuo/p1znl9.html