• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    菜鳥redhat9調試筆記之四(linux下的防火墻)

    發布: 2007-7-04 12:06 | 作者: admin | 來源:  網友評論 | 查看: 17次 | 進入軟件測試論壇討論

    領測軟件測試網
    6月18日,最近忙于研究LFS和Gentoo,所以好久沒寫調試筆記,大家一定等者我的下一篇吧!
    今天給大家將iptables,即linux下的防火墻


    1. 安裝我不講了,RH9的rpm安裝方式非常簡單,大家只要在rh的安裝源盤找到相應的rpm包就行。

    然后 rpm -Uvh iptables-?.i386.rpm


    2. 我們今天調試的環境是一臺雙網卡的服務器,通過DDN固定ip地址上網,兩塊網卡分別是
    eth0: 211.101.251.4 外部ip地址,直接上網
    eth1: 192.168.0.1 內部網卡地址,連接192.168.0.0/255.255.255.0網斷局域網

    3.客戶端A是臺WWW,地址是192.168.0.2。我們將利用后面的DNAT功能,讓外面的機器能訪問這臺機器的www服務。其他客戶端都在192.168.0.0/24網段,且網關都指向192.168.0.1

    4. 如果大家要使用iptables的NAT功能,之前我們要確保系統內核配置的是正確的,我的iptables好幾次就因為內核編譯錯誤,造成客戶端不能正常使用SNAT功能,甚至不能加載ip_tables模塊。這是一般的內核配置,基本上iptables的NAT功能能正常使用,內核版本不同可能顯示不一樣,大家靈活掌握就行,應該不會出現麻煩。


    Networking options --->
    [*] Network packet filtering (replaces ipchains)
    [*] TCP/IP .networking 
    IP: Netfilter Configuration ---> 
    <M> Connection tracking (required for masq/NAT) (NEW) 
    <M> FTP protocol support (NEW)
    <M> IP tables support (required for filtering/masq/NAT) (NEW)
    <M> limit match support (NEW)
    <M> MAC address match support (NEW)
    <M> netfilter MARK match support (NEW)
    <M> Multiple port match support (NEW)
    <M> TOS match support (NEW)
    <M> tcpmss match support (NEW)
    <M> Connection state match support (NEW)
    <M> Packet filtering (NEW)
    <M> REJECT target support (NEW) 
    <M> Full NAT (NEW)
    <M> MASQUERADE target support (NEW) 
    <M> REDIRECT target support (NEW) 
    <M> Packet mangling (NEW)
    <M> TOS target support (NEW)
    <M> MARK target support (NEW)
    <M> LOG target support (NEW)
    <M> TCPMSS target support (NEW) 
    <M> ipchains (2.2-style) support (NEW) 
    < > ipfwadm (2.0-style) support (NEW) 


    5. 我們要打開ip_forward,
    直接修改/etc/sysctl.conf 這個文檔,把net.ipv4.ip_forward= 1 并把前面的#去掉,或者
    echo "1" > /proc/sys/net/ipv4/ip_forward ,但是下次重起還是變0,所以還是直接修改文檔的好。

    6. 我們在使用iptables之前,先要了解iptables的參數:

    ACCEPT 
    接受這個封包,也就是可以通過規則檢驗而放行、順利通過這個鏈。 

    DROP 
    丟棄這個封包,也就不能通過規則檢驗而被擋掉。 

    REJECT 
    與 DROP 一樣,但會向來源地送出 ICMP 封包,告之對方‘ port unreachable ’的錯誤信息。 

    REDIRECT 
    將封包重導至 本機端 的其它 port 。 

    SNAT / DNAT / MASQUERADE 
    這些都是 NAT 的處理,視要求而修改為特定的 Source Socket 或 Destination Socket 、或動態的根據路由判斷後的界面而修改 Source Socket 。

    建立一個新的(自定)鏈 ( -N )。 
    刪除一個空的(自定)鏈 ( -X )。 
    改變一個內建鏈的原則 ( -P )。 
    列出一個鏈中的規則 ( -L )。 
    清除一個(內建)鏈中的所有規則 ( -F )。 
    在一個鏈的最後面新增( append ) 一條規則 ( -A )。 
    在鏈內某個位置插入( insert ) 一條新規則( -I )。 
    在鏈內某個位置替換( replace ) 一條規則 ( -R )。 
    在鏈內某個位置刪除( delete ) 一條規則 ( -D )。 
    刪除(delete) 鏈內第一條符合的規則 (-D)。 
    在 iptables 中,要指定規則是欲作用在那一個規則表上(使用 -t 來指定,如 -t nat),若不指定,則預設是作用在 filter 這個表。


    封包于防火墻中的流向 ( INPUT、OUTPUT、FORWARD ) 
    相關界面 ( -i 或 -o ) 
    所屬協定 ( -p ) 
    連線類型 ( -m state ) 
    封包類型 ( --syn ) 
    來源地 ( -s ) 
    來源端口 ( --sport ) 
    目的地 ( -d ) 
    目的地端口 ( --dport ) 


    好了,開始工作!

    首先查看一下機器上的有關于iptables的設定情況
    作法如下:

    iptables -L -n 或者 iptablse -t nat -L -n

    定義參數

    $DDN_IP="211.101.251.4"

    如果你以前調試過iptables那么我們先清除先前的設定

    iptables -F 清除預設表 filter 中,所有規則鏈中的規則

    iptables -X 清除預設表 filter 中,使用者自訂鏈中的規則

    iptables -F -t mangle 清除mangle表中,所有規則鏈中的規則

    以此類推:

    iptables -t mangle -X 清除mangle表中,使用者自訂鏈中的規則

    iptables -F -t nat 清除nat表中,所有規則鏈中的規則

    iptables -t nat -X 清除nat表中,使用者自訂鏈中的規則

    首先我們來設置 filter table 的預設策略

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

    當然我們也可以使用DROP,但一般我們不會這么做

    接下來配置nat tables表

    &&一個典型的例子IP 偽裝(SNAT應用),即局域網網所有的機器都通過eth0做的透明網關出去,不做其他限制,

    iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

    假如你的上網方式是adsl撥號上網,adsl接口是ppp0,那么也可以這么設置
    iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE


    好了,現在我們要把這些命令保存為策略文件,好讓iptables認出

    /etc/rc.d/init.d/iptables save 系統會根據你剛才輸入的命令保存為一個策略配置文件/etc/sysconfig/iptables

    然后我們運行/etc/rc.d/init.d/iptables start 啟動iptables,并加載配置文件

    好了現在你的局域網客戶端都可以通過這臺服務器上網,ftp,qq,www都沒有限制,因為我們現在設置的是透明的防火墻。我們總結一下剛才的命令是:


    源碼:--------------------------------------------------------------------------------
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -F
    iptables -X
    iptables -t nat -F
    iptables -t nat -X
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -t nat -P PREROUTING ACCEPT
    iptables -t nat -P OUTPUT ACCEPT
    iptables -t nat -P POSTROUTING ACCEPT
    iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
    /etc/rc.d/init.d/iptables save
    /etc/rc.d/init.d/iptables start
    --------------------------------------------------------------------------------


    &&另外一個典型的例子是DNAT,利用轉址、轉 port 的方式,使外網的封包,可以到達內網中的服務器主機,俗稱虛擬主機。這種方式可保護服務器主機大部份的 port 不被外界存取,只開放公開服務的通道(如 Web Server port 80),因此安全性較高。

    比如: 凡對 211.101.251.4:80 連線者, 則轉址至 192.168.0.2:80

    iptables -t nat -A PREROUTING -i eth0 -p tcp -d 211.101.251.4 --dprot 80 -j DNAT --to-distination 192.168.0.2:80

    同樣DNAT還可以利用在DMZ區域的mail,FTP等服務,大家就安需自己寫吧!

    以上講的策略對大多數朋友來說已經綽綽有余了,但有些公司的老板可不是這么想,老板們往往希望員工好好工作,除了能上網收信以外,其他的諸如FTP,QQ一律靜止,這樣的話iptables的設置就比較大,我們不能簡單的MASQUERADE。比如我們現在只開放53(dns)80,25,110三個端口用來平時的www和mail服務,那么我們就可以這樣設置


    源碼:--------------------------------------------------------------------------------
    ptables -F
    iptables -X
    iptables -t nat -F
    iptables -t nat -X
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -t nat -P PREROUTING ACCEPT
    iptables -t nat -P OUTPUT ACCEPT
    iptables -t nat -P POSTROUTING ACCEPT

    iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to-source 211.101.251.4
    1192.168.0.0/24 這個網段,偽裝成 211.101.251.4 出去。

    iptables -A OUTPUT -o eth0 -p tcp -s 211.101.251.4 --sport 1024:65535 -d any/0 --dport 80 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 80 -d 211.101.251.4 --dport 1024:65535 -j ACCEPT
    開放內網可以觀看外網的網站。

    iptables -A OUTPUT -o eth0 -p tcp -s 211.101.251.4 --sport 1024:65535 -d any/0 --dport 25 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 25 -d 211.101.251.4 --dport 1024:65525 -j ACCEPT
    你可以送信給別人

    iptables -A OUTPUT -o eth0 -p tcp -s 211.101.251.4 --sport 1024:65535 -d any/0 --dport 110 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 110 -d 211.101.251.4 --dport 1024:65535 -j ACCEPT
    開放內網可以對外網的 POP3 server 取信件。

    iptables -A OUTPUT -o eth0 -p udp -s 211.101.251.4 --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
    iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d 211.101.251.4 --dport 1024:65535 -j ACCEPT
    開放查詢外網的 DNS 主機

    iptables -A OUTPUT -o eth0 -p icmp -s 211.101.251.4 --icmp-type 8 -d any/0 -j ACCEPT
    iptables -A INPUT -i eth0 -p icm -s any/0 --icmp-type 0 -d 211.101.251.4 -j ACCEPT
    開放 ping功能

    --------------------------------------------------------------------------------


    好了,差不多了大家學的怎么樣,反正這些已經夠你用了,其他的你就舉一反三吧!

    這里還要講的是我的服務器是運行著squid服務,由于帶寬有限,所以雖然開了透明SNAT功能,但還是希望客戶端特別是www的訪問還是使用squid服務,這樣可以節省不少帶寬資源,這里我們就可以用到iptables的Transparent功能,讓iptables的客戶端80端口的訪問強行轉移到squid的3128端口,

    首先,修改 /etc/squid/squid.conf,找到下面幾行,并修改為如下樣子:

    httpd_accel_host redhat.frankhome.com # 請修改為您的 squid 主機名稱
    httpd_accel_port 80
    httpd_accel_with_proxy on
    httpd_accel_uses_host_header on
    然后/etc/rc.d/init.d/squid restart

    接著添加以下策略:
    iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-ports 3128

    這時候,您的 Transparent Proxy 就起來了!如果您要測試它,可以取消 client 端的 proxy 設定,并將 squid關閉,然後測試是否不能連線(建議用一個未曾瀏覽過的網址來測試)?然則,再將 squid打開,如果能這樣又能恢復連線的話,那就已經成功了!這樣有一個好處是:以後您再也不必跑到 client 那邊設定 proxy;而且,更好的地方在於:重復性的連線再也無需占用寶貴的對外頻寬,速遞當然也能'假性'的獲得提高

    ok!今天就寫到這里,大家學了多少?一定要慢慢消化哦。海

     guangdong 回復于:2003-07-29 12:55:40
    6月19日,今天就iptables大家比較關心的問題來個補充說明

    1.關于DNAT的補充說明!

    對于用ADSL撥號上網的用戶,外部網卡往往獲取的ip地址是不固定的,所以虛擬主機,或者WWW,mail,ftp發布可能會有些問題,在此針對ADSL的不固定IP情況設置相應的DNAT策略,使能正常發布內網的FTP,MAIL,WWW。

    我們這里以發布WWW為例,還是192.168.0.2為內部WWW服務器,只不過現在的服務器是通過ADSL上網

    所以我們添加以下策略:
    ptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.2:80
    將80請求轉發至192.168.0.2:80端口
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.2 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.1
    返回a.b.b.d時數據源來自同一子網,就將其源地址更改為192.168.0.1,從eth0發出,并在連接跟蹤表中查出a.b.c.d是從ppp0進來的,又由ppp0將此數據發出。(我也看不明白為何要有這句話)
    iptables -A INPUT -p tcp --dport 80 -i ppp0 -j ACCEPT
    允許80端口訪問的語句。
    然后重新
    /etc/rc.d/init.d/iptables save
    /etc/rc.d/init.d/iptables restart

    其他如FTP發布也可舉一反三:
    ptables -t nat -A PREROUTING -p tcp -m tcp --dport 21 -j DNAT --to-destination 192.168.0.2:21
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.2 -p tcp -m tcp --dport 21 -j SNAT --to-source 192.168.0.1
    iptables -A INPUT -p tcp --dport 21 -i ppp0 -j ACCEPT


    上網的時候,用ifconfig看看ppp0的地址,然后用那個地址看看WWW是否正常發布。呵呵,應該是沒問題的哦!


    2.關于封QQ,聯眾和邊峰游戲的補充說明

    相信很多公司的老板會讓網管通過防火墻來封鎖QQ,聯眾和邊峰游戲,但又不能耽誤其他事,我這里有個簡單的配置文件服務器也是通過ADSL上網,能簡單的實現以上要求:
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -A FORWARD -p icmp -j ACCEPT 開放ping功能
    iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 80 -j ACCEPT 開放網頁瀏覽功能
    iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 25 -j ACCEPT 開放smtp發信功能
    iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 110 -j ACCEPT 開放pop3收信功能
    iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 21 -j ACCEPT 開放默認FTP功能
    iptables -A FORWARD -p tcp --dport 4000 -o ppp0 -j DROP 封鎖邊峰
    iptables -A FORWARD -p tcp --dport 2000 -o ppp0 -j DROP 封鎖聯眾
    iptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 8000 -j DROP 封鎖QQ(有時udp4000端口也要封鎖)
    iptables -A FORWARD -p udp -j ACCEPT 允許其他UDP服務,比如DNS等

    IPTABLES -A FORWARD -p TCP --dport 1863 -j ACCEPT
    IPTABLES -A FORWARD -p TCP --dport 7801:7825 -j ACCEPT
    IPTABLES -A FORWARD -p TCP --dport 6891:6900 -j ACCEPT
    上面三條是開放了MSN, 不知行不行?
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE


    3.我不想讓人家可以PING到我

    這大概是做防火墻用到最多的一種了 你可以在iptables寫這句話
    iptables -A INPUT -p icmp --icmp-type echo-request -i ppp0 -j DROP

     leon_yuen 回復于:2003-07-29 13:59:42
    很好的文章,很詳細的備注,謝謝

     guangdong 回復于:2003-07-29 21:03:12
    占位貼

     wzwmoca 回復于:2003-08-12 10:50:58
    恩人。。!

     zwwzb 回復于:2003-08-16 16:39:06
    非常感謝!
    我頂!!!

     kanka 回復于:2003-12-09 03:55:58
    叩頭

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>