ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
検索
オンライン状況
41 人のユーザが現在オンラインです。 (1 人のユーザが ニュース を参照しています。)

登録ユーザ: 0
ゲスト: 41

もっと...
投稿者: f-otake 投稿日時: 2014-5-15 3:40:00 (821 ヒット)
Linux (サーバー制作)

やっとベースとなるサブホストの設定が終わったので、いよいよ本チャン用のサブホストを作ります。このサブホストは後で、samba4をインストールし、アクティブディレクトリーも構築しますが、まずはバックを作ります。ベースとなるサブホストは停止して置き、

画像1の様に、仮想マシンマネージャーで、作成した雛形用のサブホストを右クリックし、クローン(C)をクリックすると、新しいウィドウが開き(左側の画像)そこに表示された領域をクリックすると、詳細...が現れ、それをクリックすると、画像2が表示されますので、参照をクリックし、割り当てたい領域を選択後、OKをクリックし、同様に他の領域に付いても行います。私は全ての領域はLVMでそれぞれ作成し、Dowloadの領域は全てのサブホストで共有する設定にしてあります。
デフォルトでは親ホストの領域の中に、ディスクイメージを作るような設定なので、それをする為には、親ホストの領域をその分を見込みかなり大きく割り当てておく必要があります。
うっかりサブホストの設定をデフォルトのままにしてしまったので、混乱を防ぐため、サブホストの名前を変更します。クローンで出来たサブホストを選択後、開くアイコンをクリックし、iのアイコンをクリックし、右ペインでOverviewが選択されていれば、右ペインの名前の所で、設定したい名前を変更できます。
クローンで出来たサブホストは元のサブホストとhostname,IPアドレスなどがダブっていますので、変更をします。元のサブホストは停止したまま(IPアドレスが同じなので問題が出る)クローンされたサブホストを右クリックで実行します。実行中にAlt+d で詳細を表示させて見ていると、

Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization [FAILED]
とエラーが出ていた。
まずはこの問題を解決する。rootでログインし、/var/log/dmseg 開き ethで検索し調べると udev: renamed network interface eth0 to eth1 があった。
これでググると http://d.hatena.ne.jp/ngyuki/20110805/p1 に回答があった。
さっそく /etc/udev/rules.d/70-persistent-net.rules をどっかに移し、再起動すると、又同じエラーが出ている。
/etc/udev/rules.d/70-persistent-net.rules を開いてみると
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:81:1f:bd",
ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" ← eth1になっていたのでeth0に変更。実際は一行

再起動すると今度は
Bringing up interface eth0: Device eth0 has different MAC address than expected, ignoring. [FAILED]
とエラーが出た。これは /etc/sysconfig/network-scripts/ifcfg-eth0 MACアドレスの設定があるのが問題、なので
DEVICE=eth0
TYPE=Ethernet
#UUID=1f3d73ed-edc1-4939-a4d7-946d3bbd050a ← オリジナルのサブホストとかぶるのでコメントアウト
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
#HWADDR=52:54:00:49:9E:37 ← オリジナルのサブホストとかぶるのでコメントアウト
IPADDR=192.168.xx.xx ← ついでに設定したいIPにする
PREFIX=24
GATEWAY=192.168.xx.xx
#DNS1=192.168.xx.xx ← DNSは/etc/resolv.confで設定している
#DOMAIN=kinryokai.net
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"

次にホスト名を変更する。/etc/sysconfig/networkを
NETWORKING=yes
HOSTNAME=xxxx.kinryokai.net ← 設定したいホスト名に
GATEWAY=192.168.xx.xx ← IPアドレスは伏せてあります
ネットワークを再起動し、
# service network restart
ブラウザを立ち上げ、外部のWEBが見れる事を確認。
VNCのポートもダブっているので、外部から接続するために、ポート番号を変更しておく(LAN内部からだけならIPが違うので問題ない)(設定ファイルは /etc/services (ここを参照)。私のfirewallの設定はローカルネットワークからのRQは受け付けるように設定しているので問題ないが、そうでない時か、外部からVNCを受ける場合にはfirewallの設定で、VNCにアサインしたTCPポートを開けておく事。
このサブホストで使うディレクトリーをここを参照して作る。私はファイルサーバーのデーターの保存場所(/SmbData)とバックアップデータの保存場所(/Backup)を別パーティションとして作った。
その後再起動したらVNC経由でログインしてみる。
やっとこれで本題に入れる。


投稿者: f-otake 投稿日時: 2014-5-15 1:53:23 (2364 ヒット)
Linux (サーバー制作)

今日気がついたが、VNC経由でrootでログインすると、テンキーで入力しても数字が入力できない。
ブラウザ上:Num Lock キーが点いている時
 数字7キー: 現在のカーソルから先頭までの選択
 数字1キー: 現在のカーソルから行末までの選択
ブラウザ上:Num Lock キーが消えている時
 数字7キー: 先頭へカーソル移動
 数字1キー: 行末へカーソル移動
これはNum Lockキーが消えている時のキーアサインに似ている
terminal上:Num Lock キーが点いている時
 数字2キー: Bが入力される
 数字8キー: Aが入力される
 同様に4:D、6:C。それ以外は無反応
terminal上:Num Lock キーが消えている時
 Num Lockが消えている本来のカーソルの動きになる。

でもVNC経由でも、一般ユーザーなら問題はない。
ここまでなら、個人設定に問題有と思うが、
仮想マシンマネージャーから、開くをクリック後、ログインすると全てのユーザーで問題ない!!!
つまり、VNC経由のrootのログインだけ問題がある。
これって矛盾してるよねー、
ブラウザ上と、端末で動きが違うので、Xの設定がからんでいるみたい。心当たりを調べたが治らない。後日に回す。
追記:使えなかったのは15日、今日は16日。何もしていないのに今日は問題無し。サーバーがまだ完成していないので、電源を落としたから、何かのアップデートがあったとも考えにくい。電源を入れただけ、つまり再起動と同じ。だけど昨日は再起動しても直らなかった???
2014/05/20追記:又、テンキーが使えない。どうもサブホストを起動するときの状態によるみたいたが原因は特定できていない。
原因が判明:サブホストの起動時にキーボードの NumLock がONにしておかないとテンキーが使えない。又起動途中にOFFにしてもダメ。


投稿者: f-otake 投稿日時: 2014-5-10 5:08:47 (691 ヒット)
Linux (サーバー制作)

ここを参照しながら日本語化、ユーザーリストの非表示、NewtworkManagerの停止などをします。
そして、ここを参照し、初期設定をしていきます。
次にホストでの設定でもやったように、まずEPELレポジトリの導入をここを参照し、設定を行います
次はchkrootkitのインストール。ここを参照
そしてアンチウィルスソフトの導入。ここを参照
ファイアウォールの構築。ここを参照しますが、ブリッジが無いので、一部違います。違う箇所は

#BR=br0 → #を付けコメントアウト
LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d` → $BRを$LANに変更
LOCALNET_ADDR=`netstat -rn|grep $LAN|grep $LOCALNET_MASK|cut -f1 -d' '` → " "$BRを$LANに変更

次にNTPの設定。NTPサーバーは既に親ホストで動いているので、/etc/ntp.conf を(サブホストにもデフォルトでインストールされていた)
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst ← 先頭に#を付けコメントアウト
#server 1.centos.pool.ntp.org iburst ← 先頭に#を付けコメントアウト
#server 2.centos.pool.ntp.org iburst ← 先頭に#を付けコメントアウト
#server 3.centos.pool.ntp.org iburst ← 先頭に#を付けコメントアウト
server 192.168.xx.xx ← 親ホストのIP

ntpサーバーを起動し、再起動後も機動出来るように設定
# service ntpd start
# chkconfig ntpd on
後日サブホストを立ち上げても、親ホストと時間の同期が出来ていなかった。理由は不明。
# ntpq -p
をやっても同期していないみたい(もちろん5分後やっても同じく同期していない)何で?? NTPサーバーが立ち上がる時に、親ホストと同期しないのかなー? ntpdをリスタートしたら同期した。
次はここを参照し、侵入検知システムの導入(aide)をします。/etc/aide.confは親ホストの分をコピーした方がが早いと思う。
ここらで一度再起動しておくか。


投稿者: f-otake 投稿日時: 2014-5-10 1:10:00 (24342 ヒット)
Linux (サーバー制作)

サブホストを設定していくのに、標準ではやりにくいので(カーソルの移動が面倒)VNCサーバーをインストールするが、その前にOSのアップデートをしておく。
ここからはサブホスト側の設定。サブホストにログインし、
# yum -y update
VNCサーバーをインストール
# yum -y install tigervnc-server
VNCをXinet経由で動かしたいので(常時接続を待ち受けるのではなく、リクエストがあった時のみプログラムを走らせる)
# yum -y install xinetd
CentOSはVNCサーバーのポートが決め打ちしてあるがそれを変更する。
# gedit /etc/services

前略
ppsuitemsg      5863/udp                # PlanetPress Suite Messeng
vnc-server      5900/tcp                # VNC Server ← 5900 を 5910位までの好きな番号に、この番号でアクセスすることになる
vnc-server      5900/udp                # VNC Server ← 5900 を 5910位までの好きな番号に、この番号でアクセスすることになる
cm              5910/tcp                # Context Management
後略

vnc-serverで検索するとヒットするのでそのポートを変更するが、UDPも設定しているがこの理由は不明。私の理解ではTCPポートだけでいい筈だが?
xinetd用のVNCの設定。/etc/xinetd.d/vnc-server に
service vnc-server
{
	disable		= no
 	socket_type	= stream
 	wait		= no
 	user		= nobody
 	server		= /usr/bin/Xvnc
 	server_args	= -inetd -query localhost -once -securitytypes=none -geometry 1800x850 -depth 24
 	lon_on_failure	+= USERID
}
と設定し、一様 /usr/bin/Xvnc があるかチェックしておく。なければVNCサーバーがインストールされていない。
次に /etc/gdm/custom.conf に
# GDM configuration storage
[daemon]
	remoteGreeter=/usr/libexec/gdmgreeter
[security]
	AllowRemoteRoot=true
[xdmcp]
	Enable=true
[greeter]
[chooser]
[debug]

xinetdをスタートする
# service xinetd start
# chkconfig xinetd on
ファイアーウォールの設定。System→Administration→Firewallで開き、左ペインでOther Portsを選び、右ペインで Add をクリック、開いたウィンドウで、VNC用に開けたポート番号 TCP vnc-server を選び、OKをクリック後,
Apply をクリック後、ウィンドウを閉じる。サブホスト側は再起動しておく。

*******************
ここでホスト側にVNCビュアーをインストールするので、ホスト側に移る。

私はyumでインストールできるビュアーより、realvncの方が使いやすいので、http://www.realvnc.com/download/viewer/からからlinuxのBINARY(32ビット又は64ビット)をダウンロードし、実行フラグを付け、/usr/binにでもvnc-viewer とでもリネームし保存する。これをクリックすると、ウィンドウが開くので、VNC Server: の欄に、サブホストのIP:ポート番号を入力し、connect をクリック。(画像は一部IPアドレスを隠しています)注:port番号は設定しているポート番号の下一桁のみ、5901なら ipアドレス:1 の様に)これでウィンドウが開きログイン画面が出てくる。ウィンドウのサイズは /etc/xinetd.d/vnc-server の -geometry の後で設定が出来る


投稿者: f-otake 投稿日時: 2014-5-10 0:53:29 (712 ヒット)
Linux (サーバー制作)


ここで一度サブホストの設定を確かめる。アプリケーション→システムツール→仮想マシンマネージャーで走らせ、作ったサブホストを選び、開くをクリック、開いたウィンドウで i のアイコンをクリック、ローカルタイムを設定したが、何故かUTCになっているので、画面0の様にlocaltimeにし、適用をクリック。
















デフォルトでインストールしたらディスクの種類がIDEになっていたので、効率の良い(とどこかのWEBに書いてあったが)virtioを選び適用をクリック(画面1)












このままではアンダーバーが入力できないので、画面2の様にjaを選び適用をクリック。

















12:サブホストのインストールでも触れたが、SWAPをアタッチせずにインストールしているので、ここで、SWAPを入れる。画面3の様に”ハードウェアの追加”をクリックし、
開いた画面4の様に設定をしていく。私は全てのサブホストの領域はLVMで作っており、このSWAPも画面4の様にLVMであり、管理しているストレージ.....にチェックマークが付いている。また、このSWAPではないが、領域をサブホスト同士で、共有したい場合があるが、

その場合は画像5の様にアタッチした後、その領域を選び、共有可能にチェックマークを付ける。

































投稿者: f-otake 投稿日時: 2014-5-9 0:37:15 (838 ヒット)
Linux (サーバー制作)

やっとサブホストをインストールするが、KVMはクローンで簡単にサブホストのコピーが出来るので、各サブホストに最低必要なプログラムを入れた雛形のサブホストを作る。
グラフィックから作った方が簡単なので、アプリケーション→システムツール→仮想マシンマネージャーを走らせる。開いたウインドウのターミナルが光っているようなアイコンで、新しい仮想マシンを作成する。
このマシンはDVDドライブがないので、USBのドライブをつけてもいいが、予め、CentOSの6.5のイメージをダウンロードしておき(拡張子が .iso)そこを指定してインストールを行う。
普通にやっていくと(インストールはここを参照してね。ここはcentOS5.3だがあまり変わらない。ただVer6はローカルのOSイメージの選択ができる)、どうしても途中 selinux-policy-target-3-7.19-231.el6.noarch の所で止まってしまい、先にいかない、ネットワークをDHCPにしたり、固定にしたり色々やるが同じである。
2016ー6ー12追記:KVMのサブホストのインストール時に selinux-policy-targeted で止まるでもインストール出来る
それではと日本語を止め英語でインストールをすると無事終わった。その際、わざとSWAPなしでインストールする。理由はインストール時に指定した領域の中にさらに領域を作り、ルートとSWAPの二つの領域を作るため、私はこれが嫌で、インストール後SWAPの設定をした。インストールはminimal Desktopにし、General Purpose Desktop と Graphical Administration Tools を入れた。
インストールが終わり再起動するとkernel Panic だー!!! 表示は

Kernel panic - not sycing: Attempted to kill init!
以下省略

これはスタートし、OSが選択され比較的すぐにパニックになっているので、多分ブートに問題がありそう。ググって見ると、[color=ff0000]ここに解決があった。
2016ー02ー03追記:これは間違い見たい。enforcing=0は起動時に SELinux の カレントモード を Permissive モード で起動するそうな。selinuxを無効にして起動するには selinux=0 とする。ここを参照
まずはサブホストの領域をこのホストにマウントするが、作られた領域は、さらにその中に領域を作っている(イメージファイルを使えるためそのようになっている見たい)
マウントする方法はここを参照してね.。私は /test1 にマウントした。
/test1/boot/grub/grub.confは
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-431.el6.x86_64)
	root (hd0,0)
	kernel /boot/vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=500d2a6b-f175-42c6-ad79-6b7ec6d5dd7c
 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc
 KEYTABLE=jp106 rd_NO_LVM rd_NO_DM rhgb quiet 
selinux=0 ← selinux=0(2016ー02ー03訂正)を追記、実際にはkernel からここまで一行
	initrd /boot/initramfs-2.6.32-431.el6.x86_64.img

これでやっとサブホストが稼働したので、初期設定をすまし、再起動。


投稿者: f-otake 投稿日時: 2014-5-9 0:03:03 (636 ヒット)
Linux (サーバー制作)

今日、設定の続きをやろうとホストを立ち上げると、ネットに繋がらない。network は動いているし、ifconfig で設定をみても固定IPになっているし、br0とeth0 も問題ない。
もしやと思い
# lsmod | grep r81
でネットワークのドライバーを調べてみると r8169 になっていた。
何で、変更されたかは不明、多分何かのアップデート時にドライバーが変わった!!
ともかくダウンロードしてあったドライバーの保存場所にCDし、
# ./autorun.sh
でドライバーをインストールすると無事ネットワークが復活した。
ドライバーのダウンロードとインストールはhttps://www.kinryokai.net/modules/news/article.php?storyid=205を参照


投稿者: f-otake 投稿日時: 2014-5-6 0:09:07 (3614 ヒット)
Linux (サーバー制作)

参考URL:http://www.websec-room.com/2013/11/09/999
# yum -y install aide
AIDE の動作設定は、/etc/aide.conf で行いますが、ここではセキュリティー上の理由で公開しません。と言うのも、悪さをしようとする者は必ずAIDEのDBファイルを改竄しようとしますので、この場所が非常に大事になります。また下記に示してあるのはテスト時の場所で、最後にテストが終了後、この位置ではなく別の場所にしております。
/etc/aide.confは参考URLを参照し、設定していってください。
監視対象から外すには、先頭に ! を付けます。取り敢えず走らせ、メールが着ますので、よく変更になるdirectoryやファイルを設定していけばいいと思います。
AIDEの持っているデータベースの初期化
# aide --init
ありゃりゃエラーが出るぞ、

/usr/sbin/prelink: /usr/sbin/mtr: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
これはインストール後、時間が経ちyum の updateが走り、リンク済みのバイナリと新しいバイナリではハッシュ値が合わないので、prelinkがエラーを出している見たい
# /etc/cron.daily/prelink
でハッシュ値を更新する。再度
# aide --init
これは全てのファイルをスキャンしているので時間がかかる
AIDE, version 0.14
### AIDE database at /var/lib/aide/aide.db.new.gz initialized.

と表示されファイルが出来たので、出来たファイルを登録
# cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
改ざんのチェックをするために、ファイルを作成
# echo "TEST" >> dummy.txt
aideでチェックを実行
# aide --check
AIDE found differences between database and filesystem!!
Start timestamp: 2014-05-06 10:19:07
Summary:
  Total number of files:	180686
  Added files:			1
  Removed files:		0
  Changed files:		77
---------------------------------------------------
Added files:
---------------------------------------------------
added: /root/dummy.txt
---------------------------------------------------
Changed files:
---------------------------------------------------
changed: /usr/sbin changed:
/usr/bin changed:
/usr/lib64 changed:
中略 
--------------------------------------------------
Detailed information about changes:
---------------------------------------------------
Directory: /usr/sbin
  Mtime    : 2014-05-06 10:07:48              , 2014-05-06 10:07:57
  Ctime    : 2014-05-06 10:07:48              , 2014-05-06 10:07:57
Directory: /usr/bin
  Mtime    : 2014-05-06 10:07:49              , 2014-05-06 10:09:38
  Ctime    : 2014-05-06 10:07:49              , 2014-05-06 10:09:38
後略

ファイルが一つ増え(dummy.txtを足したから当たり前)、77のdirectoryの Mtime と Ctime に変更があった。
私は未熟なので何故directoryの時間が変更になったかは不明。
MtimeとCtimeはhttp://x68000.q-e-d.net/~68user/unix/pickup?%A5%BF%A5%A4%A5%E0%A5%B9%A5%BF%A5%F3%A5%D7を参照
後で調べて見よう。
【2015-07-07追記】この理由が分かりました。ここを参照 prelinkingのせいだそうです。ここにあるように
# gedit /etc/sysconfig/prelink
# Set this to no to disable prelinking altogether
# (if you change this from yes to no prelink -ua
# will be run next night to undo prelinking)
PRELINKING=no ← ここをnoに変更

定期実行するスクリプトの作成
# gedit /etc/cron.daily/aide
#!/bin/bash
MAILTO=root
LOGFILE=/var/log/aide/aide.log
AIDEDIR=/var/lib/aide
/usr/sbin/aide  -u > $LOGFILE
cp $AIDEDIR/aide.db.new.gz $AIDEDIR/aide.db.gz
x=$(grep "Looks okay" $LOGFILE | wc -l)
if [ $x -eq 1 ]; then
  echo "All Systems Look OK" | /bin/mail -s "AIDE OK" $MAILTO
else
  echo "$(egrep "added|changed|removed" $LOGFILE)" | /bin/mail -s "AIDE DETECTED CHANGES" $MAILTO
fi
/etc/cron.daily/prelink ←2015-07-07追記:prelinking をignoreしたので追記
exit

私は root へのメールは /etc/aliases に設定があり、そこに設定したメアドにメールが来る
スクリプトに実行権限をつける
# chmod +x /etc/cron.daily/aide
スクリプトを試してみる
# /etc/cron.daily/aide
設定したメアドのメールが着ているかチェックする。
あと、アップデートがあった時は
# aide --init
でデーターベースをアップデートしておくこと。


投稿者: f-otake 投稿日時: 2014-5-5 21:32:22 (832 ヒット)
Linux (サーバー制作)

ntpサーバーはインストールされていたので、その設定ファイルの /etc/ntp.conf の設定

restrict 192.168.xx.xx mask 255.255.255.0 nomodify notrap ← 18行目位、先頭の#を外し、IPレンジを自分に合わせる
**ここから(20行目位)
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
**ここまで消去、centosのntpは使わない。代わりに次を挿入
server 133.100.10.8 iburst # NTPサーバー(stratum 1)
server 210.173.160.27 iburst # 上記サーバーと直接同期しているNTPサーバー(stratum 2)
server 202.224.32.4 iburst # プロバイダのNTPサーバー※

サーバーをIPアドレスで設定しているのはDNSを引かなくて済むから
一度手動で時刻を合わせる
# ntpdate 133.243.238.163
 6 May 06:08:25 ntpdate[17950]: step time server 133.243.238.163 offset -29.735837 sec

ntpを起動する
# service ntpd start
# chkconfig ntpd on
NTPサーバーへの時刻同期状態確認
# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
 ==============================================================================
*ntp-b2.nict.go. .NICT.           1 u    2   64    1    5.517    0.712   0.098
 ntp1.jst.mfeed. 172.29.2.50      2 u    1   64    1  258.952  -126.97  45.508
 orion.asahi-net 133.243.238.244  2 u    -   64    1    3.856    0.853   0.466

行の最初に * や + がついて入ればOK、ない時は数分後に再度行うと表示される筈。
CentOSはシステム終了時にハードウェアクロックの時刻をシステムクロックの時刻に合わせるようになっているらしいが、このサーバーは原則、動きっぱなしなのでハードウェアのクロックとも同期をさせるが、週に1度ぐらいでいいと思うので、/etc/cron.weeklyにsethcと言う名で
#!/bin/bash
hwclock -- systohc
実行フラグを付ける
# chmod +x /etc/cron.weekly/sethc
これで一週間に1回システム時間とハードウェアのクロックを同期する。


投稿者: f-otake 投稿日時: 2014-5-5 8:33:04 (984 ヒット)
Linux (サーバー制作)

参考URL:http://centossrv.com/iptables.shtml
iptablesを設定するがブリッジを作ったので、参考URLとは若干違います。
スクリプトの作成
# gedit iptables.sh

#!/bin/bash
# インタフェース名定義
LAN=eth0
BR=br0

# 内部ネットワークのネットマスク取得
LOCALNET_MASK=`ifconfig $BR|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`
# 内部ネットワークアドレス取得
LOCALNET_ADDR=`netstat -rn|grep " "$BR|grep $LOCALNET_MASK|cut -f1 -d' '`
LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK

# ファイアウォール停止(すべてのルールをクリア)
/etc/rc.d/init.d/iptables stop

# デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定
iptables -P INPUT   DROP   # 受信はすべて破棄
iptables -P OUTPUT  ACCEPT # 送信はすべて許可
iptables -P FORWARD DROP   # 通過はすべて破棄

# 自ホストからのアクセスをすべて許可
iptables -A INPUT -i lo -j ACCEPT

# 内部からのアクセスをすべて許可
iptables -A INPUT -s $LOCALNET -j ACCEPT

# 内部から行ったアクセスに対する外部からの返答アクセスを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 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 -A INPUT -f -j LOG --log-prefix '[IPTABLES FRAGMENT] : '
iptables -A INPUT -f -j DROP

# 外部とのNetBIOS関連のアクセスはログを記録せずに破棄
# ※不要ログ記録防止
iptables -A INPUT ! -s $LOCALNET -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A INPUT ! -s $LOCALNET -p udp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A OUTPUT ! -d $LOCALNET -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
iptables -A OUTPUT ! -d $LOCALNET -p udp -m multiport --sports 135,137,138,139,445 -j DROP

# 1秒間に4回を超えるpingはログを記録して破棄
# ※Ping of Death攻撃対策
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 INPUT -d 255.255.255.255 -j DROP
iptables -A INPUT -d 224.0.0.1 -j DROP

# 113番ポート(IDENT)へのアクセスには拒否応答
# ※メールサーバ等のレスポンス低下防止
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

# ACCEPT_COUNTRY_MAKE関数定義
# 指定された国のIPアドレスからのアクセスを許可するユーザ定義チェイン作成
ACCEPT_COUNTRY_MAKE(){
    for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'`
    do
        iptables -A ACCEPT_COUNTRY -s $addr -j ACCEPT
    done
}

# DROP_COUNTRY_MAKE関数定義
# 指定された国のIPアドレスからのアクセスを破棄するユーザ定義チェイン作成
DROP_COUNTRY_MAKE(){
    for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'`
    do
        iptables -A DROP_COUNTRY -s $addr -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES DENY_COUNTRY] : '
        iptables -A DROP_COUNTRY -s $addr -j DROP
    done
}

# IPアドレスリスト取得
. /root/iptables_functions
IPLISTGET

# 日本からのアクセスを許可するユーザ定義チェインACCEPT_COUNTRY作成
iptables -N ACCEPT_COUNTRY
ACCEPT_COUNTRY_MAKE JP
# 以降,日本からのみアクセスを許可したい場合はACCEPTのかわりにACCEPT_COUNTRYを指定する

# 中国・イラン・ロシア※からのアクセスをログを記録して破棄
# http://www.cyberpolice.go.jp/detect/observation.htmlより
iptables -N DROP_COUNTRY
DROP_COUNTRY_MAKE CN 
DROP_COUNTRY_MAKE IR
DROP_COUNTRY_MAKE RU
iptables -A INPUT -j DROP_COUNTRY

#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから)               #
#----------------------------------------------------------#
# 外部からのTCP22番ポート(SSH)へのアクセスを日本からのみ許可
# ※SSHサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 22 -j ACCEPT_COUNTRY

# 外部からのTCP/UDP53番ポート(DNS)へのアクセスを許可
# ※外部向けDNSサーバーを運用する場合のみ
#iptables -A INPUT -p tcp --dport 53 -j ACCEPT
#iptables -A INPUT -p udp --dport 53 -j ACCEPT

# 外部からのTCP80番ポート(HTTP)へのアクセスを許可
# ※Webサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 外部からのTCP443番ポート(HTTPS)へのアクセスを許可
# ※Webサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 外部からのTCP21番ポート(FTP)へのアクセスを日本からのみ許可
# ※FTPサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 21 -j ACCEPT_COUNTRY

# 外部からのPASV用ポート(FTP-DATA)へのアクセスを日本からのみ許可
# ※FTPサーバーを公開する場合のみ
# ※PASV用ポート60000:60030は当サイトの設定例
#iptables -A INPUT -p tcp --dport 60000:60030 -j ACCEPT_COUNTRY

# 外部からのTCP25番ポート(SMTP)へのアクセスを許可
# ※SMTPサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 25 -j ACCEPT

# 外部からのTCP465番ポート(SMTPS)へのアクセスを日本からのみ許可
# ※SMTPSサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 465 -j ACCEPT_COUNTRY

# 外部からのTCP110番ポート(POP3)へのアクセスを日本からのみ許可
# ※POP3サーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 110 -j ACCEPT_COUNTRY

# 外部からのTCP995番ポート(POP3S)へのアクセスを日本からのみ許可
# ※POP3Sサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 995 -j ACCEPT_COUNTRY

# 外部からのTCP143番ポート(IMAP)へのアクセスを日本からのみ許可
# ※IMAPサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 143 -j ACCEPT_COUNTRY

# 外部からのTCP993番ポート(IMAPS)へのアクセスを日本からのみ許可
# ※IMAPSサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 993 -j ACCEPT_COUNTRY

# 外部からのUDP1194番ポート(OpenVPN)へのアクセスを日本からのみ許可
# ※OpenVPNサーバーを公開する場合のみ
#iptables -A INPUT -p udp --dport 1194 -j ACCEPT_COUNTRY

# VPNインタフェース用ファイアウォール設定
# ※OpenVPNサーバーを公開する場合のみ
#[ -f /etc/openvpn/openvpn-startup ] && /etc/openvpn/openvpn-startup

#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここまで)               #
#----------------------------------------------------------#

# 拒否IPアドレスからのアクセスはログを記録せずに破棄
# ※拒否IPアドレスは/root/deny_ipに1行ごとに記述しておくこと
# (/root/deny_ipがなければなにもしない)
if [ -s /root/deny_ip ]; then
    for ip in `cat /root/deny_ip`
    do
        iptables -I INPUT -s $ip -j DROP
    done
fi

# 上記のルールにマッチしなかったアクセスはログを記録して破棄
iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
iptables -A INPUT -j DROP
iptables -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
iptables -A FORWARD -j DROP

# サーバー再起動時にも上記設定が有効となるようにルールを保存
/etc/rc.d/init.d/iptables save

# ファイアウォール起動
/etc/rc.d/init.d/iptables start

変更点はインタフェース名定義の LAN=eth0 の下に
BR=br0
を追記。# 内部ネットワークのネットマスク取得の所を
LOCALNET_MASK=`ifconfig $BR|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d` ←$LANの代わりに $BR
# 内部ネットワークアドレス取得の所を
LOCALNET_ADDR=`netstat -rn|grep " "$BR|grep $LOCALNET_MASK|cut -f1 -d' '` ←$LANの代わりに " "$BR、$BRだけだと virbr0 も該当する。
ファイアウォール設定スクリプト外部関数作成
# gedit iptables_functions
# IPアドレスリスト取得関数定義
IPLISTGET(){
    # http://nami.jp/ipv4bycc/から最新版IPアドレスリストを取得する
    wget -q http://nami.jp/ipv4bycc/cidr.txt.gz
    gunzip cidr.txt.gz
    # 最新版IPアドレスリストが取得できなかった場合
    if [ ! -f cidr.txt ]; then
        if [ -f /tmp/cidr.txt ]; then
            # バックアップがある場合はその旨をroot宛にメール通知して処理を打ち切る
            echo cidr.txt was read from the backup! | mail -s $0 root
            return
        else
            # バックアップがない場合はその旨をroot宛にメール通知して処理を打ち切る
            echo cidr.txt not found!|mail -s $0 root
            exit 1
        fi
    fi
    # 最新版IPアドレスリストを /tmpへバックアップする
    /bin/mv cidr.txt /tmp/cidr.txt
}

IPアドレスリストチェックスクリプト作成
# gedit /etc/cron.daily/iplist_check.sh
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# 新旧IPLIST差分チェック件数(0を指定するとチェックしない)
# ※新旧IPLIST差分がSABUN_CHKで指定した件数を越える場合はiptables設定スクリプトを実行しない
# ※新旧IPLIST差分チェック理由はhttp://centossrv.com/bbshtml/webpatio/1592.shtmlを参照
SABUN_CHK=100
[ $# -ne 0 ] && SABUN_CHK=${1}

# チェック国コード
COUNTRY_CODE='JP CN IR RU'

# iptables設定スクリプトパス
IPTABLES=/root/iptables.sh

# iptables設定スクリプト外部関数取り込み
. /root/iptables_functions

# IPアドレスリスト最新化
rm -f IPLIST.new
IPLISTGET
for country in $COUNTRY_CODE
do
    if [ -f /tmp/cidr.txt ]; then
        grep ^$country /tmp/cidr.txt >> IPLIST.new
    else
        grep ^$country /tmp/IPLIST >> IPLIST.new
    fi
done
[ ! -f /tmp/IPLIST ] && cp IPLIST.new /tmp/IPLIST

# IPアドレスリスト更新チェック
diff -q /tmp/IPLIST IPLIST.new > /dev/null 2>&1
if [ $? -ne 0 ]; then
    if [ ${SABUN_CHK} -ne 0 ]; then
        if [ $(diff /tmp/IPLIST IPLIST.new | egrep -c '<|>') -gt ${SABUN_CHK} ]; then
            (
             diff /tmp/IPLIST IPLIST.new
             echo
             echo "$IPTABLES not executed."
            ) | mail -s 'IPLIST UPDATE' root
            rm -f IPLIST.new
            exit
        fi 
    fi
    /bin/mv IPLIST.new /tmp/IPLIST
    sh $IPTABLES > /dev/null
else
    rm -f IPLIST.new
fi

IPアドレスリストチェックスクリプトに実行権限付加
# chmod +x /etc/cron.daily/iplist_check.sh
ファイアウォール設定スクリプト実行
# sh iptables.sh
私の場合はかなり長い時間(5分位かな)かかった。
iptables自動起動設定
# chkconfig iptables on
開いているポートを調べる為にnmapとそのGUIフロントエンドをインストールする
# yum -y install nmap nmap-frontend
その後、ポートをチェックするがnmapの使い方はgoogleで調べてね
ここなんかは良さげhttp://knowledge.sakura.ad.jp/tech/97/


« 1 2 (3) 4 5 »
テーマ選択

(4 テーマ)
ピックアップ画像
最近の画像
IMG_0004.jpg (2023-3-17)
IMG_0004.jpg
IMG_0003.jpg (2023-3-17)
IMG_0003.jpg
IMG_0010.jpg (2023-3-17)
IMG_0010.jpg
IMG_0013.jpg (2023-3-17)
IMG_0013.jpg
IMG_0007.jpg (2023-3-17)
IMG_0007.jpg
IMG_0005.jpg (2023-3-17)
IMG_0005.jpg
IMG_0002.jpg (2023-3-17)
IMG_0002.jpg
IMG_0011.jpg (2023-3-17)
IMG_0011.jpg
IMG_0009.jpg (2023-3-17)
IMG_0009.jpg
IMG_0008.jpg (2023-3-17)
IMG_0008.jpg
人気画像
ゴーキョピー... (6005 hits)
ゴーキョピー...
ギャチュンカ... (5866 hits)
ギャチュンカ...
ばあちゃんミ... (5766 hits)
ばあちゃんミ...
ヒマラヤ壁 (5674 hits)
ヒマラヤ壁
タムセルク残... (5481 hits)
タムセルク残...
Powered by Xoops2 Theme Modified by F-Otake
copyright (c) 2006 All rights reserved.