iptables系列之nat及其過濾功能

NAT:Network Address Transfer,網絡地址轉換,將其中一塊網卡所連接網絡中主機的地址轉換爲另外一個網絡中主機的地址。路由也可以實現將一個網絡中的報文轉換到另一個網絡中去
應用場景爲:
SNAT:源地址轉換,轉換IP報文中的源IP地址
DNAT:目標地址轉換,轉換IP報文中的目標IP地址
下面介紹一下通過路由來實現各主機之間如何實現報文轉發的
clip_image002
 
實例剖析:
準備三臺虛擬機,其中一臺主機假設爲C主機(路由),有兩塊網卡,第一塊網卡設置爲橋接,第二塊設置爲host-only
其中一臺主機假設爲A主機,網卡設置爲橋接,另一臺主機假設爲B主機,網卡設置爲host-only
C主機兩塊網卡的IP分別爲:172.16.50.10;192.168.10.1
B主機IP爲:172.16.50.5 網關:172.16.50.10
A主機IP爲:192.168.10.2 網關:192.168.10.1
1、首先在B主機上能ping通自己的網關192.168.10.1
clip_image004
2、打開C主機的數據轉發功能(修改配置文件,可以永久有效)
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p 直接生效
現在A主機可以ping通B主機
clip_image006
B主機可以ping通A主機
clip_image008
3、此時我們可以發現即使沒用到地址轉換也可以實現數據轉發,下面我們用圖來分析一下
clip_image010
4、源地址轉換SNAT--》(應該在路由之後實現,也即是上圖上進入2號端口之前)如果A主機不通過路由就可以和B主機通信,該如何實現
可以通過抓包來驗證源Ip(用A主機pingB主機)
# tcpdump -i eth0 -nn -X icmp
clip_image012
因爲沒有做地址轉換,由A主機出發又返回給了A
需要在C主機上配置NAT條目,實現源地址轉換(SNAT)
# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.50.10
clip_image014
用A主機pingB主機,查看源地址(會發現源地址是50.10)
clip_image016
此時會發現B主機即使沒有設置網關也能與A主機通信
刪除B主機的網關
clip_image018
用B主機pingA主機,並在B主機上抓包
clip_image020
這就是源地址轉換(注意此時B主機是不能pingA主機的,因爲他沒有網關,只能發不能收)
5、對於C主機而言,如果他不允許A主機pingB主機,但可以進行其他通信
添加模塊:切記
# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
在C主機上添加如下規則
# iptables -P FORWARD DROP(先添加FORWARD默認規則爲DROP)
# iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT(放行已建立的鏈接)
# iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 -m state --state NEW -j ACCEPT(放行80端口的新連接)
# iptables -A FORWARD -s 192.168.10.0/24 -p icmp -j REJECT
A主機pingB主機
clip_image022
但並不影響其他功能的實現(web、ftp等功能)
首先需要在B主機上安裝httpd包和vsftpd包
[root@localhost ~]# yum install -y httpd vsftpd
[root@localhost ~]# echo hello uaser > /var/www/html/index.html(主頁面)
[root@localhost ~]# service httpd start(啓動服務)
在A主機上訪問B主機的web服務器
clip_image024
6、如果放行ping功能
在C主機添加如下規則
# iptables -A FORWARD -s 192.168.10.0/24 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT(只允許內網的新請求)
A主機pingB主機
clip_image026
內網可以請求別人,外網可以回覆別人,但外網不能請求進來(防火牆不允許外網訪問內網)
如果給A添加網關,看能否ping通B主機
# route add default gw 172.16.50.10(添加網關)
clip_image028
# service vsftpd start 啓動ftp服務器
在C主機上添加規則:
# iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 21 -m state --state NEW -j ACCEPT(放行21號端口
修改FORWARD默認規則爲:
# iptables -R FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
B主機訪問A主機的ftp服務
clip_image030
7、DNAT目標地址轉換,應該在路由之前轉換,即過程2的時候就要轉換
DNAT地址轉換圖
clip_image032
現在我們將A主機與B主機做一下調整
把A主機的設置爲橋接,B主機的設置爲host-only
A主機的IP是172.16.50.5 網關172.16.50.10
B主機的Ip地址是192.168.10.2 網關:192.168.10.1
7.1、將源地址轉換刪除並清空
# iptables -t nat -F
# iptables -F
# iptables -P FORWARD ACCEPT
7.2、AB主機互ping能否成功
A ping B
clip_image034
B ping A
clip_image036
7.3、A主機訪問B主機的web服務器
http://192.168.10.2
clip_image038
訪問ftp
clip_image040
7.4、如果B主機沒有指定網關,就不能訪問A主機,需要在C主機上定義規則
# iptables -t nat -A PREROUTING -d 172.16.50.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.2
7.5、如果我們的虛擬主機監聽的是8080端口,也可以修改爲8080端口
PNAT:端口映射Port NAT
# iptables -t nat -R PREROUTING 1 -d 172.16.50.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.2:8080
8、過濾功能
在C主機上添加規則(FORWARD鏈上添加)
假設不能訪問h7n9的字符串
# echo h7n9 hello > /var/www/html/index.html 新建網頁
# iptables -A FORWARD -m string --algo kmp --string "h7n9" -j DROP
此時在訪問http://172.16.50.10,就不能訪問了
clip_image042
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章