仕事場のとあるサーバには,古くはNICと言うんでしたっけ,LANのポートが2つありまして,一つは他の計算機と同じようにスイッチングハブにつないで外向けのアクセスをし,もう一つにも別のスイッチングハブをつけて内向けのネットワークを作っていました.
それぞれのネットワークアドレスの設定や,内向けのネットワークで何か接続したときにIPアドレスを割り当てる,DHCPサーバの設定,それとホスト名・IPアドレスの名前解決に必要なDNSの設定は,すでに済ませています.
それでIPアドレスの割り当てはできているのですが,そこからそのサーバを経由して,外へアクセスするのは,うまくいっていませんでした.
内外のアクセスを取り持つのは,iptablesです.これまでの設定では,どこかダメなようです.【Vine Linuxで自宅サーバー】サーバー機でルータ構築(PPPoE+iptables)の「iptablesでファイヤーウォールとIPマスカレードの設定」をいただいて,自分の環境に適した設定にしました.
#!/bin/bash # Thanks to: http://vine.1-max.net/pc-router.html #------------------------# # インターフェイスの設定 # #------------------------# WAN='eth0' # 外部インタフェース LAN='eth1' # 内部インタフェース #----------------------------------------# # ローカル・ネットワーク・アドレスの設定 # #----------------------------------------# LOCALNET='192.168.xxx.0/24' # ローカル・ネットワーク・アドレス #------------------------# # すべてのルールをクリア # #------------------------# iptables -F #/etc/init.d/iptables stop #--------------------------------------------------------------------------# # デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定 # #--------------------------------------------------------------------------# iptables -P INPUT DROP # 受信はすべて破棄 iptables -P FORWARD DROP # 通過はすべて破棄 iptables -P OUTPUT ACCEPT # 送信はすべて許可 #------------------------------------------------# # ループバックアドレスからのアクセスをすべて許可 # #------------------------------------------------# iptables -A INPUT -i lo -j ACCEPT #--------------------------------------------------# # ローカルネットワーク内からのアクセスをすべて許可 # #--------------------------------------------------# iptables -A INPUT -i $LAN -j ACCEPT iptables -A FORWARD -i $LAN -j ACCEPT #------------------------------------------------------# # ローカルネットワーク内からのインターネット接続を許可 # #------------------------------------------------------# iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward #------------------------------------------------------------# # 内部から行ったアクセスに対する外部からの応答アクセスを許可 # #------------------------------------------------------------# iptables -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT #--------------------# # フラグメントを破棄 # #--------------------# iptables -N fragment iptables -A fragment -j LOG --log-prefix '[iptables FRAGMENT] ' iptables -A fragment -j DROP iptables -A INPUT -f -i $WAN -j fragment iptables -A FORWARD -f -i $WAN -j fragment #--------------------------# # IPスプーフィング攻撃対策 # #--------------------------# iptables -N spoofing iptables -A spoofing -j LOG --log-prefix '[iptables SPOOFING] ' iptables -A spoofing -j DROP iptables -A INPUT -i $WAN -s 127.0.0.0/8 -j spoofing iptables -A INPUT -i $WAN -s 10.0.0.0/8 -j spoofing iptables -A INPUT -i $WAN -s 172.16.0.0/12 -j spoofing iptables -A INPUT -i $WAN -s 192.168.0.0/16 -j spoofing iptables -A FORWARD -i $WAN -s 127.0.0.0/8 -j spoofing iptables -A FORWARD -i $WAN -s 10.0.0.0/8 -j spoofing iptables -A FORWARD -i $WAN -s 172.16.0.0/12 -j spoofing iptables -A FORWARD -i $WAN -s 192.168.0.0/16 -j spoofing #-----------------------# # Ping of Death攻撃対策 # #-----------------------# iptables -N ping-death iptables -A ping-death -m limit --limit 1/s --limit-burst 4 -j ACCEPT iptables -A ping-death -j LOG --log-prefix '[iptables PING DEATH] ' iptables -A ping-death -j DROP iptables -A INPUT -i $WAN -p icmp --icmp-type echo-request -j ping-death iptables -A FORWARD -i $WAN -p icmp --icmp-type echo-request -j ping-death #-------------------------------# # NetBIOS関連パケットの流出防止 # #-------------------------------# iptables -N net-bios iptables -A net-bios -j LOG --log-prefix '[iptables NETBIOS] ' iptables -A net-bios -j DROP iptables -A INPUT -i $WAN -p tcp -m multiport --dports 135,137,138,139,445 -j net-bios iptables -A INPUT -i $WAN -p udp -m multiport --dports 135,137,138,139,445 -j net-bios iptables -A OUTPUT -o $WAN -p tcp -m multiport --sports 135,137,138,139,445 -j net-bios iptables -A OUTPUT -o $WAN -p udp -m multiport --sports 135,137,138,139,445 -j net-bios iptables -A FORWARD -i $WAN -p tcp -m multiport --dports 135,137,138,139,445 -j net-bios iptables -A FORWARD -i $WAN -p udp -m multiport --dports 135,137,138,139,445 -j net-bios iptables -A FORWARD -o $WAN -p tcp -m multiport --sports 135,137,138,139,445 -j net-bios iptables -A FORWARD -o $WAN -p udp -m multiport --sports 135,137,138,139,445 -j net-bios #----------------------------------# # 外部からの必須ICMPパケットを許可 # #----------------------------------# iptables -A INPUT -i $WAN -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A INPUT -i $WAN -p icmp --icmp-type source-quench -j ACCEPT iptables -A INPUT -i $WAN -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A INPUT -i $WAN -p icmp --icmp-type parameter-problem -j ACCEPT iptables -A FORWARD -i $WAN -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A FORWARD -i $WAN -p icmp --icmp-type source-quench -j ACCEPT iptables -A FORWARD -i $WAN -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A FORWARD -i $WAN -p icmp --icmp-type parameter-problem -j ACCEPT #-------------# # Ingress対策 # #-------------# iptables -N Ingress iptables -A Ingress -j LOG --log-prefix '[IPTABLES INGRESS] : ' iptables -A Ingress -j DROP iptables -A FORWARD -i $LAN ! -s $LOCALNET -j Ingress #-----------------# # パスMTU問題対処 # #-----------------# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu #---------------------# # SYNフラッド攻撃対策 # #---------------------# echo 1 > /proc/sys/net/ipv4/tcp_syncookies #---------------# # Smurf攻撃対策 # #---------------# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts #------------------------------------# # メールサーバ等のレスポンス低下防止 # #------------------------------------# iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset iptables -A FORWARD -p tcp --dport 113 -j REJECT --reject-with tcp-reset #---------------------------------------------------# # FTPサーバー(21番ポート)へのアクセスをすべて許可 # #---------------------------------------------------# #iptables -A INPUT -i $WAN -p tcp --dport 21 -j ACCEPT #------------------------------------------------# # PASV用ポート(FTP-DATA)へのアクセスをすべて許可 # # FTPサーバー構築でPASV用ポーを指定した場合のみ # #------------------------------------------------# #iptables -A INPUT -i $WAN -p tcp --dport 4000:4029 -j ACCEPT #-------------------------------------------------------# # Webサーバー(80番ポート)HTTPへのアクセスをすべて許可 # #-------------------------------------------------------# iptables -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT #---------------------------------------------------------# # Webサーバー(433番ポート)HTTPSへのアクセスをすべて許可 # # サーバー通信暗号化(HTTPS)を運営する場合のみ # #---------------------------------------------------------# iptables -A INPUT -i $WAN -p tcp --dport 443 -j ACCEPT #------------------------------------------------------# # メールサーバー(25番ポート)へのアクセスをすべて許可 # #------------------------------------------------------# iptables -A INPUT -i $WAN -p tcp --dport 25 -j ACCEPT #-------------------------------------------------------# # メールサーバー(110番ポート)へのアクセスをすべて許可 # #-------------------------------------------------------# iptables -A INPUT -i $WAN -p tcp --dport 110 -j ACCEPT #-----------------------------------------------------------# # メールサーバー(143番ポート)IMAPへのアクセスをすべて許可 # #-----------------------------------------------------------# iptables -A INPUT -i $WAN -p tcp --dport 143 -j ACCEPT #-------------------------------------------------------------# # メールサーバー(993番ポート)IMAP4sへのアクセスをすべて許可 # #-------------------------------------------------------------# iptables -A INPUT -i $WAN -p tcp --dport 993 -j ACCEPT #---------------------------------------------# # 外部からの22番ポート(SSH)へのアクセスを許可 # #---------------------------------------------# iptables -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT #---------------------------------------------------------------# # LAN内からのみSSH(22番ポート)に接続を許可 # # 「外部からの22番ポート(SSH)へのアクセスを許可」しない場合のみ # #---------------------------------------------------------------# #iptables -A INPUT -s $LOCALNET -p tcp --dport 22 -j ACCEPT #----------------------------------------# # Usermin(20000番ポート)への接続を許可 # # Userminを運営する場合のみ # #----------------------------------------# #iptables -A INPUT -i $WAN -p tcp --dport 20000 -j ACCEPT #----------------------------------------------------# # LAN内からのみWebmin(10000番ポート)への接続を許可 # #----------------------------------------------------# #iptables -A INPUT -s $LOCALNET -p tcp --dport 10000 -j ACCEPT #--------------------------------------------# # 設定ルール外のアクセスはログを記録して破棄 # #--------------------------------------------# iptables -A INPUT -j LOG --log-prefix '[iptables INPUT DROP] ' iptables -A INPUT -j DROP iptables -A FORWARD -j LOG --log-prefix '[iptables FORWARD DROP] ' iptables -A FORWARD -j DROP #----------------# # 設定内容の保存 # #----------------# #/etc/rc.d/init.d/iptables save #------------------------# # 再起動で設定内容を反映 # #------------------------# #service iptables restart
今後,見直したくなるかもしれないので,不要な設定は取り除くのではなく,コメントとしました.
あと,Linuxのディストリビューションによっては,iptablesはサーバ起動時にサービスの一つとして立ち上がる(終了時には登録内容を保存するなど)ものもありますが,Ubuntuではそうなっていないので,少し手を加えました.以下rootで作業します.上記のスクリプトファイルを/root/iptables.shに保存してから(実行属性を忘れずに),crontab -eを実行し,
@reboot /root/iptables.sh
を書いて保存しました.crontabの各行は,空白区切りで「分」「時」「日」「月」「曜日」「コマンド」を書くのが基本ですが,@rebootについては,man 5 crontabを読み進めれば,使用できることが書かれています.
今はリブートは不要なので,単純に/root/iptablesを実行し…これで,うまくいきました.
ついでなので,ネットワークのチェックでよく使うコマンドを書いておきます.