web-dev-qa-db-ja.com

iptablesはインターネット接続のみを許可します

以前に何をしたかを説明させてください。

# Only INPUT policy DROP, others are ACCEPT
Sudo iptables -P INPUT DROP
Sudo iptables -A INPUT -p tcp --sport 80 -j ACCEPT

私もこれを試します。 443および8080へのこれらのポート用

Sudo iptables -A INPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

それから、DNSサーバーも許可する必要があることに気付きました。

Sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
Sudo iptables -A INPUT -p tcp --sport 53 -j ACCEPT

このルールを適用しますが、インターネットに接続できません。

しかし、すべてのudpポートを許可すると、接続できます。

何か忘れますか?または何か間違ったことをしますか?

2
Hasan Kaya

コンピューターはどのようにしてIPアドレスを取得しますか? DHCP経由の場合、ポート68への(またはポート67からのUDP応答を許可する必要があります。後述)。

Sudo iptables -A INPUT -p udp --sport 67 --dport 68 -m state --state RELATED,ESTABLISHED -j ACCEPT

Webサイトの閲覧のみを許可することが目的の場合、接続は常にエンドから開始されるため、関連するトラフィックのみを許可する必要があります(この例では、eth0がNIC名であると仮定しています):

Sudo iptables -A INPUT -i eth0 -p tcp -m multiport --sport 80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT

ここで、ローカルインターフェイスを許可する必要がある場合としない場合があります(コンピューターで何をしているかによって異なります)。

Sudo iptables -A INPUT -i lo -j ACCEPT

最後に、これらのいくつかを組み合わせて、次のようになります。

Sudo iptables -A INPUT -i lo -j ACCEPT
Sudo iptables -A INPUT -i eth0 -p udp -m multiport --sport 53,67 -m state --state ESTABLISHED,RELATED -j ACCEPT
Sudo iptables -A INPUT -i eth0 -p tcp -m multiport --sport 53,80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT

テストコンピューターの1つでこれをコーディングし、正常に機能しました(SSHポート22のものは、実際にそのコンピューターに座っていないためです)。

#!/bin/sh
FWVER=0.01
#
# test extremely basic 2015.06.10 Ver:0.01
#
#     run as Sudo
#

echo "Loading test rule set version $FWVER..\n"

# The location of the iptables program
#
IPTABLES=/sbin/iptables

#Setting the EXTERNAL and INTERNAL interfaces and addresses for the network
#
EXTIF="eth0"
EXTIP="192.168.111.140"
UNIVERSE="0.0.0.0/0"

#Clearing any previous configuration
#
echo "  Clearing any existing rules and setting default policy to ACCEPT.."
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
# Delete user defined chains
$IPTABLES -X
# Reset all IPTABLES counters
$IPTABLES -Z

echo about to load rules.

$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p udp -m multiport --sport 53,67 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp -m multiport --sport 53,80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp --dport 22 -j ACCEPT

echo Test rule set version $FWVER done.

/etc/network/interfacesファイルを介して自動的に開始しました:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
pre-up /home/doug/test_iptables_06

# The primary network interface
auto eth0
iface eth0 inet dhcp

より一般的には、ユーザーは、より一般的なルール(上記のスクリプトの変数名を使用)で、関連するトラフィックを許可するだけです。

$IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ESTABLISHED,RELATED -j ACCEPT

編集:

時々、ログを追加して理解/デバッグするのに役立つことがあります。例えば:

echo about to load rules.

$IPTABLES -A INPUT -i lo -j LOG --log-prefix "ILO:" --log-level info
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p udp -m multiport --sport 53,67 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp -m multiport --sport 53,80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp --dport 22 -j ACCEPT
$IPTABLES -A INPUT -j LOG --log-prefix "IDROP:" --log-level info

echo Test rule set version $FWVER done.

次に、/var/log/syslogのエントリを確認します。ログファイルがあふれないように、ログに注意してください。

2
Doug Smythies