防火墻:包括軟件防火墻(基于iptables/netfilter的包過濾防火墻)和硬件防火墻,在主機(jī)或網(wǎng)絡(luò)邊緣對經(jīng)由防火墻的報文以一定條件進(jìn)行檢測過濾的一系列組件。
Linux系統(tǒng)中的防火墻的實現(xiàn): 利用iptables/netfilter既可以實現(xiàn)主機(jī)防火墻(安全服務(wù)范圍僅限于當(dāng)前某臺主機(jī)),又可以實現(xiàn)網(wǎng)絡(luò)防火墻(安全服務(wù)范圍為當(dāng)前局域網(wǎng))。 netfilter:Linux系統(tǒng)內(nèi)核中防火墻的框架,防火墻功能實現(xiàn)的主體; iptables:為netfilter編寫數(shù)據(jù)傳輸?shù)钠ヅ湟?guī)則的用戶空間中的應(yīng)用程序工具;
iptables結(jié)構(gòu):iptables 由tables 構(gòu)成,tables由chains組成,而chains由rules組成。
iptables的表(tables)與鏈(chains): 鏈(5種): INPUT鏈 (處理來自外部的數(shù)據(jù)) OUTPUT鏈 (處理向外發(fā)送的數(shù)據(jù)) FORWARD鏈 (將數(shù)據(jù)轉(zhuǎn)發(fā)本機(jī)的其他設(shè)備) PREROUTING鏈(處理剛到達(dá)本機(jī)并在路由轉(zhuǎn)發(fā)前的數(shù)據(jù)包;轉(zhuǎn)換數(shù)據(jù)報文中目的IP地址用于DNAT) POSTROUTING鏈(處理即將離開本機(jī)的數(shù)據(jù)包;轉(zhuǎn)換數(shù)據(jù)報文中源IP地址用于SNAT)
表有Filter, NAT, Mangle, Raw四種內(nèi)建表:
filter表:用來實現(xiàn)過濾器,包過濾防火墻功能 filter是iptables的默認(rèn)表,有以下三種內(nèi)建鏈: INPUT鏈 (處理來自外部的數(shù)據(jù)) OUTPUT鏈 (處理向外發(fā)送的數(shù)據(jù)) FORWARD鏈 (將數(shù)據(jù)轉(zhuǎn)發(fā)本機(jī)的其他設(shè)備) NAT表:用于修改報文的源地址或目的地址、修改端口號,用來地址轉(zhuǎn)換和地址偽裝 NAT表包含三種內(nèi)建鏈:PREROUTING鏈、PREROUTING鏈、OUTPUT鏈 PREROUTING鏈(處理剛到達(dá)本機(jī)并在路由轉(zhuǎn)發(fā)前的數(shù)據(jù)包;轉(zhuǎn)換數(shù)據(jù)報文中目的IP地址用于DNAT) POSTROUTING鏈(處理即將離開本機(jī)的數(shù)據(jù)包;轉(zhuǎn)換數(shù)據(jù)報文中源IP地址用于SNAT) OUTPUT鏈 (處理本機(jī)產(chǎn)生的數(shù)據(jù)報文) INPUT(iptables1.4之后的版本中新增加的鏈,用于處理進(jìn)入本機(jī)的數(shù)據(jù)報文) Mangle表:拆解報文并對報文格式進(jìn)行修改,然后再重新封裝報文,可以用來流量控制和對數(shù)據(jù)添加標(biāo)簽 Mangle表具有5個內(nèi)建鏈:PREROUTING、POSTROUTING、OUTPUT、INPUT、FORWARD Raw表:關(guān)閉nat表上啟動的連接追蹤機(jī)制 Raw表有2個內(nèi)建鏈:PREROUTING、OUTPUT
注意:各個表中相同規(guī)則鏈上的規(guī)則生效優(yōu)先級次序(從高到低):raw --> mangle --> nat --> filter 數(shù)據(jù)報文的流向: 1.入站數(shù)據(jù)——目的IP地址為防火墻主機(jī)的有效IP地址的數(shù)據(jù)報文: PREROUTING -->路由表 (Routing table) --> INPUT 2.出站數(shù)據(jù)——源IP地址為防火墻主機(jī)的有效IP地址的數(shù)據(jù)報文: PREROUTING --> 路由表(Routing table) --> OUTPUT --> POSTROUTING 3.轉(zhuǎn)發(fā)數(shù)據(jù)——源、目的IP地址都不是防火墻主機(jī)的有效IP地址,需要經(jīng)過防火墻轉(zhuǎn)發(fā)的數(shù)據(jù)報文: PREROUTING --> 路由表(Routing table) --> FORWARD --> POSTROUTING
iptables的規(guī)則(rules): iptables:規(guī)則編寫工具,非交互式命令行工具,一次只能編寫一條規(guī)則并送往netfilter執(zhí)行; netfilter的規(guī)則匹配順序是:首項匹配; 首項匹配:由上至下依次匹配每條規(guī)則,且只要有規(guī)則能夠匹配數(shù)據(jù)報文,則不再繼續(xù)檢索其他匹配規(guī)則;
CentOS 6及以前版本:使用iptables命令編寫規(guī)則; CentOS 7:firewall-cmd命令編寫規(guī)則;iptables命令依然可以使用(建議使用); 停止firewalld服務(wù)并取消其自動運行:
systemctl disable firewalld.service # systemctl stop firewalld.service
想要添加正確合適的規(guī)則,需要事先考慮如下幾個問題: 1.數(shù)據(jù)報文的流經(jīng)路徑,已確定將規(guī)則添加至正確的表的正確鏈上; 2.確定此次規(guī)則實現(xiàn)的功能,以選擇正確的表; 3.確定具體的匹配條件的內(nèi)容,以便用于匹配感興趣的數(shù)據(jù); 4.確定鏈的默認(rèn)匹配條件和執(zhí)行動作;
iptables命令:規(guī)則編寫工具 規(guī)則(匹配條件+處理動作):匹配規(guī)則或識別條件,根據(jù)要求定義的用來匹配進(jìn)入、流出或經(jīng)過本機(jī)的報文的匹配條件,并且在匹配之后指明具體的處理方法 匹配條件:基本匹配條件和擴(kuò)展匹配條件 基本匹配條件:簡單的IP、TCP、UDP等協(xié)議的報文首部中特定屬性的匹配條件 擴(kuò)展匹配條件:需要借助于擴(kuò)展的功能模塊(隱式和顯式)進(jìn)行匹配 隱式擴(kuò)展:不明確的指出使用哪個具體的模塊,但實際上確實在使用擴(kuò)展模塊來完成條件匹配 顯式擴(kuò)展:必須要明確指出此次使用哪個具體模塊來完成條件匹配 處理動作: 基本動作(包過濾動作):ACCEPT,DROP,REJECT 擴(kuò)展動作:需要借助于擴(kuò)展模塊才能執(zhí)行的處理動作
定義規(guī)則時的注意事項:規(guī)則的匹配順序是由上至下安裝書寫順序進(jìn)行匹配:1) 同一類規(guī)則,匹配范圍最小的應(yīng)該寫在最上面;2) 非同一類的規(guī)則,匹配頻率越高的應(yīng)該寫在上面;3) 建議盡量不修改鏈的默認(rèn)策略為阻止所有數(shù)據(jù),如果想要設(shè)置阻止所有數(shù)據(jù)的規(guī)則,在鏈的最后一條設(shè)置阻止所有數(shù)據(jù)的規(guī)則即可;
規(guī)則iptables規(guī)則的書寫和優(yōu)化規(guī)范:1.可以安全放行所有入站及出站的且狀態(tài)為ESTABLISHED的連接的數(shù)據(jù);2.服務(wù)于同一類功能的規(guī)則,匹配條件越嚴(yán)格的越應(yīng)該放置在規(guī)則鏈的前面,條件越寬松的越放在后面;3.服務(wù)于不同類功能的規(guī)則,匹配報文可能性越大的越應(yīng)該放置在規(guī)則鏈的前面,匹配可能性小的放在后面;4.推薦最后一條規(guī)則設(shè)置為阻止所有數(shù)據(jù)通過,而不建議直接修改默認(rèn)策略;iptables規(guī)則編寫的通用格式:iptables [-t table] COMMAND CHAIN [-m matchname] [per-match-options] -j targetname [per-target-options]選項說明:-t table:指定選擇執(zhí)行哪個表的功能,可以選擇的表包括:raw,mangle,nat及filter,如果省略此選項,則表示使用默認(rèn)表——filter表;-m matchname:通常是配置顯式擴(kuò)展的匹配條件時,必須書寫;如果省略則表示要配置基本匹配條件或隱式擴(kuò)展匹配條件;-j targetname:指定所有匹配條件的數(shù)據(jù)包的處理動作;COMMAND:鏈的操作命令:-P, --policy chain target用于定義指定鏈的默認(rèn)策略;通常有兩種動作選擇,即:ACCEPT和DROP;-N, --new-chain chain創(chuàng)建一條新的自定義的規(guī)則鏈;新建的鏈上的規(guī)則必須要被內(nèi)建鏈上的規(guī)則調(diào)用才能生效;-X, --delete-chain [chain]刪除被內(nèi)建鏈調(diào)用次數(shù)為0的自定義鏈;-E, --rename-chain old-chain new-chain重命名被內(nèi)建鏈調(diào)用次數(shù)為0的自定義鏈;-F, --flush [chain]清除指定鏈(表中所有鏈)上的規(guī)則;規(guī)則的操作命令:-A, --append chain rule-specification在指定的鏈的末尾追加一條規(guī)則;-D, --delete chain rule-specification-D, --delete chain rulenum從指定的鏈上刪除一條規(guī)則,可以指明具體規(guī)則,也可以指明規(guī)則在鏈上的編號;-I, --insert chain [rulenum] rule-specification在指定的鏈上插入一條規(guī)則,默認(rèn)是將新規(guī)則插入至鏈的第一條規(guī)則,也可以指定規(guī)則編號,是的插入的規(guī)則稱為指定鏈上的第rulenum條規(guī)則;-R, --replace chain rulenum rule-specification用命令行中的規(guī)則替換指令鏈上的第rulenum條規(guī)則;并不是修改規(guī)則中某個具體條件,而是完全替換整條規(guī)則;-L, --list [chain]列表顯示指定表指定鏈(所有鏈)上的所有規(guī)則;可以使用的其他常用選項:-v, --verbose:顯示更詳細(xì)格式的信息,還有-vv;-n, --numeric:將規(guī)則中的所有信息都進(jìn)行數(shù)字化顯示;包括主機(jī)名和端口號等信息;-x, --exact:精確的顯示計數(shù)器的結(jié)果;每個規(guī)則都有兩個計數(shù)器:1.規(guī)則所匹配的報文的個數(shù);2.規(guī)則所匹配的報文的字節(jié)總數(shù);--line-numbers:顯示指定鏈上各個規(guī)則的編號;其他的命令:-Z, --zero [chain [rulenum]]將指定鏈的規(guī)則計數(shù)器置0;常用的TARGETS:LOG:對于匹配的數(shù)據(jù)報文的流動情況進(jìn)行日志記錄,并不會影響數(shù)據(jù)報文本身的傳輸;MARK:對于匹配的數(shù)據(jù)報文進(jìn)行防火墻標(biāo)記的設(shè)置;MASQUERADE:源地址偽裝,一種特殊的源IP地址轉(zhuǎn)換;REDIRECT:目標(biāo)IP地址和端口的重定向;REJECT:阻止數(shù)據(jù)報文傳輸并向數(shù)據(jù)報文的源頭返回消息;SNAT:源IP地址轉(zhuǎn)換;DNAT:目標(biāo)IP地址轉(zhuǎn)換;ACCEPT:對于匹配的數(shù)據(jù)報文進(jìn)行放行;DROP:對于匹配的數(shù)據(jù)報文進(jìn)行阻止;RETURN:在規(guī)則鏈之間跳轉(zhuǎn);匹配條件:默認(rèn)情況下,同一條命令中的不同條件之間存在邏輯"與"的關(guān)系;!:對于匹配的結(jié)果取反,有除了...之外的意思;基本匹配條件:[!] -s, --source address[/mask][,...]檢查數(shù)據(jù)報文中的源IP地址的匹配范圍;可以是單個的IP地址,也可以是子網(wǎng),主網(wǎng),超網(wǎng)等IP地址設(shè)定;0.0.0.0/0表示整個IP地址棧中所有的IP地址;如果省略該條件,意味著將匹配所有的源IP地址;[!] -d, --destination address[/mask][,...]檢查數(shù)據(jù)報文中的目標(biāo)IP地址的匹配范圍;可以是單個的IP地址,也可以是子網(wǎng),主網(wǎng),超網(wǎng)等IP地址設(shè)定;0.0.0.0/0表示整個IP地址棧中所有的IP地址;如果省略該條件,意味著將匹配所有的目標(biāo)IP地址;[!] -i, --in-interface name檢查數(shù)據(jù)報文入站的接口是否能夠被此條件所匹配;[!] -o, --out-interface name檢查數(shù)據(jù)報文出站的接口是否能夠被此條件所匹配;擴(kuò)展匹配條件:隱式擴(kuò)展匹配條件和顯式擴(kuò)展匹配條件隱式擴(kuò)展匹配條件:[!] -p, --protocol protocol[!] -p, [-m matchname] --protocol protocol檢查數(shù)據(jù)報文某指定的協(xié)議的封裝首部中是否有符合條件的特性或字段;可以在此處指定的協(xié)議包括:tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, mh, alltcp協(xié)議(tcp模塊):[!] --source-port,--sport port[:port][!] --destination-port,--dport port[:port]用于指定源端口和/或目標(biāo)端口的匹配條件;每次只能指定一個端口或一組連續(xù)的端口范圍,而不能指定離散端口;[!] --tcp-flags mask comp用于指定在TCP協(xié)議首部中各標(biāo)志位的匹配條件;URG, SYN, RST, PSH, ACK, FIN, ALL, NONEmask:設(shè)定要檢測的標(biāo)志位的列表,各標(biāo)志位之間使用","進(jìn)行分隔;comp:必須被置"1"的標(biāo)志位列表,剩余的在mask列表中的標(biāo)志位必須置"0";[!] --syn相當(dāng)于:--tcp-flags SYN,RST,ACK,FIN SYNudp協(xié)議(udp模塊):[!] --source-port,--sport port[:port][!] --destination-port,--dport port[:port]用于指定源端口和/或目標(biāo)端口的匹配條件;每次只能指定一個端口或一組連續(xù)的端口范圍,而不能指定離散端口;icmp協(xié)議(icmp模塊):[!] --icmp-type {type[/code]|typename}常用的icmp-type:echo-request,代碼為8;echo-reply,代碼為0;顯式擴(kuò)展匹配條件:1.multiport擴(kuò)展:一次性的寫入多個離散端口或多組連續(xù)端口,最大的上限15組端口,每一個端口范圍占用兩個端口;可以支持的協(xié)議:tcp, udp, udplite, dccp, sctp.相關(guān)選項:[!] --source-ports,--sports port[,port|,port:port]...[!] --destination-ports,--dports port[,port|,port:port]...[!] --ports port[,port|,port:port]...--dports 22,80,3306 -j ACCEPT示例:~]# iptables -I FORWARD -s 192.168.100.100 -d 172.16.69.2 -p tcp -m multiport --dports 22,80,3306 -j ACCEPT~]# iptables -I FORWARD -d 192.168.100.100 -s 172.16.69.2 -p tcp -m multiport --sports 22,80,3306 -j ACCEPT2.iprange擴(kuò)展:以連續(xù)的任意數(shù)量的IP地址訪問作為匹配條件;相關(guān)選項:[!] --src-range from[-to][!] --dst-range from[-to]-m iprange --src-range 192.168.100.1-192.168.100.100示例:~]# iptables -I FORWARD -m iprange --src-range 192.168.100.1-192.168.100.100 -d 172.16.69.2 -p tcp -m multiport --dports 22,80,3306 -j ACCEPT~]# iptables -I FORWARD -m iprange --dst-range 192.168.100.1-192.168.100.100 -s 172.16.69.2 -p tcp -m multiport --sports 22,80,3306 -j ACCEPT3.string擴(kuò)展:對數(shù)據(jù)報文中的應(yīng)用層數(shù)據(jù)做字符串匹配檢測;相關(guān)選項:--algo {bm|kmp}--string "STRING"示例:~]# iptables -I FORWARD -s 172.16.69.2 -m string --algo bm --string "dafa" -j REJECT4.time擴(kuò)展:根據(jù)報文到達(dá)防火墻本機(jī)的時間與指定的時間范圍進(jìn)行匹配檢測;相關(guān)選項:--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...]定義每個月中各個天;取值1-31[!] --weekdays day[,day...]定義每個星期中的星期幾;取值:Mon, Tue, Wed, Thu, Fri, Sat, Sun, or values from 1 to 7, or Mo, Tu, etc.示例:~]# iptables -I FORWARD -m time --timestart 08:00:00 --timestop 17:59:59 ! --weekdays 6,7 -o eno16777736 -j REJECT5.state擴(kuò)展連接狀態(tài)檢測;基于連接追蹤機(jī)制實現(xiàn);conntrack相關(guān)選項:[!] --state stateiptables對連接狀態(tài)的定義:INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED;INVALID:無法識別的連接狀態(tài),無效的通信狀態(tài); SYN,FINESTABLISHED:已經(jīng)建立連接的狀態(tài);連接態(tài);NEW:尚未建立連接的狀態(tài);新連接態(tài);RELATED:與其他已經(jīng)建立的連接有相互關(guān)聯(lián)的連接狀態(tài);關(guān)聯(lián)態(tài)或衍生態(tài);UNTRACKED:未追蹤的狀態(tài);內(nèi)核中用于保存連接追蹤狀態(tài)數(shù)據(jù)的位置:/proc/net/nf_conntrack能夠被追蹤到的最大的連接數(shù):/proc/sys/net/nf_conntrack_max注意:此處記錄的最大連接數(shù)的數(shù)值,建議必要時可以調(diào)整其大小到足夠大;為了能夠盡可能的高效利用內(nèi)存資源,緩存的連接追蹤的狀態(tài)不能無限期保存,因此設(shè)置了相應(yīng)的超時時間;/proc/sys/net/netfilter/nf_conntrack*timeout*利用連接追蹤設(shè)置FTP服務(wù)器的訪問控制:~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT~]# iptables -A INPUT -d 172.16.69.2 -p tcp -m multiport --dports 21,22,80,3306 -m state --state NEW -j ACCEPT~]# iptables -A INPUT -j DROP注意:需要裝載nf_conntrack_ftp內(nèi)核模塊;~]# modprobe nv_conntrack_ftp設(shè)置nf_conntrack_ftp模塊的自動裝載:設(shè)置/etc/sysconfig/iptables-configIPTABLES_MODULES="nf_conntrack_ftp"利用連接追蹤可以設(shè)置OUTPUT鏈上的通用規(guī)則:~]# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT~]# iptables -A OUTPUT -j DROP6.mac擴(kuò)展實現(xiàn)mac地址匹配檢測;用于PREROUTING, FORWARD or INPUT鏈;相關(guān)選項[!] --mac-source address匹配源mac地址;其形式必須是:XX:XX:XX:XX:XX:XX7.connlimit擴(kuò)展:根據(jù)每個客戶端IP地址做并發(fā)連接數(shù)的匹配檢測;相關(guān)選項:--connlimit-upto n當(dāng)客戶端當(dāng)前的并發(fā)連接數(shù)小于或等于n時,可以匹配此條件;此條件通常和ACCEPT動作配合使用;--connlimit-above n當(dāng)客戶端當(dāng)前的并發(fā)連接數(shù)大于n時,可以匹配此條件;此條件通常和DROP或REJECT動作配合使用;8.limit擴(kuò)展:基于服務(wù)器端收發(fā)數(shù)據(jù)報文的速率來進(jìn)行匹配檢測;相關(guān)選項:--limit rate[/second|/minute|/hour|/day]服務(wù)器端最大單位時間內(nèi)能夠接收的報文速率;--limit-burst number初始時所能接收的數(shù)據(jù)報文的最大數(shù)量;示例:~]# iptables -I INPUT 1 -p icmp --icmp-type 8 -m limit --limit 15/minute --limit-burst 8 -j ACCEPT
主機(jī)防火墻基本匹配條件配置示例: 1.允許指定的主機(jī)訪問本地的SSH服務(wù): ~]# iptables -t filter -A INPUT -s 172.16.0.1 -p tcp --dport 22 -j ACCEPT
2.默認(rèn)阻止所有其他主機(jī)到本機(jī)的所有數(shù)據(jù)通信:方法一:~]# iptables -P INPUT DROP (不推薦,如果使用iptables -F命令后果很可怕)方法二:~]# iptables -A INPUT -j REJECT (推薦操作)3.配置172.16.0.0/16網(wǎng)段中所有的主機(jī)可以訪問本地的httpd服務(wù):~]# iptables -I INPUT -s 172.16.0.0/16 -p tcp --dport 80 -j ACCEPT4.允許本機(jī)ping通外部主機(jī),但不允許外部主機(jī)ping通本機(jī):~]# iptables -I INPUT 2 -d 172.16.72.2 -p icmp --icmp-type echo-reply -j ACCEPT5.為了避免***程序的植入運行,可以設(shè)置OUTPUT鏈上的防火墻規(guī)則:~]# iptables -A OUTPUT -d 172.16.0.1 -p tcp --sport 22 -j ACCEPT~]# iptables -A OUTPUT -j REJECT~]# iptables -I OUTPUT -d 172.16.0.0/16 -p tcp --sport 80 -j ACCEPT~]# iptables -I OUTPUT 2 -p icmp --icmp-type echo-request -j ACCEPT
網(wǎng)絡(luò)防火墻基本匹配條件的配置示例: ~]# iptables -A FORWARD -j REJECT ~]# iptables -I FORWARD -s 192.168.100.100 -d 172.16.69.2 -p tcp --dport 3306 -j ACCEPT ~]# iptables -I FORWARD 2 -s 172.16.69.2 -d 192.168.100.100 -p tcp --sport 3306 -j ACCEPT ~]# iptables -I FORWARD 3 -p icmp -j ACCEPT
注意:凡是通過FORWARD鏈來設(shè)置的網(wǎng)絡(luò)防火墻的匹配規(guī)則,數(shù)據(jù)的往返過程必須同時被打開,才能保證路由功能的正常進(jìn)行
自定義規(guī)則鏈:有一批功能類似的規(guī)則但不是用于匹配多數(shù)數(shù)據(jù)的規(guī)則,此時可以將此類規(guī)則設(shè)置于自定義鏈中,進(jìn)而可以減少規(guī)則匹配的時間,提升匹配效率;(用到自定義鏈的情況) 創(chuàng)建自定義規(guī)則鏈: ~]# iptables -N udp_match //udp_match這個鏈必須是獨一無二 的
向自定義規(guī)則鏈添加規(guī)則:~]# iptables -A udp_match -d 172.16.72.2,192.168.100.1 -p udp -m multiport --dports 53,67,69,137,138 -j ACCEPT~]# iptables -A udp_match -j RETURN//自定義規(guī)則鏈的最后一條規(guī)則,可以返回主鏈,進(jìn)行后續(xù)規(guī)則匹配;更改自定義規(guī)則鏈的名稱:前提:要改名的自定義規(guī)則鏈的引用計數(shù)必須為0;~]# iptables -E udp_match udp刪除自定義規(guī)則鏈:前提:要改名的自定義規(guī)則鏈的引用計數(shù)必須為0且鏈上不能有任何規(guī)則;~]# iptables -X udp在主鏈上引用自定義規(guī)則鏈:~]# iptables -I INPUT -p udp -j udp
iptables/netfilter歸總: 一般書寫格式: iptables [-t table] COMMAND chain [-m matchname [per-match-options]] [-j targetname [per-target-options]]
iptables規(guī)則的保存和重載:CentOS 7:建議:為了兼容CentOS 6及以前版本,可以考慮將iptables的規(guī)則定義保存于/etc/sysconfig/iptables文件中;規(guī)則保存:~]# (umask 077 ; iptables-save > /etc/sysconfig/iptables)規(guī)則恢復(fù):~]# iptables-restore < /etc/sysconfig/iptablesCentOS 6和之前的版本:規(guī)則保存:~]# iptables-save > /etc/sysconfig/iptables~]# service iptables save規(guī)則恢復(fù):~]# iptables-restore < /etc/sysconfig/iptables~]# service iptables restart
補(bǔ)充: 一、nat表: 功能: 1.NAT(Network Address Translation):網(wǎng)絡(luò)地址轉(zhuǎn)換 1) SNAT:Source-Address NAT,源地址網(wǎng)絡(luò)地址轉(zhuǎn)換 通常用于讓局域網(wǎng)中使用私有IPv4地址的主機(jī)能夠訪問外部網(wǎng)絡(luò)或互聯(lián)網(wǎng);一般在路由選擇之后完成源地址的網(wǎng)絡(luò)地址轉(zhuǎn)換,所以在iptables中而言,SNAT類規(guī)則應(yīng)配置在POSTROUTING鏈上;
對于iptables來說有兩種情況:a. 靜態(tài)地址轉(zhuǎn)換:一對一地址轉(zhuǎn)換,一個私有地址對應(yīng)一個公有地址轉(zhuǎn);b. 地址偽裝:多對一地址轉(zhuǎn)換,多個私有IP地址對應(yīng)一個公有IP地址進(jìn)行訪問網(wǎng)絡(luò);2) DNAT:Destination-Address NAT,目標(biāo)網(wǎng)絡(luò)地址轉(zhuǎn)換通常用于讓外部網(wǎng)絡(luò)或互聯(lián)網(wǎng)中的主機(jī)能夠訪問局域網(wǎng)中使用私有IPv4地址的服務(wù)器上的網(wǎng)絡(luò)服務(wù);一般在路由選擇之前就需要完成目標(biāo)地址的網(wǎng)絡(luò)地址轉(zhuǎn)換,所以在iptables中而言,此類規(guī)則應(yīng)配置在PREROUTING鏈上;2.NAPT:Network Address and Port Translation,網(wǎng)絡(luò)地址端口轉(zhuǎn)換;用來進(jìn)行:網(wǎng)絡(luò)地址轉(zhuǎn)換 + 端口映射SNAT:This target is only valid in the nat table, in the POSTROUTING and INPUT chains, and user-defined chains which are only called from those chains.常用選項:--to-source [ipaddr[-ipaddr]][:port[-port]]注意:在RHEL或CentOS系發(fā)行版LInux中,SNAT所指定的ipaddr必須是當(dāng)前主機(jī)上配置并生效的IP地址;示例:~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source 172.16.72.72~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE//源地址偽裝技術(shù),無需指定具體的內(nèi)部全局地址,iptables自動決定本地可用的IP地址作為內(nèi)部全局地址,進(jìn)行源地址轉(zhuǎn)換;DNAT:This target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains which are only called from those chains.常用選項:--to-destination [ipaddr[-ipaddr]][:port[-port]]示例:~]# iptables -t nat -A PREROUTING -d 192.168.100.1 -p tcp --dport 80 -j DNAT --to-destination 172.16.69.2:8000與之功能相同的操作:1.在路由器上設(shè)置NAT轉(zhuǎn)換的防火墻規(guī)則:~]# iptables -t nat -R PREROUTING 1 -d 192.168.100.1 -j DNAT --to-destination 172.16.69.22.在目標(biāo)服務(wù)器上做端口重定向:需要使用REDIRECT target~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8000REDIRECTThis target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains which are only called from those chains. --to-ports port[-port]
二、LOG target: 僅僅是開啟內(nèi)核對匹配到的數(shù)據(jù)報文做日志記錄的功能,而不對數(shù)據(jù)做任何其他操作; //如果數(shù)據(jù)報文被target為LOG的規(guī)則匹配,還會按照正常的匹配順序去匹配后續(xù)規(guī)則;
常用選項:
--log-level level :定義記錄日志等級Level of logging, which can be (system-specific) numeric or a mnemonic.Possible values are (in decreasing order of priority): emerg, alert, crit, error, warning, notice, info or debug.--log-prefix prefix :日志前綴,描述日志是怎樣被記錄下來的(不超過29個字符)Prefix log messages with the specified prefix; up to 29 letters long, and useful for distinguishing messages in the logs.示例:
~]# iptables -t filter -A FORWARD -p tcp --dport 80 -j LOG --log-level info --log-prefix "IPTAB-LOG-" //注意:默認(rèn)情況下,日志會記錄在rsyslog服務(wù)所定義的默認(rèn)日志文件中,/var/log/messages;
轉(zhuǎn)載于:https://blog.51cto.com/chenliangdeeper/2119354
總結(jié)
以上是生活随笔 為你收集整理的Linux系统中的防火墙的实现:iptables/netfilter 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。