inux的包過濾功能,即linux防火牆,它由netfilter 和 iptables 兩個組件組成。linux
netfilter 組件也稱爲內核空間,是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。網絡
iptables 組件是一種工具,也稱爲用戶空間,它使插入、修改和除去信息包過濾表中的規則變得容易。app
iptables的結構:tcp
iptables -> Tables -> Chains -> Rules
簡單地講,tables由chains組成,而chains又由rules組成。iptables 默認有四個表Filter, NAT, Mangle, Raw,其對於的鏈以下圖。工具
INPUT鏈 – 處理來自外部的數據。 OUTPUT鏈 – 處理向外發送的數據。 FORWARD鏈 – 將數據轉發到本機的其餘網卡設備上。
訪問本機:在INPUT鏈上作過濾spa
本機訪問外部:在OUTPUT鏈上作過濾rest
經過本機訪問其餘主機:在FORWARD鏈上作過濾日誌
啓動iptables:service iptables start
code
關閉iptables:service iptables stop
接口
重啓iptables:service iptables restart
查看iptables狀態:service iptables status
保存iptables配置:service iptables save
Iptables服務配置文件:/etc/sysconfig/iptables-config
Iptables規則保存文件:/etc/sysconfig/iptables
打開iptables轉發:echo "1"> /proc/sys/net/ipv4/ip_forward
命令:
iptables [ -t 表名] 命令選項 [鏈名] [條件匹配] [-j 目標動做或跳轉]
表名:Filter, NAT, Mangle, Raw
起包過濾功能的爲表Filter,能夠不填,不填默認爲Filter
選項名 | 功能及特色 |
---|---|
-A | 在指定鏈的末尾添加(--append)一條新的規則 |
-D | 刪除(--delete)指定鏈中的某一條規則,按規則序號或內容肯定要刪除的規則 |
-I | 在指定鏈中插入(--insert)一條新的規則,默認在鏈的開頭插入 |
-R | 修改、替換(--replace)指定鏈中的一條規則,按規則序號或內容肯定 |
-L | 列出(--list)指定鏈中的全部的規則進行查看,默認列出表中全部鏈的內容 |
-F | 清空(--flush)指定鏈中的全部規則,默認清空表中全部鏈的內容 |
-N | 新建(--new-chain)一條用戶本身定義的規則鏈 |
-X | 刪除指定表中用戶自定義的規則鏈(--delete-chain) |
-P | 設置指定鏈的默認策略(--policy) |
-n | 用數字形式(--numeric)顯示輸出結果,若顯示主機的 IP地址而不是主機名 |
-P | 設置指定鏈的默認策略(--policy) |
-v | 查看規則列表時顯示詳細(--verbose)的信息 |
-V | 查看iptables命令工具的版本(--Version)信息 |
-h | 查看命令幫助信息(--help) |
--line-number | 查看規則列表時,同時顯示規則在鏈中的順序號 |
能夠根據數據流向來肯定具體使用哪一個鏈,在Filter中的使用狀況以下:
INPUT鏈 – 處理來自外部的數據。 OUTPUT鏈 – 處理向外發送的數據。 FORWARD鏈 – 將數據轉發到本機的其餘網卡設備上。
條件匹配分爲基本匹配和擴展匹配,拓展匹配又分爲隱式擴展和顯示擴展。
a)基本匹配包括:
匹配參數 | 說明 |
---|---|
-p | 指定規則協議,如tcp, udp,icmp等,可使用all來指定全部協議 |
-s | 指定數據包的源地址參數,可使IP地址、網絡地址、主機名 |
-d | 指定目的地址 |
-i | 輸入接口 |
-o | 輸出接口 |
b)隱式擴展包括:
c)經常使用顯式擴展
數據包控制方式包括四種爲:
ACCEPT:容許數據包經過。 DROP:直接丟棄數據包,不給出任何迴應信息。 REJECT:拒絕數據包經過,必須時會給數據發送端一個響應信息。 LOG:在/var/log/messages 文件中記錄日誌信息,而後將數據包傳遞給下一條規則。 QUEUE:防火牆將數據包移交到用戶空間 RETURN:防火牆中止執行當前鏈中的後續Rules,並返回到調用鏈(the calling chain)
a) 1. 刪除iptables現有規則
iptables –F
b) 2. 查看iptables規則
iptables –L(iptables –L –v -n)
c) 3. 增長一條規則到最後
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
d) 4.添加一條規則到指定位置
iptables -I INPUT 2 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
e) 5. 刪除一條規則
iptabels -D INPUT 2
f) 6.修改一條規則
iptables -R INPUT 3 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
g) 7. 設置默認策略
iptables -P INPUT DROP
h) 8.容許遠程主機進行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.容許本地主機進行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主機的數據包數,平均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鏈接速率(默認策略是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. 刪除現有規則
iptables -F
b) 2. 配置默認鏈策略
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
c) 3. 容許遠程主機進行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. 容許本地主機進行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的請求速度(這個方式須要調節一個合理的速度值,否則會影響正經常使用戶的請求)
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鏈接數
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分鐘內你的嘗試次數達到3次,就拒絕提供SSH列表中的這個IP服務。被限制5分鐘後便可恢復訪問。
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
我的看法,不足之處求指正。