使用iptables將內網ftp服務映射到其他內網服務器上
iptables一般的只需要關註兩個表,一個是nat表,一個是filter表,其他表暫時用不到,然後nat表裏有三個鏈,filter表裏有三個鏈,總結兩個表,五個鏈
入站數據流向:數據包到達防火墻後首先被PREROUTING鏈處理(是否修改數據包地址等),然後進行路由選擇(判斷數據包發往何處),如果數據包的目標地址是防火墻本機(如:Internet用戶訪問網關的Web服務端口),那麽內核將其傳遞給INPUT鏈進行處理(決定是否允許通過等)。
轉發數據流向:來自外界的數據包到達防火墻後首先被PREROUTTING鏈處理,然後再進行路由選擇;如果數據包的目標地址是其他的外部地址(如局域網用戶通過網關訪問QQ服務器),則內核將其傳遞給FORWARD鏈進行處理(允許轉發,攔截,丟棄),最後交給POSTROUTING鏈(是否修改數據包的地址等)進行處理。
出站數據流向:防火墻本機向外部地址發送的數據包(如在防火墻主機中測試公網DNS服務時),首先被OUTPUT鏈處理,然後進行路由選擇,再交給POSTROUTING鏈(是否修改數據包的地址等)進行處理。
下面實驗下看看:
環境說明:vmware下兩臺虛擬機,
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)
1.首先確保一點,192.168.255.129的網關地址為192.168.255.131,否則129有多個出口,二者無法關聯映射
131要做的工作:去掉firewalld服務,關閉selinux,啟用iptables服務,129無所謂,關閉firewalld和selinux就行了
systemctl stop firewald.service && sudo systemctl disable firewald.service
yum install iptables-services iptables-devel -y
2.開啟131的網卡轉發功能
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p
3.131上設置允許255過來的網段進行地址偽裝,也就是129到達之後,可以用131為源地址進行"外網”的訪問,(要不要這條配置無所謂,只是為了讓129可以上外網)
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.接下來訪問測試看看?成功了
7.通信詳細流程
客戶端訪問192.168.255.131:166,這時候先經過131的prerouting鏈,判斷是DNAT規則,將目的地址修改為192.168.255.129:21,經由路由選擇,判斷不是進入本機的數據包,而是轉發包,傳遞給forward鏈進行處理(這裏沒有規則,默認許可),經由postrouting鏈(這裏源ip是客戶端ip仍舊沒變,只允許255網段的修改源ip),最後轉發到129,129處理結束之後(沒開iptables),源ip為129,目的ip為客戶端ip,判斷目的ip不是跟自己一個網段,交給網關地址,129的回包直接到達131,131上經由PREROUTING鏈(這裏直接通過),根據路由選擇,判斷不是到本機的,內核將其傳遞給FORWARD鏈進行處理(默認允許),再經由POSTROUTING鏈將源IP也就是129,修改為131的外網口地址(如果有外網口的話,這裏就是131,通過iptables可以指定,如果是外網口就必須要指定SNAT,如果像這裏,可以不用指定SNAT),最後源ip是131,目的地址客戶端ip,返回給客戶端。
使用iptables將內網ftp服務映射到其他內網服務器上