防火墻的主要類別:
- Netfilter(數(shù)據(jù)包過濾機制)
Netfilter將數(shù)據(jù)包的頭部提取出來,分析MAC、IP发乔、TCP、UDP雪猪、ICMP等信息栏尚,按照制定的策略對包進行過濾。
Netfilter是內(nèi)核內(nèi)建的一個功能只恨,我們可以通過iptables命令制定過濾策略译仗。
TCP Wrapper(程序管理)
針對服務(wù)器程序來管理連接。通過制定規(guī)則官觅,分析該服務(wù)器誰能連接纵菌,誰不能連接。Proxy(代理服務(wù)器)
iptables和netfilter
1休涤、基礎(chǔ)概念
iptables
工作在用戶空間咱圆,是一個規(guī)則編寫工具;編寫規(guī)則并且發(fā)送至netfilter功氨。netfilter
工作在內(nèi)核空間序苏,是個網(wǎng)絡(luò)服務(wù)的結(jié)構(gòu)化底層框架。提供一整套的hook函數(shù)的管理機制疑故,使得諸如數(shù)據(jù)包過濾杠览、網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)和基于協(xié)議類型的連接跟蹤成為了可能。netfilter在內(nèi)核中選取五個位置放了五個hook function(INPUT纵势、OUTPUT踱阿、 FORWARD、 PREROUTING钦铁、 POSTROUTING)软舌,而這五個hook function向用戶開放,用戶可以通過一個命令工具(iptables)向其寫入規(guī)則牛曹。
iptables的四個表
filter
過濾規(guī)則表佛点, 根據(jù)預(yù)定義的規(guī)則過濾符合條件的數(shù)據(jù)包,是默認的table。nat
地址轉(zhuǎn)換規(guī)則表超营,主要用來進行源地址與目的地址的IP或者端口轉(zhuǎn)換鸳玩。mangle
修改數(shù)據(jù)標(biāo)記位規(guī)則表Raw
連接跟蹤
iptables的五個chain
INPUT:與進入本機的數(shù)據(jù)有關(guān)的規(guī)則
OUTPUT:出去本機的數(shù)據(jù)有關(guān)的規(guī)則
FORWARD:與數(shù)據(jù)包轉(zhuǎn)發(fā)有關(guān)的規(guī)則
PREROUTING:在路由判斷之前要進行的規(guī)則
POSTROUTING:在路由判斷之后要進行的規(guī)則
鏈和表之間的關(guān)系見上圖,這么理解吧演闭,鏈就是五個特定位置的hook function不跟,這些hook function可以通過對應(yīng)的表去寫入規(guī)則。
如:
PREROUTING可以用到nat和mangle表
INPUT可以用到filter和mangle表
iptables應(yīng)用
命令格式:
iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-targetoptions]
-t table
:指明表類型
SUBCOMMAND
:子命令米碰,主要分為查詢窝革、鏈管理、規(guī)則管理
chain
:指明鏈
-j
:指明要執(zhí)行的動作
1吕座、查詢
iptables [-t tables] [-vn] [-L]
-t:指明查詢的表虐译,如果省略則默認顯示filter表
-v:列出詳細信息
-vv:更詳細的信息
-n:不進行IP與hostname的反查,用ip顯示
-L:列出當(dāng)前table的規(guī)則
--line-numbers:顯示規(guī)則號
-x: exactly吴趴,顯示計數(shù)器結(jié)果的精確值漆诽,而非單位轉(zhuǎn)換后的易讀
例子:
[root@CentOS6A ~]#iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 1035 89161 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 1 84 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 1 52 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 259 27598 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 931 packets, 76385 bytes)
num pkts bytes target prot opt in out source destination
#INPUT、FORWARD史侣、OUTPUT這3條鏈拴泌,當(dāng)前只有INPUT的filter表定義了5條規(guī)則。
2惊橱、鏈管理
-N: new, 自定義一條新的規(guī)則鏈
-X: delete蚪腐,刪除自定義的空的規(guī)則鏈
-P: Policy,設(shè)置默認策略税朴;對filter表中的鏈而言回季,其默認策略有:
ACCEPT:接受
DROP:丟棄
-E:重命名自定義鏈;引用計數(shù)不為0的自定義鏈不能夠被重命名正林,也不能被刪除
- 默認策略
當(dāng)數(shù)據(jù)包不在我們設(shè)置的規(guī)則內(nèi)泡一,則該數(shù)據(jù)包的通過與否,以policy的設(shè)置為準(zhǔn)觅廓。
例:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
3鼻忠、規(guī)則管理
指明規(guī)則在鏈表的位置+匹配條件+動作
-A: append,追加
-I: insert, 插入杈绸,要指明插入至的規(guī)則編號帖蔓,默認為第一條
-D: delete,刪除
(1) 指明規(guī)則序號
(2) 指明規(guī)則本身
-R: replace瞳脓,替換指定鏈上的指定規(guī)則編號
-F: flush塑娇,清空指定的規(guī)則鏈
-Z: zero,置零
iptables的每條規(guī)則都有兩個計數(shù)器
(1) 匹配到的報文的個數(shù)
(2) 匹配到的所有報文的大小之和
匹配條件
- 基本匹配條件:
-s, --source address[/mask][,...]:源IP地址或范圍
-d, --destination address[/mask][,...]:目標(biāo)IP地址或范圍
-p, --protocol protocol:指定協(xié)議劫侧,可使用數(shù)字如0(all)
protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,mh or “all“ 參看:/etc/protocols
-i, --in-interface name:報文流入的接口埋酬;只能應(yīng)用于數(shù)據(jù)報文流入環(huán)節(jié)哨啃,只應(yīng)用于INPUT、 FORWARD写妥、 PREROUTING鏈
-o, --out-interface name:報文流出的接口拳球;只能應(yīng)用于數(shù)據(jù)報文流出的環(huán)節(jié),只應(yīng)用于FORWARD耳标、 OUTPUT醇坝、 POSTROUTING鏈
- 擴展匹配條件
需要加載擴展模塊(/usr/lib64/xtables/*.so),方可生效