1搪花、iptables基礎(chǔ)知識
- Netfilter組件
防火墻功能是集成在內(nèi)核中的懊昨,通過以下命令可以看出防火墻功能是以模塊的方式打到內(nèi)核當中的
[root@centos7 boot]#cat ./boot/config-3.10.0-514.el7.x86_64 |grep -i iptables
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP6_NF_IPTABLES=m
# iptables trigger is under Netfilter config (LED target)
內(nèi)核中選取五個位置放了五個hook(勾子) function(INPUT调衰、OUTPUT、FORWARD膳灶、PREROUTING攻柠、POSTROUTING)踊谋,而這五個hook function向用戶開放蝉仇,用戶可以通過一個命令工具(iptables)向其寫入規(guī)則,這五個鉤子函數(shù)就像檢查的關(guān)卡一樣殖蚕,對進出本機的數(shù)據(jù)鉤住后檢查轿衔。
- 三種報文流向:
流入本機:PREROUTING --> INPUT-->用戶空間進程
流出本機:用戶空間進程-->OUTPUT--> POSTROUTING
轉(zhuǎn)發(fā):PREROUTING --> FORWARD --> POSTROUTING - 防火墻工具
iptables:命令行工具,工作在用戶空間睦疫,用來編寫規(guī)則害驹,寫好的規(guī)則被送往netfilter,告訴內(nèi)核如何去處理信息包
firewalld:CentOS 7引入了新的前端管理工具 -
iptables由四個表和五個鏈以及一些規(guī)則組成
四個表table:filter蛤育、nat宛官、mangle、raw
filter表:過濾規(guī)則表瓦糕,根據(jù)預定義的規(guī)則過濾符合條件的數(shù)據(jù)包
nat表:network address translation 地址轉(zhuǎn)換規(guī)則表
mangle:修改數(shù)據(jù)標記位規(guī)則表
Raw:關(guān)閉NAT表上啟用的連接跟蹤機制底洗,加快封包穿越防火墻速度
優(yōu)先級由高到低的順序為:raw-->mangle-->nat-->filter
五個內(nèi)置鏈chain:INPUT、OUTPUT咕娄、FORWARD亥揖、PREROUTING
、POSTROUTING
可以通過如下命令查看各個表中的鏈
iptables -t filter -vnL
iptables -t nat -vnL
-
IPTABLES和路由
路由功能發(fā)生的時間點圣勒,報文進入本機后
判斷目標主機是否為本機
是:INPUT
否:FORWARD
報文離開本機之前费变,判斷由哪個接口送往下一跳,路由決策就是本機的路由表
- 內(nèi)核中數(shù)據(jù)包的傳輸過程
當一個數(shù)據(jù)包進入網(wǎng)卡時圣贸,數(shù)據(jù)包首先進入PREROUTING鏈挚歧,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去
如果數(shù)據(jù)包就是進入本機的,數(shù)據(jù)包就會沿著圖向下移動旁趟,到達INPUT鏈昼激。數(shù)據(jù)包到達INPUT鏈后庇绽,任何進程都會收到它锡搜。本機上運行的程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包經(jīng)過OUTPUT鏈瞧掺,然后到達POSTROUTING鏈輸出
如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的耕餐,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會向右移動辟狈,經(jīng)過FORWARD鏈肠缔,然后到達POSTROUTING鏈輸出 - iptables規(guī)則
規(guī)則rule:根據(jù)規(guī)則的匹配條件嘗試匹配報文夏跷,對匹配成功的報文根據(jù)規(guī)則定義的處理動作作出處理
匹配條件:
基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
擴展匹配:通過復雜高級功能匹配
處理動作:稱為target,跳轉(zhuǎn)目標
內(nèi)建處理動作:ACCEPT,DROP,REJECT,SNAT,DNAT
MASQUERADE,MARK,LOG...
自定義處理動作:自定義chain明未,利用分類管理復雜情形
規(guī)則要添加在內(nèi)置鏈上才生效槽华;添加在自定義上不會自動生效
鏈chain:
內(nèi)置鏈:每個內(nèi)置鏈對應(yīng)于一個鉤子函數(shù)
自定義鏈:用于對內(nèi)置鏈進行擴展或補充,可實現(xiàn)更靈活的規(guī)則組織管理機制趟妥;只有Hook鉤子調(diào)用自定義鏈時猫态,才生效 - iptables添加要點
iptables規(guī)則添加時考量點
要實現(xiàn)哪種功能:判斷添加在哪張表上
報文流經(jīng)的路徑:判斷添加在哪個鏈上
報文的流向:判斷源和目的
匹配規(guī)則:業(yè)務(wù)需要
鏈上規(guī)則的次序,即為檢查的次序披摄,因此隱含一定的法則
同類規(guī)則(訪問同一應(yīng)用)亲雪,匹配范圍小的放上面,因為放在上面的會先生效疚膊,并且生效后就不會繼續(xù)檢查下面的規(guī)則了
不同類規(guī)則(訪問不同應(yīng)用)义辕,匹配到報文頻率較大的放上面
將那些可由一條規(guī)則描述的多個規(guī)則合并為一個
設(shè)置默認策略 - 實驗環(huán)境準備:
要關(guān)閉系統(tǒng)默認的iptables策略,這樣我們才能自己定制防火墻策略寓盗,并不是把防火墻服務(wù)關(guān)閉了灌砖,防火墻功能是集成在內(nèi)核當中的,用戶空間通過iptables軟件工具編寫規(guī)則發(fā)給內(nèi)核的netfilter進行處理贞让。
Centos7: systemctl stop firewalld.service
systemctl disable firewalld.service
Centos6:service iptables stop
chkconfig iptables off
2周崭、iptables命令
man 8 iptables
規(guī)則格式:iptables[-t table] SUBCOMMAND chain [-m matchname[per-match-options]] -j targetname[per-target-options]
-t table:
raw, mangle, nat, [filter]默認
- SUBCOMMAND:
1、鏈管理:
-N:new, 自定義一條新的規(guī)則鏈
-X:delete喳张,刪除自定義的空的規(guī)則鏈续镇,只有是空鏈才能被刪除,刪除之前要清空销部,iptables -F自定義鏈和所關(guān)聯(lián)的默認鏈
-P:Policy摸航,設(shè)置默認策略;對filter表中的鏈而言舅桩,其默認策略有:
ACCEPT:接受
DROP:丟棄
iptables -F是清不掉的酱虎,最好不要用這個,可以在鏈里設(shè)置規(guī)則
-E:重命名自定義鏈擂涛;引用計數(shù)不為0的自定義鏈不能夠被重命名读串,也不能被刪除
iptables -P INPUT DROP
iptables -P INPUT ACCEPT ---設(shè)置默認策略
2、查看:
-L:list, 列出指定鏈上的所有規(guī)則撒妈,本選項須置后
-n:numberic恢暖,以數(shù)字格式顯示地址和端口號
-v:verbose,詳細信息
-vv更詳細
-x:exactly狰右,顯示計數(shù)器結(jié)果的精確值,而非單位轉(zhuǎn)換后的易讀值杰捂,-x就是精確顯示,以字節(jié)為單位棋蚌,不加是以k為單位
--line-numbers:顯示規(guī)則的序號
常用組合:
--vnL
--vvnxL--line-numbers
-S selected,以iptables-save 命令格式顯示鏈上規(guī)則嫁佳,可以用此命令將命令的輸出結(jié)果保存到文件中挨队,將規(guī)則存到磁盤上
[root@centos7 html]#iptables -vnL ---查看規(guī)則
Chain INPUT (policy ACCEPT 1151 packets, 127K bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 172.18.21.106 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 ACCEPT all -- * * 172.18.21.106 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 152 packets, 17928 bytes)
pkts bytes target prot opt in out source destination
[root@centos7 html]#iptables --line-numbers -vnL ---查看規(guī)則并顯示編號
Chain INPUT (policy ACCEPT 1296 packets, 141K bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 172.18.21.106 0.0.0.0/0 reject-with icmp-port-unreachable
2 0 0 ACCEPT all -- * * 172.18.21.106 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 192 packets, 22320 bytes)
num pkts bytes target prot opt in out source destination
[root@centos7 html]#iptables --line-numbers -vnxL ---以字節(jié)顯示計數(shù),而不是以默認的k
Chain INPUT (policy ACCEPT 1432 packets, 157588 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 172.18.21.106 0.0.0.0/0 reject-with icmp-port-unreachable
2 0 0 ACCEPT all -- * * 172.18.21.106 0.0.0.0/0
[root@centos7 html]#iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -s 172.18.21.106/32 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 172.18.21.106/32 -j ACCEPT
[root@centos7 html]#iptables -S >/app/f1 ---將規(guī)則保存到文件中
3蒿往、規(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ù)pkts
(2) 匹配到的所有報文的大小之和bytes
iptables -A INPUT -s 172.18.21.106 -j DROP
iptables -A INPUT -s 172.18.21.106,172.18.21.108 -j REJECT ---多條ip地址用逗號隔開
iptables -R INPUT 2 -s 172.18.21.106 -j ACCEPT ---替換第二條規(guī)則
iptables -I INPUT 2 -s 192.168.74.0/24 -j REJECT ---把這條規(guī)則插入到INPUT鏈的第二條
iptables -D INPUT 1 ---刪除INPUT鏈的第一條規(guī)則
iptables -D INPUT -s 172.18.21.106 -j ACCEPT ---刪除鏈上的規(guī)則的第二種方式
iptables -F INPUT ---清空指定鏈的規(guī)則,不指定就是清空所有鏈
iptables -A INPUT ! -s 172.18.21.106 -j ACCEPT ---表示除了來自172.18.21.106的都接受娃惯。這里需要注意的是要將默認權(quán)限設(shè)置為DROP跷乐,!表示取反的意思趾浅。用愕提!就不能用多個ip地址之間用逗號隔開的格式。
iptables -A INPUT ! -s 172.18.21.106 -j REJECT ---表示除了172.18.21.106的都拒絕皿哨,此時默認權(quán)限要設(shè)置為接受
- 匹配條件
基本:通用的浅侨,PARAMETERS
擴展:需加載模塊,MATCH EXTENTIONS
1证膨、基本匹配條件:無需加載模塊如输,由iptables/netfilter自行提供
[!] -s, --source address[/mask][,...]:源IP地址或范圍
[!] -d, --destination address[/mask][,...]:目標IP地址或范圍
[!] -p, --protocol protocol:指定協(xié)議,可使用數(shù)字如0(all)
protocol: tcp, udp, icmp, icmpv6,udplite,esp, ah, sctp, mhor “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鏈
iptables -A INPUT -p icmp -j REJECT ---禁ping
iptables -A INPUT -i ens33 -j REJECT ---流入報文禁止訪問哪個網(wǎng)卡
2 、擴展匹配條件:需要加載擴展模塊(/usr/lib64/xtables/*.so)瑞你,方可生效
查看幫助man iptables-extensions
(1)隱式擴展:在使用-p選項指明了特定的協(xié)議時酪惭,無需再用-m選項指明擴展模塊的擴展機制,不需要手動加載擴展模塊
tcp協(xié)議的擴展選項
[!] --source-port, --sport port[:port]:匹配報文源端口,可為端口范圍
[!] --destination-port,--dportport[:port]:匹配報文目標端口,可為范圍
[!] --tcp-flags mask comp
mask 需檢查的標志位列表捏悬,用,分隔
例如SYN,ACK,FIN,RST
comp 在mask列表中必須為1的標志位列表撞蚕,無指定則必須為0润梯,用,分隔
示例:
--tcp-flags SYN,ACK,FIN,RST SYN 表示要檢查的標志位為SYN,ACK,FIN,RST四個过牙,其中SYN必須為1甥厦,余下的必須為0,也就是三次握手的第一次請求
--tcp-flags SYN,ACK,FIN,RST SYN,ACK ---表示三次握手的第二次請求寇钉,SYN刀疙、ACK為1
--tcp-flags ALL ALL ---表示檢查所有的標志位,所有位都是1扫倡,沒有這樣的情況谦秧,是錯誤的數(shù)據(jù)包,可以認為是惡意攻擊
--tcp_flagsALL NONE ---這個也是一樣撵溃,所有位都是0疚鲤,也可以認為是惡意攻擊
[!] --syn:用于匹配第一次握手
相當于:--tcp-flags SYN,ACK,FIN,RST SYN
iptables -A INPUT -p tcp --dport 80 -j REJECT ---拒絕訪問本機的tcp協(xié)議的80端口,也就是拒絕訪問httpd服務(wù)
iptables -A INPUT -p tcp --syn -j REJECT ---表示tcp的第一次握手被拒絕缘挑,也就是新的連接被拒絕集歇,舊的連接不被拒絕,此時的xshell通過ssh還可以繼續(xù)連接语淘,但在打開一個新的窗口去連接卻連接不了了
iptables -A INPUT -p icmp --icmp-type 8 -j REJECT ---icmp的請求包是8诲宇,icmp的請求包被拒絕,就是拒絕別人ping我
iptables -A INPUT -p tcp --dport 80:85 -j REJECT ---表示拒絕訪問tcp的80-85端口惶翻,端口必須是連續(xù)的
udp
[!] --source-port, --sport port[:port]:匹配報文的源端口姑蓝;可以是端口范圍
[!] --destination-port,--dportport[:port]:匹配報文的目標端口;可以是端口范圍
icmp
[!] --icmp-type {type[/code]|typename}
type/code
0/0 echo-reply icmp應(yīng)答吕粗,0是icmp的回應(yīng)包
8/0 echo-request icmp請求纺荧,8是icmp的請求包
(2)顯式擴展:必須使用-m選項指明要調(diào)用的擴展模塊的擴展機制,要手動加載擴展模塊颅筋,[-m matchname[per-match-options]]
1虐秋、multiport擴展
以離散方式定義多端口匹配,最多指定15個端口
[!] --source-ports,--sports port[,port|,port:port]...
指定多個源端口
[!] --destination-ports,--dportsport[,port|,port:port]...
指定多個目標端口
[!] --ports port[,port|,port:port]...多個源或目標端口
iptables -A INPUT -s 172.18.21.106 -p tcp -m multiport --dports 22,80 -j REJECT ---表示拒絕來自172.18.21.106的主機訪問我的tcp的22和80端口,端口可以使離散的垃沦,不必是連續(xù)的
2客给、iprange擴展
指明連續(xù)的(但一般不是整個網(wǎng)絡(luò))ip地址范圍
[!] --src-range from[-to]源IP地址范圍
[!] --dst-range from[-to]目標IP地址范圍
iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 172.18.21.1-172.18.21.10 -j REJECT
3、mac擴展
指明源MAC地址
適用于:PREROUTING, FORWARD肢簿,INPUT chains
[!] --mac-source XX:XX:XX:XX:XX:XX
iptables -A INPUT -p tcp --dport 80 -m mac --mac-source 00:0c:29:6d:aa:fe -j REJECT
4靶剑、string擴展
對報文中的應(yīng)用層數(shù)據(jù)做字符串模式匹配檢測
--algo {bm|kmp}:字符串匹配檢測算法
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
--from offset 開始偏移
--to offset 結(jié)束偏移
[!] --string pattern:要檢測的字符串模式
[!] --hex-string pattern:要檢測字符串模式,16進制格式
iptables -A OUTPUT -m string --algo bm --string "google" -j REJECT --表示流出的報文中含有g(shù)oogle字符串的就拒絕池充,這樣別人就不可以訪問我的google網(wǎng)站桩引,只支持明文,https等加密的就不可以了
5收夸、time擴展
根據(jù)將報文到達的時間與指定的時間范圍進行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss] 時間
--timestop hh:mm[:ss]
[!] --monthdays day[,day...] 每個月的幾號
[!] --weekdays day[,day...] 星期幾
注意:centos6 默認是本地時區(qū)坑匠,CentOS7系統(tǒng)默認為要使用UTC時間
iptables -A OUTPUT -m time --timestart 01:00 --timestop 10:00 -j REJECT ---表示09:00-18:00上課時間不準上網(wǎng),因為是UTC時間卧惜,比北京時間晚8小時厘灼,centos6上直接寫本地時區(qū)就可以
date -u 查看utc時間
iptables -A INPUT -m time --timestart 01:00 --timestop 10:00 --weekdays Sat,Sun -j REJECT ---表示周六和周日的9:00-18:00禁止訪問我夹纫,注意星期的第一個字母是大寫
iptables -A INPUT -m time --timestart 01:00 --timestop 10:00 --monthdays 10,20,30 -j REJECT
6、connlimit擴展
根據(jù)每個客戶端IP做并發(fā)連接數(shù)數(shù)量匹配
可防止CC(Challenge Collapsar挑戰(zhàn)黑洞)攻擊
--connlimit-upton:連接的數(shù)量小于等于n時匹配
--connlimit-above n:連接的數(shù)量大于n時匹配
通常分別與默認的拒絕或允許策略配合使用
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 1 -j REJECT ---表示連接本機的tcp的22端口數(shù)量大于1就拒絕
7设凹、limit擴展
基于收發(fā)報文的速率做匹配
令牌桶過濾器
--limit rate[/second|/minute|/hour|/day] 超過下面限制的數(shù)量后舰讹,每分鐘允許的請求數(shù)
--limit-burst number 表示前幾個不限制
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 10 -j ACCEPT ---表示來自icmp的請求包,前10個不受限制闪朱,超過10個月匣,每分鐘處理10個請求,要配合下面的使用奋姿,其他的包都拒絕锄开,注意一定要和下面的配合使用,不然不會限速的称诗,因為不知道其他的包怎么處理
iptables -A INPUT -p icmp -j REJECT
8院刁、state擴展
根據(jù)”連接追蹤機制“去檢查連接的狀態(tài),較耗資源
conntrack機制:追蹤本機上的請求和響應(yīng)之間的關(guān)系
狀態(tài)有如下幾種:
NEW:新發(fā)出請求粪狼;連接追蹤信息庫中不存在此連接的相關(guān)信息條目退腥,因此,將其識別為第一次發(fā)出的請求
ESTABLISHED:NEW狀態(tài)之后再榄,連接追蹤信息庫中為其建立的條目失效之前狡刘,期間內(nèi)所進行的通信狀態(tài)
RELATED:新發(fā)起的但與已有連接相關(guān)聯(lián)的連接,如:ftp協(xié)議中的數(shù)據(jù)連接與命令連接之間的關(guān)系困鸥,ftp發(fā)起數(shù)據(jù)連接之前嗅蔬,命令連接已經(jīng)連接,屬于ESTABLISHED疾就,當ftp發(fā)起新的數(shù)據(jù)連接時會只要命令連接是ESTABLISHED澜术,即使新的連接受限也不影響ftp連接。
INVALID:無效的連接猬腰,如flag標記不正確
UNTRACKED:未進行追蹤的連接鸟废,如raw表中關(guān)閉追蹤
已經(jīng)追蹤到的并記錄下來的連接信息庫
/proc/net/nf_conntrack
調(diào)整連接追蹤功能所能夠容納的最大連接數(shù)量
/proc/sys/net/nf_conntrack_max
不同的協(xié)議的連接追蹤時長
/proc/sys/net/netfilter/
注意:CentOS7 需要加載模塊:modprobe nf_conntrack
示例
[root@centos7 ~]#lsmod |grep nf_conntrack ---模塊已經(jīng)加載,如果沒有加載需要用modprobe命令加載
nf_conntrack_ipv4 19108 1
nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
nf_conntrack 111302 6 nf_nat,xt_connlimit,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j REJECT
以上兩條規(guī)則可以實現(xiàn)ssh協(xié)議新的連接被拒絕姑荷,舊的連接繼續(xù)連接
1盒延、iptables的鏈接跟蹤表最大容量為/proc/sys/net/nf_conntrack_max,各種狀態(tài)的超時鏈接會從表中刪除鼠冕;當模板滿載時添寺,后續(xù)連接可能會超時
解決方法兩個:
(1) 加大nf_conntrack_max值
vi /etc/sysctl.conf
net.nf_conntrack_max= 393216
net.netfilter.nf_conntrack_max= 393216
(2) 降低nf_conntracktimeout時間
vi /etc/sysctl.conf
net.netfilter.nf_conntrack_tcp_timeout_established= 300
net.netfilter.nf_conntrack_tcp_timeout_time_wait= 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait= 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait= 120
iptables-t nat-L -n
2、開放被動模式的ftp服務(wù)示例
yum install vsftpd
systemctl start vsftpd
modprobe nf_conntrack_ftp ---必須加載這個模塊才可以
lsmod |grep nf_conntrack_ftp
iptables -F
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 相關(guān)聯(lián)的和已經(jīng)連接的都是允許的懈费,命令端口連接后计露,因數(shù)據(jù)連接和命令連接相關(guān)聯(lián),所以客戶端進行數(shù)據(jù)連接也是被允許的
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT ---連接本機tcp的21端口的新的連接是允許的
iptables -A INPUT -j DROP ---其他連接是拒絕的
[root@centos7 var]#iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1272 81651 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
10 600 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 state NEW
4093 531K DROP all -- * * 0.0.0.0/0 0.0.0.0/0
- 處理動作:
-j targetname[per-target-options] -j是jump跳轉(zhuǎn)至下一跳
簡單:ACCEPT,DROP
擴展:REJECT:--reject-with:icmp-port-unreachable默認
RETURN:返回調(diào)用鏈
REDIRECT:端口重定向
MARK:做防火墻標記
DNAT:目標地址轉(zhuǎn)換
SNAT:源地址轉(zhuǎn)換
MASQUERADE:地址偽裝
LOG:記錄日志票罐,非中斷的處理動作,本身不拒絕和允許,放在拒絕和允許規(guī)則前叉趣,并將日志記錄在/var/log/messages系統(tǒng)日志中
--log-level level 級別:emerg, alert, crit, error, warning, notice, info or debug
--log-prefix prefix 日志前綴,用于區(qū)別不同的日志胶坠,最多29個字符
示例
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j LOG --log-prefix "new connections" --- 表示訪問本機的httpd服務(wù)的新的請求就記錄到日志/var/log/messages中,并且記錄的日志中的前綴為new connections
3繁堡、自定義鏈
示例一:自定義一個鏈沈善,規(guī)則是認為是惡意攻擊的報文請求被拒絕
iptables -N deny ---創(chuàng)建一個自定義鏈
iptables -A deny -p tcp --tcp-flags ALL ALL -j REJECT
iptables -A deny -p tcp --tcp-flags ALL NONE -j REJECT ---在自定義鏈上設(shè)置規(guī)則為標記位都是1和標記位都是0的tcp報文被拒絕
iptables -A INPUT -j deny ---把自定義鏈內(nèi)置鏈相關(guān)聯(lián),注意自定義鏈只有和內(nèi)置鏈關(guān)聯(lián)后才能起作用
iptables -vnL
iptables -F
iptables -vnL
iptables -X deny ---刪除自定義鏈之前一定要先清空自定義鏈和它所關(guān)聯(lián)的默認鏈椭蹄,因為-X 選項是清空自定義的空鏈
iptables -vnL
示例二:自定義一個鏈闻牡,規(guī)則是禁ping
iptables -N jinping
iptables -A jinping -p icmp --icmp-type 8 -j REJECT
iptables -A INPUT -j jinping
iptables -vnL
自定義鏈的作用是可以把一些常用的規(guī)則寫到自定義鏈里,當要用的時候把它和內(nèi)置鏈相關(guān)聯(lián)就可以了绳矩,很方便罩润。
總結(jié):
任何不允許的訪問,應(yīng)該在請求到達時給予拒絕
規(guī)則在鏈接上的次序即為其檢查時的生效次序
基于上述翼馆,規(guī)則優(yōu)化
1 安全放行所有入站和出站的狀態(tài)為ESTABLISHED狀態(tài)連接
2 謹慎放行入站的新請求
3 有特殊目的限制訪問功能割以,要在放行規(guī)則之前加以拒絕
4 同類規(guī)則(訪問同一應(yīng)用),匹配范圍小的放在前面应媚,用于特殊處理
5 不同類的規(guī)則(訪問不同應(yīng)用)严沥,匹配范圍大的放在前面
6 應(yīng)該將那些可由一條規(guī)則能夠描述的多個規(guī)則合并為一條
7 設(shè)置默認策略,建議白名單(只放行特定連接)
1)iptables -P中姜,不建議
2)建議在規(guī)則的最后定義規(guī)則做為默認策略