簡要概述防火墻:
iptables/netfilter是一種包過濾型的防火墻,主要工作與網絡層,對于進出本主機或本網絡的報文根據
事先定義的檢查規則作匹配檢測,對于能夠被規則匹配到的報文作出相應處理的組件;
防火墻類型:軟件防火墻、硬件防火墻
iptables/netfilter組件:
iptables:iptables 組件是一種工具,也稱為用戶空間(userspace),用于設置數據過濾與nat規則
netfilter:組件也稱為內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集
鏈表規則:四表五鏈
iptables內置有5個 hook functions :input,output,forward,prerouting,postrouting與之對應的5的鏈
內置的鏈:PREROUTING ,INPUT, FORWARD, OUTPUT,POSTROUTING
PREROUTING:在進行路由表選擇之前處理數據包
INPUT:處理入站的數據包
FORWARD:處理轉發的數據包
OUTPUT:處理出站的數據包
POSTROUTING:在進行路由選擇后的處理數據包
表及功能:filter, nat, mangle, raw
filter:主要實現過濾功能:能夠用于鏈的有:INPUT,FORWARD,OUTPUT
nat:network address translation 用于修改源IP、目標IP或者端口;PREROUTING ,OUTPUT,POSTROUTING
mangle:為數據包設置標記,拆解報文,做出修改并重新封裝起來:PREROUTING ,INPUT, FORWARD, OUTPUT,POSTROUTING
raw:關閉nat表上啟用的連接追蹤機制:PREROUTING,OUTPUT
如圖所示:
? ? ? ? ? ? ? ? ?
????????規則表的先后順序:raw--mangle--nat--filter
????????報文流向:
流入本機:PREROUTING --> INPUT
由本機流出:OUTPUT --> POSTROUTING
轉發:PREROUTING --> FORWARD --> POSTROUTING
????3.如下圖展現了數據包是如何流經本機iptables功能:
????????
????4.iptables規則命令參數使用
????????規則:組成部分根據規則匹配條件來匹配報文,一旦匹配成功后就由規則定義的動作做出處理
????????匹配條件:基本匹配條件、擴展匹配條件
????????處理動作:基本處理動作、擴展處理動作、自定義處理機制
? ????? 格式:iptables [-t bable]? COMMAND chain? [-m matchname [per-match-options]]? -j target [per-target-options]?????
表管理 | -t | raw,mangle,nat,filter,默認表為filter可省略 |
COMMAND | ||
鏈管理 | -N | Create a new user-defined chain by the given name,自定義新的規則鏈 |
-X | Delete the optional user-defined chain specified.? 刪除自定義規則鏈 | |
-P | --policy chain target,設置默認策略,對filter而言:ACCEPT/DROP | |
-E | --rename-chain old-chain new-chain? 重命名 | |
規則管理 | -A | -A, --append chain rule-specification ,追加 |
-I? # | --insert chain [rulenum] rule-specification ,插入,可指定位置,省略是表示第一條 | |
-D | delete刪除;可指明規則序號或者指明規則本身 | |
-R | replace,替換指定鏈上的指定規則 | |
-F? | flush [chain]清控規則鏈 | |
-Z | zero,至零;iptables的每條規則鏈都有兩個計數器:匹配的報文的個數、 匹配到的所有報文的大小之和 | |
-S | select,以iptables-save命令格式顯示鏈上規則 | |
查看 | ||
-L | --list,列出指定鏈上的所有規則; -n:numberic,以數字格式顯示端口和地址,不反解服務名 -v:verbose? ? ? -x:顯示計數器結果的精確值 --line-number:顯示規則的序號? ? ?如組合使用:-nvL? | |
匹配條件選項 | 基本匹配條件,無需加載任何模塊,由iptables/netfilter提供? | |
[!] -s | ?--source address[/mask][,...] 匹配來源地址ip/mask,[!]表示除了這個IP以外 | |
[!] -d | ?--destination address[/mask][,...]?匹配目標地址ip/mask,[!]表示除了這個IP以外 | |
[!] -i | --in-interface name:數據報文流入的接口;只能應用于數據報文流入的環節,只能應用于PREROUTING,INPUT和FORWARD鏈; | |
[!] -o | --out-interface name:數據報文流出的接口;只能應用于數據報文流出的環節,只能應用于FORWARD、OUTPUT和POSTROUTING鏈; | |
[!] -p | --protocol protocol匹配協議:tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or the special keyword "all"? ? | |
-j target name | 處理動作 | |
ACCEPT | ?允許通過 | |
LOG | ?記錄后繼續匹配下條規則 | |
REJECT | ?拒絕通過,必要時會給提示 | |
DROP | ?直接丟棄,不給任何回應 | |
RETURN | ?返回調用鏈 | |
MASK | ?做防火墻標記,不做任何訪問控制 | |
DNAT | ?目標 地址轉換 | |
SNAT | ?源地址轉換 | |
MASQUERADE | ?地址偽裝 |
????????擴展匹配條件:需要加載擴展模塊才生效。
????????????????隱式擴展條件:不需手動加載擴展模塊,但需要使用-p選項指明協議
????????????????-p :--protocol? protocol
????? ?????????? tcp : 等同于 “-m tcp”/udp
????????????????????????[!]? --source-port, --sport? port[:port]:匹配報文源 端口,可以是端口連續范圍
? ? ????????????????????[!]? --destination-port, --dport? port[:port]:匹配報文源目標端口,可以是端口連續范圍
?????????????????icmp:
????????????????????????[!]? --icmp-type {type[/code]|typename}
????????????????????????????????echo-request:8/0
????????????????????????????????echo-reply:0/0
????????????????????????????????用法:可以單獨指定type:允許192.168.0.0/24請求192.168.1.11
????????????????????????????????iptables -A INPUT -s 192.168.0.0/24 -d 192.168.1.11 -p icmp --icmp-type 8 -j? ACCEPT
? ? ? ? ? ? ? ? ? ? ? ??[!] --tcp-flags? mask? comp
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? comp is a comma-separated list? of? flags? which must be set,例如SYN
? ? ? 例如:“--tcp-flags? SYN,ACK,FIN,RST? SYN”表示,要檢查的標志位為SYN,ACK,FIN,RST四個,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 其中SYN必須為1,余下的必須為0;
????????????????????????[!] --syn:用于匹配第一次握手,相當于”--tcp-flags? SYN,ACK,FIN,RST? SYN“;
?????????顯示擴展條件:必須指明要加載的擴展模塊?[-m matchname [per-match-options]]
????????????????1)multiport:以離散的方式定義多端口匹配,最多指定15個端口
?????????????????????[!] --source-ports ,--sports? port[,port|,port:port]....指定多個源端口 port:port表示連續端口
? ? ? ? ? ? ? ? ? ? ?[!] --destination-ports,--dports? port[,port|,port:port]....指定多個目標端口
????????????????? ? ?[!] --ports port[,port|,port:port]
?eg:允許172.16.0.0/16網段的主機訪問67主機的22,80端口
? ? ? iptables -A INPUT -s 172.16.0.0/16 -d 192.168.1.10 -p -m multiport --dport 22,80 -j ACCEPT
????????????????2)iprange:This matches on a given arbitrary range of IP addresses.匹配給定的連續IP地址
? ? ? ? ? ? ? ? ? ? ?[!] --src-range from[-to]???Match source IP in the specified range.匹配源IP地址
? ? ? ? ? ? ? ? ? ? ?[!] --dst-range from[-to]? 匹配目標IP地址
????????????????eg:開放192.168.1.80-192.168.1.100對服務器192.168.1.10的80端口訪問
? ? ? ? ? ? ??iptables -A INPUT -d 192.168.1.10 -p tcp --dport 80 -m iprange --src-range 192.168.1.80-192.168.1.100 -j ACCEPT
????????????????3)string: 需要制定--algo
????????????????????? 對報文中的應用層數據字符串做模式匹配,應用于響應報文--OUTPUT? ? ????????????????? ??
? ? ? ? ? ? ? ? ? ? ? --algo {bm|kmp}:?Select the pattern matching strategy選擇模式匹配策略
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(bm = Boyer-Moore, kmp = Knuth-Pratt-Mor‐ ris)? ? ?????? ? ????? ?
? ???????????????? ? [!] --string pattern:?Matches the given pattern.匹配給定的字符串模式
??????????????? ? ? ?[!] --hex-string pattern: Matches the given pattern in hex notation.16進制格式
? ? ? ? ? ? ?eg:iptables -A OUTPUT -s 192.168.1.101 -d 192.168.0.0/24 -p tcp --sport 80 -m string --algo bm --string "bad" -j REJECT
? ? ? ? ? ? ? ? 4)?time:根據將報文到達的時間與指定的時間范圍進行匹配,默認使用UTC時間? ?? ?????????
? ? ? ? ? ? ? ? ? ? ? --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...] --weekdays Mon, Tue, Wed, Thu,? Fri, Sat,? Sun,? or values from 1 to 7
? ? ? ? ? ? ? ? ? ? ? ?eg: iptables -A INPUT -s 192.168.0.0/24 -d 192.168.1.100 -p tcp --dport 80 -m time --timestart 08:00 --timestop 17:00?
????????????????????????????? --weekdays 1 ,2,3,4,5 -j ACCEPT
????????????????5)connlimit? :根據每客戶端IP做并發連接數數量匹配? ??????????????????
????????????????????Allows you to restrict the number of parallel connections? to? a? server? per? client? IP? address (or client address block).
??? ? ? ? ? ? ? ? ? ? ? --connlimit-upto n:連接的數量小于等于n時匹配;
? ? ??? --connlimit-above n:連接的數量大于n時匹配;
? ? ? ? ? ? ? ? ? ? ? ? ? ?# iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m connlimit --connlimit-above 2 -j REJECT
? ? ??iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m connlimit?--connlimit-upto? 2 -j ACCEPT
? ? ? ? ? ? ? ? 6)limit: This module matches at a limited rate using a token bucket filter.? ?使用令×××桶過濾器做速率匹配
????????????????????????--limit rate[/second|/minute|/hour|/day]
? ? ? ? ? ? ? ? ? ? ? ? --limit-burst number 速率突發值限制
? ? ? ? ? ? ? ? ? eg: ????iptables -I INPUT -d 172.16.100.67 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
????????????????7)state
? ? ? ? ? ? ? ? ? ? ?The? "state"? extension? is a subset of the "conntrack" module.? "state" allows access to? the connection tracking state for this packet.
? ? ? ? ? ? ? ? ? ? ?根據”連接追蹤機制“去檢查連接的狀態,內存中一個存儲空間稱為連接追蹤模板 conntrack template
? ? ? ? ? ? ? ? ? ? ?[!] --state state
? ? ? ? ? ? ? ? ? ? ?conntrack機制:追蹤本機上的請求和響應之間的關系;狀態有如下幾種:
? ? ? ? ? ? ? ? ? ? ?NEW: The packet has started a new connection or otherwise associated with a? connection? which has not seen packets in both directions.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?發出新請求,之間的連接還沒有任何數據
? ? ? ? ? ? ? ? ? ? ?ESTABLISHED:NEW狀態之后,連接追蹤模板中為其建立的條目失效之前期間內所進行的通信狀態;
????????????RELATED:The packet is starting a new connection, but is associated with an? existing? con‐nection
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 相關聯的連接;如ftp協議中的數據連接與命令連接之間的關系;
????INVALID:無效的連接;
????UNTRACKED:未進行追蹤的連接;raw表拆除連接追蹤功能
? ? ? ? ? ? ? ? ? ? ?eg: 本地22,80端口只放行新的請求和已建立的連接
?????????????????????????????iptables -A INPUT -d 192.168.1.100 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?iptables -A OUTPUT -s 192.168.1.100 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
????5.SNAT和DNAT
????????????????????snat:POSTROUTING, OUTPUT? 修改IP報文中的源地址
? ? ?????????????????????????讓本地網絡中的主機通過某一特定地址訪問外部網絡時,從而實現地址偽裝,可以解決IP資源匱乏;
? ? ? ? ? ? ??????????????? ?請求:有內網主機發起,修改源IP,如果修改則由管理員定義
? ? ? ? ? ?????????????? ? ? 響應:修改目標IP,但由nat自動根據會話表中跟蹤機制實現相應修改
????????????????????????????nat表的target:
????????????????????????? ? SNAT
????????????????????????????????--to-source [ipaddr[-ipaddr]][:port[-port]]
???????????????????????????????--random
? ? ? ? ? ? ? ? ? ? ? ?
????????????????????dnat:PREROUTING? 修改IP報文中的目標地址
????把本地網絡中的某一主機上的某服務開放給外部網絡中的用戶訪問時;
? ? ? ? ????請求:由外網主機發起,修改其目標地址,由管理員定義
? ? ? ? ????響應:修改源地址,但由nat自動根據會話表中跟蹤機制實現相應修改
?????????????????????????? ?DNAT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --to-destination [ipaddr[-ipaddr]][:port[-port]]
? ? ? ? ? ? ? ? ? ? ? ????
????????????????如圖所示SNAT的實現:
????????????????????????????????iptables -t? nat A POSTROUTING? -s 10.0.1.10? -j SNAT --to-source 192.168.1.10?
????????????????DNAT:? ? ?iptables? -t nat A? PREROUTING -d 192.168.1.10 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.10
????7.如何開放被動模式的ftp服務?
????6.規則的用效期限:
使用iptables命令定義的規則,手動刪除之前,其生效期限為kernel存活期限;關機后消失:
保存規則至指定的文件:
CentOS 6:
~]# service? iptables? save? ?
將規則保存至/etc/sysconfig/iptables文件中;
~]# iptables-save? >? /PATH/TO/SOME_RULES_FILE
CentOS 7:
~]# iptables -save? >? /PATH/TO/SOME_RULES_FILE
? ? iptables -S >? /PATH/TO/SOME_RULES_FILE
重新載入預存規則文件中規則:
~]# iptables-restore <? /PATH/FROM/SOME_RULES_FILE
CentOS 6:
~]# service? iptables? restart 放在默認的路徑/etc/sysconfig/iptables文件重載;
自動生效規則文件中的規則:
(1) 用腳本保存各iptables命令;讓此腳本開機后自動運行;
/etc/rc.d/rc.local文件中添加腳本路徑;
/PATH/TO/SOME_SCRIPT_FILE
? ? /usr/bin/iptables.sh
(2) 用規則文件保存各規則,開機時自動載入此規則文件中的規則;
/etc/rc.d/rc.local文件添加:
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
? ? etc/sysconfig/iptables.v2
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。