iptables †更新日2017-08-12 (土) 17:33:09
CentOSでのNATの設定 †/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)に許可(インターフェイスが同じ場合のとき、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の追加 †エイリアス等でネットワークやIPを追加するときは「iptables」でルールを決めた後に指定する必要がある。DROP当でその関係が拒否されると、ifconfig,route addも消えるようだ。 pptpパススルー †iptablesでは内部LANのpptpクライアントから外部のpptpサーバに接続するためのpptpパススルーがipマスカレードと併用して利用できる。しかし、Vine4.xではGREプロトコルを通すモジュール「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 (略) ファイアウォール †Vine4.xでは、iptablesがファイアウォールとしてインストールされる。 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 変更後 /etc/rc.d/init.d/iptables restart後はMASQUERADE使用しているときはMASQUERADEが無効になっているので /sbin/iptables -t nat -A POSTROUTING -o ethx -j MASQUERADEを実行する 環境 †インストールするマシンは以下ようなネット接続で G/Wおよび、各種サーバ (WWW,Mail 等)として利用する --------- (インターネット)<------>(eth1)| G/W |(eth0)<----->(ローカルネット) --------- ipchainsの停止 †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の起動および設定 †以下のようなスクリプトを実行 #!/bin/sh ##nat用モジュールをロードする /sbin/modprobe iptable_nat echo 1 > /proc/sys/net/ipv4/ip_forward ##テーブルの条件を初期化する(ただしポリシーは変更できない)
# /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マスカレードの設定(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) 注1)マスカレードの設定をしても、filterテーブルのFORWARDチェインのポリシーがDROPだと、パケットがforwardされない. ##ポリシーを決める(通過およびマシンが応答するパケットは基本的に禁止) /sbin/iptables -t filter -P FORWARD DROP /sbin/iptables -t filter -P INPUT DROP ## 確立しているコネクションのFORWARDを許可---(1) /sbin/iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT ESTABLISHED: このパケットは、過去双方向にパケットがやり取りされた接続に属するパケットである。 ## 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 (全てをLAN側からのみ通過させるには[ipマスカレードを使用時: ## 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 注) IPファイルタ †条件の追加 # /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 許可するアドレスを追加 # /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 設定の削除 †条件の指定 # /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の表示 †FORWARDでログを取ってみる 設定 # /sbin/iptables -I FORWARD 1 -j LOG --log-prefix "JE2ISM-: " 注:以下のように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がとれる うまくいったら、/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がある。デフォルトは /sbin/service iptables saveでsaveしてもよいが /etc/rc.d/init.d/iptables restart でiptablesを再起動 |