我在正确配置 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 address
www.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 服务器如何向您发送答案。允许已建立的连接流量,以便您可以接收服务器的答案。