2010.02.16

Category: Command, Os, Redhat ES(CentOS) / Tags:

iptables – IPv4 のパケットフィルタと NAT を管理するツール (INPUTサンプル)

細かく設定するには、シェルとかで管理すべきみたいなのですが、基本のINPUTの部分だけをおさえておきます。
そこまで自信がないので、深くは信じないでください。(他のとみくらべてね)

# コメント行
* table名(filter nat mangle)のどれか、基本的には、filterを利用
:<チェーン名> <チェーンポリシー> [<パケットカウンタ>:<バイトカウンタ>]
COMMIT は設定反映といった感じ

オプション

-A で、追加。
-p プロトコル tcp,、udp、 icmp、 allが指定できる。
-m(–match) -pで暗黙のうちに指定されるが、-mで指定してもOK.-pとセットで使う。
–dport (-p tcp の場合のみ)送信先ポートまたはポート範囲の指定
-i インターフェイス eth0 eth1 とか
-s ipアドレス(送信元の指定)
-j [ACCEPT|DROP] 許可不許可 「-A INPUT -s -j ACCEPT 」で、そのIPアドレスから接続許可

“-m state” を指定した場合の拡張オプション
–state [NEW|"INVALID" |ESTABLISHED|RELATED] 接続状態
NEWは新規接続のパケット,”INVALID” は既存パケットと関係のないパケット,ESTABLISHEDは既存パケットと関係あるパケット,RELATEDは新規接続のパケットであるが、既存パケットに関係のあるパケットである。
これにより、いちいち応答パケットを許可する設定をしなくても済みます。

設定サンプル

#table名を記載
*filter
#とりえあず、INPUTは制限、OUTPUT FORWARDは、全てを許可
:INPUT DROP
:FORWARD ACCEPT
:OUTPUT ACCEPT
#下記は、ICMP用
#ICMPは送信したデータが届かなかったとき、また障害があったときに利用されるプロトコルです。
#0 = エコー応答Echo Reply(エコー応答)(pingなど)
#8 = エコー要求(pingなど)
-A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp –icmp-type 0 -j ACCEPT
# 接続済みは許可
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
#接続許可IP
#local
-A INPUT -s 127.0.0.1 -j ACCEPT
#メンテナンスのIPとか
-A INPUT -s xxx.xxx.xxx.xxx -j ACCEPT
#サービスベースでの接続 80番ポート
-A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
# -mは指定しなくてもいける
-A INPUT -p tcp –dport 443 -j ACCEPT
# dnsはudpも指定
-A INPUT -p tcp –dport 53 -j ACCEPT
-A INPUT -p upd –dport 53 -j ACCEPT
# ntp はupdで
-A INPUT -p upd –dport 123 -j ACCEPT
#反映
COMMIT

という事で、必要部分だけ綺麗に書くと

*filter
:INPUT DROP
:FORWARD ACCEPT
:OUTPUT ACCEPT
-A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp –icmp-type 0 -j ACCEPT
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 127.0.0.1 -j ACCEPT
-A INPUT -s xxx.xxx.xxx.xxx -j ACCEPT
-A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
-A INPUT -p tcp –dport 443 -j ACCEPT
-A INPUT -p tcp –dport 53 -j ACCEPT
-A INPUT -p upd –dport 53 -j ACCEPT
-A INPUT -p upd –dport 123 -j ACCEPT
COMMIT

-A INPUT -s xxx.xxx.xxx.xxx -j ACCEPT
の部分は、もう少し制御して
-A INPUT -p tcp –dport 22 -s xxx.xxx.xxx.xxx -j ACCEPT
とサービスまで絞り込んだ方がよりいいです。

2010.02.10

Category: Apache, Command, Shell / Tags:

logrotateで日付付のログをバックアップする。

過去に
「logrotate & bash で日付付のログをバックアップする。」
っていうのをメモっているけど、別ファイルのbashをつくるのもめんどうなのでより簡単メモ

/var/log/httpd/*log {
daily
rotate 10
create
compress
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
EXT=date +%Y%m%d -d ‘1 days ago’
for f in $1;
do mv $f.1.gz $f.$EXT.gz;
done
endscript
}

EXT=date +%Y%m%d -d ‘1 days ago’
for f in $1;
do mv $f.1.gz $f.$EXT.gz;
done

が追加分、corn では、通常4時2分に起動するので、基本的に前日の日付をつけておく。
でもって、ローテートしたファイルをリネームしているだけ、
これだと、本来、「rotate 10」のところは、1でもいいのだけど、念のための保険で10回
にしているだけです。
こっちの方が簡単だな。

追記:2010.02.23
EXT=date +%Y%m%d -d ‘1 days ago’
の部分をそのままコピペすると、WPが変換かけてるのでうごきません。
「1 days ago」をシングルコーテーションで囲み直して、
「date +%Y%m%d -d ‘1 days ago’」全体を実行演算子で囲んでください。

でもって、バージョンの違いかわからないけど、compress が postrotate
の後に行われる場合がある。こうなると日付のファイル名にリネーム
できなくなる。(gzで圧縮した後のファイル名をリネームしようとしてるので)

という事で、さらに改訂。compressをlogrotateにまかせずに。

/var/log/httpd/*/*log {
daily
rotate 10
create
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
EXT=date +%Y%m%d -d ‘1 days ago’
for f in $1;
do
if [ -e $f.1 ] ; then
gzip $f.1;
mv $f.1.gz $f.$EXT.gz;
fi
done
endscript
}

といった形で、postrotateのなかでしてしまう。先に、killプロセス送っているので
ログも新しいファイルに書き出されているので、圧縮中のログが消える心配も
ないので、こちらの方がいいかも。