- ベストアンサー
Linuxのiptablesについて知りたい初心者向けの情報
- Linuxのiptablesについての基礎知識や設定方法、使用例を分かりやすく解説します。
- VPSを使ってiptablesを勉強している初心者に向けた、iptablesの基本的な設定とルールの解説です。
- sshを使用してiptablesの設定を行う方法や、ポートの開放と制限について詳しく解説します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>【A】 >下記のようにした場合、 >「(1)で受信はすべて破棄、(2)で22を許可、(3)で受信はすべて破棄」となると思いますが、 >(2)の後に(3)が実行されているのに、結果として「22番のみ許可される」というのが理解できません (1)と(3)は同じモノでしょう。 どちらもINPUTに対する設定ですから、後から実行した(3)の設定だけ有効になりますけどね。 で… -P INPUT DROP という設定で、INPUTのパケットは基本的に全部DROPする。 という状態にして、 -A INPUT ~ という設定で、「例外のルール」を作り込んでいきます。 例外のルールは記述した順に評価してヒットすればそこのルールに従い、 ヒットしなければ次のルールを… 全て評価してヒットしなければ、基本として設定した内容に従います。 # OUTPUTを基本ACCEPTにして、特定のポートだけREJECTとかやることも可能なわけで。 >【B】 >記載いただいた下記は具体的にどのような事でしょうか よく書かれる定型パターンなんですが…。 http://techmemoin.blogspot.jp/2012/03/arch-linuxiptables.html http://www.atmarkit.co.jp/ait/articles/1001/06/news101.html http://www3.big.or.jp/~sian/linux/tips/iptables.html >【C】 >記載いただいた下記は具体的にどのような事でしょうか 同じく定型パターンです。 http://centossrv.com/iptables.shtml こういうところからの設定つまみ食いですね。 今回のパターンはどこから取ってきたのか忘れましたが…。 # ちょっと…正しいのか不安になってきたな…。まぁ外から接続可能なポートはルータで制限されていますが。 >【D】 >記載いただいた下記はついて >(4)は「OUTPUT」で「--sport 22」ではないのですか? #2にも書きましたが、--sportは基本的に使用しません。 まぁ、OUTPUTの--sport 22なら確かに意味はありそうですが。 OUTPUTは基本ACCEPTなので、個別に設定する必要はありません。 >また(5)は「--dport 22」 ではないのですか? 外向けのssh(外部からのSSH接続)は非標準ポートを使っている。 というだけの話です。 ルータで22番への接続要求は弾いていますからね。 なんでそんなコトしているのかは、sshのログでも眺めてみてください。 VPSで22番開けているならおそらく納得できるだけの材料が既に揃っているでしょうし。 # まぁ、既に乗っ取り完了していてログが消されている。という可能性も否定できなくはないんですが…。 >【E】 >下記のように書いてる例をよく見かけますが、 >(7)を書く意味はなんなのですか、(6)だけで問題ないように思うのですが。 う~ん?? どこの例で書かれているんですかね?? http://www.rapidsite.jp/support/manual/rv_custom/e_4210.html http://kjirou.sakura.ne.jp/wiki_mirror/index.php?a%2Fiptables#wf0f170c とかでしょうか? 2番目はともかく、最初のページの方だと「-m state」の設定が無いみたいですから、接続先からのパケット受け取るためにソースポートの指定が必要なんでしょう。 # ってことでソースポート80番に指定した攻撃パケットの接続は許可できますね。 ちなみに…あんまり関係ありませんが自宅のネットワークは192.168.1.0/24なので「-s 192.168.0.0/16」というのは微妙に正しくはなかったりします。 192.168.0.0/16なら192.168.1.0/24も含まれますし、192.168.1.0/24から変更したときに設定触る箇所が減る。というのもあります。 # モバイルWiMAXルータが192.168.1.0/24固定なので、そっちからVPN張ろうと思ったら自宅ネットワークの方を変更するしかない。
その他の回答 (3)
- Wr5
- ベストアンサー率53% (2173/4061)
>22番ポートのみ開けたいのです(特別な意味はありません、勉強です) >下記だけでいいと言うことですか 基本的にはOKでしょう。 >iptables -P INPUT DROP は -A より先にやってしまって問題ありません。 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT も入れておいた方がいいでしょう。 ウチのサーバの/etc/sysconfig/iptablesは下記の通りです。(一部のみですが) # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] ## START # ループバックは許可 -A INPUT -i lo -j ACCEPT # icmpは許可 -A INPUT -p icmp --icmp-type any -j ACCEPT # 自サーバが送信したコネクション開設要求に関連するパケット受信と、接続完了後のパケット受信を許可 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 新規セッションなのにSYNフラグの立っていないパケットは拒否 -A INPUT -p tcp -m state --state NEW ! --syn -j DROP # ssh # 内からのssh許可 -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.0/16 --dport 22 -j ACCEPT # 外からのssh許可 -A INPUT -m state --state NEW -m tcp -p tcp --dport 10649 -j ACCEPT # ftp -A INPUT -s 192.168.0.0/16 -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A INPUT -s 192.168.0.0/16 -m state --state NEW -m tcp -p tcp --dport 50020 -j ACCEPT # telnet -A INPUT -s 192.168.0.0/16 -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT # http & https -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT >25 80が開いてるように表示されるのは何故なのですか??? >iptables -A INPUT -i lo -j ACCEPT で、ループバックアドレスを許可しているから…でしょう。 (2)の >Nmap scan report for ホスト名 (IPアドレス) で表示されるIPアドレスがローカルループバックではなかった…とすると、ちょっと疑問ではありますが。 あとは… netstatでどのポートで待ち受けがあるか? というのを確認じゃないでしょうかね。
補足
Wr5さん、ありがとうございます。 ちょっと解かってきたように思いますが・・・・ また教えて下さい。 【A】 下記のようにした場合、 「(1)で受信はすべて破棄、(2)で22を許可、(3)で受信はすべて破棄」となると思いますが、 (2)の後に(3)が実行されているのに、結果として「22番のみ許可される」というのが理解できません iptables -F iptables -X iptables -P INPUT DROP ----- (1) iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT ----- (2) iptables -P INPUT DROP ----- (3) /etc/init.d/iptables save service iptables restart 【B】 記載いただいた下記は具体的にどのような事でしょうか # 自サーバが送信したコネクション開設要求に関連するパケット受信と、接続完了後のパケット受信を許可 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 【C】 記載いただいた下記は具体的にどのような事でしょうか # 新規セッションなのにSYNフラグの立っていないパケットは拒否 -A INPUT -p tcp -m state --state NEW ! --syn -j DROP 【D】 記載いただいた下記はついて (4)は「OUTPUT」で「--sport 22」ではないのですか?、また(5)は「--dport 22」 ではないのですか? # ssh # 内からのssh許可 -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.0/16 --dport 22 -j ACCEPT ----- (4) # 外からのssh許可 -A INPUT -m state --state NEW -m tcp -p tcp --dport 10649 -j ACCEPT ----- (5) 【E】 下記のように書いてる例をよく見かけますが、 (7)を書く意味はなんなのですか、(6)だけで問題ないように思うのですが。 iptables -A INPUT -p tcp --dport 80 -j ACCEPT ----- (6) iptables -A INPUT -p tcp --sport 80 -j ACCEPT ----- (7)
- Wr5
- ベストアンサー率53% (2173/4061)
面倒なのでTCPだけで。 >iptables -F >iptables -X iptablesの設定を初期化するっす。 >iptables -P INPUT DROP INPUTパケットの基本ポリシーはDROPっす。 ルールに沿わないと全部捨てるっすよ! ちょー安全っす!! >iptables -A INPUT -p tcp -j ACCEPT TCPパケット受け入れのルールとして全部受け入れるっすよ! この時点でTCP全てのパケット受け入れろって言われたんで「ちょー安全っす!!」っは無効にしろ。と親分から指示されたっす。 任してくだせぇ。 >iptables -A INPUT -i lo -j ACCEPT へぇ。ウチの組のモンは顔パスっすね。 了解しやした!! >iptables -A INPUT -p tcp --dport 22 -j ACCEPT 姐さんの客人は通せばいいんですね。 わっかりやしたぁ。 でも全員通れるンすけど…。 >iptables -A INPUT -p tcp --sport 22 -j ACCEPT よその組の姐さんからの手土産持っている人は全員通すんですね。 了解っす。ヒットマンでも通しますよ。 # かなり例えが苦しいなぁ… # INPUTでソースポート指定する意味はあまりありませんが… # 普通は送信側が空いている適当なポート番号を指定するのでソースポートでフィルタすることはあまりありません。 という設定をしてみました。 (1)で表示される >ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED は接続済みのパケットは通す。というヤツです。 >結果、(1)では22、(2)では22 80、(3)では22 25 80が開いているように表示されてます 1ではフルオープンです。 どんなパケットだって受け入れちゃうよ~状態ですね。 つまり「フィルタなしと同じ」です。 (2)のホスト名がどこを挿しているのか不明ですが…… 自ホストのIPアドレス(非ループバック)が引けるのなら、 そこから規定のポートをスキャンしているのでしょう。 # nmapはポート範囲指定しない場合にいくつかのポートしかスキャンしなかったと記憶していますが… (3)で25番ポートが開いているように見えるのはSMTPサーバが「localhostからの接続は受け入れる」という設定になっているからでしょう。 netstat -lpn -A inet とかやると tcp 0 127 0.0.0.1:25 0.0.0.0:* LISTEN 2726/master とか表示させるんじゃないでしょうか。 というワケで… >iptables -A INPUT -p icmp -j ACCEPT >iptables -A INPUT -p tcp -j ACCEPT >iptables -A INPUT -p udp -j ACCEPT があったら、フィルタの意味がありません。
補足
Wr5さん、ありがとうございます 22番ポートのみ開けたいのです(特別な意味はありません、勉強です) 下記だけでいいと言うことですか iptables -F iptables -X iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -P INPUT DROP /etc/init.d/iptables save service iptables restart 25 80が開いてるように表示されるのは何故なのですか???
- maesen
- ベストアンサー率81% (646/790)
(1),(2)について >(1)iptables -nL >ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 -v オプションを付けていないので詳しくわかりませんが、全ての通信が許可になっていませんか? >22/tcp open ssh >80/tcp open http 3wayハンドシェークは出来ているということを示しているので、 こうなるのは、iptablesでは通過しているけれど、実際にこの2つしかListenしていないだけというこうはありませんか? netstatで確認できると思います。 >ブラウザからサーバーにあるホームページは閲覧できません(設定通りで正しいと思います) httpサービス側(Apacheですかね)で拒否しているということはありませんか? (3)について >iptables -A INPUT -i lo -j ACCEPT この設定があるのですから、ローカルループバックは全て許可になっているはずです。 >25/tcp open smtp これがあるのは、smtpサービスはローカルループバックでのみListenしているからでは。 見当違いでしたら申し訳ありません。
補足
maesen、ありがとうございます おっしゃられている事を理解できません、すみません
補足
Wr5さん、ありがとうございます 大きな勘違いをしていたようです。 『【A】で(1)で全てのポートが閉じられ、次に22番のみ解放され、さら直後に全てのポートが閉じられるので、結果としてすべてのポートが閉じた状態になり、22番も許可されない』という固定した設定になるものと考えていました。 『考え方が違うんですね、その都度上から順にチェックし、該当のポートに設定されたルールがあればそれに従い、無ければ基本として設定したルールに従う』ということなんですね。 従って『基本ルールは(1)の位置でも(3)の位置でも、どちらか1つにあれば全く同じ』ということなんですね。 【B】【C】については、何となく解かりそうです。 【D】については質問内容自体間違ってました、納得できました 【E】については、(7)は書く必要はない、書くと危険だということですよね。(--sportを書くのは必要ないし危険だと)