iptables系列之基本應(yīng)用及顯式擴(kuò)展
netfilter:Framework,TCP,內(nèi)核中
iptables語(yǔ)法
iptables [-t table] command CHAIN [num] 匹配條件 -j 處理動(dòng)作
匹配條件:
通用匹配
-s
-d
-p {tcp|udp|icmp}
擴(kuò)展匹配
隱含匹配
顯式匹配
命令:
管理規(guī)則:
-A:附加一條規(guī)則碘箍,添加在鏈的尾部
-I CHAIN [num]:插入一條規(guī)則笑诅,插入為對(duì)應(yīng)CHAIN上的第num條轻掩,不加num魂迄,默認(rèn)第一條
-D CHAIN [num]:刪除指定鏈中的第mun條規(guī)則
-R CHAIN [num]:替換指定的規(guī)則辛孵;
管理鏈:
-F [CHAIN]: flush,清空指定規(guī)則鏈,如果省略CHAIN耕突,則可以實(shí)現(xiàn)刪除對(duì)應(yīng)表中的所有鏈
-P CHAIN:設(shè)定指定鏈的默認(rèn)策略
-N:自定義一條新的空鏈
-X:刪除一個(gè)自定義的空鏈赵哲,如若非空总处,可以先-F 清空,再刪除狭归。
-Z:置零指定鏈中所有規(guī)則的計(jì)數(shù)器
-E:重命名自定義的鏈夭坪。
查看類:
-L:顯示指定表中的規(guī)則;
-n:以數(shù)字格式顯示主機(jī)地址和端口號(hào)
-v:顯示詳細(xì)信息
-vv:更詳細(xì)
-x:顯示計(jì)數(shù)器精確值
--line-numbers:顯示規(guī)則號(hào)碼
iptables -L -n
iptables -t filter -L -n
iptables -t nat -L -n
iptables -t filter -A INPUT -s 172.16.0.0/16 -j DROP
動(dòng)作(target):
ACCECT :放行
DROP :丟棄
REJECT :拒絕
DNAT :目標(biāo)地址轉(zhuǎn)換
SNAT :源地址轉(zhuǎn)換
REDIRECT :端口重定向
MASQUERADE:地址偽裝
LOG :日志
MARK :打標(biāo)記
NOTRACK
SET
擴(kuò)展匹配
隱含匹配:
-p tcp
--sport PORT[-PORT]:源端口
--dport PORT[-PORT]:目標(biāo)端口(可以連續(xù)的端口)
--tcp-flags msak comp :只檢查mask指定的標(biāo)志位过椎,是用逗號(hào)分隔的標(biāo)志列表室梅;comp:此列表中出現(xiàn)的標(biāo)記位必須為1,comp中沒出現(xiàn)的疚宇,而mask中出現(xiàn)的亡鼠,必須為0。
--syn:三次握手的第一次
-p icmp
--icmp-type
0:echo-reply
8:echo-request
-p udp
--sport
--dport
-p tcp -m tcp --dport
顯式擴(kuò)展: 明確指定的擴(kuò)展,使用額外的匹配機(jī)制
-m EXTESTION --spe-opt
state:狀態(tài)擴(kuò)展
結(jié)合nf_conntrack追蹤會(huì)話的狀態(tài)
NEW:新連接請(qǐng)求
ESTABLISH:已建立的連接
INVALID:非法連接
RELATED:相關(guān)聯(lián)的敷待。
-m state --state NEW -j ACCEPT
-m state --state NEW,ESTABLISHED -j ACCEPT 放行兩個(gè)间涵。
-m multiport 離散多端口匹配擴(kuò)展
--source-ports
--destination-ports
--ports
注意:iptables不是服務(wù),但是有服務(wù)腳本榜揖,服務(wù)腳本的主要作用在于管理保存的規(guī)則勾哩,
由于iptables是工作在內(nèi)核中的,需要載入內(nèi)存的举哟,防止所定義的規(guī)則重啟后消失思劳,所以要保存這些規(guī)則,以及下一次生效妨猩,刪除等潜叛。
裝載及移除iptables/netfilter相關(guān)的內(nèi)核模塊
--tcp-flags SYN,FIN,ACK,RST SYN,ACK --syn
(檢查TCP的SYN,FIN,ACK,RST4個(gè)標(biāo)志位其中只能SYN,ACK為1)
iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT
lsmod:用于查看相關(guān)模塊是否載入。
lsmod - program to show the status of modules in the Linux Kernel
lsmod |grep ip
ip_conntrack:做ip追蹤的
serrvice iptables stop
lsmod |grep ip
關(guān)閉iptables的服務(wù)腳本册赛,就是將iptables的內(nèi)核模塊移除钠导。
vim /etc/init.d/iptables
/sbin/modprobe
/sbin/rmmod
modprobe(8), rmmod(8), lsmod(8)
insmod
iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.1.3 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t filter -I INPUT -d 172.16.1.3 -p tcp --dport 80 -j ACCEPT
iptables -t filter -I INPUT -s 172.16.1.3 -p tcp --sport 80 -j ACCEPT
iptables -t filter -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
iptables -t filter -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT
icmp-type
http://www.cnitblog.com/yang55xiaoguang/articles/59581.html
TYPE CODE Description
0 0 Echo Reply——回顯應(yīng)答(Ping應(yīng)答)
8 0 Echo request——回顯請(qǐng)求(Ping請(qǐng)求)
可以實(shí)現(xiàn)自己可以ping通任何人,其他人不可以ping本機(jī):
iptables -t filter -A OUTPUT -s 172.16.1.3 -p icmp --icmp-type 8 -j ACCEPT
iptables -t filter -A INPUT -d 172.16.1.3 -p icmp --icmp-type 0 -j ACCEPT
允許dns的請(qǐng)求:
iptables -t filter -A INPUT -d 172.16.1.3 -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -p udp --sport 53 -j ACCEPT
dns服務(wù)器的迭代:
iptables -t filter -A OUTPUT -s 172.16.1.3 -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -d 172.16.1.3 -p udp --sport 53 -j ACCEPT
反彈式木馬:
反彈木馬森瘪,是駐留在用戶計(jì)算機(jī)里的一段服務(wù)程序牡属,而攻擊者控制的則是相應(yīng)的客戶端程序。服務(wù)程序通過(guò)特定的端口扼睬,打開用戶計(jì)算機(jī)的連接資源逮栅。一旦攻擊者所掌握的客戶端程序發(fā)出請(qǐng)求,反彈木馬便和他連接起來(lái)窗宇,將用戶的信息竊取出去措伐。
連接追蹤:
ip_conntrack
可以追蹤tcp和udp
A--->B
連接跟蹤(CONNTRACK),顧名思義军俊,就是跟蹤并且記錄連接狀態(tài)侥加。Linux為每一個(gè)經(jīng)過(guò)網(wǎng)絡(luò)堆棧的數(shù)據(jù)包,生成一個(gè)新的連接記錄項(xiàng) (Connection entry)粪躬。
/proc/net/ip_conntrack
/proc/net/nf_conntrack el6
保存當(dāng)前系統(tǒng)上每一個(gè)客戶端和主機(jī)的所建立的連接狀態(tài)担败。
iptstate
iptstate - A top-like display of IP Tables state table entries
-t 顯示連接個(gè)數(shù)
/proc/net/nf_conntrack保留ip的連接狀態(tài)昔穴,進(jìn)行追蹤。
modprobe -r ip_conntrack 移除模塊
modprobe -r nfnetlink
service iptables stop
modprobe ip_conntrack
多少個(gè)連接就會(huì)有多少個(gè)條目
/proc/sys/net/ipv4/ip_conntrack_max
/proc/sys/net/filter/nf_conntrack_max
/proc/sys/net/filter/nf_conntrack_max 定義nf_conntrack存儲(chǔ)多少個(gè)條目提前,最多可以建立多少連接吗货。若連接超過(guò)定義的值就會(huì)丟棄,導(dǎo)致大量的超時(shí)狈网。
注意:在業(yè)務(wù)繁忙的網(wǎng)站宙搬,此模塊一定不要開啟。
iptables -t nat -L 會(huì)觸發(fā)nf_conntrack模塊拓哺。
可以修改:
vim /etc/sysctl.conf
net.netfilter.nf_conntrack_max = 655360
net.nf_conntrack_max = 655360
iptables啟動(dòng)時(shí)會(huì)讀取/etc/sysconfig/iptables
service iptables save 保存iptables的規(guī)則
iptables-save > /etc/sysconfig/iptables.20150818
iptables-restore < /etc/sysconfig/iptables.20150818
手動(dòng)保存規(guī)則以及手動(dòng)載入規(guī)則勇垛。
允許ssh和http的服務(wù),并且還要追蹤(以及默認(rèn)策略):
iptables -F
iptables -t filter -A INPUT -d 172.16.1.3 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -P tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t filter -A INPUT -d 172.16.1.3 -p tcp --dport 80 -m --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
sysctl -w net.netfilter.nf_conntrack_max=65536
sysctl - configure kernel parameters at runtime
EXAMPLES
/sbin/sysctl -a
/sbin/sysctl -n kernel.hostname
/sbin/sysctl -w kernel.domainname="example.com"
/sbin/sysctl -p /etc/sysctl.conf
在/proc/sys/net/netfilter/目錄下參數(shù)進(jìn)行配置以及超時(shí)時(shí)間拓售。
若要永久有效將參數(shù)寫在/etc/sysctl.conf
iptables -t filter -A INPUT -d 172.16.1.3 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
ping 172.16.1.3
iptstate -t
iptables -L -n --line-numbers
iptables -t filter -I OUTPUT -s 172.16.1.3 -m state --state ESTABLISHED -j ACCEPT
iptables -t filter -I INPUT -d 172.16.1.3 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -D OUTPUT 2
vim /etc/vsftpd/vsftpd.conf
pasv_enable=NO
servicevsftpd restart
允許ftp主動(dòng)模式通過(guò):
iptables -t filter
iptables -R OUTPUT 1 -s 172.16.1.3 -m state ESTABLISHED,RELATED -j ACCEPT
iptables -R OUTPUT 1 -d 172.16.1.3 -m state NEW,ESTABLISHED,RELATED -j ACCEPT
注意:要裝載nf_
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_nat_ftp nf_conntrack_ftp"
service iptables reload
iptables -I INPUT 2 -d 172.16.1.3 -p tcp -m mutiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT
注意: ! 表示條件取反