Firewall
工作于網絡(網絡防火墻)或主機(主機防火墻)的邊緣(通信報文的進出口),對于進出本網絡或主機的報文根據事先定義的檢查規則作匹配檢測,對于能夠被規則匹配到的報文作出相應處理
發展歷程: ipfw-->ipchains-->iptables
iptables/netfilter
- netfilter: 是kernel代碼
hooks function
iptables: cli,是命令行程序 - rules utility
netfilter有5個鉤子:路由前,路由后,input輸入隊列,output輸出隊列,forward轉發隊列
netfilter:有5個鉤子函數
prerouting,input,forward,output,postrouting
報文流向:
流入本機:prerouting --> input ==> 用戶空間進程;
流出本機:用戶空間進程==> output --> postrouting;
轉發:prerouting --> forward --> postrouting;
iptables有五個內置規則鏈(名稱需大寫)
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING自定義鏈:要手動添加關聯關系鉤子函數上才起作用
五個內置規則分別對應的iptables在linux系統中作用的五個位置
PREROUTING 對應 從網卡進入到內核空間中
INPUT 對應 從內核空間到用戶空間
FORWARD 對應 從一個網卡轉發到另一個網卡
OUTPUT 對應 從用戶空間到內核空間
POSTROUTING 對應 從內核空間到網卡
iptables自身內置的四種功能表
- filter:實現過濾,防火墻
- nat:network address translation,相當于mangle中的一部分功能,(修改ip層地址,傳輸層地址);主要完成源和目標IP、源和目標端口的修改;
- mangle:實現拆解報文,按需修改之后,重新封裝
- raw:關閉在nat表上啟用的連接追蹤機制
表和鏈的對應關系
表<==>鏈
- filter表對應:INPUT, FORWARD, OUTPUT鏈
過濾功能要在以上3個鉤子上進行; - mangle表對應:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING鏈
- nat表對應:PREROUTING, OUTPUT, POSTROUTING,INPUT鏈
- raw表對應:PREROUTING, OUTPUT鏈
都能實現地址轉換
同一鏈上的不同的表的規則的應用優先級:由高到底
raw>mangle>nat>filter
數據包過濾匹配流程
報文到達本機,到達prerouting鏈,有三種功能,raw,mangle,nat;--> 路由選擇
如果到內部input鏈有兩功能,mangle,filter
iptables規則
組成部分:根據規則的匹配條件嘗試匹配報文,對匹配成功的報文根據規則定義的處理動作作出處理;
規則要添加在鏈上,才生效;添加在自定義上不會自動生效;
鏈
- 內置鏈:每個內置鏈對應于一個鉤子函數;
- 自定義鏈:用于對內置鏈進行擴展或補充,可實現更靈活的規則組織管理機制;
只有鉤子調用自定義鏈時,才生效;
鏈上的規則次序,即為檢查的次序;因此,隱含一定的應用法則;
(1)同類規則(訪問同一應用),匹配范圍小的放上面
(2)不同類的規則(訪問不同的應用),匹配到報文頻率較大的放在上面;
(3)將那些可由一條規則描述的多個規則合并起來;
(4)設置默認策略;
添加規則的考量點:
(1)要實現何種功能:判斷添加規則至哪個表上;
(2)確定報文流經的位置;判斷添加規則至哪個鏈上;
功能確定了使用的鉤子就確定了;
盡量定義在最開始處;
iptables命令
高度模塊化,由諸多擴展模塊實現其檢查條件或處理動作的定義
/usr/lib64/xtables/
IPV6:libip6t_
IPV4:libipt_,libxt_
在centos7系統上,學習,建議:
systemctl stop firewalld.service
systemctl disable firewalld.service
在centos6系統上,學習建議:
service iptables stop
chkconfig iptables off
iptables格式:iptables [-t table] COMMAND chain [rulenum] [-m machename [per-match-options]] [-j targetname [per-target-options] [options]
iptables [-t table] {-A|-C|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]
-t tables:指定表,不指定的話,默認為filter;
raw, mangle, nat, [filter]
[root@promote ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SUBCOMMAND:實現增、刪、改、查
鏈管理:
-N:新增一條自定義鏈;
-X:delete,刪除自定義的空鏈;先清除規則,才能刪除鏈;
-P:policy,設置鏈的默認策略;
①ACCEPT:接受;
②DROP:丟棄;不響應;
③REJECT:拒絕;
-E:rename,重命名自定義的未被引用的鏈;(引用計數為0)
規則管理:
-A:append,追加,默認為最后一個;
-I:insert,默認插入,默認為第一個;
-D:delete,刪除,兩種格式,指定規則或指定規則條數;
(1)rule specification
(2)rule number
-R:replace替換,類似-D,指明替換哪一條;rule number
-F:flush,清空規則表,沖刷規則,可沖表上的一條鏈,也沖掉一個表上的所有鏈,也可指明沖掉哪條鏈上的哪條規則;
-Z:zero,置0;給iptables計數器置0;
iptables的每條規則,都有兩個計數器:
(1)有本規則匹配到的所有的packets
(2)由本規則匹配到的所有packets大小之和
-S:列出規則selected,以iptables-save命令的格式顯示鏈上的規則;
可重定向保存規則;相當于iptables-save命令;
查看:
-L:list,列出規則;
-n:numeric,以數字格式顯示地址和端口;禁止反解端口號對應的服務名;
-v:verbose,顯示詳細信息;支持-vv,-vvv
-x:exactly,顯示計數器的精確值而非單位換算后的結果;
每一條iptables規則都有兩個計數器,一個是被本規則記錄匹配的報文個數,第二個被本規則記錄匹配到的所有報文的大小,數值大時自動顯示換算單位,但結果不準確;
--line-numbers:顯示鏈上的規則的編號;
[root@promote ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
3 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
5 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
6 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
7 INPUT_direct all -- 0.0.0.0/0 0.0.0.0/0
這就是為什么-D刪除規則條目時,有兩種方式,一是指明規則編號,二是指明具體規則;
組合使用:-nvL,L要寫在后面;
[root@promote ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
50 3796 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
3 429 INPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
3 429 INPUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
3 429 INPUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
3 429 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
常見用法
iptables -nL
查看防火墻設置;沒指明任何表,查看filter,在3個鏈上INPUT,FORWARD,OUTPUT;
iptables -t nat -nL
查看nat表,可出現在4個鏈上PREROUTING,INPUT,OUTPUT,POSTROUTING;
注意:在centos6系統上,nat表不能在INPUT上;
iptables -t mangle -nL
查看mangle表,可出現5個鏈;
iptables -t raw -nL
查看raw表,可出現2個鏈;其中policy ACCEPT叫默認策略;
iptables -E testchain mychain
重命名自定義鏈為mychain;
iptables -X mychain
只能刪除空鏈;
iptables -t filter -P FORWARD DROP
設定FORWARD默認策略,過濾為丟棄轉發,-t filter可省略;
注意:使用遠程連接時,不能把input改為drop否則無法連接;
iptables -P INPUT DROP
設置INPUT默認策略;
iptables -P OUTPUT DROP
設置OUTPUT默認策略;
iptables -nL INPUT
查看指定某個鏈上的規則;
iptables -nvL
查看詳細信息,可顯示可易讀的單位;
iptables -nvxL
查看詳細信息,且顯示單位為字節;
iptables -nvxL --line-number
顯示規則編號;
iptables -nvvxL --line-number
顯示更詳細信息;
iptables -nvvvxL --line-number
顯示更多更詳細信息;
iptables -S
顯示添加的規則命令;
iptables -S INPUT
匹配條件:matches
rpm -ql iptables
查看安裝后生成的文件
其中:
以小寫字母.so結尾的一般為matches模塊;例如:/usr/lib64/xtables/libxt_addrtype.so
以大寫字母.so結尾的一般為target模塊;例如:/usr/lib64/xtables/libipt_REJECT.so
寫每一條規則時,怎么處理的叫做target,指明匹配條件叫做matches;純小寫字母模塊是用來擴展匹配條件的,純大寫字母的模塊是用來擴展怎么處理的;
基本匹配:netfilter自帶的匹配機制
[!] -s, --source address[/mask][,...]:指明原地址(范圍)匹配;嘆號表示取反;
[!] -d, --destination address[/mask][,...]:目標地址匹配;
[!] -i, --in-interface name:限制報文流入的接口,只能用于PREROUTING,INPUT,FORWARD鏈上;用于前半段;
[!] -o, --out-interface name:限制報文流出的接口,只能用于OUTPUT,FORWARD,POSTROUTING鏈上;用于后半段;
[!] -p{tcp|udp|icmp}:限制協議;
用法
此時在本機地址為172.18.11.114,在遠程主機172.18.11.111不能ping通,ssh鏈接也無法登錄;
iptables -A INPUT -s 172.18.0.0/16 -j ACCEPT
指定原IP地址可入棧,目標地地址不限制;
iptables -A OUTPUT -d 172.18.0.0/16 -j ACCEPT
指定目標IP地址可出棧,源地址不限制,肯定為本機地址;
此時172.18.11.111可ping通本地主機
設置僅172.18.11.112能連接本機;
iptables -A INPUT -s 172.18.11.112 -d 172.18.11.114 -j ACCEPT
設置入棧放行;
iptables -A OUTPUT -d 172.18.11.112 -s 172.18.11.114 -j ACCEPT
設置出棧放行;
此時,只有172.18.11.112能ping同本地主機;
設置處理除了172.18.11.112不能連接本機,其它主機均可連接;
iptables -A INPUT ! -s 172.18.11.112 -d 172.18.11.114 -j ACCEPT
iptables -A OUTPUT ! -d 172.18.11.112 -s 172.18.11.114 -j ACCEPT
此時,只有172.18.11.112不能連接本地主機;
設置僅允許172.18網段的tcp連接本機
iptables -A INPUT -s 172.18.0.0/16 -d 172.18.11.114 -p tcp -j ACCEPT
iptables -A INPUT -s 172.18.0.0/16 -d 172.18.11.114 -p tcp -j ACCEPT
此時,在172.18.11.111主機不能ping通本機,但可以ssl本機;
注意:ping不通不能說明不能訪問,每一種協議都有專用的擴展;可擴展的內容就是協議中的部分字段;
使用at設置定時計劃任務定義2小時后,清空規則把所有策略改為accept,以防自己設定規則后,被禁止登陸;
擴展匹配:經由擴展模塊引入的匹配機制,使用: -m matchname
擴展匹配分為兩類:
- 隱式擴展:可以不使用-m選項專門加載相應模塊;前提是要使用-p選項可匹配何種協議;
[!] -p {tcp|upd|icmp}:限制協議;每個協議都有專用的擴展條件; - 顯示擴展:明確指定擴展,使用-m指明擴展模塊;
隱式擴展:使用-p或--Protocol
[!] -p,--protocol PROTOCOL PROTOCOL;
協議:tcp,udp,icmp,icmpv6,esp(有效載荷協議),ah(驗證頭協議),sctp(流控協議),mh或all
tcp:隱含指明了-m tcp
[!] --source-port,--sport port[:port]:匹配報文中的tcp首部的源端口,可以是端口范圍;
: port表示為從0開始到指定的端口;
port :表示為從指定端口開始到最大端口;
[!] --destination-port,--dport port[:port]:匹配報文中的tcp首部的目標端口,可以是端口范圍;
[!] --tcp-flags mask comp:檢查報文中mask指明的tcp標志位,而要這些標準位comp中必須為1;例如:
--tcp-flags syn,fin,ack,rst syn 表示檢查tcp第一次握手中的4個標志位,syn必須為1,其它3個必須為0;
--tcp-flags syn,fin,ack,rst ack,fin 表示檢查tcp四次斷開中,請求斷開的報文,4個標志位,ack,fin必須為1,其它2個必須為0;[!] --syn:用于匹配第一次握手,相當于“--tcp-flags syn,fin,ack,rst syn”
udp:隱含指明了-m udp
[!] --source-port,--sport port[:port]:匹配報文中的udp首部的源端口,可以是端口范圍;
[!] --destination-port,--dport port[:port]:匹配報文中的udp首部的目標端口,可以是端口范圍;
icmp:隱含指明了-m icmp
[!] --icmp-type {type[/code]|typename}
type/code:
0/0: echo reply 回顯應答
8/0: echo request ping請求
注意:如果要設置默認DROP的策略,建議只開放指定主機IP地址ssh服務,以便能遠程登錄;
例如:
yum -y install httpd vsftpd telnet-server samba
開啟以上安裝的服務
用法
放行本地主機ssh服務,任意主機可遠程登錄本機
iptables -A INPUT -s 0/0 -d 172.18.11.114 -p tcp --dport 22 -j ACCEPT
入棧規則,-s 0/0可省略默認為所有地址;
iptables -A OUTPUT -s 172.18.11.114 -d 0/0 -p tcp --sport 22 -j ACCEPT
出棧規則;
iptables -P INPUT DROP
默認策略設為禁止訪問;所有服務禁止訪問本機;
瀏覽器不能訪問172.18.11.114網頁;
開放本機80端口
iptables -A INPUT -d 172.18.11.114 -p tcp --dport 80 -j ACCEPT
入棧規則;
iptables -A OUTPUT -s 172.18.11.114 -p tcp --sport 80 -j ACCEPT
出棧規則;
瀏覽器可訪問172.18.11.114網頁;
DNS服務器中的udp協議:
本機為DNS服務器時,開放給所有主機服務,此時本機為服務器端,入棧的是客戶端請求,目標端口為本機53,響應時出棧為本機53端口;當解析不了時,還有迭代方式去查詢頂級DNS服務器等,此時本機為客戶端,出棧為本機隨機端口,目標端口為別人的53端口,入棧時源端口是別人的53,目的端口為本機隨機端口;在這2種場景中,寫規則時的入棧和出棧是不同的;要添加4條規則;因為有2條入棧,2條出棧;
ping命令中的ICMP協議:
其中:
00 協議類型和代碼:表示ping應答;
80 協議類型和代碼:表示ping請求;
本機被ping時,別人的請求時,icmp協議類型,入棧為8,出棧是0;
本機ping別人時,icmp協議類型,出棧是8,入棧是0;
允許自己png別人,禁止別人ping自己:
iptables -A OUTPUT -s 172.18.11.114 -d 0/0 -p icmp --icmp-type 8 -j ACCEPT
出棧設置
iptables -A INPUT -s 0/0 -d 172.18.11.114 -p icmp --icmp-type 0 -j ACCEPT
入棧設置
開放別人可ping自己:
iptables -A INPUT -d 172.18.11.114 -p icmp --icmp-type 8 -j ACCEPT
入棧設置
iptables -A OUTPUT -s 172.18.11.114 -p icmp --icmp-type 0 -j ACCEPT
出棧設置
顯示擴展
multiport:多端口匹配
以離散方式定義多端口匹配,最多可以指定15個端口;
[!] --source-ports,--sports-port[,port|,port:port]... 指定多個源端口
[!] --destination-ports,--dports-port[,port|,port:port]... 指定多個目標端口
[!] --ports port[,port|,port:port]...
例如:顯示擴展,多端口一條規則指明:開放22和80端口:
iptables -I INPUT -s 0/0 -d 172.18.11.114 -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -I OUTPUT -d 0/0 -s 172.18.11.114 -p tcp -m multiport --sports 22,80 -j ACCEPT
iprange:指明一段連續的ip地址范圍作為原地址或目標地址匹配
[!] --src-range from[-to]:原地址范圍;
[!] --dst-range from[-to]:目標地址范圍;
iptables -I INPUT -d 172.16.0.67 -p tcp --dport 23 -m iprange --src-range 172.16.0.60-172.16.0.70 -j ACCEPT
iptables -I ONPUT -s 172.16.0.67 -p tcp --sport 23 -m iprange --dst-range 172.16.0.60-172.16.0.70 -j ACCEPT
string:對報文中的應用層數據做字符串匹配檢測;對內核版本要大于2.6.14
--algo {bm|kmp}:算法
(mbboyer-moore,kmp=knuth-pratt-morris)
[!] --string pattern:給定要檢查的字符串模式;
[!] --hex-string pattern:給定要檢查的字符串模式,十六進制;
注意:要把匹配嚴格的規則放在松散規則之上;如果target相同,松散的放上面,如果target不同,嚴格的規則放上面;
例如:禁止響應頁面內容有test字樣
iptables -I OUTPUT -s 172.18.11.114 -d 0/0 -p tcp --sport 80 -m string --algo bm --string "test" -j REJECT
time:根據收到報文的時間/日期與指定的時間/日期范圍進行匹配
--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...]:匹配一個周中的哪些天;
例如:在工作時間內9:00-16:00,放行訪問telnet服務
iptables -R INPUT 4 -d 172.18.11.114 -p tcp --dport 23 -m iprange --src-range 172.18.11.1-172.18.11.111 -m time --timestart 09:00:00 --timestop 16:00:00 --weekdays 1,2,3,4,5 -j ACCEPT
connlimit:根據每客戶端做并發連接數限制,即每客戶端最多發起的連接數量
--connlimit-upto n:連接數量小于等于n,則匹配;
--connlimit-abvoe n:連接數量大于n則匹配;
例如:限制每臺主機訪問telnet最大并發數為2個
iptables -A INPUT -s 0/0 -d 172.18.11.114 -p tcp --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT
limit:基于令牌桶算法對報文的速率進行匹配
--limit rate[/second|/minute|/hour|/day]
--limit-burst number
限制本機某tcp服務接受新請求的速率:--syn,-m limit
例如:允許別人ping設置一分鐘20包,突發值為3,表示一次ping需要3秒;
iptables -R INPUT 5 -d 172.18.11.114 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 3 -j ACCEPT
state:是conntrack的子集,用于實現對報文的狀態做連接追蹤
[!] --state state
狀態 | 作用 |
---|---|
INVALID | 無法識別的連接 |
ESTABLISHED | 連接追蹤模板當中存在的記錄的連接 |
NEW | 連接追蹤模板當中不存在的連接請求 |
RELATED | 相關聯的連接 |
UNTRACKED | 未追蹤的連接 |
模板記錄占滿時,再有請求會被超時處理;
通常前端負載均衡器通常不要開啟連接追蹤功能;
已經追蹤到的并記錄下來的連接(保存位置):/proc/net/nf_conntrack
例如:查看已追蹤并記錄到的連接信息;
cat /proc/net/nf_conntrack
連接追蹤功能所能夠記錄最大連接數量:(可調整)
/proc/sys/net/nf_conntrack_max
調整內核參數,使用echo重定向,或使用syctemctl命令
例如:設置記錄最大連接數為300000
systemctl -w net.nf_conntrack_max=300000
echo 300000 > /proc/net/nf_conntrack_max
conntrack所能追蹤的連接數量的最大值取決于/proc/sys/net/nf_conntrack_max的設定,已經追蹤到的并記錄下來的路徑位于/proc/net/nf_conntrack文件中,超時的連接將會被刪除;當模板滿載時,后續的新連接有可能會超時,解決辦法:
(1)加大nf_conntrack_max的值;
(2)降低nf_conntrack條目的超時時長;
不同協議的連接追蹤時長定義在:/proc/sys/net/netfilter/有很多timeout文件中定義;
例如:允許172.18網段訪問,本機的telnet,ssh,web服務
iptables -F 清空規則,默認均為拒絕訪問
iptables -A INPUT -s 172.18.0.0/16 -d 172.18.11.114 -p tcp -m multiport --dports 22,23,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d 172.18.0.0/16 -s 172.18.11.114 -p tcp -m multiport --sports 22,23,80 -m state --state ESTABLISHED -j ACCEPT
開放ping請求,讓別人能ping進來
iptables -A INPUT -d 172.18.11.114 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.18.11.114 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
越匹配到報文規則的越要放前面;同類規則中匹配范圍小的要放前面;
如何放行被動的ftp服務:
(1)內核加載nf_conntrack_ftp模塊;
modprobe nf_conntrack_ftp
(2)放行命令連接
iptables -A INPUT -d 原ip服務器地址 -p tcp --dport 21 -m state --state NEW,ESTABLIEHED -j ACCEPT
iptables -A OUTPUT -s 原ip服務器地址 -p tcp --sport 21 -m state --state ESTABLIEHED -j ACCEPT
(3)放行數據連接
iptables -A INPUT -d 服務器原ip地址 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 服務器原ip地址 -p tcp -m state --state ESTABLISHED -j ACCEPT
處理動作(跳轉目標)
-j targetname [per-target-optons]
簡單target:ACCEPT,DROP
拓展target:
REJECT:--reject-with type
target | |
---|---|
RETURN | 返回調用者;自定義鏈的最后一條定義 |
REDIRECT | 端口重定向 |
LOG | 日志 |
MARK | 防火墻標記 |
DNAT | 目標地址轉換 |
SNAT | 原地址轉換 |
MASQERADE | 地址偽裝 |
查看幫助文檔:man iptables-extensions
LOG:開啟內核關于匹配到的報文日志記錄規則
--log-level level
可用日志級別:emerg, alert, crit, error, warning, notice, info,debug
--log-prefix prefix 日志行前綴,最長29個字母;
說明對應的日志信息,是由誰產生的;
--log-ip-options
記錄在tcp或ip報文首部中有可變長的可選項信息;
例如:
iptables -I FORWARD 2 -s 10.0.1.0/24 -p tcp -m multiport --dports 80,22,23,21 -m state --state NEW -j LOG --log-prefix "new connctions: "
注意:target為log日志規則時,應添加在accept、drop、reject規則之前;所以先做日志,再做其它的規則;
例如:
iptables -I FORWARD 2 -s 10.0.1.0/24 -p tcp -m multiport --dports 80,22,23,21 -m state --state NEW -j LOG --log-prefix "new connctions: "
iptables -vnL
有訪問80的web服務時,可查看日志記錄;
tail /var/log/messages
RETUREN:返回調用者;隱含的;
例如:
iptables -A web -j RETURN
例如:
iptables -F
iptables -N web 創建自定義鏈
iptables -vnL
iptables -A web -s 10.0.1.0/24 -p tcp --dport 80 -j ACCEPT 添加web鏈規則,允許本地主機訪問web服務
iptables -I web 1 -m string --algo kmp --string "old" -j REJECT 插入第1條web鏈,包含了old字符串的頁面禁止訪問
只要狀態是ESTABLISHED應放行;
iptables -I web 2 -p tcp -m state --state ESTABLISHED -j ACCEPT 插入web鏈第2條,放行狀態是ESTABLISHED;
此時,內網用戶訪問web服務:不能訪問
curl httpd://172.18.11.111
是不能訪問的,因為自定義鏈不會直接生效的,只有被調用才生效;
iptables -A FORWARD -p tcp -j web
在forward鏈上調用web自定義鏈;
此時,內網用戶就能訪問web服務了;
再放行ssh服務:
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 22 -m state --state NEW -j ACCEPT 由內而外放行請求的報文,雖然沒有放行響應的報文,但是在web自定義鏈上的規則已經放行了; 此時,內網主機訪問ssh:
ssh root@172.18.11.111` 成功訪問;
在web鏈上默認的隱含了返回調用者;
顯式指明返回調用者:
iptables -A web -j RETURN
表示web鏈匹配不到就返回調用者;
REDIRECT
端口重定向,只能用在nat表上的prerouting,output鏈上,只有在入棧報文請求剛到達時,才有用,在其它場景都沒有意義;能實現指明的端口完成映射;
--to-ports port 映射的指定端口
例如:
iptables -t nat -A PREROUTING -d 172.18.11.114 -p tcp --dport 80 -j REDIRECT --to-ports 8080
例如:
編輯11.111為web服務:修改端口為8080
vim /etc/httpd/conf/httpd.conf
Listen 8080
systemctl restart httpd.service
在web服務器上添加規則:端口映射(地址轉換-->端口轉換)
iptables -t nat -A PREROUTING -d 172.18.11.114 -p tcp --dport 80 -j REDIRECT --to-ports 80
iptables -t nat -D PREROUTING 1
iptables -t nat -A PREROUTING -d 172.18.11.114 -p tcp --dport 80 -j REDIRECT --to-ports 8080
訪問瀏覽器172.18.11.111可瀏覽web服務
注意:假設啟動了2個服務ngix使用80端口,httpd使用8080,添加以上規則時,ngix就沒用了,不能對外提供服務;
MASQUERADE
僅用在POSTROUTING鏈上
使用場景:只用于動態撥號獲取ip地址場景中,替換(就無需使用)snat;事實上靜態地址時,一樣可以使用;
在ppoe撥號上網時,MASQUERADE會自動獲取外網地址,并將原地址轉換為獲取的外網地址;因為,masquerade會額外消耗資源,如果是靜態就無需使用;
例如:
在網關防火墻上設置規則:
iptables -t filter -F
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j MASQUERADE
iptables -vnL
在內網1.22測試訪問web服務11.111服務器
curl http://172.18.11.11
在11.111服務器查看日志:
tail /var/log/httpd/access_log
訪問正常;
iptables規則的保存與恢復
保存:iptables-save > /PATH/TO/SOME_RULE_FILE
重載:iptables-restore < /PATH/FROM/SOME_RULE_FILE
-n,--noflush:不清除原有規則
-t,-test:僅分析生成規則集,但不提交
規則的有效期限:
iptables命令添加的規則,手動刪除之前,生效期限為kernel的生命周期;
CentOS6
保存規則:service iptables save
或:iptables-save > /etc/sysconfig/iptables
iptables-save > /PATH/TO/SOME_RELE_FILE
保存任意位置,但是系統不會自動加載;會把文件中原有規則覆蓋;
重載規則:service iptables restart
會自動從/etc/sysconfig/iptables文件中重載規則;
配置文件:/etc/sysconfig/iptables-restore
CentOS7
iptables -S > /PATH/TO/SOME_RELE_FILE
iptables-save > /PATH/TO/SOME_RELE_FILE
例如:保存規則
iptables -S
iptables-save > /etc/sysconfig/iptables.v1
cat /etc/sysconfig/iptables.v1
例如:加載文件預存的規則
iptables-restore < /etc/sysconfig/iptables.v1
自動生效規則文件中的規則:2種方式
(1)把iptables命令放在腳本文件中,讓腳本文件開機自動運行
放在/etc/rc.d/rc.local
例如:/usr/bin/iptables.sh
(2)用規則文件保存規則,開機自動重載命令;
在/etc/rc.d/rc.local寫明:
iptables-restore < /PATH/TO/SOME_RELE_FILE
規則優化思路:使用自定義鏈管理特定應用的相關規則,模塊化管理規則
(1)優先放行雙向狀態為ESTABLISHED的報文
(2)服務于不同類別的功能的規則,匹配到報文可能性更大的放前面
(3)服務于同一類別的功能的規則,匹配到條件較嚴格的放在前面
(4)設置默認策略:白名單機制
練習
iptables -N clean_in
創建自定義鏈
iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
丟棄目標地址為全1,ping包請求;
iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
丟棄172.16網段的主機ping包;
iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
協議為tcp,狀態為new,不是tcp第一次握手都丟棄;
iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
協議為TCP標志位全部為1都丟棄;
iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
協議為TCP標志位全部為0都丟棄;
iptables -A clean_in -d 172.16.100.7 -j RETURN
目標地址為172.16.100.7就返回調用clean_in的鏈上
iptables -A INPUT -d 172.16.100.7 -j clean_in
在input鏈上目標地址為172.16.100.7就調用clean_in鏈;
iptables -A INPUT -i lo -j ACCEPT
在input鏈上放行流入本地接口的數據;
iptables -A OUTPUT -o lo -j ACCEPT
在output鏈上放行流出本地接口的數據;
iptables -A INPUT -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP
在input鏈上,tcp協議目標端口為53,113,135,137,139,445,流入eth0接口的數據都丟棄;
iptables -A INPUT -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP
在input鏈上,udp協議目標端口為53,113,135,137,139,445,流入eth0接口的數據都丟棄;
iptables -A INPUT -i eth0 -p udp --dport 1026 -j DROP
在input鏈上,udp協議目標端口為1026,流入eth0接口的數據都丟棄;
iptables -A INPUT -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP
在input鏈上,udp協議目標端口為1433,4899,流入eth0接口的數據都丟棄;
iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT
在input鏈上,協議為icmp,限制為每秒10個;
網絡防火墻實現
防火墻至少要有2個網卡,一個為內網網卡,一個接外網網卡
內網主機發報文時,經過防火墻內網卡時拆除mac封裝,先到達prerouting鏈,如果報文目標IP地址不是本機,就不會進入input鏈,經本機轉發進入到forward鏈后到達postrouting鏈通過外網卡發送出去;回應的報文進入外網網卡先到達prerouting鏈,經由forward鏈后到達postrouting通過內網卡發送給內網主機;
注意:prerouting、posting鏈等,跟網卡無關,只跟報文出入方向有關;
防火墻當做網絡防火墻時,應把規則添加forward鏈上;
內網主機之間通信時,防火墻設置是不起作用的;只能靠內網的主機防火墻發揮作用;
防火墻當做主機防火墻時,應把規則添加input和output鏈上;
盡可能控制內網主機訪問外網時,應把規則添加在forward鏈上,要考慮進、出兩個方向的規則;添加了-s或-d就有了方向性;
一般狀態是establish的都放行,只是在new在方向上限制;
如果內網服務器是對外提供服務的,對new狀態是限制由外而內,只開放對外開放的協議和端口,而由內而外的可不限制端口、協議的放行出去;
所以一般當服務器端,設置規則時,只放行(由外而內的)有限服務的端口和協議,對客戶端設置規則是通常放行所有請求,除非限制內網用戶訪問某些服務;
搭建網絡環境,防火墻連接內網、外網
虛擬機添加網卡后,識別不到,修改centos7中的網卡名稱為eth0:
添加網卡后,無法識別新網卡
centos7中網卡名修改為eth0
cd /etc/sysconfig
vim grub
在最長的那一行添加下面的句子
net.ifnames=0 biosdevname=0
grub2-mkconfig -o /boot/grub2/grub.cfg
重命名原來的網卡名字
cd /etc/sysconfig/network-scripts
mv ifcfg-enoXXXXXXXX ifcfg-eth0
修改ifcfg-eth0里邊的NAME,DEVICE的名字都為eth0
NAME=eth0
DEVICE=eth0
reboot重啟,并查看發現已經成我們想要的eth0
在centos6中,克隆虛擬機后eth0網卡無法識別問題:
解決方法:
修改/etc/udev/rules.d 下的 70-persistent-net.rules 文件,我們會發現下面兩行:
PCI device 0x1022:0x2000(pcnet32)
SUBSYSTEM=="net",DRIVERS=="?*",ATTRS{address}=="00:0c:29:4c:46:01",NAME="eth0" 這行刪除
Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rule written by anaconda) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:ad:06:2a", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
這行修改最后的eth1為eth0,然后保存退出,重啟系統就可以了。
或者你覺得上面改的比較麻煩,你可以將上面帶#的兩行都刪除,然后保存重啟電腦,讓系統全部重新獲取網卡信息。
網絡環境模型搭建完畢
內網主機:10.0.1.22/24
防火墻有2塊網卡:
內網網卡eth1:10.0.1.1/24
外網網卡eth0:172.18.11.114/16
其它外網主機:172.18.11.111
查看核心轉發功能,為0表示核心轉發是關閉的
[root@promote ~]# cat /proc/sys/net/ipv4/ip_forward
0
此時,測試從內網主機1.22 ping 防火墻外網地址11.114,且防火墻核心轉發是關閉,此時仍然能ping通,因為linux系統中同一主機的網卡之間是互通的,ip地址屬于內核不屬于網卡;只要內網主機1.22的網關指向了防火墻的1.1,那么1.1所在主機的所有地址,1.22可以ping通防火墻上的所有地址;其實這不叫轉發這是默認法則;如果1.22沒有把網關指向1.1,只能ping通1.1,ping不同11.114了;1.22是通過網關1.1轉發的;沒有網關就不能非本地通信;
如果防火墻沒有打開核心轉發,1.22不能ping通外網地址11.111;
在1.22主機ping11.111
在11.111抓包,只抓icmp的ping包
tcpdump -i eno16777736 icpm
此時ping不通,而且也抓不到icmp的包;
打開防火墻的核心轉發后,再測試是否能ping通
[root@promote ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@promote ~]# cat /proc/sys/net/ipv4/ip_forward
1
此時在11.111抓到了ping包,但在1.22顯示ping不通;
應該在11.111主機上加一條路由:route add -net 10.0.1.0/24 gw 172.18.11.114
此時,1.22主機ping通11.111主機;
演示在防火墻上添加iptables規則
在防火墻關閉轉發:iptables -P FORWARD DROP
此時,1.22主機ping不通11.111主機;
若要內網主機能ping通外網主機,當反之則不允許;
iptables -A FORWARD -s 10.0.1.0/24 -d 0/0 -p icmp --icmp-type 8 -j ACCEPT
放png包出去但沒放進返回的包
可在,外網11.111主機抓包
tcpdump -i eno16777736 -nn icmp
有1.22請求11.111,有11.111響應1.22;
也可在本地1.22主機,虛擬機按ctrl+alt+f2再打開一個控制臺嗎,抓包;
tcpdump -i eno16777736 -nn icmp
有1.22請求11.111,沒響應;
也可在防火墻主機的內網網卡、外網網卡上分別抓包;
tcpdump -i eth0 -nn icmp
收到1.22請求11.111,也收到11.113響應1.22
tcpdump -i eth1 -nn icmp
僅收到1.22請求11.111,沒響應;
打開從內網主機能ping通外網主機;
在防火墻主機只添加一條放進來外網ping包的規則;
iptables -A FORWARD -s 0/0 -d 10.0.1.0/24 -p icmp --icmp-type 0 -j ACCEPT
此時從內網主機能ping通外網主機,放開了僅內網能ping外網主機的規則,可抓包驗證;
但仍然不能從外網主機ping通內網主機;即11.111ping不通1.22;
可在防火墻主機外網網卡上抓包,能抓到進來的包;
tcpdump -i eth0 -nn icmp
如果要實現內網主機能ping外網主機互通,則還有添加2條規則,即:
放行從外到內的icmp請求類型為8的,從內到外icmp響應類型為0的即可;
使用基于狀態追蹤設定規則時,如果只允許內網ping出去,就可把之前設定的兩條規則合并;
iptables -F
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.0.1.0/24 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT
此時,內網主機1.22能ping通11.111
當外網主機11.111為web、vsftp服務器時,要允許內網主機訪問外網的服務器;
在防火墻主機設置規則:
iptables -F
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 80 -m state --state NEW -j ACCEPT 僅放行出去的請求
此時內網主機能訪問外網web服務器了
curl httpd://172.18.11.111
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 21 -m state --state NEW -j ACCEP
此時,放行的是vsftp的命令連接,響應通過上面的ESTABLISHED也沒問題,但數據連接在被動模式下,沒有放行只有在related狀態放行才行;數據連接只有第一次請求是related的,而且要識別related而不是new要先裝載iptables的模塊,即ftp連接追蹤的模塊;
裝載iptables的追蹤ftp的連接追蹤模塊
modprobe nf_conntrack_ftp
在被動模式下,服務器發請求,第一次請求為related的,所以是從外網到內網的為related;
替換第一條規則:iptables -R FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
此時在內網主機測試服務ftp服務
lftp 172.18.11.111
能訪問
在centos7系統上保存規則:
iptables-save > /etc/sysconfig/iptables.v2
重啟后規則消失,要想開機自動運行,添加:
vim /etc/rc.d/rc.local
iptables-restore < /etc/sysconfig/iptables.v2
在centos6系統上保存規則:service iptables save
要想開機自動運行:chkconfig iptables on
在centos7系統上用的是firewalld服務,要手動控制firewalld;
在實際中,防火墻可能不止有2個網卡,甚至更多;
一般來講,本地用戶允許new狀態的出去訪問互聯網,而本地服務器向外提供服務,則不允許new狀態出去,除非是DNS服務器或服務器使用yum源;
NAT 防火墻
NAT:Network Address Translation 只有啟用NAT功能必須啟用鏈接追蹤機制contract;
最初是為了安全隱藏ip地址,后來被用來ipv4地址不夠用時引用了NAT;
SNAT:source NAT
修改ip報文中的源IP地址;只能用在POSTROUTING、INPUT鏈上、自定義鏈(但也只能被POSTROUTING、INPUT鏈調用)上;
使用場景:讓本地網絡中的主機可使用統一地址與外部通信,從而實現地址偽裝;即轉換客戶端地址,一般代理本地私網主機到互聯網;
請求:由內網主機發起,修改源IP,如果修改則由管理員定義;
響應:修改目標IP,由nat自動根據會話表中追蹤機制實現相應修改;
原地址轉換:
本地內網用戶訪問外網服務器時,在本地網關上進行原地址轉換,把內網用戶請求報文中原地址轉換為網關的公網地址與外界通信,外網服務器響應內網用戶時,進行目標地址轉換,只不過響應報文中不需要用戶參與,網關根據追蹤會話表自動完成目標地址轉換,轉發給內網用戶;
DNAT:destinaton NAT
修改ip報文中的目標IP地址;僅用在PREROUTING 和 OUTPUT鏈 上;
使用場景:讓本地網絡中的服務器使用統一的地址向外提供服務,但隱藏了自己的真實地址,還可實現負載均衡;即轉換服務器端地址,把本地私網主機放在互聯網上當服務器;
請求:由外網主機發起,修改其目標地址,由管理員定義;
響應:修改原地址,但有nat自動根據會話表中的追蹤機制實現對應修改;
目標地址轉換:
外網用戶訪問本地內網中向外提供服務的主機時,本地網關會進行目標地址轉換,把目標地址改為內網的服務器地址,內網服務器響應外網用戶時,在本地網關上完成源地址轉換,只不過響應報文中不需要用戶參與,根據追蹤會話表自動完成源地址轉換;
本地為客戶端使用原地址轉換;
本地為服務器使用目標地址轉換;
PNAT:port NAT
實現端口轉換,而REDIRECT能專門實現端口轉換機制,而DNAT完成目標端口轉換,響應報文時能自動進行源端口轉換;
- SNAT:本地是客戶端,遠程是服務器,在網關上應該發生在(路由后)POSTROUTING,即離開本機時、INPUT鏈;
- DNAT:本地是服務器,遠程是客戶端,在網關上應該發生在(路由前)PREROUTING鏈,即進入本機時;
SNAT實現
只能用在postrouting和input鏈上**
--to-source [ipaddr[-paddr]] 指明原地址、源端口(但源端口一般為隨機端口),可指定地址范圍;
--random 隨機分配端口;
但在centos6系統上較老版本內核和較老版本的iptables上SNAT不能用在input鏈上;
所以centos6系統上,nat表只包含3個鏈:OUTPUT、PREROUTING、POSTROUTING;
而centos7系統上,nat表包含4個鏈:INPUT、OUTPUT、PREROUTING、POSTROUTING;
在內網1.22主機請求外網web服務
curl http://172.18.11.111
可訪問外網web訪問
可在外網web主機查看日志
tail /var/log/httpd/message
可看到內網請求web時,源地址為1.22,目標地址為11.111;mac地址會不斷變化的;
為內網用戶訪問外網在防火墻設置SNAT:
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j SNAT --to-source 172.18.11.114
如果防火墻有多個外網地址可設為地址范圍;如下:
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j SNAT --to-source 172.18.11.114-172.18.11.117
iptables -t nat -vnL
iptables -vnL
在內網1.22上ping外網172.18.11.111
可在172.18.11.111抓包:
tcpdump -i eno16777736 -nn icmp
IP 172.18.11.114 > 172.18.11.111: ICMP echo request
IP 172.18.11.111 > 172.18.11.114: ICMP echo reply
再打開內網10.0.1.22的一個控制臺(crtl+alt+f2)抓包:
tcpdump -i eth0 -nn icmp
IP 10.0.1.22 > 172.18.11.111: ICMP echo request
IP 172.18.11.111 > 10.0.1.22: ICMP echo reply
還可在網關防火墻抓包:
外網網卡抓包:
tcpdump -i eth0 -nn icmp
IP 172.18.11.114 > 172.18.11.111: ICMP echo request
IP 172.18.11.111 > 172.18.11.114: ICMP echo reply
內網網卡抓包:
tcpdump -i eth1 -nn icmp
IP 10.0.1.22 > 172.18.11.111: ICMP echo request
IP 172.18.11.111 > 10.0.1.22: ICMP echo reply
還可在內網主機測試80端口:
curl http://172.18.11.111
在11.111服務器上查看日志:
tail /var/log/httpd/access_log
172.18.11.114 - - [28/Apr/2016:19:13:03 +0800] "GET / HTTP/1.1" 200 36 "-" "curl/7.29.0"
要禁止內網用戶訪問ssh服務,22端口:
在網關防火墻設置規則:
iptables -t filter -A FORWARD -s 10.0.1.0/24 -p tcp --dport 22 -j REJECT
此時在內網主機連接ssh服務被拒絕訪問,但其它服務扔可訪問;
ssh root@172.18.11.111
如果規則使用drop則不會立即顯示拒絕,而會滯留在連接狀態;
DNAT實現
僅用于nat表的PREOUTING、OUTPUT鏈上或用在自定義鏈上(但也只能被POSTROUTING、INPUT鏈調用);
--to-destination [ipaddr[-ipaddr]][:port[-port]] 指明目標地址、目標端口,也可是范圍;
目標端口轉換時,做端口映射是很常見的:
如果內網1.22為向外提供服務,外網11.111為客戶端要訪問1.22:
在網關防火墻設置規則:
先確保網關防火墻沒有監聽80端口;但可向外宣稱提供80服務,實際是由內網1.22提供服務;
ss -tnl
iptables -t nat -F POSTROUTING 指明清除nat表上的postrouting鏈上的規則;
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.11.114 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.22
表示只有目標地址11.114、目標端口為80時,轉換目標地址為10.0.1.22目的端口沒改;
iptables -t nat -vnL
使用外網主機訪問網關防火墻172.18.11.114:
可在瀏覽器輸入172.18.11.114
顯示成功;
內網主機提供的服務端口跟網關防火墻聲稱的提供服務的端口不一樣時:做端口映射
比如外網用戶訪問的是80,但可以在內網服務主機使用其它端口提供服務;
在1.22主機編輯httpd的配置文件,修改監聽端口為8090:
vim /etc/httpd/conf/httpd.conf
Listen 8090按需
在網關防火墻設置規則:
iptables -t nat -F
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.11.114 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.22:8090
iptables -t nat -vnL
此時,使用外網主機訪問網關防火墻11.114:
可在瀏覽器輸入172.18.11.114
顯示成功;
在DNAT,內網服務器看到的原地址沒變仍為外網主機11.111;
可驗證,在11.111主機:
curl http://172.18.11.114
在內網服務器1.22查看web日志:
tail -1 /var/log/httpd/access_log
tcpdump -i eth0 -nn tcp port 8090
在外網主機11.111上訪問網關防火墻11.114的ssh服務,端口還仍然是網關防火墻自己;
ssh root@172.18.11.114
在防網關火墻添加規則:
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.11.114 -p tcp --dport 22 -j DNAT --to-destination 10.0.1.22
此時,在外網主機11.111上訪問網關防火墻11.114的ssh服務,被轉給了內網10.22主機;
ssh root@172.18.11.114
這樣,內網主機服務可隨意指定端口,對外發布服務;
在防網關火墻添加規則:
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.11.114 -p tcp --dport 0 -j DNAT --to-destination 10.0.1.22
此時,把目的端口設為0,外網11.111再訪問11.114的web服務或ssh服務都被拒絕;在特殊場景中不會是此效果,例如,用到負載均衡器的lvs場景時,會把11.114上的所有端口,統統轉到內網主機服務器上;