Linux基礎教程之iptables/netfilter入門到進階

文章目錄
[隱藏]

隨著互聯網技術的方興未艾,各種網絡應用層出不窮,網絡攻擊、黑客入侵也成了網民暢游互聯網的心頭大患,互聯網安全也愈加受到了人們的重視。網絡防火墻,作為一種簡單高效的互聯網防御手段,逐漸成為了網民暢游網絡世界的保護傘。下面筆者介紹下Linux系統的守衛者——iptables/netfilter。

?一 兄弟齊心,其利斷金

?iptables/netfilter就像一對兄弟,netfilter是大哥,善使長鉤;iptables是小弟,擅長書記。這兩兄弟一武一文,掌握著守城重任。

?netfilter大哥師承名門,身負五把長鉤,每一個流經他的數據流都逃不過他的法眼,只見得五把長鉤上下翻飛舞得水泄不通,將那不符合規則的數據包挑落馬下。這五把長鉤埋伏在城門的五個位置,分別是:NF_IP_PRE_ROUTING、NF_IP_LOCAL_IN、NF_IP_FORWARD、NF_IP_POST_ROUTING、NF_IP_LOCAL_OUT。他們分別對應了下圖的五個位置。

iptables小弟學富五車,手拿生死簿,記載了亂臣賊子的具體情況,netfilter大哥就是按照生死簿的記載檢查每個數據包,以辨忠奸。

二 四章生死簿

生死簿內所載內容分為四個章節:raw、mangle、nat、filter

raw、mangle記載了極高深的內容,正所謂曲高和寡,平常極少用到。filter里記錄了過濾規則;nat表記錄了地址轉換和端口映射相關規則。

三 iptables命令

iptables [-t tablename] {-A|-D|-I|-F|-L|-Z|-P} 鏈名 rule-specification

-t 指定表名,默認為filter表

-A 追加防火墻規則

-D 刪除規則

-I 插入規則

-F 清空規則

-L 列出規則

-R 替換規則

-Z 清空計數

-P 設置鏈默認規則

鏈管理:

-N 創建新鏈

-X 刪除用戶自定義引用計數為0的空鏈

-E 自定義鏈重命名

-S 列出選定鏈的規則

[!] -p 匹配協議

[!] -s 匹配源地址

[!] -d 匹配目標地址

[!] -i 匹配入站網卡地址

[!] -o 匹配出站網卡地址

[!] –sport 匹配源端口

[!] –dport 匹配目的端口

[!] –src-range 匹配源地址范圍

[!] –dst-range 匹配目的地址范圍

[!] –limit 匹配數據表速率

[!] –mac-source 匹配mac地址

[!] –state 匹配狀態(INVALID ESTABLISHED NEW RELATED)

[!] –string 匹配應用層字串

觸發動作:

ACCEPT 允許數據包通過

DROP 丟棄數據包

REJECT 拒絕數據包通過

LOG 將數據包信息記錄syslog日志

DNAT 目標地址轉換

SNAT 源地址轉換

MASQUERADE 地址欺騙

REDIRRECT 重定向

?四 filter表規則

filter表是最常被使用的表,是iptables命令默認修改的表。它包含了3條鏈,分別是input、forward和output,分別用來制定進入本機、轉發和離開本機的數據包規則。

1? 修改默認規則

使用iptables -P命令修改默認規則,例如:

iptables -P INPUT ACCEPT

建議在input鏈最后添加DROP規則,例如:

iptables -A INPUT -p tcp -d 172.18.55.7 -j
DROP

這樣即使清空規則后也不會斷網。

2 增、刪、改規則

使用-A在鏈尾增加規則;使用-I可以指定添加規則的位置,如不指定位置序號,則在開頭增加,例如除了22端口以外,禁止連接本機的端口:

iptables -A INPUT -p tcp -d 172.18.55.7 -j
DROP

iptables -I INPUT -d 172.18.55.7 -p tcp
–dport 22 ACCEPT

使用-D可以刪除某條規則,例如刪除某一條規則

iptabels -D INPUT 1

3 擴展規則

擴展規則分為顯式擴展和隱式擴展,顯式擴展是指使用-m參數;隱式擴展是指在-p參數后可以省略-m參數。

隱式擴展包括的參數有:

-p tcp

[!] –source-port,–sport port[:port]

[!] –destination-port,–dport port[:port]

[!] –tcp-flags mask comp

[!] –syn

-p udp

[!] –source-port,–sport port[:port]

[!] –destination-port,–dport port[:port]

-p icmp

[!] –icmp-type {type[/code]|typename}

0/0: echo reply

8/0:echo request

顯式擴展包括的參數有:

-m multiport

以離散或連續的
方式定義多端口匹配條件,最多15個;

[!] –source-ports,–sports port[,port|,port:port]…:指定多個源端口;

[!] –destination-ports,–dports
port[,port|,port:port]…:指定多個目標端口;

例:# iptables -I INPUT? -d
172.16.0.7 -p tcp -m multiport –dports 22,80,139,445,3306 -j ACCEPT

-m iprange

以連續地址塊的方式來指明多IP地址匹配條件;

[!] –src-range from[-to]

[!] –dst-range from[-to]

例:# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport –dports
22,80,139,445,3306 -m iprange –src-range 172.16.0.61-172.16.0.70 -j REJECT

-m time

以時間或日期作為包過濾條件

–timestart hh:mm[:ss]

–timestop hh:mm[:ss]

[!] –weekdays day[,day…]

[!] –monthdays day[,day…]

–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

–kerneltz:使用內核配置的時區而非默認的UTC;

-m string

以字符串為條件過濾數據包

–algo {bm|kmp}

[!] –string pattern

[!] –hex-string pattern

–from offset

–to offset

~]# iptables -I OUTPUT -m string –algo bm
–string “gay” -j REJECT

-m connlimit

限制每個IP連接服務器的連接數

–connlimit-upto n

–connlimit-above n

~]# iptables -I INPUT -d 172.16.0.7 -p tcp
–syn –dport 22 -m connlimit –connlimit-above 2 -j REJECT

-m limit

限制連接速率

–limit rate[/second|/minute|/hour|/day]

–limit-burst number

~]# iptables -I OUTPUT -s 172.16.0.7 -p
icmp –icmp-type 0 -j ACCEPT

-m state

“state”擴展是對”conntrack”子模塊的擴展。? “state”擴展可以依照連接的狀態過濾數據包。

[!] –state state

INVALID, ESTABLISHED, NEW, RELATED or
UNTRACKED.

NEW: 新連接請求;

ESTABLISHED:已建立的連接;

INVALID:無法識別的連接;

RELATED:相關聯的連接,當前連接是一個新請求,但附屬于某個已存在的連接;

UNTRACKED:未追蹤的連接;

state擴展:

內核模塊裝載:

nf_conntrack

nf_conntrack_ipv4

手動裝載:

nf_conntrack_ftp

追蹤到的連接:

/proc/net/nf_conntrack

調整可記錄的連接數量最大值:

/proc/sys/net/nf_conntrack_max

調整超時時長:

/proc/sys/net/netfilter/*timeout*

4 處理動作(跳轉目標)

-j targetname [per-target-options]

簡單target:

ACCEPT, DROP

擴展target:

REJECT

–reject-with type

LOG

–log-level

–log-prefix

5保存和載入規則:

保存:iptables-save > /PATH/TO/SOME_RULE_FILE

重載:iptabls-restore < /PATH/FROM/SOME_RULE_FILE

-n, –noflush:不清除原有規則

-t, –test:僅分析生成規則集,但不提交

五 nat表規則

iptables不僅可以實現數據包過濾,還可以實現網絡地址轉換,這項功能是通過修改nat表實現的。nat表一般作用在PREROUTING和POSTRONTING鏈上,然后通過FORWARD鏈過濾流經的數據包。

示例:將流經網關的數據包的源地址改為192.168.10.254

iptables -t nat -A POSTROUTING -s 172.18.0.0/16 -j SNAT –to-source
192.168.10.254

如果是撥號地址,那么可以用MASQUERADE參數

示例:將流入網關80端口的數據包轉發給192.168.10.2

iptables -t nat -A PREROUTING -d 172.18.55.7 -p tcp –dport 80 -j DNAT
–to-destination 192.168.10.2

相關新聞

聯系我們

400-080-6560

在線咨詢:點擊這里給我發消息

郵件:[email protected]

工作時間:周一至周日,09:00-18:30

QR code
云南快乐10分开奖直播 天天捕鱼电玩城破解版 1713游戏中心李逵劈鱼 赚钱app支付宝提现的 安徽马鞍山麻将规则 微信群里投注彩票赚钱是真的 魔兽争霸富甲天下如何赚钱 单机麻将全集大全下载 天下手游贫民赚钱 好好上班赚钱 彩46彩票游戏 赚钱理财课程 如何培养赚钱的命 七彩娱乐网址 国家顶级域名可以赚钱吗 现在没学厉做什么工作赚钱 参与麻将群赌博违法吗