使用iptables將內網ftp服務映射到其他內網服務器上

使用iptables將內網ftp服務映射到其他內網服務器上
iptables一般的只需要關注兩個表,一個是nat表,一個是filter表,其他表暫時用不到,然後nat表裏有三個鏈,filter表裏有三個鏈,總結兩個表,五個鏈

常見封包流程:
使用iptables將內網ftp服務映射到其他內網服務器上
入站數據流向:數據包到達防火牆後首先被PREROUTING鏈處理(是否修改數據包地址等),然後進行路由選擇(判斷數據包發往何處),如果數據包的目標地址是防火牆本機(如:Internet用戶訪問網關的Web服務端口),那麼內核將其傳遞給INPUT鏈進行處理(決定是否允許通過等)。

轉發數據流向:來自外界的數據包到達防火牆後首先被PREROUTTING鏈處理,然後再進行路由選擇;如果數據包的目標地址是其他的外部地址(如局域網用戶通過網關訪問QQ服務器),則內核將其傳遞給FORWARD鏈進行處理(允許轉發,攔截,丟棄),最後交給POSTROUTING鏈(是否修改數據包的地址等)進行處理。

出站數據流向:防火牆本機向外部地址發送的數據包(如在防火牆主機中測試公網DNS服務時),首先被OUTPUT鏈處理,然後進行路由選擇,再交給POSTROUTING鏈(是否修改數據包的地址等)進行處理。

下面實驗下看看:
環境說明:vmware下兩臺虛擬機,虛擬機中的網關地址爲192.168.255.2,宿主機的vm8網卡地址爲192.168.255.1
192.168.255.129上搭建了ftp服務,被動模式,21爲控制端口,1023至65535隨機出現數據端口
192.168.255.131作爲NAT服務器
目的將129的ftp服務其映射到192.168.255.131上的指定端口
準備工作,使129的網關地址爲131
刪除默認網關地址 : route delete default gw 網關ip(我這裏是192.168.255.2)
新增默認網關地址: route add default gw 192.168.255.131

1.131要做的工作:去掉firewalld服務,關閉selinux,啓用iptables服務,129無所謂,關閉firewalld和selinux就行了
systemctl stop firewald.service && sudo systemctl disable firewald.service
yum install iptables-services iptables-devel -y
systemctl enable iptables.service && sudo systemctl start iptables.service

2.開啓131的網卡轉發功能
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p

3.131上設置允許255過來的網段進行地址僞裝,也就是129到達之後,可以用131爲源地址進行"外網”的訪問,(必須要這條配置,沒有這條配置將源129改爲131,客戶端收到包之後,直接將包丟棄)
iptables -t nat -A POSTROUTING -s 192.168.255.0/24 -j MASQUERADE

4.131上設置DNAT,將去往166端口的請求轉發到129的21端口,131上可以不用開166端口,他自己會轉發,理論上166端口的包到達pre鏈就直接轉給了129的21端口,根本沒有到達131自己的INPUT鏈,所以不需要放行131INPUT鏈的166端口
iptables -t nat -I PREROUTING -p tcp -d 192.168.255.131 --dport 166 -j DNAT --to 192.168.255.129:21

5.131上開啓ftp內核模塊追蹤相關數據端口
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
lsmod | grep ftp 有東西表示成功

6.接下來訪問測試看看?成功了
使用iptables將內網ftp服務映射到其他內網服務器上

7.通信詳細流程(我想了好久,只有以下這種說法能說通)
第一個階段:公網客戶端1.3去往255.131:166,查找自身路由,將包發送給255.1,然後再由255.1轉發給255.131:166,131發現PREROUTING鏈具有規則,於是將目的地址131:166轉換成129:21端口(DNAT),經過FORWARD鏈(默認允許通過),經過POSTROUTING鏈,將源IP修改爲192.168.255.131(SNAT)。發往129.
第二個階段:129處理完封包請求,將包回傳給131。此時源IP爲192.168.255.129,目的IP爲:192.168.255.131.
第三階段:131上收到此包請求,經由PREROUTING鏈(沒有匹配),發現目的IP是本機的,再交給INPUT鏈,再交給上層應用,發現有客戶端正在訪問該地址,於是將目的地址改爲客戶端IP,再經過NAT的OUTPUT鏈(允許通過),再經過filter表的OUTPUT鏈(通過),通過POSTROUTING鏈,將源IP192.168.255.129修改爲192.168.255.131(SNAT),將包回傳給255.1.最終到達客戶端1.3

8.一些實驗數據
A.我在131上配置PREROUTING鏈,宿主機上訪問192.168.255.131:166,129上沒有任何數據過來
使用iptables將內網ftp服務映射到其他內網服務器上

B.繼續在131上增加配置POSTROUTING鏈,宿主機上再次訪問,129上有數據了,這次我們加上wireshark一起看,131到達129上,但是129將數據返回給了131,認爲源IP是255網段,POSTROUTING鏈生效,將源IP129修改爲131,又返回給了255.1(這裏宿主機和虛擬機是一個網段,即192.168.255.0/24,將客戶端看成了192.168.255.1了,所以纔會出現這種情況,而且最後還可以成功訪問192.168.255.131:166)。
使用iptables將內網ftp服務映射到其他內網服務器上

使用iptables將內網ftp服務映射到其他內網服務器上
使用iptables將內網ftp服務映射到其他內網服務器上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章