Sunday, January 27, 2008

リモートからFirewall超えでアクセスするための設定

リモート(どこからは、ちょっと書けない・・)からは、http(port 80), https(port 443)で出て行くことしか許していないため、自分のサーバのssh daemonが443番ポートでも通信を受け付けられるようにする。


  1. sshd_configを書き換える(*1)

  2. # vi /etc/ssh/sshd_config
    ----------
    【変更前】
    Port 22
    ----------
    【変更後】
    Port 22
    Port 443
    ----------

  3. sshd再起動

  4. # /etc/init.d/sshd restart

  5. ssh接続

  6. 22番ポートでsshdに接続することはできるが、443番ポートでsshdに接続することが出来ない。原因を調査するために、nmapをダウンロードして自分のサーバに向けてポートスキャンをしてみた。

    ------------------------------
    >nmap -v 192.168.0.4
    PORT STATE SERVICE
    22/tcp open ssh
    80/tcp closed http
    ------------------------------

    そういえば、Firewallを有効にしていたのを忘れていた。(^^;

    # /etc/init.d/iptables stop

    で、Firewallを外して、443番ポートでsshdに接続すると接続できるから、やっぱりFirewallが原因っぽい。

  7. Firewallで443番ポートへのアクセスを許可する


  8. Firewallの設定を見る。Firewallの設定は、/etc/sysconfig/iptables に書かれている。しかし、マニュアルでの編集・設定は推奨されていないので、かならず、iptablesコマンドを利用して設定をすること。(*2)(*3)

    # iptables -nL
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination
    RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    Chain RH-Firewall-1-INPUT (2 references)
    target prot opt source destination
    ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
    ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
    ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
    ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
    ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
    ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
    ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 <=== ssh(port 22)接続を許可
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 <=== http(port 80)接続を許可
    REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

    # iptables -P INPUT RH-Firewall-1-INPUT
    # iptables -P FORWARD RH-Firewall-1-INPUT
    # iptables -P OUTPUT ACCEPT
    # iptables -F
    # iptables -A INPUT -j RH-Firewall-1-INPUT
    # iptables -A FORWARD -j RH-Firewall-1-INPUT
    # iptables -A RH-Firewall-1-INPUT -i lo -j ACCEPT
    # iptables -A RH-Firewall-1-INPUT -i eth0 -j ACCEPT
    # iptables -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
    # iptables -A RH-Firewall-1-INPUT -p esp -j ACCEPT
    # iptables -A RH-Firewall-1-INPUT -p ah -j ACCEPT
    # iptables -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
    # iptables -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
    # iptables -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    # iptables -A RH-Firewall-1-INPUT -p tcp --dport 22 -j ACCEPT
    # iptables -A RH-Firewall-1-INPUT -p tcp --dport 80 -j ACCEPT
    # iptables -A RH-Firewall-1-INPUT -p tcp --dport 443 -j ACCEPT
    # iptables -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
    # /etc/init.d/iptables save
    # /etc/init.d/iptabels restart

    上記、コマンド群を次回、更新するときなどのために/root/iptables.shに保存した。

  9. ターミナルで443番ポートでssh接続

  10. できた!22番でも接続できた!



【参考】
(*1) O'Reilly - Hack 97. Run Two Services on a Single TCP Port
(*2) iptables・設定・ファイアウォール・セキュリティ
(*3)くわぞうメモ: iptableのルールを追加する

No comments:

Post a Comment