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

使用iptables將內網ftp服務映射到其餘內網服務器上
iptables通常的只須要關注兩個表,一個是nat表,一個是filter表,其餘表暫時用不到,而後nat表裏有三個鏈,filter表裏有三個鏈,總結兩個表,五個鏈linux

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

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

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

下面實驗下看看:
環境說明: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.service3d

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

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

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服務映射到其餘內網服務器上

相關文章
相關標籤/搜索