CentRouter
の編集
index.php?CentRouter
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
#contents(); 2007年9月23日に マイクロ総研 の Gigabit Router のファームウエアバージョンアップに失敗したので、~spirit.hmuna.com をルーターとして利用開始した。 - pppoe 接続ルーター - ip masquerade ( NATPT ) - iptables ( fire wll ) の3つの機能を spirit.hmuna.com に実装する。 また、休止していた named 機能を再設定して復活させ~ dhcpd と合わせ 基幹 Network 機器として活用することにした。 今回の設定は基本的に [[CentOSで自宅サーバー構築:http://centossrv.com/]] のサイトの内容を参照して作成した *** 2ndery ether port ( eth1 ) の活性化 [#p6d4a0b7] - サーバーに標準搭載されている Marvel の Gigabit LAN ポートが Cent OS5 から使えるようになったので有効化 - 起動時に eth0 → eth1 → ppp0 の順に起動されるので eth1 は起動時に dhcp からアドレスをもらえない - 固定 IP なので eth1 起動時に固定 IP を付与するような設定にしてある - &ref(ifcfg-eth1,center,/etc/sysconfig/network-scripts/ifcfg-eth1); に設定情報が反映される *** pppoe 接続 [#uf4c40fe] - adsl-setup という設定スクリプトを利用して ppp0 を作成する - IIJmio から付与されている アカウント、パスワード、DNS を 登録する - 起動時に pppoe に自動接続し、常時接続するように設定する -- user_name = bn3221914@bnf1.iij.ad.jp -- password = freedman -- prinary DNS = 210.130.232.1 -- secondery DNS = 210.130.1.1 - &ref(ifcfg-ppp0,center,/etc/sysconfig/network-scripts/ifcfg-ppp0); に設定情報が反映される - DNS サーバー(named)をこのサーバー上で動かすので /etc/resoluve.conf に対する DNS 自動登録をコメントアウト - LAN 内のサーバーのアドレスを外部から引かないようにローカルサーバーDNS を引くように登録する [root@spirit ~]# cat /etc/resolv.conf # MADE-BY-RP-PPPOE #nameserver 210.130.232.1 #nameserver 210.130.1.1 nameserver 127.0.0.1 *** masquerade の設定 [#h25813e1] - ipv4forward を有効にすることで masquerade が有効になる - 実際の設定は 次の iptables の設定用スクリプトの中に設定情報がある *** iptables の設定 [#n96c6da4] - [[Iptablesチュートリアル 1.2.0(日本語):http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/index.html]] - 参考 Web ---> [[PCルーター構築(PPPoE+iptables):http://centossrv.com/linux-router.shtml]] - 参考 Web ---> [[iptablesの設定:http://cyberam.dip.jp/linux_security/iptables/iptables_main.html]] - iptables 設定用のスクリプト(オリジナル設定) ----> &ref(iptables-router.sh); - iptables 設定用のスクリプト(ulogd を使って iptable_log_analyzer を使うように変更したバージョン) ----> &ref(iptables-router.sh_20080202); - iptables 設定用のスクリプト(bittorrent に対応したバージョン)-----> &ref(iptables-router.sh_20081229); [root@spirit ~]# cat /root/script/iptables-router.sh #!/bin/bash #---------------------------------------# # 設定開始 # #---------------------------------------# # 内部インタフェース名定義 LAN=eth0 # 公開外部インタフェース名定義 PUBLIC_WAN=ppp0 # 公開サーバープライベートIPアドレス定義 SERVER=192.168.1.22 HOME=192.168.1.0/24 #---------------------------------------# # 設定終了 # #---------------------------------------# # 自ホストプライベートIPアドレス取得 IPADDR=`ifconfig $LAN|sed -e 's/^.*inet addr:\([^ ]*\).*$/\1/p' -e d` # 内部ネットワークのネットマスク取得 LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d` # 内部ネットワークアドレス取得 LOCALNET_ADDR=`netstat -rn|grep $LAN|grep $LOCALNET_MASK|grep 0.0.0.0|cut -f1 -d' '` LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK # 外部インタフェース名取得 # ※マルチセッション対応 cd /etc/sysconfig/network-scripts WANLIST=`ls ifcfg-ppp* | LANG=C egrep -v '(ifcfg-lo|:|-range|rpmsave|rpmorig|rpmnew)' | \ LANG=C egrep -v '(~|\.bak)$' | \ LANG=C egrep 'ifcfg-[A-Za-z0-9\._-]+$' | \ sed 's/^ifcfg-//g' | sed 's/[0-9]/ &/' | LANG=C sort -k 1,1 -k 2n | sed 's/ //'` # 読み込み対象モジュール追加 sed -i '/IPTABLES_MODULES/d' /etc/sysconfig/iptables-config modinfo ip_nat_pptp > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "IPTABLES_MODULES=\"ip_conntrack_ftp ip_nat_ftp ip_nat_pptp\"" >> /etc/sysconfig/iptables-config else echo "IPTABLES_MODULES=\"ip_conntrack_ftp ip_nat_ftp\"" >> /etc/sysconfig/iptables-config fi # パケット転送停止 # ※ルール設定中のパケット通過防止 sysctl -w net.ipv4.ip_forward=0 > /dev/null # ファイアウォール停止(すべてのルールをクリア) /etc/rc.d/init.d/iptables stop # デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定 iptables -P INPUT DROP # 受信はすべて破棄 iptables -P OUTPUT ACCEPT # 送信はすべて許可 iptables -P FORWARD DROP # 通過はすべて破棄 # SYN Cookiesを有効にする # ※TCP SYN Flood攻撃対策 sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf # ブロードキャストアドレス宛pingには応答しない # ※Smurf攻撃対策 sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf # ICMP Redirectパケットは拒否 sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf for dev in `ls /proc/sys/net/ipv4/conf/` do sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf done # Source Routedパケットは拒否 sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf for dev in `ls /proc/sys/net/ipv4/conf/` do sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf done # フラグメント化されたパケットはログを記録して破棄 iptables -N LOG_FRAGMENT iptables -A LOG_FRAGMENT -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES FRAGMENT] : ' iptables -A LOG_FRAGMENT -j DROP iptables -A INPUT -f -j LOG_FRAGMENT iptables -A FORWARD -f -j LOG_FRAGMENT # 外部からの送信元がプライベートIPアドレスのパケットはログを記録して破棄 # ※IP spoofing攻撃対策 iptables -N LOG_SPOOFING iptables -A LOG_SPOOFING -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES SPOOFING] : ' iptables -A LOG_SPOOFING -j DROP for WAN in $WANLIST do iptables -A INPUT -i $WAN -s 127.0.0.0/8 -j LOG_SPOOFING iptables -A INPUT -i $WAN -s 10.0.0.0/8 -j LOG_SPOOFING iptables -A INPUT -i $WAN -s 172.16.0.0/12 -j LOG_SPOOFING iptables -A INPUT -i $WAN -s 192.168.0.0/16 -j LOG_SPOOFING iptables -A FORWARD -i $WAN -s 127.0.0.0/8 -j LOG_SPOOFING iptables -A FORWARD -i $WAN -s 10.0.0.0/8 -j LOG_SPOOFING iptables -A FORWARD -i $WAN -s 172.16.0.0/12 -j LOG_SPOOFING iptables -A FORWARD -i $WAN -s 192.168.0.0/16 -j LOG_SPOOFING done # 外部とのNetBIOS関連のアクセスはログを記録せずに破棄 for WAN in $WANLIST do iptables -A INPUT -i $WAN -p tcp -m multiport --dports 135,137,138,139,445 -j DROP iptables -A INPUT -i $WAN -p udp -m multiport --dports 135,137,138,139,445 -j DROP iptables -A OUTPUT -o $WAN -p tcp -m multiport --sports 135,137,138,139,445 -j DROP iptables -A OUTPUT -o $WAN -p udp -m multiport --sports 135,137,138,139,445 -j DROP iptables -A FORWARD -i $WAN -p tcp -m multiport --dports 135,137,138,139,445 -j DROP iptables -A FORWARD -i $WAN -p udp -m multiport --dports 135,137,138,139,445 -j DROP iptables -A FORWARD -o $WAN -p tcp -m multiport --sports 135,137,138,139,445 -j DROP iptables -A FORWARD -o $WAN -p udp -m multiport --sports 135,137,138,139,445 -j DROP done # 1秒間に4回を超えるpingはログを記録して破棄 iptables -N LOG_PINGDEATH iptables -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT iptables -A LOG_PINGDEATH -j LOG --log-prefix '[IPTABLES PINGDEATH] : ' iptables -A LOG_PINGDEATH -j DROP iptables -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH iptables -A FORWARD -o ! $WAN -p icmp --icmp-type echo-request -j LOG_PINGDEATH # 送信元IPアドレスが内部ネットワーク範囲外のアクセスはログを記録して破棄 # ※Ingress対策 iptables -N LOG_INGRESS iptables -A LOG_INGRESS -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES INGRESS] : ' iptables -A LOG_INGRESS -j DROP iptables -A FORWARD -i $LAN -s ! $LOCALNET -j LOG_INGRESS # パスMTU問題対処 iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu # 自ホストからのアクセスをすべて許可 iptables -A INPUT -i lo -j ACCEPT # 内部からのアクセスをすべて許可 iptables -A INPUT -i $LAN -j ACCEPT iptables -A FORWARD -i $LAN -j ACCEPT # 内部からのインターネットへの同時接続を可能にする # ※IP masquerade(NAPT) for WAN in $WANLIST do iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE done # 内部から行ったアクセスに対する外部からの返答アクセスを許可 for WAN in $WANLIST do iptables -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT done # 外部からの必須ICMPパケットを許可 iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A INPUT -p icmp --icmp-type source-quench -j ACCEPT iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT iptables -A FORWARD -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A FORWARD -p icmp --icmp-type source-quench -j ACCEPT iptables -A FORWARD -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A FORWARD -p icmp --icmp-type parameter-problem -j ACCEPT # 113番ポート(IDENT)へのアクセスには拒否応答 # ※メールサーバ等のレスポンス低下防止 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 #----------------------------------------------------------# # 自ホストが各種サービスを公開する場合の設定(ここから) # #----------------------------------------------------------# router_eq_server(){ # 外部からの8822番ポート(SSH)へのアクセスを許可 # ※SSHサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 8822 -j ACCEPT # 外部からのTCP/UDP53番ポート(DNS)へのアクセスを許可 # ※外部向けDNSサーバーを運用する場合のみ # iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 53 -j ACCEPT # iptables -A INPUT -i $PUBLIC_WAN -p udp --dport 53 -j ACCEPT # 家庭内からのDNS問い合わせを許可 ### iptables -A INPUT -p udp -s $HOME --dport 53 -j ACCEPT iptables -A OUTPUT -p udp -d $HOME --sport 53 -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW -s $HOME --dport 53 -j ACCEPT # 家庭内からのSWAT(SWAT:901)アクセスを許可 ### iptables -A INPUT -p tcp -m state --state NEW -s $HOME --dport 901 -j ACCEPT # 外部からの80番ポート(HTTP)へのアクセスを許可 # ※Webサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 80 -j ACCEPT # 外部からの443番ポート(HTTPS)へのアクセスを許可 # ※Webサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 443 -j ACCEPT # 外部からの21番ポート(FTP)へのアクセスを許可 # ※FTPサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 21 -j ACCEPT # 外部からのPASV用ポート(FTP-DATA)へのアクセスを許可 # ※FTPサーバーを公開する場合のみ # ※PASV用ポート60000:60030は当サイトの設定例 iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 60000:60030 -j ACCEPT # 外部からの25番ポート(SMTP)へのアクセスを許可 # ※SMTPサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 25 -j ACCEPT # 外部からの465番ポート(SMTPS)へのアクセスを許可 # ※SMTPSサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 465 -j ACCEPT # 外部からの110番ポート(POP3)へのアクセスを許可 # ※POP3サーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 110 -j ACCEPT # 外部からの995番ポート(POP3S)へのアクセスを許可 # ※POP3Sサーバーを公開する場合のみ # iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 995 -j ACCEPT # 外部からの143番ポート(IMAP)へのアクセスを許可 # ※IMAPサーバーを公開する場合のみ # iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 143 -j ACCEPT # 外部からの993番ポート(IMAPS)へのアクセスを許可 # ※IMAPSサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 993 -j ACCEPT # 外部からの1723番ポート(PPTP)へのアクセスを許可 # 外部からのGREプロトコルへのアクセスを許可 # ※PPTPサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 1723 -j ACCEPT iptables -A INPUT -i $PUBLIC_WAN -p gre -j ACCEPT } #----------------------------------------------------------# # 自ホストが各種サービスを公開する場合の設定(ここまで) # #----------------------------------------------------------# #----------------------------------------------------------# # 他ホストが各種サービスを公開する場合の設定(ここから) # #----------------------------------------------------------# router_ne_server(){ # 外部からの公開サーバーの22番ポート(SSH)へのアクセスを許可&転送 # ※SSHサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 22 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 22 -j DNAT --to $SERVER # 外部からの公開サーバーのTCP/UDP53番ポート(DNS)へのアクセスを許可&転送 # ※外部向けDNSサーバーを運用する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 53 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 53 -j DNAT --to $SERVER # iptables -A FORWARD -i $PUBLIC_WAN -p udp -d $SERVER --dport 53 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p udp --dport 53 -j DNAT --to $SERVER # 外部からの公開サーバーの80番ポート(HTTP)へのアクセスを許可&転送 # ※Webサーバーを公開する場合のみ iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 80 -j ACCEPT iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 80 -j DNAT --to $SERVER # 外部からの公開サーバーの443番ポート(HTTPS)へのアクセスを許可&転送 # ※Webサーバーを公開する場合のみ iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 443 -j ACCEPT iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 443 -j DNAT --to $SERVER # 外部からの公開サーバーの21番ポート(FTP)へのアクセスを許可&転送 # ※FTPサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 21 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 21 -j DNAT --to $SERVER # 外部からの公開サーバーのPASV用ポート(FTP-DATA)へのアクセスを許可&転送 # ※FTPサーバーを公開する場合のみ # ※PASV用ポート60000:60030は当サイトの設定例 # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 60000:60030 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 60000:60030 -j DNAT --to $SERVER # 外部からの公開サーバーの25番ポート(SMTP)へのアクセスを許可&転送 # ※SMTPサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 25 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 25 -j DNAT --to $SERVER # 外部からの公開サーバーの465番ポート(SMTPS)へのアクセスを許可&転送 # ※SMTPSサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 465 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 465 -j DNAT --to $SERVER # 外部からの公開サーバーの110番ポート(POP3)へのアクセスを許可&転送 # ※POP3サーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 110 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 110 -j DNAT --to $SERVER # 外部からの公開サーバーの995番ポート(POP3S)へのアクセスを許可&転送 # ※POP3Sサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 995 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 995 -j DNAT --to $SERVER # 外部からの公開サーバーの143番ポート(IMAP)へのアクセスを許可&転送 # ※IMAPサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 143 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 143 -j DNAT --to $SERVER # 外部からの公開サーバーの993番ポート(IMAPS)へのアクセスを許可&転送 # ※IMAPSサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 993 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 993 -j DNAT --to $SERVER # 外部からの公開サーバーのUDP1194番ポート(OpenVPN)へのアクセスを許可&転送 # ※OpenVPNサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p udp -d $SERVER --dport 1194 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p udp --dport 1194 -j DNAT --to $SERVER # iptables -A FORWARD -i $PUBLIC_WAN -p udp -d $SERVER --dport 2304 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p udp --dport 2304 -j DNAT --to $SERVER } #----------------------------------------------------------# # 他ホストが各種サービスを公開する場合の設定(ここまで) # #----------------------------------------------------------# # 公開サーバーが自ホストの場合のルール設定を行う [ "$SERVER" = "$IPADDR" ] || [ $SERVER = 127.0.0.1 ] && router_eq_server # 公開サーバーが他ホストの場合のルール設定を行う [ "$SERVER" != "$IPADDR" ] && [ $SERVER != 127.0.0.1 ] && router_ne_server # 上記のルールにマッチしなかったアクセスはログを記録して破棄 iptables -A INPUT -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES INPUT] : ' iptables -A INPUT -j DROP iptables -A FORWARD -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES FORWARD] : ' iptables -A FORWARD -j DROP # 再起動時にも上記設定が有効となるようにルールを保存 /etc/rc.d/init.d/iptables save # ファイアウォール起動 /etc/rc.d/init.d/iptables start # パケット転送開始 sysctl -w net.ipv4.ip_forward=1 > /dev/null sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf *** iptables の動作確認 [#a10469a7] - 外部から自サーバーに対する port_scan をかけることのできるサービス [[Shields UP! - Internet Vulnerability Profiling:https://www.grc.com/x/ne.dll?bh0bkyd2]] を使ってポートの空き状況を確認した。 GRC Port Authority Report created on UTC: 2007-09-22 at 18:18:15 Results from scan of ports: 0-1055 7 Ports Open 1 Ports Closed 1048 Ports Stealth --------------------- 1056 Ports Tested Ports found to be OPEN were: 21, 25, 80, 110, 443, 465, 993 The port found to be CLOSED was: 113 Other than what is listed above, all ports are STEALTH. &ref(port_scan.jpg); *** iptables ログ [#x27fa455] - iptables でどのようなログを出力するかは、個別に指定する必要がある - iptables のログは kernel ログなので /var/log/messages に出力される - syslog.conf を以下の様に変更して /var/log/kernel.log に出力されるように変更した # iptables ( = kernel.log ) kern.* /var/log/kernel.log # Log anything (except mail) of level info or higher. # Don't log private authentication messages! # muna re-routed kernel log to /var/log/kernel.log to isolate iptables log *.info;mail.none;authpriv.none;cron.none;kernel.none /var/log/message *** [[iptables loganalyzer:http://iptablelog.sourceforge.net/]] の導入 [#te582d5a] - 参考 URL -- http://centossrv.com/iptables_log_analyzer.shtml -- http://www.orangesignal.com/myserver/fc6/iptablelog.shtml <---- Fedora ベース -- http://fedorasrv.com/iptables_log_analyzer.shtml <---- Fedora ベース - mysql にデータベースを作成 -- データーベース名 = iptablelog -- 管理者ユーザー名 = iptablelog_user@localhost -- 管理者パスワード = iptable_admin mysql> set password for iptablelog_user@localhost=password('iptable_admin'); Query OK, 0 rows affected (0.00 sec) [root@spirit ~]# mysql -u iptablelog_user -p < /var/www/html/pukiwiki/iptablelog/conf/iptables.mysql iptablelog Enter password: - ulogd のインストール ( Cent OS には ulogd のパッケージがないのでソースからビルドする ) [root@spirit download]# wget ftp://ftp.netfilter.org/pub/ulogd/ulogd-1.24.tar.bz2 [root@spirit download]# tar xjvf ulogd-1.24.tar.bz2 [root@spirit download]# cd ulogd-1.24 [root@spirit ulogd-1.24]# yum install mysql-devel [root@spirit ulogd-1.24]# ./configure --prefix=/usr --sysconfdir=/etc --libdir=/usr/local/lib --with-mysql [root@spirit ulogd-1.24]# make [root@spirit ulogd-1.24]# make install -- /etc/ulogd.conf の編集 38 # ulogd_BASE.so - interpreter plugin for basic IPv4 header fields 39 # you will always need this 40 plugin="/usr/local/lib/ulogd/ulogd_BASE.so" 41 plugin="/usr/local/lib/ulogd/ulogd_LOCAL.so" <------ 追加 42 43 44 # output plugins. 45 #plugin="/usr/local/lib/ulogd/ulogd_LOGEMU.so" <------ コメントアウト 46 #plugin="/usr/local/lib/ulogd/ulogd_OPRINT.so" 47 plugin="/usr/local/lib/ulogd/ulogd_MYSQL.so" <------ コメント削除(有効化) 48 #plugin="/usr/local/lib/ulogd/ulogd_PGSQL.so" 49 #plugin="/usr/local/lib/ulogd/ulogd_SQLITE3.so" 50 #plugin="/usr/local/lib/ulogd/ulogd_PCAP.so" (snip) 60 [MYSQL] 61 table="ulog" 62 pass="iptable_admin" 63 user="iptablelog_user" 64 db="iptablelog" 65 host="localhost" -- ulogd 起動設定 [root@spirit ~]# service ulogd start Starting ulogd: [ OK ] [root@spirit ~]# chkconfig --add ulogd *** Bittiorrent に対応したポート(6881-6999) のオープン (2008-12-29) [#g80a04df] iptables -A INPUT -p tcp --destination-port 6881:6999 -j ACCEPT iptables -A OUTPUT -p tcp --source-port 6881:6999 -j ACCEPT
タイムスタンプを変更しない
#contents(); 2007年9月23日に マイクロ総研 の Gigabit Router のファームウエアバージョンアップに失敗したので、~spirit.hmuna.com をルーターとして利用開始した。 - pppoe 接続ルーター - ip masquerade ( NATPT ) - iptables ( fire wll ) の3つの機能を spirit.hmuna.com に実装する。 また、休止していた named 機能を再設定して復活させ~ dhcpd と合わせ 基幹 Network 機器として活用することにした。 今回の設定は基本的に [[CentOSで自宅サーバー構築:http://centossrv.com/]] のサイトの内容を参照して作成した *** 2ndery ether port ( eth1 ) の活性化 [#p6d4a0b7] - サーバーに標準搭載されている Marvel の Gigabit LAN ポートが Cent OS5 から使えるようになったので有効化 - 起動時に eth0 → eth1 → ppp0 の順に起動されるので eth1 は起動時に dhcp からアドレスをもらえない - 固定 IP なので eth1 起動時に固定 IP を付与するような設定にしてある - &ref(ifcfg-eth1,center,/etc/sysconfig/network-scripts/ifcfg-eth1); に設定情報が反映される *** pppoe 接続 [#uf4c40fe] - adsl-setup という設定スクリプトを利用して ppp0 を作成する - IIJmio から付与されている アカウント、パスワード、DNS を 登録する - 起動時に pppoe に自動接続し、常時接続するように設定する -- user_name = bn3221914@bnf1.iij.ad.jp -- password = freedman -- prinary DNS = 210.130.232.1 -- secondery DNS = 210.130.1.1 - &ref(ifcfg-ppp0,center,/etc/sysconfig/network-scripts/ifcfg-ppp0); に設定情報が反映される - DNS サーバー(named)をこのサーバー上で動かすので /etc/resoluve.conf に対する DNS 自動登録をコメントアウト - LAN 内のサーバーのアドレスを外部から引かないようにローカルサーバーDNS を引くように登録する [root@spirit ~]# cat /etc/resolv.conf # MADE-BY-RP-PPPOE #nameserver 210.130.232.1 #nameserver 210.130.1.1 nameserver 127.0.0.1 *** masquerade の設定 [#h25813e1] - ipv4forward を有効にすることで masquerade が有効になる - 実際の設定は 次の iptables の設定用スクリプトの中に設定情報がある *** iptables の設定 [#n96c6da4] - [[Iptablesチュートリアル 1.2.0(日本語):http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/index.html]] - 参考 Web ---> [[PCルーター構築(PPPoE+iptables):http://centossrv.com/linux-router.shtml]] - 参考 Web ---> [[iptablesの設定:http://cyberam.dip.jp/linux_security/iptables/iptables_main.html]] - iptables 設定用のスクリプト(オリジナル設定) ----> &ref(iptables-router.sh); - iptables 設定用のスクリプト(ulogd を使って iptable_log_analyzer を使うように変更したバージョン) ----> &ref(iptables-router.sh_20080202); - iptables 設定用のスクリプト(bittorrent に対応したバージョン)-----> &ref(iptables-router.sh_20081229); [root@spirit ~]# cat /root/script/iptables-router.sh #!/bin/bash #---------------------------------------# # 設定開始 # #---------------------------------------# # 内部インタフェース名定義 LAN=eth0 # 公開外部インタフェース名定義 PUBLIC_WAN=ppp0 # 公開サーバープライベートIPアドレス定義 SERVER=192.168.1.22 HOME=192.168.1.0/24 #---------------------------------------# # 設定終了 # #---------------------------------------# # 自ホストプライベートIPアドレス取得 IPADDR=`ifconfig $LAN|sed -e 's/^.*inet addr:\([^ ]*\).*$/\1/p' -e d` # 内部ネットワークのネットマスク取得 LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d` # 内部ネットワークアドレス取得 LOCALNET_ADDR=`netstat -rn|grep $LAN|grep $LOCALNET_MASK|grep 0.0.0.0|cut -f1 -d' '` LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK # 外部インタフェース名取得 # ※マルチセッション対応 cd /etc/sysconfig/network-scripts WANLIST=`ls ifcfg-ppp* | LANG=C egrep -v '(ifcfg-lo|:|-range|rpmsave|rpmorig|rpmnew)' | \ LANG=C egrep -v '(~|\.bak)$' | \ LANG=C egrep 'ifcfg-[A-Za-z0-9\._-]+$' | \ sed 's/^ifcfg-//g' | sed 's/[0-9]/ &/' | LANG=C sort -k 1,1 -k 2n | sed 's/ //'` # 読み込み対象モジュール追加 sed -i '/IPTABLES_MODULES/d' /etc/sysconfig/iptables-config modinfo ip_nat_pptp > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "IPTABLES_MODULES=\"ip_conntrack_ftp ip_nat_ftp ip_nat_pptp\"" >> /etc/sysconfig/iptables-config else echo "IPTABLES_MODULES=\"ip_conntrack_ftp ip_nat_ftp\"" >> /etc/sysconfig/iptables-config fi # パケット転送停止 # ※ルール設定中のパケット通過防止 sysctl -w net.ipv4.ip_forward=0 > /dev/null # ファイアウォール停止(すべてのルールをクリア) /etc/rc.d/init.d/iptables stop # デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定 iptables -P INPUT DROP # 受信はすべて破棄 iptables -P OUTPUT ACCEPT # 送信はすべて許可 iptables -P FORWARD DROP # 通過はすべて破棄 # SYN Cookiesを有効にする # ※TCP SYN Flood攻撃対策 sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf # ブロードキャストアドレス宛pingには応答しない # ※Smurf攻撃対策 sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf # ICMP Redirectパケットは拒否 sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf for dev in `ls /proc/sys/net/ipv4/conf/` do sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf done # Source Routedパケットは拒否 sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf for dev in `ls /proc/sys/net/ipv4/conf/` do sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf done # フラグメント化されたパケットはログを記録して破棄 iptables -N LOG_FRAGMENT iptables -A LOG_FRAGMENT -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES FRAGMENT] : ' iptables -A LOG_FRAGMENT -j DROP iptables -A INPUT -f -j LOG_FRAGMENT iptables -A FORWARD -f -j LOG_FRAGMENT # 外部からの送信元がプライベートIPアドレスのパケットはログを記録して破棄 # ※IP spoofing攻撃対策 iptables -N LOG_SPOOFING iptables -A LOG_SPOOFING -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES SPOOFING] : ' iptables -A LOG_SPOOFING -j DROP for WAN in $WANLIST do iptables -A INPUT -i $WAN -s 127.0.0.0/8 -j LOG_SPOOFING iptables -A INPUT -i $WAN -s 10.0.0.0/8 -j LOG_SPOOFING iptables -A INPUT -i $WAN -s 172.16.0.0/12 -j LOG_SPOOFING iptables -A INPUT -i $WAN -s 192.168.0.0/16 -j LOG_SPOOFING iptables -A FORWARD -i $WAN -s 127.0.0.0/8 -j LOG_SPOOFING iptables -A FORWARD -i $WAN -s 10.0.0.0/8 -j LOG_SPOOFING iptables -A FORWARD -i $WAN -s 172.16.0.0/12 -j LOG_SPOOFING iptables -A FORWARD -i $WAN -s 192.168.0.0/16 -j LOG_SPOOFING done # 外部とのNetBIOS関連のアクセスはログを記録せずに破棄 for WAN in $WANLIST do iptables -A INPUT -i $WAN -p tcp -m multiport --dports 135,137,138,139,445 -j DROP iptables -A INPUT -i $WAN -p udp -m multiport --dports 135,137,138,139,445 -j DROP iptables -A OUTPUT -o $WAN -p tcp -m multiport --sports 135,137,138,139,445 -j DROP iptables -A OUTPUT -o $WAN -p udp -m multiport --sports 135,137,138,139,445 -j DROP iptables -A FORWARD -i $WAN -p tcp -m multiport --dports 135,137,138,139,445 -j DROP iptables -A FORWARD -i $WAN -p udp -m multiport --dports 135,137,138,139,445 -j DROP iptables -A FORWARD -o $WAN -p tcp -m multiport --sports 135,137,138,139,445 -j DROP iptables -A FORWARD -o $WAN -p udp -m multiport --sports 135,137,138,139,445 -j DROP done # 1秒間に4回を超えるpingはログを記録して破棄 iptables -N LOG_PINGDEATH iptables -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT iptables -A LOG_PINGDEATH -j LOG --log-prefix '[IPTABLES PINGDEATH] : ' iptables -A LOG_PINGDEATH -j DROP iptables -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH iptables -A FORWARD -o ! $WAN -p icmp --icmp-type echo-request -j LOG_PINGDEATH # 送信元IPアドレスが内部ネットワーク範囲外のアクセスはログを記録して破棄 # ※Ingress対策 iptables -N LOG_INGRESS iptables -A LOG_INGRESS -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES INGRESS] : ' iptables -A LOG_INGRESS -j DROP iptables -A FORWARD -i $LAN -s ! $LOCALNET -j LOG_INGRESS # パスMTU問題対処 iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu # 自ホストからのアクセスをすべて許可 iptables -A INPUT -i lo -j ACCEPT # 内部からのアクセスをすべて許可 iptables -A INPUT -i $LAN -j ACCEPT iptables -A FORWARD -i $LAN -j ACCEPT # 内部からのインターネットへの同時接続を可能にする # ※IP masquerade(NAPT) for WAN in $WANLIST do iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE done # 内部から行ったアクセスに対する外部からの返答アクセスを許可 for WAN in $WANLIST do iptables -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT done # 外部からの必須ICMPパケットを許可 iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A INPUT -p icmp --icmp-type source-quench -j ACCEPT iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT iptables -A FORWARD -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A FORWARD -p icmp --icmp-type source-quench -j ACCEPT iptables -A FORWARD -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A FORWARD -p icmp --icmp-type parameter-problem -j ACCEPT # 113番ポート(IDENT)へのアクセスには拒否応答 # ※メールサーバ等のレスポンス低下防止 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 #----------------------------------------------------------# # 自ホストが各種サービスを公開する場合の設定(ここから) # #----------------------------------------------------------# router_eq_server(){ # 外部からの8822番ポート(SSH)へのアクセスを許可 # ※SSHサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 8822 -j ACCEPT # 外部からのTCP/UDP53番ポート(DNS)へのアクセスを許可 # ※外部向けDNSサーバーを運用する場合のみ # iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 53 -j ACCEPT # iptables -A INPUT -i $PUBLIC_WAN -p udp --dport 53 -j ACCEPT # 家庭内からのDNS問い合わせを許可 ### iptables -A INPUT -p udp -s $HOME --dport 53 -j ACCEPT iptables -A OUTPUT -p udp -d $HOME --sport 53 -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW -s $HOME --dport 53 -j ACCEPT # 家庭内からのSWAT(SWAT:901)アクセスを許可 ### iptables -A INPUT -p tcp -m state --state NEW -s $HOME --dport 901 -j ACCEPT # 外部からの80番ポート(HTTP)へのアクセスを許可 # ※Webサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 80 -j ACCEPT # 外部からの443番ポート(HTTPS)へのアクセスを許可 # ※Webサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 443 -j ACCEPT # 外部からの21番ポート(FTP)へのアクセスを許可 # ※FTPサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 21 -j ACCEPT # 外部からのPASV用ポート(FTP-DATA)へのアクセスを許可 # ※FTPサーバーを公開する場合のみ # ※PASV用ポート60000:60030は当サイトの設定例 iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 60000:60030 -j ACCEPT # 外部からの25番ポート(SMTP)へのアクセスを許可 # ※SMTPサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 25 -j ACCEPT # 外部からの465番ポート(SMTPS)へのアクセスを許可 # ※SMTPSサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 465 -j ACCEPT # 外部からの110番ポート(POP3)へのアクセスを許可 # ※POP3サーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 110 -j ACCEPT # 外部からの995番ポート(POP3S)へのアクセスを許可 # ※POP3Sサーバーを公開する場合のみ # iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 995 -j ACCEPT # 外部からの143番ポート(IMAP)へのアクセスを許可 # ※IMAPサーバーを公開する場合のみ # iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 143 -j ACCEPT # 外部からの993番ポート(IMAPS)へのアクセスを許可 # ※IMAPSサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 993 -j ACCEPT # 外部からの1723番ポート(PPTP)へのアクセスを許可 # 外部からのGREプロトコルへのアクセスを許可 # ※PPTPサーバーを公開する場合のみ iptables -A INPUT -i $PUBLIC_WAN -p tcp --dport 1723 -j ACCEPT iptables -A INPUT -i $PUBLIC_WAN -p gre -j ACCEPT } #----------------------------------------------------------# # 自ホストが各種サービスを公開する場合の設定(ここまで) # #----------------------------------------------------------# #----------------------------------------------------------# # 他ホストが各種サービスを公開する場合の設定(ここから) # #----------------------------------------------------------# router_ne_server(){ # 外部からの公開サーバーの22番ポート(SSH)へのアクセスを許可&転送 # ※SSHサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 22 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 22 -j DNAT --to $SERVER # 外部からの公開サーバーのTCP/UDP53番ポート(DNS)へのアクセスを許可&転送 # ※外部向けDNSサーバーを運用する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 53 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 53 -j DNAT --to $SERVER # iptables -A FORWARD -i $PUBLIC_WAN -p udp -d $SERVER --dport 53 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p udp --dport 53 -j DNAT --to $SERVER # 外部からの公開サーバーの80番ポート(HTTP)へのアクセスを許可&転送 # ※Webサーバーを公開する場合のみ iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 80 -j ACCEPT iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 80 -j DNAT --to $SERVER # 外部からの公開サーバーの443番ポート(HTTPS)へのアクセスを許可&転送 # ※Webサーバーを公開する場合のみ iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 443 -j ACCEPT iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 443 -j DNAT --to $SERVER # 外部からの公開サーバーの21番ポート(FTP)へのアクセスを許可&転送 # ※FTPサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 21 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 21 -j DNAT --to $SERVER # 外部からの公開サーバーのPASV用ポート(FTP-DATA)へのアクセスを許可&転送 # ※FTPサーバーを公開する場合のみ # ※PASV用ポート60000:60030は当サイトの設定例 # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 60000:60030 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 60000:60030 -j DNAT --to $SERVER # 外部からの公開サーバーの25番ポート(SMTP)へのアクセスを許可&転送 # ※SMTPサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 25 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 25 -j DNAT --to $SERVER # 外部からの公開サーバーの465番ポート(SMTPS)へのアクセスを許可&転送 # ※SMTPSサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 465 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 465 -j DNAT --to $SERVER # 外部からの公開サーバーの110番ポート(POP3)へのアクセスを許可&転送 # ※POP3サーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 110 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 110 -j DNAT --to $SERVER # 外部からの公開サーバーの995番ポート(POP3S)へのアクセスを許可&転送 # ※POP3Sサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 995 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 995 -j DNAT --to $SERVER # 外部からの公開サーバーの143番ポート(IMAP)へのアクセスを許可&転送 # ※IMAPサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 143 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 143 -j DNAT --to $SERVER # 外部からの公開サーバーの993番ポート(IMAPS)へのアクセスを許可&転送 # ※IMAPSサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p tcp -d $SERVER --dport 993 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p tcp --dport 993 -j DNAT --to $SERVER # 外部からの公開サーバーのUDP1194番ポート(OpenVPN)へのアクセスを許可&転送 # ※OpenVPNサーバーを公開する場合のみ # iptables -A FORWARD -i $PUBLIC_WAN -p udp -d $SERVER --dport 1194 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p udp --dport 1194 -j DNAT --to $SERVER # iptables -A FORWARD -i $PUBLIC_WAN -p udp -d $SERVER --dport 2304 -j ACCEPT # iptables -t nat -A PREROUTING -i $PUBLIC_WAN -p udp --dport 2304 -j DNAT --to $SERVER } #----------------------------------------------------------# # 他ホストが各種サービスを公開する場合の設定(ここまで) # #----------------------------------------------------------# # 公開サーバーが自ホストの場合のルール設定を行う [ "$SERVER" = "$IPADDR" ] || [ $SERVER = 127.0.0.1 ] && router_eq_server # 公開サーバーが他ホストの場合のルール設定を行う [ "$SERVER" != "$IPADDR" ] && [ $SERVER != 127.0.0.1 ] && router_ne_server # 上記のルールにマッチしなかったアクセスはログを記録して破棄 iptables -A INPUT -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES INPUT] : ' iptables -A INPUT -j DROP iptables -A FORWARD -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES FORWARD] : ' iptables -A FORWARD -j DROP # 再起動時にも上記設定が有効となるようにルールを保存 /etc/rc.d/init.d/iptables save # ファイアウォール起動 /etc/rc.d/init.d/iptables start # パケット転送開始 sysctl -w net.ipv4.ip_forward=1 > /dev/null sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf *** iptables の動作確認 [#a10469a7] - 外部から自サーバーに対する port_scan をかけることのできるサービス [[Shields UP! - Internet Vulnerability Profiling:https://www.grc.com/x/ne.dll?bh0bkyd2]] を使ってポートの空き状況を確認した。 GRC Port Authority Report created on UTC: 2007-09-22 at 18:18:15 Results from scan of ports: 0-1055 7 Ports Open 1 Ports Closed 1048 Ports Stealth --------------------- 1056 Ports Tested Ports found to be OPEN were: 21, 25, 80, 110, 443, 465, 993 The port found to be CLOSED was: 113 Other than what is listed above, all ports are STEALTH. &ref(port_scan.jpg); *** iptables ログ [#x27fa455] - iptables でどのようなログを出力するかは、個別に指定する必要がある - iptables のログは kernel ログなので /var/log/messages に出力される - syslog.conf を以下の様に変更して /var/log/kernel.log に出力されるように変更した # iptables ( = kernel.log ) kern.* /var/log/kernel.log # Log anything (except mail) of level info or higher. # Don't log private authentication messages! # muna re-routed kernel log to /var/log/kernel.log to isolate iptables log *.info;mail.none;authpriv.none;cron.none;kernel.none /var/log/message *** [[iptables loganalyzer:http://iptablelog.sourceforge.net/]] の導入 [#te582d5a] - 参考 URL -- http://centossrv.com/iptables_log_analyzer.shtml -- http://www.orangesignal.com/myserver/fc6/iptablelog.shtml <---- Fedora ベース -- http://fedorasrv.com/iptables_log_analyzer.shtml <---- Fedora ベース - mysql にデータベースを作成 -- データーベース名 = iptablelog -- 管理者ユーザー名 = iptablelog_user@localhost -- 管理者パスワード = iptable_admin mysql> set password for iptablelog_user@localhost=password('iptable_admin'); Query OK, 0 rows affected (0.00 sec) [root@spirit ~]# mysql -u iptablelog_user -p < /var/www/html/pukiwiki/iptablelog/conf/iptables.mysql iptablelog Enter password: - ulogd のインストール ( Cent OS には ulogd のパッケージがないのでソースからビルドする ) [root@spirit download]# wget ftp://ftp.netfilter.org/pub/ulogd/ulogd-1.24.tar.bz2 [root@spirit download]# tar xjvf ulogd-1.24.tar.bz2 [root@spirit download]# cd ulogd-1.24 [root@spirit ulogd-1.24]# yum install mysql-devel [root@spirit ulogd-1.24]# ./configure --prefix=/usr --sysconfdir=/etc --libdir=/usr/local/lib --with-mysql [root@spirit ulogd-1.24]# make [root@spirit ulogd-1.24]# make install -- /etc/ulogd.conf の編集 38 # ulogd_BASE.so - interpreter plugin for basic IPv4 header fields 39 # you will always need this 40 plugin="/usr/local/lib/ulogd/ulogd_BASE.so" 41 plugin="/usr/local/lib/ulogd/ulogd_LOCAL.so" <------ 追加 42 43 44 # output plugins. 45 #plugin="/usr/local/lib/ulogd/ulogd_LOGEMU.so" <------ コメントアウト 46 #plugin="/usr/local/lib/ulogd/ulogd_OPRINT.so" 47 plugin="/usr/local/lib/ulogd/ulogd_MYSQL.so" <------ コメント削除(有効化) 48 #plugin="/usr/local/lib/ulogd/ulogd_PGSQL.so" 49 #plugin="/usr/local/lib/ulogd/ulogd_SQLITE3.so" 50 #plugin="/usr/local/lib/ulogd/ulogd_PCAP.so" (snip) 60 [MYSQL] 61 table="ulog" 62 pass="iptable_admin" 63 user="iptablelog_user" 64 db="iptablelog" 65 host="localhost" -- ulogd 起動設定 [root@spirit ~]# service ulogd start Starting ulogd: [ OK ] [root@spirit ~]# chkconfig --add ulogd *** Bittiorrent に対応したポート(6881-6999) のオープン (2008-12-29) [#g80a04df] iptables -A INPUT -p tcp --destination-port 6881:6999 -j ACCEPT iptables -A OUTPUT -p tcp --source-port 6881:6999 -j ACCEPT
テキスト整形のルールを表示する
添付ファイル:
ifcfg-ppp0
21件
[
詳細
]
ifcfg-eth1
21件
[
詳細
]
iptables-router.sh_20081229
20件
[
詳細
]
port_scan.jpg
19件
[
詳細
]
iptables-router.sh
23件
[
詳細
]
iptables-router.sh_20080202
21件
[
詳細
]