Iptables 阻止传入流量允许传出

Iptables 阻止传入流量允许传出

我在正确配置 iptables 时遇到了一些麻烦。我想阻止除 SSH 之外的所有传入流量,并允许任何传出流量。我执行了以下步骤。

#!/bin/sh

ETH0=$(ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
ETH1=$(ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')


#!/bin/sh
# My system IP/set ip address of server

# Flushing all rules
iptables -F
iptables -X

# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Allow unlimited traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A OUTPUT -o eht1 -j ACCEPT

# Allow incoming ssh only
iptables -A INPUT -p tcp -s 0/0 -d ${ETH1} --sport 513:65535 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s ${ETH1} -d 0/0 --sport 22 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT

# make sure nothing comes or goes out of this box
iptables -A INPUT -j DROP

我的输出如下:

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
   77  5588 ACCEPT     tcp  --  any    any     anywhere             tcp spts:login:65535 dpt:ssh state NEW,ESTABLISHED
  224 13826 DROP       all  --  any    any     anywhere             anywhere            

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  any    lo      anywhere             anywhere            
   92  6993 ACCEPT     all  --  any    eth0    anywhere             anywhere            
   45  6340 ACCEPT     all  --  any    eth1    anywhere             anywhere            
    0     0 ACCEPT     tcp  --  any    any     anywhere             tcp spt:ssh dpts:login:65535 state ESTABLISHED

允许 eth0 和 eth1 的出站流量,但其不起作用。

wget http://www.google.com将导致Resolving www.google.com (www.google.com)... 一段时间后我得到输出wget: unable to resolve host addresswww.google.de'`

但是我的配置哪里出了问题。我怎样才能允许超过任何数量的出站流量?

答案1

正如问题中的评论者所暗示的那样,您已经阻止了 DNS。您肯定也需要允许RELATED连接。因此至少附加该

iptables -A INPUT -p tcp -s 0/0 -d ${ETH1} --sport 513:65535 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

但为了清楚起见,这样看起来可能更好:

iptables -A INPUT -p tcp -s 0/0 -d ${ETH1} -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d ${ETH1} --sport 513:65535 --dport 22 -j ACCEPT

还有这些

iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A OUTPUT -o eht1 -j ACCEPT

没有必要,因为-P您的输出链的策略是ACCEPT

答案2

添加

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

让已建立的连接从互联网获得回复。并将两行 SSH 行替换为这一行

iptables -A INPUT -p tcp -s 0/0 -d ${ETH1} --dport 22 -m state --state NEW -j ACCEPT

因为第一行已经覆盖了 ssh 的已建立部分。

答案3

根据定义,DNS 是一种客户端/服务器模型。如果您只是阻止所有输入,DNS 服务器如何向您发送答案。允许已建立的连接流量,以便您可以接收服务器的答案。

相关内容