1? 概述
設(shè)置防火墻策略有以下兩條原則:
A 任何不允許的訪問欢唾,應(yīng)該在請(qǐng)求到達(dá)時(shí)給予拒絕
B 規(guī)則在鏈接上的次序即為其檢查時(shí)的生效次序
.基于上述的原則镀琉,用以下7條規(guī)則進(jìn)行優(yōu)化
.1)安全放行所有入站和出站的狀態(tài)為ESTABLISHED狀態(tài)連接,如果狀態(tài)已經(jīng)是ESTABLISHED另萤,說明已經(jīng)建立連接了,這種規(guī)則建議放在靠前的規(guī)則,這樣速度回比較快不铆。
.2)謹(jǐn)慎放行入站的新請(qǐng)求
.3)有特殊目的限制訪問功能,要在放行規(guī)則之前加以拒絕裹唆。
.4)同類規(guī)則(訪問同一應(yīng)用)誓斥,匹配范圍小的放在前面,用于特殊處理
.5)不同類的規(guī)則(訪問不同應(yīng)用)品腹,匹配范圍大的放在前面
.6)應(yīng)該將那些可由一條規(guī)則能夠描述的多個(gè)規(guī)則合并為一條
.7)設(shè)置默認(rèn)策略岖食,建議白名單(只放行特定連接,DROP)舞吭,黑名單是放行ACCEPT
7.1)iptables-P泡垃,不建議
7.2)建議在規(guī)則的最后定義規(guī)則做為默認(rèn)策略
本文主要對(duì)iptables命令的語句的語法進(jìn)行簡(jiǎn)要介紹
2? 語法格式
.規(guī)則格式:iptables? [-t table] SUBCOMMAND chain [-m matchname? [per-match-options]] ?-j ?targetname[per-target-options]
其中,-t? 指定表table:raw,mangle, nat, filter羡鸥,默認(rèn)是filter蔑穴。-j是jump的意思
通過man 8 iptables查看iptables的man幫助文檔
iptables的命令主要有以下的格式
.iptables [-t table] {-A|-C|-D}chain rule-specification
#這里如果不指定表名,就是用默認(rèn)的filter
.iptables [-t table] -I chain[rulenum] rule-specification
.iptables [-t table] -R chainrulenum rule-specification
.iptables [-t table] -D chainrulenum
.iptables [-t table] -S [chain[rulenum]]
.iptables [-t table] {-F|-L|-Z}[chain [rulenum]] [options...]
.iptables [-t table] -N chain
.iptables [-t table] -X [chain]
.iptables [-t table] -P chain target
.iptables [-t table] -Eold-chain-name new-chain-name
.rule-specification = [matches...][target]
.match = -m matchname[per-match-options]
.target = -j targetname[per-target-options]
3? iptables 命令格式介紹
3.1 SUBCOMMAND:
subcommand分為三個(gè)部分:1鏈管理惧浴,2查看存和,3規(guī)則管理
3.1.1、鏈管理:
-N:new,自定義一條新的規(guī)則鏈衷旅,自定義鏈捐腿,這里動(dòng)作如果是自定義鏈的話,表示和其他的鏈進(jìn)行關(guān)聯(lián)柿顶,達(dá)到靈活的控制
例子:
#定義一條新的鏈茄袖,名字為diy_chain
iptables -N diy_chain
#定義規(guī)則用于這條鏈上
iptables -A diy_chain -ptcp --tcp-flag ALL ALL -j REJECT
#將自定義的鏈和系統(tǒng)的默認(rèn)的鏈做關(guān)聯(lián),這里可以把自定義的鏈當(dāng)做是一個(gè)變量嘁锯,這個(gè)變量里定義了一組規(guī)則宪祥。通過-j選項(xiàng)來關(guān)聯(lián)聂薪。所以可以把常用的防火墻規(guī)則自定義為鏈。如果要使用蝗羊,只需要調(diào)用該自定義鏈即可藏澳,使用時(shí)把自定義和現(xiàn)有系統(tǒng)默認(rèn)的的鏈做關(guān)聯(lián),
iptables -A INPUT -jdiy_chain
或者,表示來說192.168.32.75的ip的包都關(guān)聯(lián)到INPUT鏈耀找,調(diào)用diy_chain這條自定義的鏈
iptables -A INPUT -s192.168.32.75? -j diy_chain
-X:delete翔悠,刪除自定義的空的規(guī)則鏈,要先清空規(guī)則后才能刪除涯呻,如果有調(diào)用關(guān)系凉驻,也要把調(diào)用的關(guān)系清掉,然后才能用-X刪除自定義的鏈
例子
先清空自定義鏈上的規(guī)則
iptables -F diy_chain
然后清空調(diào)用的系統(tǒng)鏈的綁定复罐,
iptables -D INPUT -jdiy_chain
最后才能刪除自定義鏈
iptables -X diy_chain
-P:Policy涝登,設(shè)置默認(rèn)策略;對(duì)filter表中的鏈而言效诅,其默認(rèn)策略有:
ACCEPT:接受
DROP:丟棄
這個(gè)不修改這個(gè)策略胀滚。這個(gè)策略用iptables-F清空不了。需要用該命令用iptables -A INPUTACCEPT來修改策略乱投。
例子
iptables -A INPUT DROP
-E:重命名自定義鏈咽笼;引用計(jì)數(shù)不為0的自定義鏈不能夠被重命名,也不能被刪除
3.1.2戚炫、查看:
-L:list,列出指定鏈上的所有規(guī)則剑刑,本選項(xiàng)須置后,如果有dns双肤,則會(huì)把ip解析成url施掏。加-n就不會(huì)解析
-n:numberic,以數(shù)字格式顯示地址和端口號(hào)
-v:verbose茅糜,詳細(xì)信息
-vv更詳細(xì)
-x:exactly七芭,顯示計(jì)數(shù)器結(jié)果的精確值,而非單位轉(zhuǎn)換后的易讀值
--line-numbers:顯示規(guī)則的序號(hào),默認(rèn)編號(hào)不顯示蔑赘,需要自己加狸驳,順序?qū)Ψ阑饓碚f很關(guān)鍵
常用組合:
--vnL
--vvnxL? --line-numbers
-S selected,以iptables-save命令格式顯示鏈上規(guī)則
注意系統(tǒng)默認(rèn)的防火墻規(guī)則是放在文件/etc/sysconfig/iptables里,寫入這個(gè)文件的防火墻策略是可以被保存的缩赛,當(dāng)啟動(dòng)防火墻服務(wù)的時(shí)候耙箍,默認(rèn)就會(huì)添加這些防火墻策略
3.1.3、規(guī)則管理:
-A:append酥馍,追加
-I:insert,插入辩昆,要指明插入至的規(guī)則編號(hào),默認(rèn)為第一條物喷,注意卤材,這里-I如果要指定數(shù)字,不能比當(dāng)前防火墻規(guī)則最大的數(shù)字還大峦失,但是可以等于最大的編號(hào)扇丛,因?yàn)檫@個(gè)-I選項(xiàng)默認(rèn)是插入中間的規(guī)則,往前插入尉辑。
-D:delete帆精,刪除
(1)指明規(guī)則序號(hào)
如iptables -D INPUT 3
刪掉第三條規(guī)則
(2)指明規(guī)則本身
iptables -D INPUT -s1.1.1.7 -j ACCEPT
-R:replace,替換指定鏈上的指定規(guī)則編號(hào)
#替換掉變化為3的策略
iptables -R INPUT 3 -s1.1.1.8 -j ACCEPT
-F:flush隧魄,清空指定的規(guī)則鏈
#清空FORWARD鏈的策略卓练,如果不指定。默認(rèn)是清空INPUT鏈
iptables -F FORWARD
-Z:zero购啄,置零
iptables的每條規(guī)則都有兩個(gè)計(jì)數(shù)器襟企,-Z會(huì)將這兩個(gè)計(jì)數(shù)器都清零
(1)匹配到的報(bào)文的個(gè)數(shù)
(2)匹配到的所有報(bào)文的大小之和
.chain:PREROUTING,INPUT狮含,F(xiàn)ORWARD顽悼,OUTPUT,POSTROUTING
3.2匹配條件
基本:通用的几迄,PARAMETERS蔚龙,無需加載模塊,由iptables/netfilter自行提供
擴(kuò)展:需要加載擴(kuò)展模塊(/usr/lib64/xtables/*.so)映胁,方可生效木羹。其中擴(kuò)展分為顯示擴(kuò)展和隱式擴(kuò)展
關(guān)于匹配條件,參見博客:http://www.reibang.com/p/6fe53c3416b3
3.3處理動(dòng)作Target
.-j ?targetname?[per-target-options]
簡(jiǎn)單:
ACCEPT解孙,DROP
擴(kuò)展:
REJECT:--reject-with:icmp-port-unreachable默認(rèn)
RETURN:返回調(diào)用鏈
REDIRECT:端口重定向
LOG:記錄日志坑填,dmesg,非中斷target,本身不拒絕和允許,放在拒絕和允許規(guī)則前并將日志記錄在/var/log/messages系統(tǒng)日志中
--log-level level級(jí)別:emerg, alert, crit,error, warning, notice, info or debug
--log-prefix prefix日志前綴妆距,用于區(qū)別不同的日志穷遂,最多29個(gè)字符
.示例:
表示將172.18.50.73發(fā)過來的主機(jī),訪問端口80,21,22,23端口記錄日志娱据,同時(shí)給日志報(bào)頭加上"cent7c tocent6E:這些關(guān)鍵字
iptables -A INPUT -s172.18.50.73 -p tcp -m multiport --dports 80,21,22,23 -m state --state NEW -jLOG --log-prefix "cent7c to cent6E:"
MARK:做防火墻標(biāo)記
DNAT:目標(biāo)地址轉(zhuǎn)換
SNAT:源地址轉(zhuǎn)換
MASQUERADE:地址偽裝
...
自定義鏈
4? 防火墻規(guī)則啟用和保存
4.1 規(guī)則有效期限:
使用iptables命令定義的規(guī)則蚪黑,手動(dòng)刪除之前,其生效期限為kernel存活期限
4.2? 保存防火墻規(guī)則:
保存規(guī)則至指定的文件
CentOS 6
serviceiptablessave
將規(guī)則覆蓋保存至/etc/sysconfig/iptables文件中
CentOS 7可用下面方法保存規(guī)則
iptables-S > /PATH/TO/SOME_RULES_FILE
iptables-save >/PATH/TO/SOME_RULES_FILE
-S這個(gè)選項(xiàng)不會(huì)保存策略中剩,只是把防火墻策略中的列表顯示出來忌穿,要保存,需要重定向
加載默認(rèn)規(guī)則
.CentOS 6:
service iptablesrestart
會(huì)自動(dòng)從/etc/sysconfig/iptables重新載入規(guī)則
.CentOS 7重新載入預(yù)存規(guī)則文件中規(guī)則:
iptables-restore
例子:iptables-restore< /root/iptables.rule1
-n, --noflush:不清除原有規(guī)則
-t, --test:僅分析生成規(guī)則集结啼,但不提交
4.3? 開機(jī)啟動(dòng)
CentOS 6
設(shè)置開機(jī)啟動(dòng)項(xiàng)
chkconfig iptables on
. CentOS 7
開機(jī)自動(dòng)重載規(guī)則文件中的規(guī)則:
.(1)用腳本保存各iptables命令掠剑;讓此腳本開機(jī)后自動(dòng)運(yùn)行
/etc/rc.d/rc.local文件中添加腳本路徑
/PATH/TO/SOME_SCRIPT_FILE
.(2)用規(guī)則文件保存各規(guī)則,開機(jī)時(shí)自動(dòng)載入此規(guī)則文件中的規(guī)則
/etc/rc.d/rc.local文件添加
iptables-restore
.(3)自定義Unit? File郊愧,進(jìn)行iptables-restore