ipmasqadmをiptablesで定義する方法について

このQ&Aのポイント
  • Linuxのルーター機能で2枚のNIC構成で作成している場合、kernel-2.2では/sbin/ipmasqadmコマンドを使用してDMZにあるWebサーバーにポートフォワードしていました。
  • しかし、kernel-2.4ではこの方法は使用できず、iptablesを使った構成が必要です。具体的な定義方法は、外部からDMZゾーンにあるWebサーバーへのアクセスを可能にするために/sbin/iptablesコマンドを使用します。
  • 具体的なコマンドは以下のようになります。/sbin/iptables -A FORWARD -p tcp -s 0.0.0.0 --dport 80 -d 192.168.0.101 -j ACCEPTなど、または/sbin/iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 80 -j DNAT --to 192.168.0.101:80です。
回答を見る
  • ベストアンサー

ipmasqadmをiptablesで定義する方法について

お世話になります。 Linuxをルーター機能で2枚のNIC構成で作成しています。 kernel-2.2では下記のコマンドでDMZにあるWebサーバーにポートフォアワードしていました。 /sbin/ipmasqadm portfw -a -P tcp -L 1.2.3.4 80 -R 192.168.0.101 80 これをkernel-2.4ではiptablesを使用して構成するようですが、その定義がいまいち理解できていません。 その定義方法は下記のものだけでよろしいのでしょうかをお尋ねします。つまり、下記のみで外部からDMZゾーンにあるWebサーバーへのアクセスが可能かどうか?です。 /sbin/iptables -A FORWARD -p tcp -s 0.0.0.0 --dport 80 -d 192.168.0.101 -j ACCEPTなど・・・ /sbin/iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 80 -j DNAT --to 192.168.0.101:80 以上のヒントをお願いします。

noname#29100
noname#29100

質問者が選んだベストアンサー

  • ベストアンサー
  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.1

>/sbin/iptables -A FORWARD -p tcp -s 0.0.0.0 --dport 80 -d 192.168.0.101 -j ACCEPTなど・・・ >/sbin/iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 80 -j DNAT --to 192.168.0.101:80 >以上のヒントをお願いします。 ヒントでよろしければ。。。 LANカードを複数挿しているのに、インターフェイスの指定がまったくありません。 iptablesの仕組みを基本から勉強されることをお勧めします。 http://www.atmarkit.co.jp/flinux/rensai/security03/security03a.html

noname#29100
質問者

お礼

xjdさん、前回に引き続き回答ありがとうございます。 上に書いた、ipmasqadmでは2枚のNICでもethの指定なしで動作しているので、iptablesでの定義の必要もなし?であるのか確認したかったのです。 参考に頂いたURLは既に手元の資料として使っています。ありがとうございました。

noname#29100
質問者

補足

先ほどのヒントより、/sbin/iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 -i eth0 --dport 80 -j DNAT --to 192.168.0.101:80 として定義しました。 さらに、/sbin/iptables -A FORWARD -p tcp -s 0.0.0.0 --dport 80 -d 192.168.0.101 -j ACCEPTと/sbin/iptables -A FORWARD -p tcp ! --syn -m state --state ESTABLISHED --sport 80 -s 192.168.0.101 -d 0.0.0.0 -j ACCEPTをWebサーバーへのアクセス許可としましたが、mail・DNSサーバーはこのルーターマシンそのもので動作させる予定です。 そこで、NATの定義はmail・DNSで必要となるのでしょうか? 序にて申し訳ありませんが・・・。

その他の回答 (1)

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.2

>NATの定義はmail・DNSで必要となるのでしょうか? INPUT / OUTPUT の設定が必要です。

noname#29100
質問者

お礼

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

関連するQ&A

  • iptablesの設定について

    IISとApachのテストサイトを構築しています。 LINUXマシンにNICを2枚差し、 インターネット側:FW-OUT(eth0) プライベート側:FW-IN(eth1) WEBサイトの仮想アドレスとして、 V_WEB(eth0:1) V_WIN2K(eth0:2) MAINTマシンからPINGは172.32.0.0は通るのですが、 当該マシンから両WEBページが閲覧できません。 記述は、 http://www.atmarkit.co.jp/flinux/rensai/security03/security03a.html を参考に変更しました。 何か手がかりがあればお願いします。 #!/bin/sh # # Define IP Address FW_OUT='172.32.0.100' FW_IN='192.168.0.1' V_WEB='172.32.0.10' V_WIN2K='172.32.0.20' R_WEB='192.168.0.10' R_WIN2K='192.168.0.20' MAINT='172.32.0.150' ANY='0.0.0.0' # # Flush chains /sbin/iptables -F # /sbin/iptables -P INPUT DROP /sbin/iptables -P FORWARD DROP /sbin/iptables -P OUTPUT DROP # /sbin/iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT /sbin/iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT # /sbin/iptables -A OUTPUT -p icmp -s $FW_OUT --icmp-type 0 -d $MAINT -j ACCEPT /sbin/iptables -A INPUT -p icmp -s $MAINT --icmp-type 8 -d $FW_OUT -j ACCEPT # /sbin/iptables -A OUTPUT -p icmp -s $V_WEB --icmp-type 0 -d $MAINT -j ACCEPT /sbin/iptables -A INPUT -p icmp -s $MAINT --icmp-type 8 -d $V_WEB -j ACCEPT /sbin/iptables -A OUTPUT -p icmp -s $V_WIN2K --icmp-type 0 -d $MAINT -j ACCEPT /sbin/iptables -A INPUT -p icmp -s $MAINT --icmp-type 8 -d $V_WIN2K -j ACCEPT # /sbin/iptables -A INPUT -p icmp -s $MAINT --icmp-type 0 -d $V_WEB -j ACCEPT /sbin/iptables -A OUTPUT -p icmp -s $V_WEB --icmp-type 8 -d $MAINT -j ACCEPT /sbin/iptables -A INPUT -p icmp -s $MAINT --icmp-type 0 -d $V_WIN2K -j ACCEPT /sbin/iptables -A OUTPUT -p icmp -s $V_WIN2K --icmp-type 8 -d $MAINT -j ACCEPT # /sbin/iptables -A INPUT -p TCP -s $MAINT --dport 22 -d $FW_OUT -i eth0 -j ACCEPT /sbin/iptables -A OUTPUT -p TCP ! --syn --sport 22 -s $FW_OUT -d $MAINT -o eth0 -j ACCEPT # /sbin/iptables -A FORWARD -p TCP -s $ANY --dport 80 -d $R_WEB -j ACCEPT /sbin/iptables -A FORWARD -p TCP ! --syn -m state --state ESTABLISHED --sport 80 -s $R_WEB -d $ANY -j ACCEPT # /sbin/iptables -A FORWARD -p TCP -s $ANY --dport 443 -d $R_WEB -j ACCEPT /sbin/iptables -A FORWARD -p TCP ! --syn -m state --state ESTABLISHED --sport 443 -s $R_WEB -d $ANY -j ACCEPT # /sbin/iptables -A FORWARD -p TCP -s $ANY --dport 80 -d $R_WIN2K -j ACCEPT /sbin/iptables -A FORWARD -p TCP ! --syn -m state --state ESTABLISHED --sport 80 -s $R_WIN2K -d $ANY -j ACCEPT # /sbin/iptables -A FORWARD -p TCP -s $ANY --dport 135 -d $R_WIN2K -j ACCEPT /sbin/iptables -A FORWARD -p TCP ! --syn -m state --state ESTABLISHED --sport 135 -s $R_WIN2K -d $ANY -j ACCEPT /sbin/iptables -A FORWARD -p TCP -s $ANY --dport 137 -d $R_WIN2K -j ACCEPT /sbin/iptables -A FORWARD -p TCP ! --syn -m state --state ESTABLISHED --sport 137 -s $R_WIN2K -d $ANY -j ACCEPT /sbin/iptables -A FORWARD -p TCP -s $ANY --dport 138 -d $R_WIN2K -j ACCEPT /sbin/iptables -A FORWARD -p TCP ! --syn -m state --state ESTABLISHED --sport 138 -s $R_WIN2K -d $ANY -j ACCEPT /sbin/iptables -A FORWARD -p TCP -s $ANY --dport 139 -d $R_WIN2K -j ACCEPT /sbin/iptables -A FORWARD -p TCP ! --syn -m state --state ESTABLISHED --sport 139 -s $R_WIN2K -d $ANY -j ACCEPT /sbin/iptables -A FORWARD -p TCP -s $ANY --dport 445 -d $R_WIN2K -j ACCEPT /sbin/iptables -A FORWARD -p TCP ! --syn -m state --state ESTABLISHED --sport 445 -s $R_WIN2K -d $ANY -j ACCEPT # # Flush Nat Rules # /sbin/iptables -t nat -F # # Nat Rules # /sbin/iptables -t nat -A POSTROUTING -s $R_WEB -o eth0 -p TCP -j SNAT --to $V_WEB /sbin/iptables -t nat -A POSTROUTING -s $R_WIN2K -o eth0 -p TCP -j SNAT --to $V_WIN2K # # End Of Rules [root@firewall FW]#

  • iptables ポートフォワーディングについて

    ポートフォワーディングの設定を行いたくて試しにやっているのですが、 うまくいかないので教えていただけないでしょうか。 WinXPクライアント(192.168.1.22) | Linuxルーター(eth0=192.168.1.40, eth1=192.168.2.41)起動しているサーバーはssh,telnet,ftp,http,postgresです。 | LinuxWebサーバー(eth0=192.168.2.81 port=80)起動しているサーバーはssh,telnet,ftp,http,postgres,cvspserverです。 WinXPクライアントからLinuxWebサーバーにアクセスしたいのですが、以下のように設定しても WinXPクライアントのブラウザには「サーバーが見つかりません」と表示されてしまいます。 他に追記すべき設定、お気づき等ございましたら教えてください。よろしくお願いします。 Linuxルーターのiptables設定内容(service iptables stopを行った後、以下を設定しております) iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.2.81:80 iptables -A FORWARD -d 192.168.2.81 -p tcp --dport 80 -j ACCEPT ------------------------------------------------------------- 上記設定後iptables -Lとしてみたら以下のように表示されました。 Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere 192.168.2.81 tcp dpt:http Chain OUTPUT (policy ACCEPT) target prot opt source destination さらにservice iptables saveをして cat /etc/sysconfig/iptablesとしてみたところ以下のように表示されました。 # Generated by iptables-save v1.3.5 on Sat Jan 30 11:46:10 2010 *nat :PREROUTING ACCEPT [2:280] :POSTROUTING ACCEPT [2:115] :OUTPUT ACCEPT [2:115] -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.81:80 COMMIT # Completed on Sat Jan 30 11:46:10 2010 # Generated by iptables-save v1.3.5 on Sat Jan 30 11:46:10 2010 *filter :INPUT ACCEPT [148:9894] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [169:16447] -A FORWARD -d 192.168.2.81 -p tcp -m tcp --dport 80 -j ACCEPT COMMIT # Completed on Sat Jan 30 11:46:10 2010 ------------------------------------------------------------- ちなみに以下のように設定してWinXPクライアントからsshで192.168.1.40の10000ポートに接続すると接続できました。 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 10000 -j DNAT --to 192.168.2.41:22 ------------------------------------------------------------- 以下のように設定してWinXPクライアントから「telnet 192.168.1.40 10000」コマンドを発行してみるとしていない 時と比べて「接続中: 192.168.1.40...」となっている時間が長いので何かしら影響しているのかなと思います。 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 10000 -j DNAT --to 192.168.2.81:23

  • iptablesを使用してのDNSゾーン転送の設定。

    今後Linuxをルーターとしてサーバー公開を目指しています。 グローバルIP=10.10.10.10(ルーターインターフェース=eth0) プライベートIP=192.168.0.1(ルーターインターフェースeth1) PrimaryDNS=10.10.10.10:53をプライベートIPに変換=192.168.0.2:53 セカンダリDNS=20.20.20.20 Linuxルータはiptablesのみ動作。 primaryDNSサーバーはwindows2000を使用しています。 iptablesにより、Preroutingを使用して10.10.10.10:53→192.168.0.2:53の変換。 POSTROUTINGにより192.168.0.2→10.10.10.10:53へ変換と設定しています。 # iptables -t nat -A PREROUTING -p tcp -d 10.10.10.10 -dport53 -j DNAT -to-destinalion 192.168.1.20:53 # iptables -t nat -A POSTROUTING -p tcp -s 10.10.10.10 -sport53 -j SNAT -to-source 192.168.1.20:53 # iptables -t nat -A PREROUTING -p udp -d 10.10.10.10 -dport53 -j DNAT -to-destinalion 192.168.1.20:53 # iptables -t nat -A POSTROUTING -p udp -s 10.10.10.10 -sport53 -j SNAT -to-source 192.168.1.20:53 そこで質問なのですが、この際Win2000でゾーン転送のセカンダリDNSの宛先アドレスはどうしたらよろしいのでしょうか? その際、iptablesの記述も教えてください。 一応、 # iptables -A FORWARD -p tcp -dport53 -j ACCEPT # iptables -A FORWARD -p udp -dport53 -j ACCEPT 53ポートのtcp,udpを許可しています。

  • iptablesの記述方法

    RedHatLinux9 でサーバ兼ルータ兼ファイアウォールを構築しています。(DMZを1台使用) iptables の記述が、なかなか分かりやすく解説しているものがなくて困っています。 特に -N の記述方法がよく分かりません。 DMZ側のファイアウォールとして、 # NetBIOS関連のパケットはログをとり、インターネットに出さない と設定する場合、下記のようでよいのでしょうか? iptables -N net-bios iptables -A net-bios -j LOG --log-prefix "### NetBIOS ###" iptables -A net-bios -j DROP iptables -A FORWARD -p tcp -m multiport --sport 135,137,138,139,445 -j net-bios iptables -A FORWARD -p udp -m multiport --sport 135,137,138,139,445 -j net-bios iptables -A FORWARD -p tcp -m multiport --dport 135,137,138,139,445 -j net-bios iptables -A FORWARD -p udp -m multiport --dport 135,137,138,139,445 -j net-bios

  • iptablesでポートフォアワードがうまくいかない。

    お世話になります。下記の通りiptablesでフィルターとNATの定義をしました。 しかし、内部からネットへの接続は可能ですが、外部からWebサーバーにあるHPが見れない指摘を受け、その原因を調べています。 不備な点、ご指導賜りたく存じます。 eth0:1.2.3.4 ---------- | Linux | ----------- eth1:192.168.0.101   | websever:192.168.0.100 cla:192.168.0.102~ modprobe iptable_nat modprobe ip_conntrack_ftp modprobe ip_nat_ftp iptables -F iptables -t nat -F iptables -t mangle -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT iptables -A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j ACCEPT iptables -A OUTPUT -o eth1 -d 192.168.0.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT iptables -A OUTPUT -p tcp --dport 80 -s 1.2.3.4 -j ACCEPT iptables -A INPUT -p tcp --dport 53 -d 1.2.3.4 -j ACCEPT iptables -A OUTPUT -p tcp --dport 53 -s 1.2.3.4 -j ACCEPT iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 -i eth0 --dport 80 -j DNAT --to 192.168.0.100:80 iptables -A FORWARD -i eth1 -o eth0 -s 192.168.0.0/24 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4 iptables -t nat -A POSTROUTING -s 192.168.0.102/32 -o eth0 -j MASQUERADE

  • iptablesを使ってルーターを作りたい

    今、iptablesを使ってルーターを作りたいと思っています。 グローバルIPは複数利用できます。 ルーターに使うLinux(CentOS4.3) eth0:192.168.100.1 ⇒ LAN内 eth1:210.*.*.1 ⇒ インターネット という感じになっています 上記ルーターには、外部からグローバルIPでアクセスできるようになっています。 現在、 iptables -t nat -A POSTROUTING -s 192.168.100.0/255.255.255.0 -o eth1 -j MASQUERADE とやり、LAN内からインターネットにはつなげるようになっています。 グローバルIP 210.*.*.2 で外部からアクセスがあった時に プライベートIP 192.168.100.2 にすべて中継する設定をしたいとおもっています。 iptables -t nat -A PREROUTING -d 210.*.*.2 -p tcp --dport 80 -j DNAT --to 192.168.100.2 とやってみたのですが、外部からはアクセスすることはできませんでした。 どなたか、教えてもらえると助かります。

  • iptablesの設定 NetBiosについて

    RedHat9 Linux でサーバ兼ルータを構築しています。(DMZも使用しています) (WAN側 ppp0 、DMZ側 eth1、LAN側 eth2) iptables の設定として、 # ポリシーの設定 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # NetBIOS関連のパケットはログをとり、インターネットに出さない iptables -N net-bios iptables -A net-bios -j LOG --log-prefix "### NetBIOS ###" iptables -A net-bios -j DROP iptables -A INPUT -i ppp0 -p tcp -m multiport --sport 135,137,138,139,445 -j net-bios iptables -A INPUT -i ppp0 -p udp -m multiport --sport 135,137,138,139,445 -j net-bios iptables -A INPUT -i ppp0 -p tcp -m multiport --dport 135,137,138,139,445 -j net-bios iptables -A INPUT -i ppp0 -p udp -m multiport --dport 135,137,138,139,445 -j net-bios iptables -A FORWARD -p tcp -m multiport --sport 135,137,138,139,445 -j net-bios iptables -A FORWARD -p udp -m multiport --sport 135,137,138,139,445 -j net-bios iptables -A FORWARD -p tcp -m multiport --dport 135,137,138,139,445 -j net-bios iptables -A FORWARD -p udp -m multiport --dport 135,137,138,139,445 -j net-bios というのを設定しました。 下記のサイトを参考にしました。 http://www.kkoba.com/linuxrouter/iptables.shtml ところで、NetBIOS関連のパケットはログをとり、インターネットに出さない という設定は必要ですか? これだと異常にたくさんのログが取れてしまいますが。。

  • iptables について

    いつもお世話になっております。 iptables について質問させてください。 下記の2つのフィルター、1と2のフィルターとしての違いはなんでしょうか? また、state NEW,ESTABLISH を指定することでどのようなメリットがあるのでしょうか? すみませんが、教えてください。 以上、よろしくお願い致します。 1.iptables -I RH-Firewall-1-INPUT 10 -p tcp --dport 80 -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT 2.iptables -I RH-Firewall-1-INPUT 10 -p tcp -m state --state NEW,ESTABLISHED,RELATED --dport 80 -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

  • iptablesの設定がうまく反映されません

    iptablesを有効にすると、サーバが公開しているウエブページの閲覧がローカル、外部ドメインともにできません。内部名前解決もできなくなってしまいます。メールもローカル、外部ドメインからも送受信できなくなります。 無効にすると、全て問題なく動作します。 iptables無効状態ではHTTP:80、HTTPS:443 SMTP:25/587、POP3:110/995、IMAP:143/993 は外部からポートスキャンで、アクセスできましたとなります。 iptablesを有効にすると、どのポート番号もポートスキャンで、アクセスできませんとなります。設定は下記のとおりです。有効状態で唯一、22番だけポートスキャンで成功します。 何がいけないのでしょうか。よろしくお願いします。 環境:CentOS6.2 、1台のサーバでApache,Bind,Postfix/Dovecot が稼動中です。 [root@hogehoge ~]# cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Tue Jun 12 22:39:14 2012 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [24:2320] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A INPUT -s 192.168.0.0/24 -j ACCEPT -A INPUT -j LOG --log-prefix "[iptables] " --log-level 6 -A INPUT -p udp -m udp --dport 53 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT -A INPUT -p tcp -m tcp --sport 25 -j ACCEPT -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -p tcp -m tcp --dport 587 -j ACCEPT -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Tue Jun 12 22:39:14 2012

  • tomcatがiptablesを起動させると動かな

    tomcatがiptablesを起動させると動きません。 iptablesを停止させると、コンパイルしたhelloworldが動くのでtomcat自体はきちんとセットアップされていると思います。 なのでiptablesの設定だとおもうのですが、何がわるいのでしょうか? 以下が今現在設定しているiptablesです。 # Generated by iptables-save v1.4.7 on Thu Sep 6 09:52:54 2012 *filter -P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N NEW-DEFINE -A INPUT -j NEW-DEFINE -A FORWARD -j NEW-DEFINE -A NEW-DEFINE -p tcp -m tcp --dport 80 -j ACCEPT -A NEW-DEFINE -p tcp -m tcp --dport 22 -j ACCEPT -A NEW-DEFINE -p tcp -m tcp --dport 8005 -j ACCEPT -A NEW-DEFINE -p tcp -m tcp --dport 8009 -j ACCEPT -A NEW-DEFINE -p tcp -m tcp --dport 8080 -j ACCEPT -A NEW-DEFINE -p tcp -m tcp --dport 8443 -j ACCEPT COMMIT # Completed on Thu Sep 6 09:52:54 2012 tomcatがつかうportは全て開放しているのですが、 これのどこがわるいのでしょうか? 識者の方ご教授ください。