linux放火牆------iptables(filter)
Linux的2.4版核心引入了一種全新的包過濾引擎,稱為Netfilter.控制Netfilter的工具iptables是linux2.2版核心比較老的命令ipchains的兄弟。iptables把有次序的規則“鏈(chains)”應用到網路包上。鏈的集合就構成了“表(tables)”,用於處理特殊型別的流量。
預設的iptables表名叫“filter(過濾器)”。這個表裡的規則鏈都用於根據包來過濾流量。除了filter表之外,iptables還包含”nat”和“mangle”表名,”nat“表包含的規則鏈控制著NAT(Network Address Translation,網路地址轉換,mangle表包含了鏈可以修改或者改變在nat和包過濾之外的網路包內容。
以下內容來自:
事實上, iptables 就是一個可以載入的模組,在開始進行 iptables 的設定之前,先確認一下,由於 ipchains 與 iptables 是不能同時存在的,所以先檢查一下 ipchains 是否不小心被載入到系統當中了呢?
[root@test root]# lsmod
# 若有發現 ipchains 的字樣,表示系統不小心載入了 ipchains 了,請使用:
[root@test root]# rmmod ipchains
# 這樣就能夠移除 ipchains 了!然後載入 iptables 吧!
[root@test root]# modprobe ip_tables
iptables 的語法
清除規則與觀察規則
iptables 在一開始的時候,應該是沒有規則的,不過,可能因為您在安裝的時候就有選擇系統自動幫您建立防火牆機制,此時系統就會有預設的防火牆規則了!好了,無論如何,我們先來看看目前本機的防火牆規則是如何吧!?
[root@test root]# iptables [-t tables] [-L] [-n] 引數說明:
-t:後面接 iptables 的 table ,例如 nat 或 filter ,如果沒有 -t table 的話,那麼預設就是 -t filter 這個 table 喔!
-L:列出目前的 table 的規則
-n:不進行 IP 與 HOSTNAME 的轉換,螢幕顯示訊息的速度會快很多! 範例:
[root@test root]# iptables -L -n
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
# 仔細看到上面,因為沒有加上 -t 的引數,所以預設就是 filter 這個表格,
# 在這個表格當中有三條鏈,分別是 INPUT, OUTPUT 與 FORWARD ,而且因為
# 沒有規則,所以規則裡面都是空的!同時注意一下,在每個 chain 的後面 ()
# 裡面,會發現有 policy 對吧!那就是『預設動作(政策)』咯!以上面來看,
# 雖然我們啟動了 iptables ,但是我們沒有設定規則,然後政策又是 ACCEPT,
# 所以『任何封包都會接受』的意思喔!
[root@test root]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# 與 filter 類似的, nat 這個表格裡面有的則是 PREROUTING, POSTROUTING
# 以及 OUTPUT 三條鏈啊!
至於要清除規則的話,就得要這樣下達指令了!
[root@test root]# /sbin/iptables [-t tables] [-FXZ] 引數說明:
-F :清除所有的已訂定的規則;
-X :殺掉所有使用者建立的 chain (應該說的是 tables )囉;
-Z :將所有的 chain 的計數與流量統計都歸零 範例:
[root@test root]# /sbin/iptables -F
[root@test root]# /sbin/iptables -X
[root@test root]# /sbin/iptables -Z
[root@test root]# /sbin/iptables -t nat -F
# 請注意,如果在遠端聯機的時候,『這三個指令必須要用 scripts 來連續執行』,
# 不然肯定『會讓您自己被主機擋在門外!』
一般來說,我們在重新定義防火牆的時候,都會先將規則給他清除掉。還記得我們前面談到的,防火牆的『規則順序』是有特殊意義的,所以囉,當然先清除掉規則,然後一條一條來設定會比較容易一點啦!
定義政策 清除規則之後,再接下來就是要設定規則的政策啦!還記得政策指的是什麼嗎?『當您的封包不在您設定的規則之內時,則該封包的透過與否,以 Policy 的設定為準』,通常這個政策在 filter 這個 table 的 INPUT 鏈方面可以定義的比較嚴格一點,而 FORWARD 與 OUTPUT 則可以訂定的鬆一些!通常我都是將 INPUT 的 policy 定義為 DROP 啦!全部都擋掉再說!
[root@test root]# /sbin/iptables [-t tables] [-P] [INPUT,OUTPUT,FORWARD| PREROUTING,OUTPUT,POSTROUTING] [ACCEPT,DROP] 引數說明:
-P :定義政策( Policy )。注意,這個 P 為大寫啊! INPUT :封包為輸入主機的方向; OUTPUT :封包為輸出主機的方向; FORWARD:封包為不進入主機而向外再傳輸出去的方向; PREROUTING :在進入路由之前進行的工作; OUTPUT :封包為輸出主機的方向; POSTROUTING:在進入路由之後進行的工作。 範例:
[root@test root]# /sbin/iptables -P INPUT DROP
[root@test root]# /sbin/iptables -P OUTPUT ACCEPT
[root@test root]# /sbin/iptables -P FORWARD ACCEPT
[root@test root]# /sbin/iptables -t nat -P PREROUTING ACCEPT
[root@test root]# /sbin/iptables -t nat -P OUTPUT ACCEPT
[root@test root]# /sbin/iptables -t nat -P POSTROUTING ACCEPT
# 除了 INPUT 之外,其它都給他設定為接受囉!在上面的設定之後,
# 我們的主機發出的封包可以出去,但是任何封包都無法進入,
# 包括響應給我們送出封包的響應封包(ACK)也無法進入喔!
增加與插入規則 好了,接下來準備要來定義規則了!請注意,在這個小節裡面我們完全都針對 Linux 本機來進行設定 ( 就是僅針對 filter table 囉! ),至於 NAT 後面的主機,我們一部分留到再談,一部分留在本章最後面的進階篇再談,這裡先學基礎的就好了!要設定 iptables 規則的基本語法如下:
[root@test root]# iptables [-t filter] [-AI INPUT,OUTPUT,FORWARD]
> [-io interface] [-p tcp,udp,icmp,all] [-s IP/network] [--sport ports]
> [-d IP/network] [--dport ports] -j [ACCEPT,DROP] 引數說明:
-A :新增加一條規則,該規則增加在最後面,例如原本已經有四條規則, 使用 -A 就可以加上第五條規則!
-I :插入一條規則,如果沒有設定規則順序,預設是插入變成第一條規則, 例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 INPUT :規則設定為 filter table 的 INPUT 鏈 OUTPUT :規則設定為 filter table 的 OUTPUT 鏈 FORWARD:規則設定為 filter table 的 FORWARD 鏈
-i :設定『封包進入』的網路卡介面
-o :設定『封包流出』的網路卡介面 interface :網路卡介面,例如 ppp0, eth0, eth1....
-p :請注意,這是小寫呦!封包的協定啦! tcp :封包為 TCP 協定的封包; upd :封包為 UDP 協定的封包; icmp:封包為 ICMP 協定、 all :表示為所有的封包!
-s :來源封包的 IP 或者是 Network ( 網域 );
--sport:來源封包的 port 號碼,也可以使用 port1:port2 如 21:23 同時透過 21,22,23 的意思
-d :目標主機的 IP 或者是 Network ( 網域 );
--dport:目標主機的 port 號碼;
-j :動作,可以接底下的動作; ACCEPT :接受該封包 DROP :丟棄封包 LOG :將該封包的資訊記錄下來 (預設記錄到 /var/log/messages 檔案) 範例: 範例一:所有的來自 lo 這個介面的封包,都予以接受
[root@test root]# iptables -A INPUT -i lo -j ACCEPT
# 注意一下,因為 -d, --dport, -s, --sport 等等引數都沒有設定,這表示:
# 不論封包來自何處或去到哪裡,只要是來自 lo 這個介面,就予以接受!
# 這個觀念挺重要的,就是『沒有設定的規定,則表示該規定完全接受』的意思!
# 例如這個案例當中,關於 -s, -d...等等的引數沒有規定時! 範例二:來自 192.168.0.1 這個 IP 的封包都予以接受:
[root@test root]# iptables -A INPUT -i eth0 -p tcp -s 192.168.0.1 -j ACCEPT
# 新增一條規則,只要是來自於 192.168.0.1 的封包,不論他要去哪裡,
# 使用的是那個協議 (port) 主機都會予以接受的意思~ 範例三:來自 192.168.1.0 這個 C Class 的網域的任何一部計算機,就予以接受!
[root@test root]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 -j ACCEPT
# 這個是網域的寫法喔!稍微注意一下的是,在範例二當中我們僅針對一個 IP ,
# 至於這個範例當中,則是針對整個網域來開放吶!而網域的寫法可以是:
# 192.168.1.0/24 也可以是 192.168.1.0/255.255.255.0 都能夠接受喔! 範例四:來自 192.168.1.25 的封包都給他丟棄去!
[root@test root]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.25 -j DROP
範例五:只要是想進入本機的 port 21 的封包就給他丟棄
[root@test root]# iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP
範例六:來自 192.168.0.24 這個 IP 的封包,想要到我的 137,138,139 埠口時,都接受
[root@test root]# iptables -A INPUT -i eth0 -p tcp -s 192.168.0.24
> --dport 137:139 -j ACCEPT 範例七:只要是接觸到我主機的 port 25 就將該封包記錄 (LOG) 下來
[root@test root]# iptables -A INPUT -p tcp --dport 25 -j LOG
# 還是請特別注意到『規則的順序排列』的問題喔!
如上面的基本語法所示,我們的 iptables 可以規定封包『來自哪裡、要去哪裡、使用什麼協議(port number)』等等的資訊呢!所以他的功能就真的是挺強大的啊!而除了上述的功能之外,我們不是談過,好像還可以使用網路卡的硬體地址(MAC)來進行分析嗎?而且,那個 ping 的指令響應封包的 ICMP 協議也可以進行設定喔!此外,TCP 封包 Header 上面的 SYN 旗標的功能與否,也能夠設定呢!底下談一談這些更深入的規則喔!
iptables 的其它相關引數說明:
[!] --syn :這個設定僅能用於 -p tcp 的規則中,因為 TCP 封包有 syn 的旗標存 在啊!當 TCP 封包存有 syn 旗標,表示這個聯機是對方『主動』連過來的! 若於 --syn 之前加上 ! 表示該封包不帶有 syn 的意思~(剛好相反之意!) 範例一:將來自 192.168.100.200 的主動聯機封包丟棄:
[root@test root]# iptables -A INPUT -p tcp -i eth0 -s 192.168.1.235
> --syn -j DROP
--icmp-type:可以管制 ICMP 封包的某些型別!還記得我們在 裡面 談到的 ICMP 的某些型別吧!對啦!如果您不想要讓對方 ping 到您的機器, 就是利用這個專案啦! 範例二:別的主機 ping 我們主機時,我們主機不予以響應
[root@test root]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
# 當您下達這樣的指令後,就表示未來別人對您使用 ping 的時候,
# 我們的主機將不會響應,所以對方主機就會顯示我們主機『無法連線』的狀態!
-m :表示封包的狀態,狀態有底下數種: -m mac --mac-source aa:bb:cc:dd:ee:ff 這個就是我們上面提到的可以控制『網路卡卡號, MAC』的設定方法囉! 那個 aa:bb:cc:dd:ee:ff 就是網路卡的 MAC ! -m state --state <狀態> 有數種狀態,狀態有: INVALID:無效的封包,例如資料破損的封包狀態 ESTABLISHED:已經聯機成功的聯機狀態; NEW:想要新建立聯機的封包狀態; RELATED:這個最常用!表示這個封包是與我們主機傳送出去的封包有關, 可能是響應封包或者是聯機成功之後的傳送封包!這個狀態很常被設定, 因為設定了他之後,只要未來由本機傳送出去的封包,即使我們沒有設定 封包的 INPUT 規則,該有關的封包還是可以進入我們主機喔! 可以簡化相當多的設定規則啦! 範例三:讓 bb:cc:dd:aa:ee:ff 網路卡無法使用我們主機的資源 [root@test root]# iptables -A INPUT -p all -m mac --mac-source > 01:01:01:01:02:01 -j DROP # 這種方式可以用來管制網路卡卡號喔!就不怕別人使用 IP 搞怪了! 範例四:讓已經建立或者是與我們主機有關的響應封包透過,但是讓不合法的, 以及想要嘗試新建立的封包被抵擋在外!
[root@test root]# iptables -A INPUT -p tcp -m state
> --state ESTABLISHED,RELATED -j ACCEPT
[root@test root]# iptables -A INPUT -p tcp -m state
> --state INVALID,NEW -j DROP
# 需要設定兩條喔!至於封包狀態則可以使用逗號隔開!逗號兩邊不要有空格
-j <動作>:除了比較常見的 ACCEPT 與 DROP 之外,還有哪些動作? REDIRECT --to-ports
[root@test root]# iptables -t nat -A PREROUTING -p tcp --dport 80
> -j REDIRECT --to-ports 8080
# 這玩意最容易在您使用了非正規的 port 來進行某些 well known 的協議,
# 例如使用 8080 這個 port 來啟動 WWW ,但是別人都以 port 80 來聯機,
# 所以,您就可以使用上面的方式來將對方對您主機的聯機傳遞到 8080 囉! 範例六:進行封包的偽裝,將來自 192.168.0.0/24 的封包的來源 IP 偽裝成為 本機的 ppp0 那個介面的 IP
[root@test root]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24
> -o ppp0 -j MASQUERADE
紀錄與回覆防火牆規則 剛剛上面我們談了很多的設定了,那麼我該如何觀察目前主機上面的防火牆規則呢?我們可以使用『iptables -L -n 』來觀察,不過,該指令所顯示的資訊其實還是不太足夠的!這個時候,我們其實可以使用底下的兩個指令來將目前主機上面的防火牆機制『儲存』下來,在下次想要將這個規則『回覆』的時候,就能夠直接利用指令將規則直接回復喔
[root@test root]# iptables-save > filename
# 將目前的防火牆機制儲存成 filename 那個檔案!該檔案為 ASCII 格式,
# 您可以進入查閱一下喔!
[root@test root]# iptables-restore < filename
# 將 filename 那個防火牆檔案 (注意!並不是 shell scripts 的格式) 的規則
# 讀入目前的 Linux 主機環境中!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245368/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux防火牆iptablesLinux防火牆
- iptables 配置LINUX防火牆Linux防火牆
- Linux設定防火牆iptablesLinux防火牆
- Linux 防火牆 學習 iptablesLinux防火牆
- Linux基礎命令---iptables防火牆Linux防火牆
- Linux的銅牆鐵壁iptablesLinux
- 防火牆IPTABLES防火牆
- iptables防火牆防火牆
- Linux防火牆iptables實用設定Linux防火牆
- Linux 防火牆開放特定埠 (iptables)Linux防火牆
- Linux 自帶防火牆 Iptables 基本配置Linux防火牆
- 使用iptables建置Linux 防火牆(2)(轉)Linux防火牆
- 使用iptables建置Linux 防火牆(3)(轉)Linux防火牆
- iptables深入解析:filter篇Filter
- iptables配置-Linux系統安全防火牆Linux防火牆
- Linux IPTables:如何新增防火牆規則Linux防火牆
- Linux中iptables防火牆的簡單配置Linux防火牆
- Linux防火牆之IPtables概念與用法(轉)Linux防火牆
- 初始化簡單的IP放火牆(Script)(轉)
- iptables報錯!iptables-restore unable to initialize table 'filterRESTFilter
- Iptables防火牆應用防火牆
- iptables防火牆規則防火牆
- 防火牆iptables 設定防火牆
- 動態iptables 防火牆防火牆
- Linux系統iptables與Firewalld防火牆區別?Linux防火牆
- Linux 防火牆配置(iptables和firewalld)詳細教程。Linux防火牆
- Linux防火牆iptables學習筆記(三)iptables命令詳解和舉例Linux防火牆筆記
- iptables深入解析:filter應用篇Filter
- Linux 防火牆:關於 iptables 和 firewalld 的那些事Linux防火牆
- Linux防火牆介紹和iptables常用命令Linux防火牆
- 用一臺linux主機做iptables防火牆薦Linux防火牆
- 基於iptables防火牆堵漏防火牆
- Centos iptables防火牆設定CentOS防火牆
- 動態 iptables 防火牆(轉)防火牆
- NAT iptables防火牆(script)(轉)防火牆
- 13個關於Linux防火牆’iptables’的面試問答Linux防火牆面試
- Iptables防火牆規則使用梳理防火牆
- 動態iptables防火牆dynfw(轉)防火牆