*iptables [#v463bb39] RIGHT:更新日&lastmod(); **CentOSでのNATの設定 [#ade7eb01] /etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Wed Sep 21 22:14:47 2011 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [11:1476] -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 # FORWARDをLAN(eth0:1)からWAN(eth0)に許可 # FORWARDをLAN(eth0:1)からWAN(eth0)に許可(インターフェイスが同じ場合のとき、eth0,eth1のように異なる場合は動作しなくなる) ##-A FORWARD -i eth0:1 -j ACCEPT ##-A FORWARD -o eth0 -j ACCEPT # それ以外はFORWARD拒否 ##-A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Wed Sep 21 22:14:47 2011 # Generated by iptables-save v1.4.7 on Wed Sep 21 22:14:47 2011 *nat :PREROUTING ACCEPT [1:60] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [1:108] # MASQUERADEの設定 -A POSTROUTING -o eth0 -j MASQUERADE COMMIT # Completed on Wed Sep 21 22:14:47 2011 ''確認コマンド'' # /sbin/iptables-save ''FORWORDの設定コマンド'' # echo 1 > /proc/sys/net/ipv4/ip_forward # /sbin/modprobe iptable_nat ip_forwardは「/etc/sysctl.conf」に書き込み次のコマンドで設定でも可 # sysctl -p **ネットワーク、IPの追加 [#m6eaefa9] &color(red){エイリアス等でネットワークやIPを追加するときは「iptables」でルールを決めた後に指定する必要がある。DROP当でその関係が拒否されると、ifconfig,route addも消えるようだ。}; **pptpパススルー [#t0ef8f43] iptablesでは内部LANのpptpクライアントから外部のpptpサーバに接続するためのpptpパススルーがipマスカレードと併用して利用できる。しかし、Vine4.xではGREプロトコルを通すモジュール&color(red){「ip_nat_pptp」};をつけ加えなくてはいけない ''構成図'' ----------------- eth0:1---------- |pptpクライアント|==============| GW | ------------------ |eth0 | | | ---------- ------------ ------------- |======================|WAN |====|pptpサーバ | ------------ ------------- ''設定方法'' # /sbin/ifconfig eth0:1 10.99.99.98 # /sbin/modprobe iptable_nat # /sbin/modprobe ip_nat_pptp <==このモジュール(pptpパススルー)が必要 # echo 1 > /proc/sys/net/ipv4/ip_forward # /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ''スプーフィング対策としてカーネルパラメータのrp_filterを有効''~ 送信アドレスの偽装を防ぐらしい。 # echo 1 >/proc/sys/net/ipv4/conf/eth1/rp_filter # echo 1 >/proc/sys/net/ipv4/conf/eth0/rp_filter ''確認'' # /sbin/lsmod Module Size Used by ipt_MASQUERADE 7680 1 ip_nat_pptp 10244 0 ip_conntrack_pptp 14736 1 ip_nat_pptp iptable_nat 12036 1 ip_nat 21548 3 ipt_MASQUERADE,ip_nat_pptp,iptable_nat ip_tables 17108 1 iptable_nat ip_conntrack 52568 5 ipt_MASQUERADE,ip_nat_pptp,ip_conntrack_pptp,iptable_nat,ip_nat nfnetlink 10520 2 ip_nat,ip_conntrack x_tables 16644 3 ipt_MASQUERADE,iptable_nat,ip_tables (略) **ファイアウォール [#q5c0284c] Vine4.xでは、iptablesがファイアウォールとしてインストールされる。~ 設定は/etc/sysconfig/iptablesにあるのでそれを以下のように編集しiptablesを再起動すればOK~ ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https <==追加 しかしこれだけだとX上のユーティリティに反映されないので以下も変更しておく /etc/sysconfig/system-config-securitylevel # system-config-securitylevel config written out by anaconda -f --enabled --port=22:tcp --port=80:tcp --port=443:tcp <==追加 --port=25:tcp &color(red){変更後 /etc/rc.d/init.d/iptables restart後はMASQUERADE使用しているときはMASQUERADEが無効になっているので /sbin/iptables -t nat -A POSTROUTING -o ethx -j MASQUERADEを実行する}; **環境 [#m73e8b55] インストールするマシンは以下ようなネット接続で G/Wおよび、各種サーバ (WWW,Mail 等)として利用する~ よって、ローカル側からはipマスカレードを利用しインターネットにアクセスしインターネット側からはローカルネットへのアクセス禁止とG/W内部へのアクセスも必要以外のポートを禁止する。 --------- (インターネット)<------>(eth1)| G/W |(eth0)<----->(ローカルネット) --------- **ipchainsの停止 [#q2093208] ipchainsが動作しているときはこれを停止する # /sbin/lsmod (確認コマンド) sis900 11264 1 (autoclean) ipchains 38976 0 (unused) ^^^^^^^^<-ipchainsが動作している usb-uhci 20720 0 (unused) # /sbin/rmmod ipchains (停止コマンド) 起動時に動作させないようように # /sbin/chkconfig --list (確認コマンド) apmd 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ ipchains 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^これをオフにする iptables 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ identd 0:オフ 1:オフ 2:オフ 3:オフ 4:オフ 5:オフ 6:オフ # /sbin/chkconfig --del ipchains (起動時起動しないようにする) **iptablesの起動および設定 [#z8c62fc3] 以下のようなスクリプトを実行 #!/bin/sh ##nat用モジュールをロードする /sbin/modprobe iptable_nat echo 1 > /proc/sys/net/ipv4/ip_forward ##テーブルの条件を初期化する(ただしポリシーは変更できない) |テーブル名 |チェイン名 | |filter |INPUT | |~|OUTPUT | |~|FORWARD | |nat |OUTPUT | |~|PREROUTING | |~|POSTROUTING | |チェイン名 |説明 | |INPUT |受信したパケットに対するチェイン | |OUTPUT |送信したパケットに対するチェイン | |FORWARD |対象サーバを経由するパケットに対するチェイン | |PREROUTING |受信時にパケットのアドレス変換をするチェイン | |POSTROUTING |送信時にパケットのアドレス変換をするチェイン | # /sbin/iptables -t filter -F FORWARD <--FORWARDの初期化 # /sbin/iptables -t filter -F INPUT <--INPUTの初期化 # /sbin/iptables -t nat -F POSTROUTING <--POSTROUTINGの初期化 全ての初期化なら /sbin/iptables -F でよい ##ipマスカレードの設定(&color(red){LAN側[eth0]に別ネットワークがあった場合route addされているとマスカレードされないで元IPでその追加されたLAN側のネットワークにアクセスに行く};) /sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE (指定IPだけNAT: /sbin/iptables -t nat -A POSTROUTING -o eth1 -s 10.0.0.0/8 -j MASQUERADE) &color(red){注1)マスカレードの設定をしても、filterテーブルのFORWARDチェインのポリシーがDROPだと、パケットがforwardされない.}; ##ポリシーを決める(通過およびマシンが応答するパケットは基本的に禁止) /sbin/iptables -t filter -P FORWARD DROP /sbin/iptables -t filter -P INPUT DROP ## 確立しているコネクションのFORWARDを許可&color(red){---(1)}; /sbin/iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT ESTABLISHED: このパケットは、過去双方向にパケットがやり取りされた接続に属するパケットである。 ~ NEW: このパケットが新しい接続を開始したか、 双方向にはパケットがやり取りされていない接続に属するパケットである。 RELATED: このパケットが新しい接続を開始しているが、 FTP データ転送や ICMP エラーのように、既存の接続に関係している。 &color(red){注)NEWを入れると、WAN側からも新しいも入ってくるので、WAN側からLAN側にも接続できるようになる.}; ## pingの通過および応答を許可 /sbin/iptables -t filter -A FORWARD -i eth0 -p icmp -j ACCEPT (注1で一切パケットをWAN側に流さないのでicmpだけインターフェイスeth0(LAN)だけ 許可する。両方許可するとWANからもicmpが流れてくる) /sbin/iptables -t filter -A INPUT -i eth1 -p icmp -j ACCEPT ## DNS問い合わせの通過および応答を許可 /sbin/iptables -t filter -A FORWARD -i eth0 -p udp --dport 53 -j ACCEPT /sbin/iptables -t filter -A INPUT -i eth1 -p udp --dport 53 -j ACCEPT ## wwwの通過および応答を許可 /sbin/iptables -t filter -A FORWARD -i eth0 -p tcp --dport 80 -j ACCEPT /sbin/iptables -t filter -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT ## POPの通過および応答を許可 /sbin/iptables -t filter -A FORWARD -i eth0 -p tcp --dport 110 -j ACCEPT /sbin/iptables -t filter -A INPUT -i eth1 -p tcp --dport 110 -j ACCEPT ## SMTPの通過および応答を許可 /sbin/iptables -t filter -A FORWARD -i eth0 -p tcp --dport 25 -j ACCEPT /sbin/iptables -t filter -A INPUT -i eth1 -p tcp --dport 25 -j ACCEPT &color(red){(全てをLAN側からのみ通過させるには[ipマスカレードを使用時:};~ &color(red){マスカレード使用しないと戻りパケットがLAN側のみの場合は通過しない。また、};~ &color(red){確立しているコネクションのFORWARDを許可(1)[SPI(ステートフルインスペクション)]を設定する必要がある]};~ &color(red){/sbin/iptables -t filter -A FORWARD -i eth0 -j ACCEPT};~ &color(red){とすればよい)};~ ## ftp通信用モジュールのロード(FTPの通過および応答を許可) /sbin/iptables -t filter -A FORWARD -i eth0 -p tcp --dport 21 -j ACCEPT /sbin/iptables -t filter -A INPUT -i eth1 -p tcp --dport 21 -j ACCEPT /sbin/modprobe ip_nat_ftp /sbin/modprobe ip_conntrack_ftp &color(red){注)};~ filterで自分自身を許可する場合は自分のIPではなく127.0.0.1でしか有効にならない場合もあるようだ。 **IPファイルタ [#j5cc9437] ''条件の追加''~ ポリシはすべてACCEPT、ポート21を192.168.10.0/24以外からのアクセスを拒否 # /sbin/iptables -A INPUT -p tcp --dport 21 -s ! 192.168.10.0/24 -j DROP ''設定状況の表示''~ # /sbin/iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP tcp -- !192.168.10.0/24 anywhere tcp dpt:ftp Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination ''NATの表示は''~ # /sbin/iptables -t nat -n -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT) target prot opt source destination 許可するアドレスが1つしか設定できないので許可するアドレスを羅列して その後それ以外を拒否 ''全てを拒否''~ # /sbin/iptables -A INPUT -p tcp --dport 21 -s 0.0.0.0/0 -j DROP # /sbin/iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP tcp -- anywhere anywhere tcp dpt:ftp Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination ''許可するアドレスを追加''~ DROPより先に追加する必要があるので、-I INPUT 1(<=1行目に追加の意味) # /sbin/iptables -I INPUT 1 -p tcp --dport 21 -s 192.168.10.24 -j ACCEPT ^^^^^^^^^^^順番に注意(チェイン名の後にNoを指定) # /sbin/iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 192.168.10.24 anywhere tcp dpt:ftp DROP tcp -- anywhere anywhere tcp dpt:ftp Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination ***設定の削除 [#i12ba62a] ''条件の指定''~ # /sbin/iptables -D INPUT -p tcp --dport 21 -s 192.168.10.24 -j ACCEPT ''行数の指定''~ # /sbin/iptables -D INPUT 2 ''POSTROUTINGの場合'' # /sbin/iptables -t nat -D POSTROUTING 2 ***Logの表示 [#s623a2a5] ''FORWARDでログを取ってみる'' 設定 # /sbin/iptables -I FORWARD 1 -j LOG --log-prefix "JE2ISM-: " &color(red){注:以下のようにMASQUERADEよりLOGのほうが先にセットされないとLOGが出力されない}; # /sbin/iptables -L (略) Chain FORWARD (policy ACCEPT) target prot opt source destination LOG 0 -- anywhere anywhere LOG level warning prefix `MASQUERAD by JE2ISM ' ACCEPT icmp -- anywhere anywhere (略) /var/log/messagesにログが出る Dec 28 09:59:46 vmvine42 kernel: JE2ISM-: IN=eth1 OUT=eth0 SRC=192.168.99.2 DST=192.244.75.246 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=52158 DF PROTO=TCP SPT=1364 DPT=8089 WINDOW=64240 RES=0x00 SYN URGP=0 Dec 28 09:59:49 vmvine42 kernel: JE2ISM-: IN=eth1 OUT=eth0 SRC=192.168.99.2 DST=192.244.75.246 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=52159 DF PROTO=TCP SPT=1364 DPT=8089 WINDOW=64240 RES=0x00 SYN URGP=0 ''MASQUERADでは'' # /sbin/iptables -A FORWARD -j LOG --log-prefix "MASQUERAD by JE2ISM " # /sbin/iptables -t nat -A POSTROUTING -j LOG --log-prefix "MASQUERAD by JE2ISM " /var/log/messagesにログが出る Dec 28 07:27:04 vmvine42 kernel: MASQUERAD by JE2ISM IN=eth1 OUT=eth1 SRC=192.168.99.2 DST=216.218.229.84 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=738 DF PROTO=TCP SPT=1148 DPT=80 WINDOW=64240 RES=0x00 SYN URGP=0 Dec 28 07:27:10 vmvine42 kernel: MASQUERAD by JE2ISM IN=eth1 OUT=eth1 SRC=192.168.99.2 DST=216.218.229.84 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=739 DF PROTO=TCP SPT=1148 DPT=80 WINDOW=64240 RES=0x00 SYN URGP=0 ただ某所ではCPUリソースが異常に増えたのでFORWARDで代用した ------ /sbin/iptables -I INPUT 1 -j LOG --log-prefix "iptables_log: " /var/messagesにiptables_log:の文字列とともにlogがとれる~ ただし、入力されるパケットが全て記録されるので、デバッグ以外使用しないほうが~ いいかも?これも1行目であれば全て記録するが、適用な行のときはその行の以前に~ 適用されたルールは記録されない。~ うまくいったら、/etc/rc.d/rc.localにでも書けばOK または、 # /sbin/service iptables save で /etc/sysconfig/iptablesに保存される /etc/sysconfig/iptables *filter <---(1) :INPUT ACCEPT [325:26749] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [306:44475] [0:0] -A INPUT -s ! 192.168.10.0/255.255.255.0 -p tcp -m tcp --dport 21 -j DROP ^^^^^^^^^^^保存された内容 COMMIT (1)は-tオプションで指定されるテーブルで、filter,nat,mangleがある。デフォルトは~ filterで,~ filter: INPUT,OUTPUT,FORWARDがある~ nat:このテーブルは新しい接続を開くようなパケットに対して参照される。~ PREROUTING, OUTPUT がある~ mangle: このテーブルは特別なパケット変換に使われる。~ 詳しくはman参照。~ /sbin/service iptables saveでsaveしてもよいが~ 直接編集しても良い。~ [0:0]部分はなくても動作するようだ~ 編集後~ /etc/rc.d/init.d/iptables restart でiptablesを再起動 -------------------------------------------------------------------------------- RIGHT:[[元ページ:http://wwwism.dyndns.org/hp/linux/iptables.htm]]