轉自 http://rainbird.blog.51cto.com/211214/394403
ufw是ubuntu下默認自帶的一個超級好用的防火牆.有了它以後,你可以輕鬆配置出來很強悍的防火牆,而不用再記複雜的iptables語法(當然了 它只是個簡化命令,底層依然是調用的iptables.).它的語法雖然簡單易用,但是筆者在用它配置nat映射的時候,卻發現沒有相關的語法.網上搜索 竟也沒有相關的中文資料.對比官方文檔,幾經摸索終於弄明白了ufw怎麼配置nat不敢獨享,特記錄如下:
1.修改ufw文件,允許接收轉發的包
vi /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
2.修改sysctl.conf啓用內核轉發(取消註釋)
vi /etc/ufw/sysctl.conf
net/ipv4/ip_forward=1
3.修改before.rules,添加相應的nat配置,直接添加到文件末尾的COMMIT下面就可以了.
vi /etc/ufw/before.rules
*nat
:PREROUTING - [0:0]
:POSTROUTING - [0:0]
-A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-destination 192.168.1.100:22
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
COMMIT
這個地方要注意的就是必需同時添加PREROUTING和POSTROUTING.這也是通過ufw配置nat時的難點所在!筆者很長一段時間都浪費在反 復修改PREROUTING上.後來仔細一想,有進來的包也必需有出去的包nat才能成行吧,於是試着添加POSTROUTING,結果就通了!這個地方 還有一點應該就是rules文件的語法吧.
*nat
:PREROUTING - [0:0]
:POSTROUTING - [0:0]
#這個地方加自定義語句
COMMIT
之前也是很長一段時間,都在原有的COMMIT里加東西,測試,也是浪費了挺長的時間纔看明白,語法.
4.重啓ufw
ufw disable&&ufw enable or ufw reload
順路提醒一下,如果是遠程連接進去配置ufw會提示:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
所以如果你之前沒有允許ssh的連接,不建議遠程調整防火牆的(把自己攔外面了,可沒人管喲~).
5.查看nat映射(還是用的iptables,ufw裏看不到)
root@localhost:/etc/ufw# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:22 to:192.168.1.100:22
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- localhost/24 anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
這裏要注意的地方就是手動添加的nat,在重啓ufw時,不會自動清理掉,所以每次重啓ufw前,你會要手動清除nat映射:iptables -F -t nat.
root@localhost:/etc/ufw# ufw disable
Firewall stopped and disabled on system startup
root@localhost:/etc/ufw# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
root@localhost:/etc/ufw# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:22 to:192.168.1.100:22
DNAT tcp -- anywhere anywhere tcp dpt:22 to:192.168.1.100:22
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- localhost/24 anywhere
MASQUERADE all -- localhost/24 anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
就這麼多了,ufw配置nat,你會了嗎?
本文出自 “rainbird” 博客,請務必保留此出處http://rainbird.blog.51cto.com/211214/394403