<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-179  評論-666  文章-29  trackbacks-0

    關于IP Tables

    在初始化設置系統后,為了讓系統更安全,Ubuntu把Iptabls作為發行版的默認防火墻。起初,盡管Ubuntu防火墻已經被配置了,但是它設置為通過一個虛擬主機允許所有的進入與流出流量。要打開服務器上某些更強的保護功能,我們需要在IP Table山增加一些基礎的規則。

    IP Table 規則來自于一系列可以組合起來創建各自的特定的處理方法的選項。每一個通過防火墻的包被所有的規則按順序檢查,一旦符合某個規則,這個報文包就遵循相關的動作,否則就處理下一行。

    IP Table 命令

    盡管這個教程只會涉及有限的一些命令,這些命令能夠提供給服務器一些基本安全,然后卻可以為IP Table提供大量的細致與具體的用例。下面是配置VPS防火墻最有用的命令中的一部分,請在腦海中保持一根弦:下面只是一個很短的列表,還有大量的其他可選參數。

    -A:(Append), 增加一條規則到IP Table中;
    -L:(List),顯示當前規則;
    -m conntrack: 允許規則基于當前的連接狀態,詳細指定使用 --cstate 命令;
    --cstate: 解釋當前連接可以進入的狀態,有4種,分別是: New, Related, Established, Invalid;
    -p:(protocal),指向要被檢查的規則或包的協議,指定的協議可以是tcp,upd,updlite,icmp,esp,ah,sctp,中的一種或者特殊的關鍵詞
    "all"
    --dport:(port),指向機器連接通過的端口;
    -j:(junp),這個參數指明當有滿足一條規則的事件發生,那么就要采取的動作。它被轉換為如下四種可能中的一種

    • -ACCEPT:這個包被接收,沒有更進一步的規則需要處理;
    • -REJECT:這個包被拒絕了,同時通知發送者,沒有更進一步的規則需要處理;
    • -DROP:這個包被拒絕了,但是不會通知發送者,沒有更進一步的規則需要處理;
    • -LOG:這個包被接收,同時被日志記錄,接下來的規則會繼續被執行;

    -I:(Insert),在前兩個之間插入一條規則;
    -I INPUT 3:插入一條規則到IP Table中,并且讓它成為列表中的第三個;
    -v:(verbose),提供關于一條規則的更多的細節;

    建立一個IP Table

    如果你輸入以下命令,可以在虛擬主機上看到當前的IP Table

    sudo iptables -L

    顯示出來的內容應該類似下面這樣:

    Chain INPUT (policy ACCEPT)
    target prot opt source destination

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    如果你在某處有一個不同的規則集或者你想要開始一個新的,你總是可以通過刷新與刪除所有規則以使規則被還原為默認的。

    sudo iptables -F

    更進一步,如果你想用IP Table來提高你的工作速度,你可以在命令中使用 -n,這個參數屏蔽掉DNS查詢,阻止那些嘗試從規則集中反轉找出每一個ip的命令,你可以用這個命令列出規則來,比如下面這樣:

    iptables -L -n

    一個基本的防火墻

    基于表示當前運行所有連接的規則,即傳入和傳出。無論怎樣都么有安全可言。在我們建立table時,需要隨時保持一根弦的就是,一旦一個包被ACCEPTED,REJECTED,DROPPED,那么就不會有更進一步的規則被執行了。即規則中第一個比后一個有優先權。

    當創建規則時,我們必須保證不因意外的屏蔽SSH而阻止了我們自己。

    開始時,我們必須要保證允許當前所以的連接,當創建規則時所有的連接會保持在線。

    sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    讓我們開始來分析這段命令的意思:

    1. -A 告訴IP Table增加一條規則到table中;
    2. INPUT 指定這條規則是輸入鏈的一部分;
    3. m conntrack 后續跟著 -csstat ESTABLISHED,RELATED表明這條規則只能當前存在的連接和與它相關的連接起作用;
    4. -j ACCEPT 判斷這個包跳轉到接收,而這個連接不會改變;

    在我們保證了當前vps上連接不會被中斷后,我們可以著手開始屏蔽掉不安全的連接。

    我們假設想要屏蔽掉除了給ssh用的22端口和web服務的80端口外的其他傳入流量。我們通過使用下面的規則來允許指定端口上的所有流量:

    sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

    在這兩條命令中, -p 參數代表連接使用的協議,在這里是tcp,--dport指定傳遞的包通過的端口

    在我們保證了有價值的通信將會通過防火墻后,我們可以通過屏蔽掉所有剩下的進入vps的通信來結束規則。因為這是規則列表中的最后一條,任何一個滿足上面一條規則的通信都不會被此條規則影響到,它們會被我們之前的定義所處理。

    下面就開始定義屏蔽掉所有剩下通信的規則:

    sudo iptables -A INPUT -j DROP

    通過上面的定義,我們更新后的規則類似于下面這樣:

    sudo iptables -L
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
    ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
    ACCEPT tcp -- anywhere anywhere tcp dpt:http
    DROP all -- anywhere anywhere

    我們基本上快結束了。然后,我們忘記了一個規則,我們需要提供我們的vps的回環訪問。如果我們現在打算添加的規則沒有更多的限定語,它將是規則列表的最后一條,因為它在屏蔽掉所有通信的后面,所以它不會產生作用。

    為了避免這種情況,我們需要把這條規則添加到列表的第一條,使用如下的命令:

    sudo iptables -I INPUT 1 -i lo -j ACCEPT

    1. -I INPUT 1 把這條命令放在規則表的第一條;
    2. lo 指向回環接口;
    3. -j ACCEPT保證回環通信能被接收;

    到目前為止,我們已經創建了一個基本的防火墻,你的規則應該類似于這樣(我們可以使用 -v來查看iptable的詳細信息):

    sudo iptables -L -v

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    0 0 ACCEPT all -- lo any anywhere anywhere
    1289 93442 ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
    2 212 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
    0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:http
    47 2422 DROP all -- any any anywhere anywhere

    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination

    Chain OUTPUT (policy ACCEPT 157 packets, 25300 bytes)
    pkts bytes target prot opt in out source destination

    然而,當vps重啟后,IP Table就被清除掉了,下一步就是保存與恢復IP Tables。

    保存IP Tables

    雖然IP Tables非常的有用,如果服務器重啟,那么他們會被自動的刪除。為了保證他們永遠有效,我們可以使用一個叫做IP-Tables persistent軟件包。
    我們可以通過apt-get 來安裝這個軟件包:

    sudo apt-get install iptables-persistent
    安裝過程中,你將會被詢是否同時保存IPv4和IPv6規則,選擇yes。

    你的規則稍后就可以被保存在 /etc/iptables/rules.v4和/etc/iptables/rules.v6中。

    當安裝完成后,運行下面這個命令啟動iptables-persistent:
    sudo service iptables-persistent start
    后續無論怎么重啟服務器,你的規則都保存在那里。

    保存您的防火墻股則到一個文件 

    # iptables-save > /etc/iptables.up.rules 

    接著修改 /etc/network/interfaces 腳本自動應用這些規則(末行是添加的) 

    auto eth0 
    iface eth0 inet dhcp 
    pre-up iptables-restore < /etc/iptables.up.rules 

    你也可以準備一組規則冰并自動應用它 

    auto eth0 
    iface eth0 inet dhcp 
    pre-up iptables-restore < /etc/iptables.up.rules 
    post-down iptables-restore < /etc/iptables.down.rules 


    封單個IP的命令是:

     代碼如下復制代碼
    iptables -I INPUT -s 211.1.0.0 -j DROP

    封IP段的命令是:

     代碼如下復制代碼

    iptables -I INPUT -s 211.1.0.0/16 -j DROP 
    iptables -I INPUT -s 211.2.0.0/16 -j DROP 
    iptables -I INPUT -s 211.3.0.0/16 -j DROP

    封整個段的命令是:

     代碼如下復制代碼

    iptables -I INPUT -s 211.0.0.0/8 -j DROP

    封幾個段的命令是:

     代碼如下復制代碼

    iptables -I INPUT -s 61.37.80.0/24 -j DROP 
    iptables -I INPUT -s 61.37.81.0/24 -j DROP


    vi /etc/sysconfig/iptables里:RH-Firewall-1-INPUT - [0:0]下面添加一行

    下面是只允許某個IP訪問xx端口

     代碼如下復制代碼

    -A INPUT -s 192.168.5.244 -j DROP

    以上是臨時設置。

    解封的話:

     代碼如下復制代碼

    iptables -D INPUT -s IP地址 -j REJECT 
    iptables -F 全清掉了  


    防止同步包洪水(Sync Flood)

     代碼如下復制代碼
    # iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT

    防止各種端口掃描

     代碼如下復制代碼
    # iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT

    Ping 洪水攻擊(Ping of Death)

     代碼如下復制代碼
    # iptables -A FORWARD -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT


    1. 查看本機關于IPTABLES的設置情況

     代碼如下復制代碼
    # iptables -L -n

    2. 清除原有規則
    # iptables -F 清除預設表filter中的所有規則鏈的規則
    # iptables -X 清除預設表filter中使用者自定鏈中的規則

    =========================================================================================================================================

    Iptables是一個防火墻,所有的Ubuntu官方發行版(Ubuntu,Kubuntu,Xubuntu)都默認自帶Iptables。當你安裝完Ubuntu以后,Iptables就已經裝好了,但是默認設置是允許所有的通訊。從Ubuntu 8.04版本開始,Ubuntu有了一個防火墻配置的GUI工具UFW

    ubuntu下跟其他linux系統的操作基本相同,可能略有不同。
    iptables命令的選項很多,多使用man吧。

    查看本機設置

    查看本機的Iptables設置使用下面的命令:

    iptables -L -n

    通過iso文件剛安裝完的純凈的ubuntu,查看一下防火墻設置的話,是這樣沒有任何規則的:

    Chain INPUT (policy ACCEPT)
    target       prot opt source                 destination         
    Chain FORWARD (policy ACCEPT)
    target       prot opt source                 destination         
    Chain OUTPUT (policy ACCEPT)
    target       prot opt source                 destination

    沒有任何規則。

    清除規則

    不管有沒有配置過規則,在重新進行配置之前,需要先清除規則:

    iptables -F        //清除預設表filter中的所有規則鏈的規則
    iptables -X        //清除預設表filter中使用者自定鏈中的規則

    設定預設規則

    這樣就清除干凈了,下面開始配置,先設定預設規則。
    對于防火墻的設置,有兩種策略:一種是全部通訊口都允許使用,只是阻止一些我們知道的不安全的或者容易被利用的口;另外一種,則是先屏蔽所有的通訊口,而只是允許我們需要使用的通訊端口。

    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD DROP

    注意-P中的P需要大寫,表示Protocol。

    可以看出INPUT,FORWARD兩個鏈采用的是允許什么包通過,而OUTPUT鏈采用的是不允許什么包通過。
    當超出了IPTABLES里filter表里的兩個鏈規則(INPUT、FORWARD)時,不在這兩個規則里的數據包怎么處理呢,那就是DROP(放棄)。應該說這樣配置是很安全的,我們要控制流入數據包。
    而對于OUTPUT鏈,也就是流出的包我們不用做太多限制,而是采取ACCEPT,也就是說,不在這個規則里的包怎么辦呢,那就是通過。

    添加規則

    先來添加INPUT規則,因為INPUT預設的是DROP,所以要添加ACCEPT規則。
    首先是22端口,這個的用處地球人都知道。

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT

    或者,你不寫22,寫ssh也可以。

    iptables -A INPUT -p tcp --dport ssh -j ACCEPT

    給Web服務器開啟80端口

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT

    給FTP服務開啟20和21端口

    iptables -A INPUT -p tcp --dport 20 -j ACCEPT
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT

    給郵件服務開啟25和110端口

    iptables -A INPUT -p tcp --dport 25 -j ACCEPT
    iptables -A INPUT -p tcp --dport 110 -j ACCEPT

    對于OUTPUT規則,因為預設的是ACCEPT,所以要添加DROP規則,減少不安全的端口鏈接。

    iptables -A OUTPUT -p tcp --sport 31337 -j DROP
    iptables -A OUTPUT -p tcp --dport 31337 -j DROP

    具體要DROP掉哪些端口,可以查詢相關的資料,可以把一些黑客常用的掃描端口全部DROP掉,多多少少提高一點服務器的安全性。

    我們還可以把規則限制到只允許某個IP:

    iptables -A INPUT -s 192.168.0.18 -p tcp --dport 22 -j ACCEPT

    這表示只允許192.168.0.18的機器進行SSH連接。

    如果要允許一個IP段,可以使用下面的寫法:

    iptables -A INPUT -s 192.168.0.1/255 -p tcp --dport 22 -j ACCEPT

    這表示允許192.168.0.1/255IP段的機器進行連接。
    但是,注意我們前面已經添加一條規則來允許所有IP連接22端口,需要把這條規則刪除掉。

    iptables -D INPUT -p tcp --dport 22 -j ACCEPT

    對于FORWARD規則,因為預設的是DROP,所以要添加ACCEPT規則。
    開啟轉發功能

    iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT

    丟棄壞的TCP包

    iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP

    處理IP碎片數量,防止攻擊,允許每秒100個

    iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

    設置ICMP包過濾,允許每秒1個包,限制觸發條件是10個包

    iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

    Iptables的保存和調用

    現在該提一下保存的問題了。
    我們用命令來添加的設置,都不會自動保存,一旦退出,設置都將不存在了,需要手動去保存一下。

    iptables-save >/etc/iptables.up.rules

    把剛才設置的規則保存到指定的地方,文件名可以自定義。

    調用Iptables設置

    iptables-restore >/etc/iptables.up.rules

    由于每次開機或重啟后都需要去調用一次,我們把它設置自動的,執行

    sudo gedit /etc/network/interfaces

    auto ath0
         iface ath0 inet dhcp

    后面,加上

    pre-up iptables-restore >/etc/iptables.up.rules //開機時自動調用已經存在的Iptables設置
    post-down iptables-save >/etc/iptables.up.rule  //關機時自動保存當前的Iptables設置

    =====================================================================================================

    防范CC攻擊

    當apache站點受到嚴重的cc攻擊,我們可以用iptables來防止web服務器被CC攻擊,實現自動屏蔽IP的功能。

    1.系統要求

    (1)LINUX 內核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它內核版本需要重新編譯內核,比較麻煩,但是也是可以實現的)。

    (2)iptables版本:1.3.7

    2. 安裝

    安裝iptables1.3.7和系統內核版本對應的內核模塊kernel-smp-modules-connlimit

    3. 配置相應的iptables規則

    示例如下:

    (1)控制單個IP的最大并發連接數

    iptables -I INPUT -p tcp --dport 80 -m connlimit  --connlimit-above 50 -j REJECT #允許單個IP的最大連接數為 30

       iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP #限制與80端口連接的IP最大連接數為10,可自定義修改。

    #默認iptables模塊不包含connlimit,需要自己單獨編譯加載,請參考該地址
    http://sookk8.blog.51cto.com/455855/280372不編譯內核加載connlimit模塊


    (2)控制單個IP在一定的時間(比如60秒)內允許新建立的連接數

    iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
    #單個IP在60秒內只允許最多新建30個連接


    posted on 2015-10-31 15:51 Alpha 閱讀(2573) 評論(0)  編輯  收藏 所屬分類: Linux Nginx
    主站蜘蛛池模板: 97亚洲熟妇自偷自拍另类图片| 久久久久se色偷偷亚洲精品av| 无码免费一区二区三区免费播放 | 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 三级黄色在线免费观看| 久久亚洲日韩看片无码| 成人au免费视频影院| 成人片黄网站色大片免费观看cn| 亚洲嫩草影院在线观看| 亚洲国产午夜福利在线播放| 久久久久免费看成人影片| 在线91精品亚洲网站精品成人| 久久久亚洲欧洲日产国码农村| 日韩毛片免费在线观看| 久久免费观看国产精品88av| 亚洲爆乳无码精品AAA片蜜桃| 亚洲大尺度无码专区尤物| 欧洲美熟女乱又伦免费视频| 国产午夜精品免费一区二区三区| 亚洲JLZZJLZZ少妇| 亚洲精品美女视频| 亚洲婷婷五月综合狠狠爱| 麻豆国产入口在线观看免费| 9420免费高清在线视频| 一级有奶水毛片免费看| 无码色偷偷亚洲国内自拍| 亚洲伊人久久精品| 亚洲Av综合色区无码专区桃色| 免费一级国产生活片| 成人免费午夜视频| 免费专区丝袜脚调教视频| 国内永久免费crm系统z在线| 美女被暴羞羞免费视频| 亚洲综合av一区二区三区| 91亚洲va在线天线va天堂va国产| 国产亚洲精品拍拍拍拍拍| 免费看男女下面日出水视频| 成人人免费夜夜视频观看| 黄瓜视频影院在线观看免费| 8090在线观看免费观看| 国产啪精品视频网站免费尤物 |