#1 2009-11-25 13:00:12
WL-500GP防火墙的问题
目前WL-500GP防火墙/usr/local/sbin/post-firewall的配置如下:
#!/bin/sh
iptables -D INPUT -j DROP
# Rtorrent
iptables -A INPUT -p tcp --dport 6891:6900 -j ACCEPT
iptables -A INPUT -p udp --dport 6890 -j ACCEPT
iptables -A INPUT -j DROP
# telnet
iptables -A INPUT -p tcp --dport 23 -j ACCEPT
# Port 21 used for VSFTP server
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# Port 22 used for SSH server
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -i $1 -p tcp --dport 22 -j DNAT --to-destination $4:22
iptables -A INPUT -j DROP
故障现象是:外网无法连接至WL-500GP,且执行到
--------------------------------------------------
# Port 22 used for SSH server
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -i $1 -p tcp --dport 22 -j DNAT --to-destination $4:22
iptables -A INPUT -j DROP
--------------------------------------------------
总会出现警告,警告内容如下:
Warning: wierd character in interface `-p' (No aliases, :, ! or *).
Bad argument `tcp'
Try `iptables -h' or 'iptables --help' for more information.
最後修改: leon.z (2009-11-25 13:01:01)
離線
#3 2009-11-25 18:55:33
Re: WL-500GP防火墙的问题
我是用openwrt 配置的
iptables -A INPUT -j DROP <-- 這句應該要放在表的最前面
iptables -D INPUT -j DROP <-- -D的用法沒看過,不知道
iptables -A INPUT -p tcp --dport 22 -j ACCEPT <-- 這句是OK的
iptables -A INPUT -p udp --dport 22 -j ACCEPT <-- 我還有加這一句
iptables -t nat -A PREROUTING -i $1 -p tcp --dport 22 -j DNAT --to-destination $4:22 <-- 這是多餘的
應該就這樣了
試試吧
離線
#4 2009-11-25 22:18:33
Re: WL-500GP防火墙的问题
我是参照《Abin's Tech Note: SSH 的設定和啟用》,
SSH 的設定和啟用
之前都是用 telnet 連進 router 做設定,但這是一種很不安全的連線方式,容易被監聽竊取帳號密碼,所以我們要另外跑一個安全的連線服務:SSH (Secure Shell)。Windows PC 端的連線程式 (SSH client) 可以找這裡 ,或是 piaip 開發中文版的 PieTTY。
其實在 Oleg 的韌體裡已經有 SSH Server 在裡面,程式名稱叫 dropbear (丟熊?),要啟動該服務要做的事情有三件:1. 設定 dropbear 的 SSH 連線金鑰,2. 要求每次開機這個服務自動啟動,3.在防火牆上打洞讓你可以從外面連進來。接下來我們根據以上的步驟依序來進行設定。
1. 金鑰設定
首先,我們要先建立存放金鑰的目錄。Oleg 的韌體要求預設目錄在 /usr/local/etc/dropbear,所以我們手動建立目錄:
mkdir -p /usr/local/etc/dropbear
接下來要求產生 key pair (DSS & RSA),要多花一點點時間等待:
dropbearkey -t dss -f /usr/local/etc/dropbear/dropbear_dss_host_key
dropbearkey -t rsa -f /usr/local/etc/dropbear/dropbear_rsa_host_key
2. 開機自動啟動
還記得上一篇我們為了一開機時就自動 mount 磁碟機所產生的 /usr/local/sbin/post-boot 嗎?要 SSH 一開機啟動只要在這個檔案裡加兩行就行了。先用 nano 開啟這個檔案以便編輯:
/opt/bin/nano /usr/local/sbin/post-boot
然後在最後面加入下面兩行:
# Start SSH daemon
dropbear
ctrl+o 存檔然後 ctrl+x 離開就行了。
3. 防火牆設定
如果你有固定 IP 或網址,需要從外面連你的 router 進行設定才需要進行這個步驟,如果不開防火牆設定,你的 SSH 服務就只能在家裡面使用(外面連不進來)。同樣的還記得上一篇有提到,我們在建立 post-boot 時順道做了一個 post-firewall?這時候就派上用場了。同樣地用 nano 開啟檔案:
/opt/bin/nano /usr/local/sbin/post-firewall
然後加入下面的內容在檔案裡(裡面應該是空白的):
#!/bin/sh
iptables -D INPUT -j DROP
# Port 22 used for SSH server
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -i $1 -p tcp --dport 22 -j DNAT --to-destination $4:22
iptables -A INPUT -j DROP
上面幾行的意思,就是要機器對外的 Port 22 打開,連線進來的時候轉向到機器本機的 Port 22。一樣使用 ctrl+o 存檔然後 ctrl+x 離開就行了。
別忘了,因為我們是動到 /usr 下面的檔案,都是存在 flash 裡面的,如果沒有去 save & commit 結果,重新開機就會消失喔!所以還是要要求寫入 flash:
flashfs save
flashfs commit
flashfs enable
完成之後就可以重新開機 (reboot) ,然後就用 SSH Client 程式從家裡或是外面連進來試試看能不能成功囉!(重開完,用 ps 這個命令應該會看到有 dropbear 這個 process 在跑才是)
我是照着这样做的
離線
#5 2009-11-25 22:52:22
Re: WL-500GP防火墙的问题
我刚才发现重启WL-500GP后,外网仍然无法telnet至WL-500GP,但刚才执行了iptables -D INPUT -j DROP,结果能PING通WL-500GP,也能telnet至WL-500GP,但是/usr/local/sbin/post-firewall中已经配置了#!/bin/sh
iptables -D INPUT -j DROP
为什么会这么样?还有一点很费解,在Firewall设置中Enable Firewall?到底是设置为yes执行/usr/local/sbin/post-firewall,还是NO执行 执行/usr/local/sbin/post-firewall,请各位同志给予解答,不胜感激。
離線
#6 2009-11-25 23:37:07
Re: WL-500GP防火墙的问题
leon.z 提到:
我刚才发现重启WL-500GP后,外网仍然无法telnet至WL-500GP,但刚才执行了iptables -D INPUT -j DROP,结果能PING通WL-500GP,也能telnet至WL-500GP,但是/usr/local/sbin/post-firewall中已经配置了#!/bin/sh
iptables -D INPUT -j DROP
为什么会这么样?还有一点很费解,在Firewall设置中Enable Firewall?到底是设置为yes执行/usr/local/sbin/post-firewall,还是NO执行 执行/usr/local/sbin/post-firewall,请各位同志给予解答,不胜感激。
https://digiland.tw/uploads/293_firewall.jpg
1.請問有做過 chmod +x /usr/local/sbin/post-firewall 嗎?
2.關於系統設定頁中 firewall 選項,我個人認為應該設為 No 才對,
這樣自行設定的 /usr/local/sbin/post-firewall 才有可能生效, 供您參考.
離線
#7 2009-11-25 23:38:53
Re: WL-500GP防火墙的问题
iptables 的命令執行順序是由上往下直行
iptables -A INPUT -j DROP
這一句放在最下面
等於就是打洞後再全部關起來
打開iptables 的port 可以說是打洞原理
所以要先關起來 再打洞
除非他有像ubuntu 的iptables 那麼聰明的規劃
不然放在下面,想進去就只能撞牆
iptables -D INPUT -j DROP
這行是刪除INPUT鏈的意思
你改的那個scripts 應該是關閉防火牆的腳本
所以你找錯了
你要改的應該是啟動防火牆的腳本才對
所以你選啟動或是關閉都是啟動
俗語說
對等於對 錯也等於對
啟動等於啟動 停用也等於啟動
所以你改錯檔案了
離線