linux的包過濾功能,即linux防火墻,它由netfilter 和 iptables 兩個組件組成。
netfilter 組件也稱為內(nèi)核空間,是內(nèi)核的一部分,由一些信息包過濾表組成,這些表包含內(nèi)核用來控制信息包過濾處理的規(guī)則集。
iptables 組件是一種工具,也稱為用戶空間,它使插入、修改和除去信息包過濾表中的規(guī)則變得容易。
iptables的結(jié)構(gòu):
iptables -> Tables -> Chains -> Rules
簡單地講,tables由chains組成,而chains又由rules組成。iptables 默認(rèn)有四個表Filter, NAT, Mangle, Raw,其對于的鏈如下圖。
INPUT鏈 – 處理來自外部的數(shù)據(jù)。 OUTPUT鏈 – 處理向外發(fā)送的數(shù)據(jù)。 FORWARD鏈 – 將數(shù)據(jù)轉(zhuǎn)發(fā)到本機(jī)的其他網(wǎng)卡設(shè)備上。
訪問本機(jī):在INPUT鏈上做過濾
本機(jī)訪問外部:在OUTPUT鏈上做過濾
通過本機(jī)訪問其他主機(jī):在FORWARD鏈上做過濾
啟動iptables:service iptables start
關(guān)閉iptables:service iptables stop
重啟iptables:service iptables restart
查看iptables狀態(tài):service iptables status
保存iptables配置:service iptables save
Iptables服務(wù)配置文件:/etc/sysconfig/iptables-config
Iptables規(guī)則保存文件:/etc/sysconfig/iptables
打開iptables轉(zhuǎn)發(fā):echo "1"> /proc/sys/net/ipv4/ip_forward
命令:
iptables [ -t 表名] 命令選項(xiàng) [鏈名] [條件匹配] [-j 目標(biāo)動作或跳轉(zhuǎn)]
表名:Filter, NAT, Mangle, Raw
起包過濾功能的為表Filter,可以不填,不填默認(rèn)為Filter
選項(xiàng)名 | 功能及特點(diǎn) |
---|---|
-A | 在指定鏈的末尾添加(--append)一條新的規(guī)則 |
-D | 刪除(--delete)指定鏈中的某一條規(guī)則,按規(guī)則序號或內(nèi)容確定要刪除的規(guī)則 |
-I | 在指定鏈中插入(--insert)一條新的規(guī)則,默認(rèn)在鏈的開頭插入 |
-R | 修改、替換(--replace)指定鏈中的一條規(guī)則,按規(guī)則序號或內(nèi)容確定 |
-L | 列出(--list)指定鏈中的所有的規(guī)則進(jìn)行查看,默認(rèn)列出表中所有鏈的內(nèi)容 |
-F | 清空(--flush)指定鏈中的所有規(guī)則,默認(rèn)清空表中所有鏈的內(nèi)容 |
-N | 新建(--new-chain)一條用戶自己定義的規(guī)則鏈 |
-X | 刪除指定表中用戶自定義的規(guī)則鏈(--delete-chain) |
-P | 設(shè)置指定鏈的默認(rèn)策略(--policy) |
-n | 用數(shù)字形式(--numeric)顯示輸出結(jié)果,若顯示主機(jī)的 IP地址而不是主機(jī)名 |
-P | 設(shè)置指定鏈的默認(rèn)策略(--policy) |
-v | 查看規(guī)則列表時顯示詳細(xì)(--verbose)的信息 |
-V | 查看iptables命令工具的版本(--Version)信息 |
-h | 查看命令幫助信息(--help) |
--line-number | 查看規(guī)則列表時,同時顯示規(guī)則在鏈中的順序號 |
可以根據(jù)數(shù)據(jù)流向來確定具體使用哪個鏈,在Filter中的使用情況如下:
INPUT鏈 – 處理來自外部的數(shù)據(jù)。 OUTPUT鏈 – 處理向外發(fā)送的數(shù)據(jù)。 FORWARD鏈 – 將數(shù)據(jù)轉(zhuǎn)發(fā)到本機(jī)的其他網(wǎng)卡設(shè)備上。
條件匹配分為基本匹配和擴(kuò)展匹配,拓展匹配又分為隱式擴(kuò)展和顯示擴(kuò)展。
a)基本匹配包括:
匹配參數(shù) | 說明 |
---|---|
-p | 指定規(guī)則協(xié)議,如tcp, udp,icmp等,可以使用all來指定所有協(xié)議 |
-s | 指定數(shù)據(jù)包的源地址參數(shù),可以使IP地址、網(wǎng)絡(luò)地址、主機(jī)名 |
-d | 指定目的地址 |
-i | 輸入接口 |
-o | 輸出接口 |
b)隱式擴(kuò)展包括:
c)常用顯式擴(kuò)展
數(shù)據(jù)包控制方式包括四種為:
ACCEPT:允許數(shù)據(jù)包通過。 DROP:直接丟棄數(shù)據(jù)包,不給出任何回應(yīng)信息。 REJECT:拒絕數(shù)據(jù)包通過,必須時會給數(shù)據(jù)發(fā)送端一個響應(yīng)信息。 LOG:在/var/log/messages 文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則。 QUEUE:防火墻將數(shù)據(jù)包移交到用戶空間 RETURN:防火墻停止執(zhí)行當(dāng)前鏈中的后續(xù)Rules,并返回到調(diào)用鏈(the calling chain)
a) 1. 刪除iptables現(xiàn)有規(guī)則
iptables –F
b) 2. 查看iptables規(guī)則
iptables –L(iptables –L –v -n)
c) 3. 增加一條規(guī)則到最后
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
d) 4.添加一條規(guī)則到指定位置
iptables -I INPUT 2 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
e) 5. 刪除一條規(guī)則
iptabels -D INPUT 2
f) 6.修改一條規(guī)則
iptables -R INPUT 3 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
g) 7. 設(shè)置默認(rèn)策略
iptables -P INPUT DROP
h) 8.允許遠(yuǎn)程主機(jī)進(jìn)行SSH連接
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
i) 9.允許本地主機(jī)進(jìn)行SSH連接
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INTPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
j) 10.允許HTTP請求
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
k) 11.限制ping 192.168.146.3主機(jī)的數(shù)據(jù)包數(shù),平均2/s個,最多不能超過3個
iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT
l) 12.限制SSH連接速率(默認(rèn)策略是DROP)
iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT iptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT
a) 1. 刪除現(xiàn)有規(guī)則
iptables -F
b) 2. 配置默認(rèn)鏈策略
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
c) 3. 允許遠(yuǎn)程主機(jī)進(jìn)行SSH連接
iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
d) 4. 允許本地主機(jī)進(jìn)行SSH連接
iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
e) 5. 允許HTTP請求
iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT
思路一:限制syn的請求速度(這個方式需要調(diào)節(jié)一個合理的速度值,不然會影響正常用戶的請求)
iptables -N syn-flood iptables -A INPUT -p tcp --syn -j syn-flood iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN iptables -A syn-flood -j DROP
思路二:限制單個ip的最大syn連接數(shù)
iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP
利用recent模塊抵御DOS攻擊
iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP
單個IP最多連接3個會話
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
只要是新的連接請求,就把它加入到SSH列表中
Iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
5分鐘內(nèi)你的嘗試次數(shù)達(dá)到3次,就拒絕提供SSH列表中的這個IP服務(wù)。被限制5分鐘后即可恢復(fù)訪問。
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP
iptables –A OUTPUT –m state --state NEW –j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT
個人見解,不足之處求指正。
聯(lián)系客服