防火墻,其實說白了將,就是用于實現linux下訪問控制的功能的,它分為兩種方式,硬件防火墻和軟件防火墻。不過無論是在哪個網絡中,防火墻工作的地方一定是在網絡的邊緣。而我們的任務就是需要去定義防火墻如何工作的,這就是防火墻的策略,規則,以達到讓它對出入網絡的IP,數據進行檢測。
目前市面上比較常見的有3,4層的防火墻,叫做網絡層的防火墻,還有7層的防火墻1,其實是代理層的防火墻。
對于TCP/IP的7層模型來講,我們知道第三層是網絡層,三層的防火墻會在這層對源地址和目標地址進行檢測。但是對于七層的防火墻,不管你源端口或者目標端口,源地址或者目標地址什么的,都將對于你所有的東西進行檢查。所以,對于設計原理來講,七層防火墻更加安全,但是者卻帶來了效率更低。所以市面通常的防火墻方案,都是兩者結合的。也即是說防火墻的工作效率就成了用戶能夠訪問數據多少的一個最重要的控制,配置的不好甚至有可能成為流量的瓶頸。
iptables的工作機制
四表五鏈:
四表:
1.filter:過濾,防火墻;
2.nat:network address
3.translation;用于修改報文的源地址或目標地址,甚至是端口;
4.mangle:拆解報文,做出修改,并重新封裝起來;
raw:關閉nat表上啟用的連接追蹤機制;
conntrack:追蹤連接機制
數據包匹配流程的優先級次序(由高而低):
raw –> mangle –> nat –> filter
五鏈:
PREROOUTING:路由前
INPUT: 數據包流入入口
FORWARD: 轉發管卡
OUTPUT: 數據包流出出口
POSTROUTING;: 路由后
#這是Netfilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈
#iptables還支持自己定義鏈。但是自己定義的鏈,必須是跟某種特定的鏈關聯起來的。
功能<–>鉤子:
raw:PREROUTING,OUTPUT
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,INPUT,OUTPUT,POSTRUTING
filter:INPUT,FORWARD,OUTPUT
報文流向:
到本機某進程的報文:PREROUTING –> INPUT
由本轉發的報文:PREROUTING –> FORWARD –> POSTROUTING
由本某進程發出的:OUTPUT –> POSTROUTING
規則的寫法:
添加規則之時需要考量的問題:
(1) 報文的流經路徑,判斷添加規則至哪個鏈上;
(2) 確定要實現的功能,判斷添加規則至哪個表上;
(3) 要指定的匹配條件,以用于匹配目標報文;
#同類規則 訪問量大的,放前面 //僅供參考
#不同規則 訪問量多的放前面
注意:規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查
iptables的通用格式:
iptables [-t table] COMMAND chain [-m matchname [per-match-options]] [-j targetname [per-target-options]]
-t table:
默認為filter;其它可用的有raw, mangle, nat;
COMMAND:
鏈:
-P:policy,策略,定義默認策略; 一般有兩種選擇,ACCEPT和DROP;
-N:new,新建一條自定義的規則鏈;被內建鏈上的規則調用才能生效;[-j chain_name];
-X:drop,刪除自定義的引用計數為0的空鏈;
-F:flush,清空指定的鏈;
-E:重命名自定義的引用計數和為0的鏈;
規則:
-A:append,追加,在指定鏈的尾部追加一條規則;
-I:insert,插入,在指定的位置(省略位置時表示鏈首)插入一條規則;
-D:delelte,刪除,刪除指定的規則;
-R:replace,替換,將指定的規則替換為新規則;不能僅修改規則中的部分,而是整條規則完全替換;
查看:
-L:list,列出表中的鏈上的規則;
-n:numeric,以數值格式顯示;
-v:verbose,顯示詳細格式信息;
-vv, -vvv
-x:exactly,計數器的精確結果;
–line-numbers:顯示鏈中的規則編號;
處理動作(目標)
-j targetname [per-target-options]
targetname:
ACCEPT:接受;
DROP:丟棄;
REJECT:拒絕;
計數器:
規則,以及默認策略有專用的計數器;
記錄被當前規則所匹配到的:
(1) 報文個數;
(2) 字節總數;
重置規則計數器:
-Z:zero,置0;
chain:
(1) 內建鏈;
(2) 自定義鏈;
擴展模塊介紹:
tcp:定義協議的模塊
–sport:定義源端口,可以定義連續的端口,如22:80
–dport:目標端口,性能同–sport
–tcp-flags:tcp標記位
–tcp-flags SYN,ACK,FIN,RST, SYN:這個表示匹配SYN,ACK,FIN,RST中以SYN為1,ACK,FIN,RST為0,其余的忽略
–syn:是–tcp-flags的一個擴展,就是匹配三次握手的第一次
connlimit:允許的最大連接數
[!] –connlimit-above NUMBER:最大允許連接的個數,可取反
iprange:定義一個ip范圍,可用作源IP與目標IP的范圍
[!] –src-range:源地址范圍
[!] –dst-range:目標地址范圍
limit:這個模塊用于定義連接頻率與首次連接最大連接個數(令牌筒)
–limit RATE:定義其連接速率
–limit-burst NUM:定義首次連接次個數
state:這個模塊是根拒據狀態來判定數據包
[!] –state STATE:對狀態流量進行操作
STATE:
ESTABLISHED:已連接
NEW:新建立連接
RELATED:關聯的連接,追蹤連接
INVALID:不能識別的
UNTRACKED:未追蹤的連接
string:這個模塊是對內容中的字符串進行匹配
–algo {bm|kmp}:匹配字符串的算法
[!] –string STRING:所要匹配的字符串
time:時間匹配數據包
–datestart:開始日期時間
–datestop:結束日期時間
–timestart:開始時間
–timestop:結束時間
[!] –monthdays:一個有的那一日
[!] weekdays:一周的那一天
multiport:定義多個不連續的端口的模塊
[!] –sport:源端口21,22,80:200
[!] –dport:目標端口
部分擴展動作介紹:
DNAT:目標地址轉換
–to-destination:轉到那一個地址,可以跟端口,也可以跟多個連續的端口
SNAT:源地址轉換
–to-source:轉到那一個地址,可以跟一個商品,也可以跟多個端口
LOG:是一個開啟日志的動作
–log-level NUM:開啟日志的日志級別
–log-prefix:日志的前綴
MASQUERADE:IP為動態IP,連接貓的時候可以用戶這個動作
–to-ports:轉化的商品有那些,如80-100
REDIRECT:端口重定向
–to-ports 9090:將指定商品生定向為9090
保存和重載規則:
iptables-save > /PATH/TO/SOME_RULE_FILE (/etc/sysconfig/iptables)
iptables-restore < /PATH/FROM/SOME_RULE_FILE
規則優化:
(1) 可安全放行所有入站及出站,且狀態為ESTABLISHED的連接;
(2) 服務于同一類功能的規則,匹配條件嚴格的放前面,寬松放后面;
(3) 服務于不同類功能的規則,匹配報文可能性較大擴前面,較小放后面;
(4) 設置默認策略;
(a) 最后一條規則設定;
(b) 默認策略設定;
實例演練:
1.假如我們允許自己ping別人,但是別人ping自己ping不通如何實現呢?
小擴展:對于127.0.0.1比較特殊,我們需要明確定義它
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
2、在工作時間,即周一到周五的8:30-18:00,開放本機的ftp服務給172.16.0.0網絡中的主機訪問;數據下載請求的次數每分鐘不得超過5個;
iptables -A INPUT -p tcp –dport 21 -s172.16.0.0/16 -m time –weekdays 1,2,3,4,5 –timestart 8:30 –timestop 18:00 -mconnlimit –connlimit-above 5 -j ACCEPT
3、開放本機的ssh服務給172.16.x.1-172.16.x.100中的主機,x為你的座位號,新請求建立的速率一分鐘不得超過2個;僅允許響應報文通過其服務端口離開本機;
iptables -A INPUT -m iprange –src-range172.16.1.1 -172.16.1.100 -m limit –limit 2/m –limit-burst 2 -j ACCEPT
iptables -A OUTPUT -p tcp –dport 22 -mstate –state ESTABLISHED -j ACCEPT
4、拒絕TCP標志位全部為1及全部為0的報文訪問本機;
iptables -A INPUT -p tcp -m –tcp-flag ALL ALL -j DROP
原創文章,作者:All well,如若轉載,請注明出處:http://www.www58058.com/74599