iptablesと内部からのアクセス

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

iptablesと内部からのアクセス

#1

投稿記事 by みけCAT » 11年前

ubuntu12.10 x86_64
iptables v1.4.12

プログラミングの質問でなくてすみません。
iptablesの設定がうまくできないようで、困っています。
http://web.archive.org/web/201103030202 ... 1201462048
を参考に設定しました。

以下のファイルを/etc/network/if-pre-up.d/iptablesというファイルに保存し、所有権root:root、パーミッション700の設定をしました。

コード:

#!/bin/bash

LAN=eth0

LOCALNET=127.0.0.1/24

IPTABLES=/sbin/iptables

$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z

$IPTABLES -P INPUT   DROP
$IPTABLES -P OUTPUT  ACCEPT
$IPTABLES -P FORWARD DROP

$IPTABLES -A INPUT -i lo -j ACCEPT

#$IPTABLES -A INPUT -s $LOCALNET -j ACCEPT

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf

sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf

sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
    sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null
    echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf
done

sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
    sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null
    echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf
done

#$IPTABLES -A INPUT -f -j LOG --log-prefix '[IPTABLES FRAGMENT] : '
#$IPTABLES -A INPUT -f -j DROP

#$IPTABLES -A INPUT -s ! $LOCALNET -p tcp -m multiport --dports 135,136,137,138,139,445 -j DROP
#$IPTABLES -A INPUT -s ! $LOCALNET -p udp -m multiport --dports 135,136,137,138,139,445 -j DROP
#$IPTABLES -A OUTPUT -d ! $LOCALNET -p tcp -m multiport --sports 135,136,137,138,139,445 -j DROP
#$IPTABLES -A OUTPUT -d ! $LOCALNET -p udp -m multiport --sports 135,136,137,138,139,445 -j DROP

$IPTABLES -N LOG_PINGDEATH
$IPTABLES -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
#$IPTABLES -A LOG_PINGDEATH -j LOG --log-prefix '[IPTABLES PINGDEATH] : '
$IPTABLES -A LOG_PINGDEATH -j DROP
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH

$IPTABLES -A INPUT -d 255.255.255.255 -j DROP
$IPTABLES -A INPUT -d 224.0.0.1 -j DROP

$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

$IPTABLES -A INPUT -p tcp --dport ***** -m state --state NEW -m recent --set --name ssh_attack
#$IPTABLES -A INPUT -p tcp --dport ***** -m state --state NEW -m recent --update --seconds 180 --hitcount 5 --rttl --name ssh_attack -j LOG --log-prefix 'SSH attack: '
$IPTABLES -A INPUT -p tcp --dport ***** -m state --state NEW -m recent --update --seconds 180 --hitcount 5 --rttl --name ssh_attack -j DROP

# ports for services

$IPTABLES -A INPUT -p tcp --dport ***** -j ACCEPT

$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT

# for FTP (PASV port 60000:60030)
#$IPTABLES -A INPUT -p tcp --dport 21 -j ACCEPT
#$IPTABLES -A INPUT -p tcp --dport 60000:60030 -j ACCEPT

#ports for services end

# deny IP address list "/root/.deny_ip"
if [ -s /root/.deny_ip ]; then
    iptables -N DENY_HOST
    for ip in `cat /root/.deny_ip`
    do
        iptables -A DENY_HOST -s $ip -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES DENY_HOST] : '
        iptables -A DENY_HOST -s $ip -j DROP
        iptables -I INPUT -j DENY_HOST
    done
fi

#$IPTABLES -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
$IPTABLES -A INPUT -j DROP
#$IPTABLES -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
$IPTABLES -A FORWARD -j DROP

$IPTABLES -A OUTPUT -j ACCEPT
ただし、*****のところには実際はSSH用のポート番号が入ります。

この状態で外部からのHTTPとSSHは繋がるのですが、内部から外部にアクセスすることができないようです。
具体的には「ping dixq.net」と「wget http://49.212.156.142/」を試し、ダメでした
pingの方はしばらく待つと「ping: unknown host dixq.net」というエラーが出ました。
wgetの方は30秒くらい待ち、何も起こりませんでした。

コード:

# iptables -F
# iptables -P INPUT ACCEPT
というコマンドを実行すると、ping、wgetともに正常動作しました。
しかし、再び上記のスクリプトを実行すると、できなくなりました。

コード:

# service networking restart
というコマンドや再起動も試しましたが、ダメでした。

どうすれば上記サイトの想定する防御を有効にし、かつ内部からインターネットにアクセスできるようになるでしょうか?
よろしくお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: iptablesと内部からのアクセス

#2

投稿記事 by ISLe » 11年前

LOCALNET変数にローカルループバックアドレスを指定しているのが間違っているのでは。

とっち
記事: 56
登録日時: 13年前
住所: 岡山

Re: iptablesと内部からのアクセス

#3

投稿記事 by とっち » 11年前

ファイアウォールは詳しくないので間違っていたらすみません

ping 49.212.156.142は動作しますか
(DNS名前解決で失敗している気がします)

wgetのほうはわからないです・・・
(wgetってftp開ける必要あったっけ?)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: iptablesと内部からのアクセス

#4

投稿記事 by みけCAT » 11年前

ISLe さんが書きました:LOCALNET変数にローカルループバックアドレスを指定しているのが間違っているのでは。
LAN=~とLOCALNET=~の行をコメントアウトしましたが、うまくいきませんでした。
ifconfigコマンドを実行すると、以下のような出力が出ます。(*.*.*.*にはIPアドレスが入り、このアドレスで外部からのSSHは繋がります)

コード:

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:127.0.0.2  P-t-P:127.0.0.2  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:928 errors:0 dropped:0 overruns:0 frame:0
          TX packets:835 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:171014 (171.0 KB)  TX bytes:99270 (99.2 KB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:*.*.*.*  P-t-P:*.*.*.*  Bcast:*.*.*.*  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
とっち さんが書きました:ping 49.212.156.142は動作しますか
繋がりません。loss扱いになります。
ローカルのコマンドプロンプトでは、きちんと繋がります。
また、ping 127.0.0.1は繋がりました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: iptablesと内部からのアクセス

#5

投稿記事 by みけCAT » 11年前

コード:

% sudo iptables -nL --line-number
というコマンドを実行した時の出力は、以下のようになりました。
*****の部分は、本当はSSHのポート番号が入ります。

コード:

Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
3    DROP       all  -f  0.0.0.0/0            0.0.0.0/0
4    LOG_PINGDEATH  icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8
5    DROP       all  --  0.0.0.0/0            255.255.255.255
6    DROP       all  --  0.0.0.0/0            224.0.0.1
7    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:113 reject-with tcp-reset
8               tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:***** state NEW recent: SET name: ssh_attack side: source
9    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:***** state NEW recent: UPDATE seconds: 180 hit_count: 5 TTL-Match name: ssh_attack side: source
10   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:*****
11   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
12   DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy DROP)
num  target     prot opt source               destination
1    DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

Chain LOG_PINGDEATH (1 references)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            limit: avg 1/sec burst 4
2    DROP       all  --  0.0.0.0/0            0.0.0.0/0
この状態で、

コード:

% sudo iptables -P INPUT ACCEPT
% sudo iptables -D INPUT 12
というコマンドを実行すると、
pingもwgetも使えるようになりました。
ということは、本来通過するべき入力パケットがDROPされているようです。
解決法を知っておられる方はいますでしょうか?
よろしくお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: iptablesと内部からのアクセス

#6

投稿記事 by みけCAT » 11年前

ググったら、システムが-m stateに対応していないことがあるらしいことがわかったので、

コード:

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
の行をコメントアウトし、その下に

コード:

# HTTP/HTTPS
 32 $IPTABLES -A INPUT -p tcp --sport 80 -j ACCEPT
 33 $IPTABLES -A INPUT -p tcp --sport 443 -j ACCEPT
 34 # DNS
 35 #$IPTABLES -A INPUT -p tcp --sport 53 -j ACCEPT
 36 $IPTABLES -A INPUT -p udp --sport 53 -j ACCEPT
を追加したところ、
wget(名前解決を含む)が動作するようになりました。
とりあえず解決にします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る