2016-02-11 69 views
-1

我在debian 7機器上安裝了一個小型web服務器,並添加了一個防火牆,以便它能正常工作。這是規則。Debian 7 DNS iptables

#!/bin/sh 

echo "Stopping firewall and allowing everyone..." 
ipt="/sbin/iptables" 
## Failsafe - die if /sbin/iptables not found 
[ ! -x "$ipt" ] && { echo "$0: \"${ipt}\" command not found."; exit 1; } 

$ipt -P INPUT ACCEPT 
$ipt -P FORWARD ACCEPT 
$ipt -P OUTPUT ACCEPT 
$ipt -F 
$ipt -X 
$ipt -t nat -F 
$ipt -t nat -X 
$ipt -t mangle -F 
$ipt -t mangle -X 
$ipt -t raw -F 
$ipt -t raw -X 

echo "Adding rules so that only SFTP,SSH,HTTP and DNS are allowed..." 
$ipt -A INPUT -p tcp -m tcp -m multiport --dports 21,22,80,443 -j ACCEPT 
$ipt -A INPUT -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED 
$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
$ipt -A INPUT -p udp --sport 53 -j ACCEPT 
$ipt -A INPUT -p tcp --sport 53 -j ACCEPT 
$ipt -A INPUT -i lo -p all -j ACCEPT 
$ipt -A INPUT -j DROP 

$ipt -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
$ipt -A OUTPUT -p tcp --sport 22 -j ACCEPT 
$ipt -A OUTPUT -p udp --dport 53 -j ACCEPT 
$ipt -A OUTPUT -p tcp --dport 53 -j ACCEPT 
$ipt -A OUTPUT -o lo -p all -j ACCEPT 
$ipt -A OUTPUT -j DROP 

$ipt -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 
$ipt -A FORWARD -j DROP 

這適用於SFTP,SSH,HTTP和HTTPS。任何想法爲什麼DNS不工作?我試着在網絡上許多更復雜的解決方案,但沒有工作......

sudo iptables -A OUTPUT -p udp --sport 1024:65535 -d 213.186.33.99 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT 
sudo echo -n "hi" > /dev/udp/213.186.33.99/53 
echo: write error: Operation not permitted 

任何幫助表示讚賞:)

+0

究竟是什麼創造'的/ dev/udp'樹?這在我的Ubuntu機器上不存在。 –

+0

我認爲bash正在創建樹,因爲我通過互聯網閱讀,但我必須說不太確定 – Ottunger

回答

0

我覺得你的規則是罰款:

# iptables -A OUTPUT -p udp --sport 1024:65535 -d 127.0.0.1 --dport 55 -m state --state NEW,ESTABLISHED -j ACCEPT 
# iptables -A OUTPUT -p udp --dport 55 -j DROP 
# iptables -nL OUTPUT 
Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination 
ACCEPT  udp -- 0.0.0.0/0   127.0.0.1   udp spts:1024:65535 dpt:55 state NEW,ESTABLISHED 
DROP  udp -- 0.0.0.0/0   0.0.0.0/0   udp dpt:55 
# nc -u -l 127.0.0.1 55 
hi 
^C 
# iptables -vnL OUTPUT 
Chain OUTPUT (policy ACCEPT 169 packets, 63116 bytes) 
pkts bytes target  prot opt in  out  source    destination 
    1 31 ACCEPT  udp -- *  *  0.0.0.0/0   127.0.0.1   udp spts:1024:65535 dpt:55 state NEW,ESTABLISHED 
    0  0 DROP  udp -- *  *  0.0.0.0/0   0.0.0.0/0   udp dpt:55 

嘗試完成測試再次與netcat,nc(1),而不是bash。

+0

無法在我身邊工作。其實我可以很容易地知道解決方案是否有效,因爲我的目標是啓用DNS,並ping google.com失敗 – Ottunger

+0

您是否可以像我演示的那樣使用127.0.0.1? – dancancode

+0

是的,規則允許所有的東西從回送允許它的工作,但它並不是使它的工作原理 – Ottunger

0

使用

終於解決了
$ipt -A INPUT -p tcp -m tcp -m multiport --dports 21,22,80,443 -j ACCEPT 
$ipt -A INPUT -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED 
$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
$ipt -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT 
$ipt -A INPUT -p tcp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT 
$ipt -A INPUT -i lo -p all -j ACCEPT 
$ipt -A INPUT -j DROP 

$ipt -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
$ipt -A OUTPUT -p tcp --sport 22 -j ACCEPT 
$ipt -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT 
$ipt -A OUTPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT 
$ipt -A OUTPUT -o lo -p all -j ACCEPT 
$ipt -A OUTPUT -j DROP 

不知道爲什麼,但嗯,感謝反正