電子書籍の厳選無料作品が豊富!

こんばんわ。
サーバーが違う場所にあり、
触れない状態です。
なので、sshにてiptablesの設定をしたいです。

OS:Fedora7
iptablesのパス /sbin/iptables

リモートからiptablesの設定についてですが、
http://fedorasrv.com/iptables.shtml
を参考にしてしましたが、
/sbin/iptables -P INPUT DROP
したら、接続が切れますので。。。

グーグルで調べても、
リモートから上記のサイトのような設定をして行くのが見つかりませんでした・・・

どうしたら上手くリモートからiptablesを設定出来ますでしょうか?

P.S
iptablesについて初心者です。

宜しくお願いします。

A 回答 (9件)

あなたのアドレスが 常に 192.0.0.1 で固定されている前提で


う~~んと、何度も書いたり消したりで おかしなことに成っているとまずいので
ご苦労ですが 今のiptables.shは 名前を変えて保存し
もう一度 http://fedorasrv.com/iptables.shtml から コピーしてください
##確認
#!/bin/bash   <=1行目が これで
/etc/rc.d/init.d/iptables start <=231行目がこれ
  <=232行目(最終行)が空行になっていることを確認してください
そしたら 以下で書き換え部分も含めて1~38行目までを通しで書きます
------この下の行が1行目-----
#!/bin/bash
export PATH=$PATH:/sbin/
# ↑この記述により ifconfigやiptablesの前にいちいち/sbin/ と入れないで済みます
#---------------------------------------#
# 設定開始 #
#---------------------------------------#

# インタフェース名定義
LAN=eth0

#---------------------------------------#
# 設定終了 #
#---------------------------------------#

# 内部ネットワークのネットマスク取得
LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`

# 内部ネットワークアドレス取得
LOCALNET_ADDR=`netstat -rn|grep $LAN|grep $LOCALNET_MASK|cut -f1 -d' '`
LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK


# ファイアウォール停止(すべてのルールをクリア)
/etc/rc.d/init.d/iptables stop

# デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定
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 -s 192.0.0.1 -j ACCEPT
# ↑この行追加
# 内部から行ったアクセスに対する外部からの返答アクセスを許可<=これが38行目になるはず

以上です 38行目から下はいじる必要有りません
exitや 入力待ちのは TEST用ですので 本番には必要有りません
では ガンバ!!
    • good
    • 0
この回答へのお礼

上記で解決致しました。

umasikajiro様

長々お付き合い頂きまして、
本当にありがとうございました。

もう少し色々と勉強して、
知識を高めていく努力します。

ありがとうございました!

お礼日時:2008/06/18 18:03

要するに いろいろ書くと混乱するわけですね 了解です。



ではiptables.shの
# 内部ネットワークのネットマスク取得
LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`
  ↓
LOCALNET_MASK=`/sbin/ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`
####こちらにも /sbin/ を入れてください

それで 実行してからコマンドラインで
# iptables -nL|more -10  <=と打った結果が↓

Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 192.168.0.0/23 0.0.0.0/0 <=この行があなたの環境に合わせて出てくるか確認してください
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
LOG all -f 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix `[IPTABLES FR
AGMENT] : '
DROP all -f 0.0.0.0/0 0.0.0.0/0
DROP tcp -- !192.168.0.0/23 0.0.0.0/0 multiport dports 135,137,138,139,445
DROP udp -- !192.168.0.0/23 0.0.0.0/0 multiport dports 135,137,138,139,445
    • good
    • 0
この回答へのお礼

いつもご丁寧にありがとうございます。

#LOCALNET_MASK=`/sbin/ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`
でエラーは解消されました。

# sh -x iptables.sh
での結果も表示されました。
ただ、
LOCALNET=IPアドレス/255.255.255.224

#last -i ユーザ名
で出たIPは含まれておりませんでした。

なので、下記のように変更でしょうか?

last -i ユーザ名が192.0.0.1だった場合

前略
# 内部ネットワークアドレス取得
LOCALNET_ADDR=`netstat -rn|grep $LAN|grep $LOCALNET_MASK|cut -f1 -d' '`
LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK
192.0.0.1                #追加箇所
exit
# ファイアウォール停止(すべてのルールをクリア)
以下略

これで最後だと思います。

P.S
ファイヤーウォール構築した場合に、
HP制作ソフト使ってデータDLした場合に、
index.htmlのhtmlファイルが
index.htmlと言うディレクトリになってるのですが、
関係はないでしょうか?
違う質問もすいません。。

お礼日時:2008/06/17 19:01

>iptables.sh: line 16: ifconfig: command not found


1. まず #!/bin/bash の次の行に
export PATH=$PATH:/sbin/
 と追記してください

2. #5で書いた exit は未だ外さないでください
   それでまた sh -x iptables.sh します
  今度はアドレス/マスクが出てくるはずです
  その値を 取り合えずメモして置いてください

3. last との比較
># last admin で打つと、IPではなくホストが表示される
# last -i ユーザー名  <=でどうですか?(お使いのサーバーでは last -d がリンクされているらしい)

 それで駄目なら 例えば 出てきたホスト名が TEST-PC だったら
# ping -n TEST-PC <=と打つとIPアドレスが出ます(そのクライアントPCでエコー遮断していなければですが)

なんとかIPアドレスが取れたら その値が 2.で取得した アドレス/マスク の範囲内に収まるか確認します

###取り合えず以上までを確認ください

## オマケ:
# いずれにしろ sh スクリプトの書き方や Linuxコマンドを もう少し調べた方が良いかもしれませんね
# 参考サイトを列記しておきます

pathの設定: http://cisco250.hp.infoseek.co.jp/Linux/path/

LINUXコマンド系の参考サイト:
「Linuxコマンド逆引き大全」 http://itpro.nikkeibp.co.jp/article/COLUMN/20060 …
「Linuxコマンド百科辞典」 http://www.21linux.com/
「Linuxコマンドcom」 http://xn--linux-op4dtfrgoh.com/
「@IT Linux Square」 http://www.atmarkit.co.jp/flinux/
    • good
    • 0

しつこくてすみません。

なんか不安になったので、、
>+ LOCALNET=192.168.1.0/255.255.255.0  <=この行が正しい事を確認してください
判ると思いますが、これはサーバーのIPアドレスが含まれるかではなくて
あなたがログインするときのIPアドレスが範囲に含まれるかです。
調べるには 例えば lastコマンドを使います。
例えばあなたのログイン時のユーザー名が tarou だとすると コマンドラインで
$ last tarou <=こう打つと
tarou pts/1 192.168.1.40 Thu Jun 12 13:15 still logged in
tarou pts/0 192.168.0.100 Thu Jun 10 13:06 still logged in
こんなのが出ますが 6/12のログインはOKですけども
 6/10の方は 192.168.1.0/255.255.255.0 の範囲に含まれませんね
そうなると 少なくとも初期状態でiptables.shに記述されているアドレス/マスクの自動取得では
カバーできませんし
LANのアドレスですから ACCEPT_COUNTRY でも駄目だと思います
そういうときは LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK 行に直接数値を入れるか
または #4に書いた 参考URL:[iptablesテンプレート] などを見て 追記する必要があると思います

この回答への補足

書く所がややこしくて、
masikajiro様が見る前に3つ位レス残してます。。。

今、iptables.shの
iptablesのところを
/sbin/iptables
に変更して起動したら、
エラーがかなり出ましたが、
最後に全部OKの文字が。。。

#/sbin/iptalbes -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
LOG all -f anywhere anywhere LOG level warning prefix `[IPTABLES FRAGMENT] : '
DROP all -f anywhere anywhere
LOG_PINGDEATH icmp -- anywhere anywhere icmp echo-request
DROP all -- anywhere 255.255.255.255
DROP all -- anywhere ALL-SYSTEMS.MCAST.NET
REJECT tcp -- anywhere anywhere tcp dpt:auth reject-with tcp-reset
DROP_COUNTRY all -- anywhere anywhere
ACCEPT tcp -- 210.1.144.0/20 anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
LOG all -- anywhere anywhere limit: avg 1/sec burst 5 LOG level warning prefix `[IPTABLES INPUT] : '
~~中略~~
LOG all -- 222.156.0.0/15 anywhere limit: avg 1/sec burst 5 LOG level warning prefix `[IPTABLES DENY_COUNTRY] : '
DROP all -- 222.156.0.0/15 anywhere
LOG all -- 222.250.0.0/16 anywhere limit: avg 1/sec burst 5 LOG level warning prefix `[IPTABLES DENY_COUNTRY] : '
DROP all -- 222.250.0.0/16 anywhere
LOG all -- 222.251.0.0/17 anywhere limit: avg 1/sec burst 5 LOG level warning prefix `[IPTABLES DENY_COUNTRY] : '
DROP all -- 222.251.0.0/17 anywhere

Chain LOG_PINGDEATH (1 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere limit: avg 1/sec burst 4
LOG all -- anywhere anywhere LOG level warning prefix `[IPTABLES PINGDEATH] : '
DROP all -- anywhere anywhere

と出ます。

補足日時:2008/06/14 16:38
    • good
    • 0
この回答へのお礼

umasikajiro様
本当に丁寧にありがとうございます。

時間、知識不足なので、
少しずつやってます。。。

幾つか問題があったので記載します。
# last admin
で打つと、IPではなくホストが表示されるような形でした・・

# TEST入力待ち Yまたはy入力で次の処理
while [ 1 ]; do
/bin/echo -n "Y/N: ";read line
case $line in
[yY])
break
;;
esac
done
# TEST入力待ちは以上迄

LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK
exit     #追加t

iptables -A INPUT -p tcp -s 210.1.144.0/20 --dport 22 -j ACCEPT

の3つ追加して
#./iptables.sh
すると、
実行出来ないです。

Yで次の処理のと、exit抜くと実行出来ますが、
エラーが出ます。

./iptables.sh: line 152: iptables: command not found
./iptables.sh: line 156: iptables: command not found
./iptables.sh: line 160: iptables: command not found
./iptables.sh: line 164: iptables: command not found
./iptables.sh: line 169: iptables: command not found
./iptables.sh: line 173: iptables: command not found
./iptables.sh: line 177: iptables: command not found
./iptables.sh: line 181: iptables: command not found
./iptables.sh: line 185: iptables: command not found
./iptables.sh: line 189: iptables: command not found
./iptables.sh: line 193: iptables: command not found
./iptables.sh: line 197: iptables: command not found
./iptables.sh: line 222: iptables: command not found
./iptables.sh: line 223: iptables: command not found
./iptables.sh: line 224: iptables: command not found
./iptables.sh: line 225: iptables: command not found

みたいなのがかなり出ます。

iptables -A INPUT -p tcp -s 210.1.144.0/20 --dport 22 -j ACCEPT

については、
#iptables -A INPUT -p tcp -s 210.1.144.0/20 --dport 22 -j ACCEPT

# iptables -nL>/hoge/tmp/iptest.log

ACCEPT tcp -- 210.1.144.0/20 0.0.0.0/0 tcp dpt:22
ともなって、でも接続は維持されてます。

iptables難しいですね。。

初心者ですいません。。。

お礼日時:2008/06/14 12:14

またまた わかる範囲で書きます


>この時点でSSHから外れてしまって、おかしくならないでしょうか?
1.まず 念のために /etc/sysconfig/iptables を適当なところにコピーしておきます
2.iptables.sh のアドレス取得だけを行うように追記します
前略
LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK
exit  <=iptables.shの、ここにexit を追加してください
# ファイアウォール停止(すべてのルールをクリア)
以下略

3.コマンドラインで # sh -x iptables.sh
結果例:
+ LAN=eth0
++ ifconfig eth0
++ sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d
+ LOCALNET_MASK=255.255.255.0
++ netstat -rn
++ grep eth0
++ cut -f1 '-d '
++ grep 255.255.255.0
+ LOCALNET_ADDR=192.168.1.0
+ LOCALNET=192.168.1.0/255.255.255.0  <=この行が正しい事を確認してください
+ exit
    • good
    • 0
この回答へのお礼

# sh -x iptables.sh
+ LAN=eth0
++ ifconfig eth0
iptables.sh: line 16: ifconfig: command not found
++ sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d
+ LOCALNET_MASK=
++ netstat -rn
++ grep eth0
++ grep
Usage: grep [OPTION]... PATTERN [FILE]...
++ cut -f1 '-d '
Try `grep --help' for more information.
+ LOCALNET_ADDR=
+ LOCALNET=/
+ exit

でした。

iptablesは
/sbin/iptables
のパスにありますが。。。
iptables.sh

[root@localhost ~]# vi iptables.sh
と~に作ってますが、
環境が問題でしょうか?

グローバルIPが100.100.100.100
だったとした場合は、

※iptables -A INPUT -p tcp -s 210.1.144.0/20 --dport 22 -j ACCEPT
の所は
iptables -A INPUT -p tcp -s 100.100.100.0/100 --dport 22 -j ACCEPT
になります?

宜しくお願い致します。

お礼日時:2008/06/14 16:27

#3を書いて直後に見直したら、、


>サーバーが違う場所にあり、
これって LAN内じゃないってことですか?
ならば
iptables -A INPUT -p tcp --dport 22 -j ACCEPT_COUNTRY
 行で 日本国内からの port22接続は許可されていると思うのですが
 念のためクライアントマシンの グローバルアドレスを調べて
iptables -A INPUT -p tcp -s 210.1.144.0/20 --dport 22 -j ACCEPT
 とかで出来ませんかねえ?

これで接続が維持できたら 確認します。量が多すぎて見づらいのでログに落とします
# iptables -nL>/hoge/tmp/iptest.log

ACCEPT tcp -- 210.1.144.0/20 0.0.0.0/0 tcp dpt:22
と成っている行が有ればOKだと思います。
[iptablesテンプレート]   http://www.atmarkit.co.jp/flinux/rensai/iptables …
「日本のIPアドレス」 http://www.cgis.biz/tools/access.php
    • good
    • 0

失礼いたしました。

さすがに#1のは無かったですね。わかる範囲で書いてみます
・うちのはFC5ですが そのページの通りに設定して全然問題なく作動しています
・切断されると言う事は iptables -P INPUT DROP は機能しているが
  許可する条件 or LANのIPアドレス取得のどちらかがおかしいのではないかと思います

  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 行の下に以下の10行を追加してください
 これで入力待ちの時に Y または yを入れると続行します
# TEST入力待ち Yまたはy入力で次の処理
while [ 1 ]; do
/bin/echo -n "Y/N: ";read line
case $line in
[yY])
break
;;
esac
done
# TEST入力待ちは以上迄
 (あまりスマートじゃないけど ^^;)
 追加したら
# sh -x ./iptables.sh  <=と打ってください

 ####入力待ちまでのうちでの実行結果は
[hoge@hoge hogege]# sh -x iptables.sh
+ LAN=eth0
++ ifconfig eth0
++ sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d
+ LOCALNET_MASK=255.255.255.0
++ netstat -rn
++ grep eth0
++ grep 255.255.255.0
++ cut -f1 '-d '
+ LOCALNET_ADDR=192.168.1.0
+ LOCALNET=192.168.1.0/255.255.255.0
+ /etc/rc.d/init.d/iptables stop
ファイアウォールルールを適用中: [ OK ]
チェインポリシーを ACCEPT に設定中filter [ OK ]
iptables モジュールを取り外し中 [ OK ]
+ iptables -P INPUT DROP
+ iptables -P OUTPUT ACCEPT
+ iptables -P FORWARD DROP
+ iptables -A INPUT -i lo -j ACCEPT
+ iptables -A INPUT -s 192.168.1.0/255.255.255.0 -j ACCEPT
+ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
+ '[' 1 ']'
+ /bin/echo -n 'Y/N: '
Y/N: + read line
<=ここで入力待ち

上のは 192.168.1.1~192.168.1.254までのLANの場合です

#### それでも駄目なら もっと詳しい人の回答を待ちましょう (^^;)
### 或いは http://fedorasrv.com/patio/patio.cgi <=質問掲示板へ
    • good
    • 0
この回答へのお礼

お返事、ご丁寧にありがとうございます。
遅くなりました・・・

少し立て込んでて、
まだ試せてないのですが、
待たせてしまってるのでレスだけ先に返信しておきます。

外部にあって触れないと言うのは、
専用サーバーで、サーバーの管理はデータセンターにあり、入局が出来ないタイプの物で、SSHのみでファイヤーウォール構築しないとダメな環境と言う意味です。

まだやってないのですが、.sh内に
+ iptables -P INPUT DROP
と表記あるは、この時点でSSHから外れてしまって、
おかしくならないでしょうか?

初心者ですいません。。。

お礼日時:2008/06/11 10:41

こんばんわ、



/sbin/iptables -P INPUT DROP
をすることで、一切リモートからの受付が拒絶されてしまいます。
参考になるURLを載せておきます。
sshぐらいは明けておき、/etc/host.allowのTCPラッパーで制御してみてはどうでしょうか。

=========================
From RHCE Current

参考URL:http://penguin.nakayosi.jp/linux/iptables.html
    • good
    • 0

私が状況を勘違いしているのかもしれませんが、、


http://fedorasrv.com/iptables.shtml に書いてあるのは
iptables.sh と言うfileに記述する内容です
 ([root@fedora ~]# chmod 700 iptables.sh 行の上迄)

コマンドとして /sbin/iptables -P INPUT DROP と打つのでは有りませんよ

その下の行の
[root@fedora ~]# vi iptables_functions
は iptables_functions と言う名前のfileの内容です
#####
このページの作者さんはコマンドラインの画面そのものに説明を加えていますので
[root@fedora ~]# ←行頭がこれで始まる行はコマンドラインでの入力
[root@fedora ~]# vi /hoge/hoge.sh  ← vi コマンドで/hoge/hoge.sh と言うfileを編集
viの付く行から下は そのfileの編集内容

と言う事なのですが、、、

この回答への補足

返事遅くなりました、すいません。。。
お返事ありがとうございます。

fileはやってみたのですが、
どこかおかしいのか分からないですが、
接続が切れてしまいますので。。。

iptablesでfileに記載するような事をやって行こうと思っても、
DROPの時点でダメなので、何か良い方法はないですか?
との質問でした・・

ちょっと分かりづらい質問の方法で失礼しました。

ちなみに。。。
[root@fedora ~]# vi iptables.shでfile作成
内容は下記。

#!/bin/bash

~略~

# ファイアウォール起動
/etc/rc.d/init.d/iptables start

---------------------------------
までのfile作成で権限付けて、

[root@fedora ~]# vi iptables_functions #ファイル作成

# IPアドレスリスト取得関数定義
IPLISTGET(){

~略~

# 最新版IPアドレスリストを /tmpへバックアップする
/bin/cp cidr.txt /tmp/cidr.txt
}

---------
作成。

[root@fedora ~]# vi /etc/cron.daily/iplist_check.sh ←作成

#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

~略~
else
rm -f IPLIST.new
fi

------
まで作成して権限つける。

[root@fedora ~]# ./iptables.sh
を実行すると、エラーがひたすら出て、
SSHの接続も不可能になります。

全てコピーペーストでやりました。

saveしてないので、リブートで直りますが。。。

補足日時:2008/06/07 22:11
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!