1read 100read
2011年10月1期Linuxあなたのipchainsを見せてください。
TOP カテ一覧 スレ一覧 削除依頼 ▼
・ 次のスレ
KDDLab神 に感謝をささげるスレ
はやいルータを作る
Itaniumで64ビットLinuxだぁ!
■光でLinux(ノ゚ρ゚)ノ ■
あなたのipchainsを見せてください。
- 1 :02/04/03 〜 最終レス :10/08/08
- 色々な書籍やwebに設定例が載っていますが、
他人のipchainsを見てみたいと思った事はないですか?
みんなで公表して、みんなで添削しちゃいましょう。
ちなみに、うちのlinuxサーバは、
:input DENY
:forward DENY
:output ACCEPT
-A input -d 0/0 80 -p tcp -j ACCEPT
-A input -d 0/0 -s 0/0 80 -p tcp -j ACCEPT
-A input -d 0/0 53 -p tcp -j ACCEPT
-A input -d 0/0 53 -p udp -j ACCEPT
-A input -d 0/0 -s 0/0 53 -p udp -j ACCEPT
-A input -s 0/0 3 -p icmp -j ACCEPT
です。
おてやわらかに。
- 2 :
- 2
- 3 :
- >>1
フィルタリング甘い...
- 4 :
- 上級者の方のipchainsが見たいです。
勉強させてください。
- 5 :
- >>1
とりあえずループバックは分けとけ
- 6 :
- >>1
ついでにsportとdportも
- 7 :
- >>5
こんな感じ?
:input DENY
:forward DENY
:output ACCEPT
-A input -d 0/0 80 -p tcp -j ACCEPT
-A input -d 0/0 -s 0/0 80 -p tcp -j ACCEPT
-A input -d 0/0 53 -p tcp -j ACCEPT
-A input -d 0/0 53 -p udp -j ACCEPT
-A input -d 0/0 -s 0/0 53 -p udp -j ACCEPT
-A input -s 0/0 3 -p icmp -j ACCEPT
-A input -s 0/0 -d 0/0 -i lo -j ACCEPT
>>6
-A input -d 0/0 80 -p tcp -j ACCEPT
と
-A input --dport www -p tcp -j ACCEPT
ってのは同じ意味なんですか?
- 8 :
- >>7
おんなじ意味だった思います。
- 9 :
- それとさ送り元ポートが53だったら全部通ってよしってのは
やめようよ。これじゃあnmapとかで
nmap -sF -p調べたい番号 -g 53 >>1のIPアドレス
ってやったらフィルタリングの意味ないよ。
- 10 :
- >>1
これって、TCP使うアプリケーションを指定したり出来ないの?
- 11 :
- >>10
たぶん直接デーモンを指定するのは無理。
でも結局ポート番号で指定できるからおんなじようなものだと
思うけど。
- 12 :
- >>11
へぇ。そういう意味だとAVGとかWinのFWの方が軍配がageるんだね。
- 13 :
- >>9
どこを、どうしたらいいですか?
詳しく教えてください。お願いします。
- 14 :
- >>9
こんな感じにすればOKなのかな?
-A input -s ***.***.***.*** 53 -p udp -j ACCEPT
***.***.***.***は上位NSのIPアドレス
- 15 :
- ここにUPできる程度の長さのipchains設定だったら
なんにもしない方がマシ
- 16 :
- >>15
そーす キボンヌ
分割してupもできるっしょ
- 17 :
- >>15
マジっすか?
そんなに設定する必要あるんすか?
ぜひ内容を見せてください!!
- 18 :
- >>17
俺が書いた奴はコメント込みで 400 行くらい。某所にあるけど秘密。
最初は自分の手で書くより seawall とか使ったほうがいいぞ。
実際の設定方法の参考にもなるからな。
- 19 :
- >>18
よういちか?
- 20 :
- http://seawall.sourceforge.net/
これ?
- 21 :
- >>19 ちゃうちゃう。通りすがりの非常勤です。
ちなみにコメントと空行削ったら半分になった。
>>20 それそれ。初心者が自分で書くよりずっといい。
- 22 :
- 追加修正してみました。
こんなんでどうでしょ?
:input DENY
:forward DENY
:output ACCEPT
-A input -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
-A input -s 0/0 -d 0/0 -i lo -j ACCEPT
-A input -s 192.168.1.0/24 -d 0/0 -j ACCEPT
-A input -s 0/0 -d 0/0 -f -j DENY
-A input -s 0/0 -d 0/0 80 -p tcp -y -j ACCEPT
-A input -p tcp -s 0/0 -d 0/0 auth -j REJECT
-A input -s 0/0 -d 0/0 53 -p tcp -y -j ACCEPT
-A input -s 0/0 -d 0/0 53 -p udp -j ACCEPT
-A input -s www.zzz.yyy.zzz 53 -d 0/0 -p udp -j ACCEPT
-A input -s www.zzz.yyy.zzz 53 -d 0/0 -p udp -j ACCEPT
-A input -s 192.168.0.0/255.255.255.0 0 -d 0/0 -p icmp -j ACCEPT
-A input -s 0/0 -d 0/0 0 -p icmp -j ACCEPT
-A input -s 0/0 3 -d 0/0 -p icmp -j ACCEPT
-A input -p icmp -s 0/0 echo-reply -d 0/0 -j ACCEPT
-A input -p icmp -s 0/0 destination-unreachable -d 0/0 -j ACCEPT
-A input -p icmp -s 0/0 time-exceeded -d 0/0 -j ACCEPT
-A input -p icmp -s 0/0 echo-request -d 0/0 -j DENY
-A input -s 0/0 -d 0/0 ! -y -p tcp -j ACCEPT
※www.zzz.yyy.zzzは上位NS
>>18
400行っすか??
ほぇ〜。
設定内容見たいなぁ・・・・。
っていうか、seawallって何ですか?
- 23 :
- >>22
行にコメント付けて欲しいな。
つーか、今、firewall を作るなら
ipchains より iptables の方がイイんではないの?
まだ iptables は枯れてないからダメってこと?
>>18
むしろ設定行よりポリシーを列挙して欲しいかも。
設定行よりは短くすむでそ。
- 24 :
- いちおうHOWTOとか。
http://www.linux.or.jp/JF/JFdocs/IPCHAINS-HOWTO.html
>>23
使ってるカーネルのバージョンが2.2.*なのですが、
iptablesは使えるのでしょうか?と言ってみるテスト。
- 25 :
- >>18
漏れも知りたい。
- 26 :
- >>23
# 基本ポリシー
# 下記の条件にすべて一致しない場合、適用される
:input DENY
:forward DENY
:output ACCEPT
# inputポリシーをDENYにする時は必須らしい
-A input -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
# ゲートウェイ内でのやり取りを許可するということかな?
-A input -s 0/0 -d 0/0 -i lo -j ACCEPT
# LAN内からのパケットはすべてACCEPT
-A input -s 192.168.1.0/24 -d 0/0 -j ACCEPT
# フラグメントは捨てるらしい
-A input -s 0/0 -d 0/0 -f -j DENY
#wwwを許可
-A input -s 0/0 -d 0/0 80 -p tcp -y -j ACCEPT
#意味不明
-A input -p tcp -s 0/0 -d 0/0 auth -j REJECT
#DNSのZONE転送を許可
-A input -s www.zzz.yyy.zzz 53 -d 0/0 53 -p tcp -y -j ACCEPT
#DNSを許可
-A input -s 0/0 -d 0/0 53 -p udp -j ACCEPT
-A input -s www.zzz.yyy.zzz 53 -d 0/0 -p udp -j ACCEPT
-A input -s www.zzz.yyy.zzz 53 -d 0/0 -p udp -j ACCEPT
#LAN内からのpingを許可
-A input -s 192.168.0.0/255.255.255.0 0 -d 0/0 -p icmp -j ACCEPT
#ping結果を許可
-A input -s 0/0 -d 0/0 0 -p icmp -j ACCEPT
#到達不能メッセージを許可
-A input -s 0/0 3 -d 0/0 -p icmp -j ACCEPT
# echo-reply は ping に必要
-A input -p icmp -s 0/0 echo-reply -d 0/0 -j ACCEPT
# destination-unreachable は 全ての tcp/udp トラフィックに必要
-A input -p icmp -s 0/0 destination-unreachable -d 0/0 -j ACCEPT
# time-exceeded は traceroute に必要
-A input -p icmp -s 0/0 time-exceeded -d 0/0 -j ACCEPT
# ping をかけてくる相手に自分の存在を知らせないため
-A input -p icmp -s 0/0 echo-request -d 0/0 -j DENY
# synパケット以外は許可
-A input -s 0/0 -d 0/0 ! -y -p tcp -j ACCEPT
※www.zzz.yyy.zzzは上位NS
参考にしたのは、
ttp://search.luky.org/linux-users.9/msg00310.html
iptablesは、まだ情報が少ないんで、手を出しづらい・・・。
- 27 :
- http://tlec.linux.or.jp/docs/ipchains.html
こんなのもある。探すといっぱいあるね。
- 28 :
- http://tlec.linux.or.jp/docs/iptables.html
http://tlec.linux.or.jp/docs/ipchains.html
- 29 :
- 結局PAL-NET三鷹って何なのよ?
- 30 :
- ぅぇぃ
- 31 :
- firestarterでマウス数回クリックしただけで、masquerade
できるようになったよ。こんなに簡単で良いのか。
/sbin/iptables -L -nで見たら186行12KB分。
firewall.shにはコメント付き。こんな感じ。
# --------( Rules Configuration - Inbound Traffic - Default Ruleset )--------
#Block uPNP
$IPT -t filter -A INPUT -p tcp -s 0/0 -d 0/0 --dport 5000 -i $IF -j $STOP
$IPT -t filter -A INPUT -p udp -s 0/0 -d 0/0 --dport 5000 -i $IF -j $STOP
これはipchainsにも使えるのかな?
- 32 :
- っていうか、「これが私のipchainsです」って公開する人いないでしょ。。。
自分の手の内みせてどーする(笑)
アプローチの仕方としては、この場合にこういう書き方どうでしょう?
って質問形式の方が自然と思われ。
- 33 :
- 正直、サービスが必要としているポートはわかるから、(tcp80とか)
:input DENY
:forward DENY
:output ACCEPT
のあとにどのパケットを通したらいいのか教えて欲しいのです。
- 34 :
- >>32
ipchainsの内容を知ってたって、IPばれなきゃいいじゃん。
自分で作った中途半端なipchainsを信用してサーバ公開するより
ipchainsの内容を添削してもらうほうが、よっぽど有意義。
- 35 :
- 正直、サービスが必要としているポートはわかるから
それ以外の必要なパケットを教えて欲しいのです。
linuxを普通に使う上で必要な設定とか、
よくある攻撃から守もるための設定とか、
linuxをインストールする時に、ファイアウォールの設定で高とか選ぶと、
自動的にipchainsが設定されますよね。
そのまま使ってれば安全って考え方でいいのかな???
そのipchainsに、必要なポート(WWWサーバの80番とか)を追記していけばいいのかな??
ipchainsの神の降臨を待ちます。
- 36 :
- >>35
ディストリ付属のファイアーウォール設定は
信用しないほうがいい。
自分で一からつくれ。
つまり基本的に全部通さないようにしてそこから必要な
ポートを開ければよろしい。
その通れるパケットのフラグやsportをチェックしておけば
とりあえず厨房クラッカーからは大丈夫じゃないの?
- 37 :
- >>36
その必要なポートが分からないんで、教えていただきたいんですが・・・。
WWWの80とかメジャーなサービスは分かりますが・・・。
- 38 :
- >>35
追記:
とりあえずicmpパケットを通しておけ。
あと53はTCPもUDPも開けておけ。
ftpはアクティブ?パッシブか?どっち?
それとlocalhostからのパケットを生通しは絶対にやめれ。
偽装されたらアウトだよ。
全部知ってたらスマソ
- 39 :
- >>37
結論:
「icmp」
以上。
(正確にはicmpパケット)
- 40 :
- >>38様
情報ありがと!!
localhostからのパケットを生通し禁止って具体的にはどうしたらいいの?
- 41 :
- >>40様
俺ずいぶん前にipchainsの文法忘れてiptablesになっちゃたんだよね。
具体的には
------------------------------------------------------------
例えlocalhostからでも不信なポートから不信なポートへアクセスが
きてないか?
例:53番から80番へのSYNパケット(これは偽装の可能性99%です)
------------------------------------------------------------
みたいな感じ。
上の以外にもいろいろあるけど長くなるから。
あと、上のは外部からきたのでも通用するから
ためしてみてね。
- 42 :
- >>40
ヒント。
全てのEthernetデバイスに対して、ソースアドレスが127.0.0.1(IPv4)
である通信全てを無視(drop)する。
あとは確実にあり得ない通信も無視するよう追加しておいた方がいい。
インターネットからの通信で、ソースアドレスがプライベートアドレスに
なっているものとか。
- 43 :
- >>41様
>>42様
なるほど。勉強になります。
情報ありがとうございます。
お二人を神を呼ばせていただきます。
- 44 :
- >>41
っていうかそういうのは
echo 1 > /proc/sys/net/ipv4/conf/*/rp_filter
でいいんでないの。
- 45 :
- >>44
だ、か、ら「ipchainsでの」極端な例を挙げたのっ。
別にそれでよければいいんじゃないの?
だめ?
- 46 :
- >>45
やば、名前まちがえたぁ。
クッキーは恐ろしい...
- 47 :
- いやべつにいいけど。
2.2.x より前ではそれでしか対応できなかったし。
- 48 :
- っていうか、
echo 1 > /proc/sys/net/ipv4/conf/*/rp_filter
って何者?
始めて聞いたわ。
- 49 :
- >>48
http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/proc.txt.html
- 50 :
- iptablesだけど、いいHP見つけた。
ttp://msg.scn-net.ne.jp/linux/router/iptables.html
- 51 :
- >>49
URLサンクス!!
すごい情報量のページだな。
で、読んでみたんだけど、
> rp_filter
> ---------
> 発信元の検証を行うかどうかを整数で指定します。1 が有効で 0 が無効です。デフォ
> ルトでは無効ですが、しかしローカルアドレスやブロードキャストアドレスの偽称に
> 対しては常に有効になっています。
って書いてあるっすよ。
デフォルト無効だけど、常に有効だって。
どういうこと?
- 52 :
- >>51
書いてあるままじゃないの?
デフォルトだと0(無効)の状態になってるけど、
その状態でもローカルアドレスやループバックアドレスに対しては
1(有効)の時と同じ動作をします。って読んだんだけど。
あってる?
- 53 :
- >>52
ってことは、わざわざ1にする必要もないって事??
それとも1にすれば、他にも効果がもあるの??
- 54 :
- >1
iptablesなら興味がありますです
- 55 :
- >>54
iptablesとipchainsの大きな違いってなんですか?
iptablesのほうが詳しく設定できるってのは聞いた事があるけど・・。
っていうか、iptablesとかipchainsの設定自体は、それほど難しくないですよね。
どんなパケットを許可して、どんなパケットは禁止するかのルールを作るほうが難しい。
有名なサービス(例えばWWWとか)の使用しているポートは有名だからいいけど、
マイナーなポートは何に使われているのか分からないからね。
- 56 :
- >>51
原文も読んだけど、よくわかんないねぇ。
解説きぼーん。
- 57 :
- 言葉通りの意味なんじゃねぇの?
- 58 :
- >>52
かぶってますな。氏脳…
- 59 :
- >>55
誤爆しちまったのであらためて...
iptables と ipchains の最も大きな違いはフィルタの構成にある。
特にルータとして動くときが違う。IP forwarding によってマシンを
通過してゆくパケットは ipchains では input/forward/output の
三つを通るが、iptables では forward チェインしか通らない。
このためルータとして動くときのルールをよりシンプルに書ける。
また、ipchains のマスカレードは forward チェインで行われるが、
iptables では OUTPUT/FORWARD の後ろに置かれた POSTROUTING
チェインと INPUT/FORWARD の前に置かれた PREROUTING チェインで
行われる。だから自分自身から出て行くパケットも NAT できる。
ipchains のマスカレードではマスカレードで使用するポート範囲が
決まっていたが、iptables の NAT では空いているローカルポートを
使う。また必要が無ければポート番号は書き換えられない。
iptables の ip_conntrack 機構により、ステートフルなフィルタが
出来る。例えば外に出てゆく TCP コネクションを許可するのに、
外向きの SYN パケットを許可するルールのみを書けばいい。
戻りパケットやコネクションが成立した後のパケット付随する ICMP
パケットについては ip_conntrack に任せられる。
このためルールを非常に簡潔に書く事が出来るし、不要なポートを
開けっぱなしにしないで済む。
- 60 :
- >>56
あるインタフェースについて rp_filter を on にすると、その
インタフェースに届いたパケットの始点アドレスを調べる。
ルーティングテーブルを調べてその始点アドレスにパケットを戻す
時に同じインタフェース経由にならない場合はパケットを拒否する。
例えば eth0 と eth1 があって、eth0 がグローバル、eth1 が
192.168.1.0/24 だったとする。eth0 の rp_filter が 1 だと
eth0 に 192.168.1.XXX が来ると拒否する。
しかし eth0 に 192.168.2.XXX が来ても拒否しない。
だからやっぱり rp_filter を有効にしてても iptables/ipchains
でプライベートアドレスやリンクローカルを落したほうが安心だ。
そして rp_filter とは別に始点アドレスが 0.0.0.0/8 だったり、
マルチキャストだったり、ループバックだったりすると拒否する。
これが >>51 に引用された部分が言いたい事。
- 61 :
- >>60
ほぉ、どうも。
- 62 :
- そういえばお前ら、
フラグメントパケットに対する記述って使ってますか?
例えばこんなの
ipchains -A input -f -j ACCEPT
…とか、
iptables -A FORWARD -f -j ACCEPT
…とか。
どっかで、これをルールの先頭の方に記述してるのを見た気がするんだが、
それだと、断片化してるパケットに関しては、
本来なら拒否すべきポート宛てのパケットであったとしても、
このルールをくぐる時点で許可されしまうのでは…?
ふと思い出したんだけど、この辺わかる人はいませんかね…
- 63 :
- >>62
ん、ん、ん?
どしてフラグメントパケットが許可なの?
DENYじゃないの?
(違ってたらスマソ)
- 64 :
- >>62
おぬしが心配する通り、フラグメントを許可するといたずらされる
可能性がある。たいていはフラグメントはたぶん無いだろうって事
にして許可してないサイトがほとんど。
実際、Path MTU discovery のおかげで TCP のトラフィックに
フラグメントが発生する事は稀。UDP では可能性があるけど、
DNS を始めとして UDP を使うプロトコルは最小の MTU である
512 バイトまでしか使わないものが多い。常識があればそういう
設計をする。フラグメントを発生させるのは NFS ぐらいかな?
iptables の場合 ip_conntrack でなんとかしてくれんじゃないかなぁ
なんて期待しちゃうけど、実際の所どうなんかね?
- 65 :
- >>63-64
だよな。
いや、俺も許可する様にはしてないんだけどさ…
今、片っ端から本漁ったらソースを発見した。
オライリーのLinuxネットワーク管理(二版の方ね)だったよ。
最初は誤植かと思ったんだが、コメント部分に
"断片化は許可するべきで、{ipchains,iptables}ではこれを明示的に指定する"
…と書いてあった。
それで俺の"常識"は歪んでいるのかと思った次第です。
- 66 :
- >>65
その本の著者って...
それとも俺たちがしらないようなもっと高度な点で
フラグメントを許可したほうがいいんだろうか?
その本に許可する理由書いてなかった?
- 67 :
- 名前♪名前♪ど〜して間違える...
くっきぃは恐ろしい♪
- 68 :
- >>66
誤訳、ていうかニュアンスを取り違えてるだけじゃないかなぁ。
確かにフラグメントを許可しないと動かない事もあるわけだから。
- 69 :
- netfilter のソース見てみたよ。ip_conntrack を使えば
フラグメントについても良きにはからってくれそうだ。
結局、ステートフルなファイアウォールでないとフラグメントは
正しく扱えませんよって事ですな。
- 70 :
- >>66
理由が書いてあれば悩まなかったんだけどね…
>それとも俺たちがしらないようなもっと高度な点で
>フラグメントを許可したほうがいいんだろうか?
俺も、そういうのがあるのかと思って聞いてみた次第。
そうでなきゃ、あんな先頭部分でいきなりACCEPTしないだろうし。
しかも"フラグメントされてれば無条件"なんて豪快なルールで…
- 71 :
- >>69
そういえば、この本だとip_conntrackは有効にしてないな…
なんとなく納得しても良い様な気がしてきました。
- 72 :
- # ipchains -L
Chain input (policy ACCEPT):
target prot opt source destination ports
ACCEPT all ------ localnet/16 localnet/16 n/a
ACCEPT all ------ anywhere anywhere n/a
ACCEPT all ------ localnet/16 anywhere n/a
DENY tcp ----l- anywhere 192.168.0.0/24 any -> netbios-ssn
DENY udp ----l- anywhere 192.168.0.0/24 any -> netbios-ssn
DENY tcp ------ anywhere 192.168.0.0/24 any -> 1433
DENY udp ------ anywhere 192.168.0.0/24 any -> 1433
DENY tcp ------ anywhere 192.168.0.0/24 any -> 5432
DENY udp ------ anywhere 192.168.0.0/24 any -> 5432
DENY tcp ------ anywhere 192.168.0.0/24 any -> 2049
DENY udp ------ anywhere 192.168.0.0/24 any -> 2049
DENY tcp ------ anywhere 192.168.0.0/24 any -> 5999:6003
DENY udp ------ anywhere 192.168.0.0/24 any -> 5999:6003
DENY tcp ------ anywhere 192.168.0.0/24 any -> 7100
DENY udp ------ anywhere 192.168.0.0/24 any -> 7100
DENY tcp ----l- anywhere 192.168.0.0/24 any -> 31337
DENY udp ----l- anywhere 192.168.0.0/24 any -> 31337
DENY tcp ----l- anywhere 192.168.0.0/24 any -> 12345:12346
DENY udp ----l- anywhere 192.168.0.0/24 any -> 12345:12346
ACCEPT tcp ------ anywhere 192.168.0.0/24 any -> 1023:65535
ACCEPT udp ------ anywhere 192.168.0.0/24 any -> 1023:65535
ACCEPT tcp ------ anywhere 192.168.0.0/24 any -> ssh
ACCEPT tcp ------ anywhere 192.168.0.0/24 any -> auth
ACCEPT icmp ------ anywhere 192.168.0.0/24 any -> any
ACCEPT icmp ----l- anywhere 192.168.0.0/24 any -> any
DENY all ----l- anywhere anywhere n/a
Chain forward (policy DENY):
target prot opt source destination ports
ACCEPT all ------ localnet/16 localnet/16 n/a
ACCEPT all ------ 192.168.0.0/24 anywhere n/a
MASQ all ------ localnet/16 anywhere n/a
Chain output (policy ACCEPT):
target prot opt source destination ports
ACCEPT all ------ localnet/16 localnet/16 n/a
ACCEPT all ------ anywhere anywhere n/a
ACCEPT all ------ localnet/16 anywhere n/a
- tcp ------ anywhere anywhere any -> www
- tcp ------ anywhere anywhere any -> telnet
- tcp ------ anywhere anywhere any -> ftp
- tcp ------ anywhere anywhere any -> ftp-data
ACCEPT icmp ------ 192.168.0.0/24 anywhere any -> any
ACCEPT icmp ------ 192.168.0.0/24 anywhere any -> any
ACCEPT icmp ------ localnet/16 anywhere any -> any
ACCEPT icmp ------ localnet/16 anywhere any -> any
ACCEPT all ------ anywhere anywhere n/a
- 73 :
- http://his.luky.org/doc/adsl.html#4
ここにある、ipchains の設定って、どないな感じ?
- 74 :
- んじゃ俺も。書いたばかりでテストしてないけど。
mynet="192.168.1.0/24"
iwan="eth1"
ilan="eth0"
function tcpoutput { /sbin/iptables -A OUTPUT -p tcp --dport $1 --syn -j ACCEPT; }
function udpoutput { /sbin/iptables -A OUTPUT -p udp --dport $1 -j ACCEPT; }
function tcpforward { /sbin/iptables -A FORWARD -o $iwan -i $ilan -p tcp -s $mynet --dport $1 -j ACCEPT; }
function udpforward { /sbin/iptables -A FORWARD -o $iwan -i $ilan -p udp -s $mynet --dport $1 -j ACCEPT; }
function badaddress {
/sbin/iptables -A INPUT -s $1 -j LOGDROP
/sbin/iptables -A INPUT -d $1 -j LOGDROP
}
/sbin/iptables -N LOGREJECT
/sbin/iptables -A LOGREJECT -j LOG
/sbin/iptables -A LOGREJECT -j REJECT
/sbin/iptables -N LOGDROP
/sbin/iptables -A LOGDROP -j LOG
/sbin/iptables -A LOGDROP -j DROP
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
/sbin/iptables -A INPUT -i $ilan -j ACCEPT
/sbin/iptables -A OUTPUT -o $ilan -j ACCEPT
badaddress 192.168.0.0/16
badaddress 172.16.0.0/12
badaddress 10.0.0.0/8
badaddress 169.254.0.0/16
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
/sbin/iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
/sbin/iptables -A FORWARD -p icmp --icmp-type 8 -i $ilan -o $iwan -j ACCEPT
tcpoutput www
tcpforward www
tcpoutput smtp
tcpforward smtp
tcpforward domain
udpforward domain
tcpoutput domain
udpoutput domain
udpoutput ntp
udpforward ntp
tcpoutput pop3
tcpforward pop3
/sbin/iptables -A INPUT -p tcp --dport auth -j REJECT --reject-with tcp-reset
/sbin/iptables -t nat -A POSTROUTING -o $iwan -s $mynet -j MASQUERADE
/sbin/iptables -A FORWARD -j LOGDROP
/sbin/iptables -A INPUT -j LOGDROP
/sbin/iptables -A OUTPUT -j LOGREJECT
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP
- 75 :
- なんていうか、ルールをそのまま書くより
ポリシーを記述して、もし要望があれば具体的な方法を
書くっていう風にした方が後学者達の役にたつと思いませんか?
- 76 :
- 何のためにこの部分があるかって簡単なコメントをつければ
今のままでも良いような。
どうしてこうするのかって、一言だけでも。
- 77 :
- 最初はコメントがいっぱい入ってたんだけど、
改行が多すぎますになっちゃってさ。
# LAN で使ってるネットワークアドレス
mynet="192.168.1.0/24"
# インターネット側につながってるネットワークインタフェース
iwan="eth1"
# LAN 側につながってるネットワークインタフェース
ilan="eth0"
# 繰り返し使う箇所をサブルーチンにしておく
# TCP の外向けコネクションの許可 (Linux自身から)
# 最初の SYN パケットのみを明示的に許可する。
# 残りは conntrack 機能に任せる。
function tcpoutput { /sbin/iptables -A OUTPUT -p tcp --dport $1 --syn -j ACCEPT; }
# UDP の外向けパケットの許可 (Linux自身から)
# これも同様に外向けのパケットのみを明示的に許可。
# 内向きパケットは conntrack が良きにはからってくれる。
function udpoutput { /sbin/iptables -A OUTPUT -p udp --dport $1 -j ACCEPT; }
# TCP の外向けコネクションの許可 (LAN 内の他のマシンから)
function tcpforward { /sbin/iptables -A FORWARD -o $iwan -i $ilan -p tcp -s $mynet --dport $1 -j ACCEPT; }
# UDP の外向けパケットの許可 (LAN 内の他のマシンから)
function udpforward { /sbin/iptables -A FORWARD -o $iwan -i $ilan -p udp -s $mynet --dport $1 -j ACCEPT; }
# プライベートアドレス等の外からくるはずのないアドレスを拒否
function badaddress {
/sbin/iptables -A INPUT -s $1 -j LOGDROP
/sbin/iptables -A INPUT -d $1 -j LOGDROP
}
- 78 :
- # 拒否したパケットはログを取るようにしたいので、
# ユーザ定義チェイン LOGREJECT と LOGDROP を作る。
/sbin/iptables -N LOGREJECT
/sbin/iptables -A LOGREJECT -j LOG
/sbin/iptables -A LOGREJECT -j REJECT
/sbin/iptables -N LOGDROP
/sbin/iptables -A LOGDROP -j LOG
/sbin/iptables -A LOGDROP -j DROP
# ループバックインタフェース上のパケットは全て許可
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
# LAN につながってるインタフェース上のパケットは全て許可
/sbin/iptables -A INPUT -i $ilan -j ACCEPT
/sbin/iptables -A OUTPUT -o $ilan -j ACCEPT
# プライベートアドレスを拒否
badaddress 192.168.0.0/16
badaddress 172.16.0.0/12
badaddress 10.0.0.0/8
# リンクローカルアドレスを拒否
badaddress 169.254.0.0/16
# ループバックやマルチキャスト、ゼロアドレスはカーネルが
# 自動的に拒否してくれるよ。
# conntrack 機能が既に確立したコネクションのパケットとか、
# それに付随する ICMP とか、FTP のデータコネクションとかは、
# ここで一括して許可しておく。現在何が許可されているかは
# cat /proc/net/ip_conntrack で見れる。
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
- 79 :
- # ping を許可する。Linux自身は外からのpingにも応答する。
/sbin/iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
/sbin/iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
# LAN 内のマシンから外への ping を許可する。
/sbin/iptables -A FORWARD -p icmp --icmp-type 8 -i $ilan -o $iwan -j ACCEPT
# WWW の閲覧を許可。
tcpoutput www
tcpforward www
# メール送信を許可。
tcpoutput smtp
# LAN 内のマシンからのメール送信を許可。
tcpforward smtp
# Linux がメールサーバの場合、許可しないほうがいい。
# ウィルスが勝手にメールを出すのを防げるかも。
# 外のネームサーバへのアクセスを許可
tcpforward domain
udpforward domain
tcpoutput domain
udpoutput domain
# NTP サーバへのアクセスを許可
udpoutput ntp
udpforward ntp
# 外の POP-3 サーバへのアクセスを許可
tcpoutput pop3
tcpforward pop3
# 他にも必要なサービスを追加してやればいい。
# 外から内向きのアクセスは一切許可していない事に注意。
- 80 :
- # 外からの auth (ident) へのアクセスを REJECT してあげないと、
# FTP サーバ等へのログインが遅くなる。
/sbin/iptables -A INPUT -p tcp --dport auth -j REJECT --reject-with tcp-reset
# ipchains だと個々のサービス毎にマスカレードの設定が必要
# だったが、iptables のマスカレードのルールはこれだけで OK。
/sbin/iptables -t nat -A POSTROUTING -o $iwan -s $mynet -j MASQUERADE
# 以上のルールに当てはまらないパケットは全て DROP しログを取る。
/sbin/iptables -A FORWARD -j LOGDROP
/sbin/iptables -A INPUT -j LOGDROP
# DROP はパケットを捨ててしまうのでタイムアウトまで待たされる。
# OUTPUT チェインだけは DROP でなくて REJECT にしておくと、
# エラーが返るのが早いので人間へのストレスが少ない。
/sbin/iptables -A OUTPUT -j LOGREJECT
# ホントは 内から外への FORWARD も REJECT するようにして
# おくといい。こんなかんじで
# /sbin/iptables -A FORWARD -i $ilan -o $iwam -j LOGREJECT
# 最後にポリシーを設定。
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP
- 81 :
- 長くてごめん。
ここには LAN から外に出て行くルールだけしかない。
自鯖を建てていて、外からのアクセスを許可したいなら、
function tcpinput {
/sbin/iptables -A INPUT -p tcp --dport $1 --syn -j ACCEPT
}
tcpinput www
tcpinput smtp
とかのルールを追加する。
ネームサーバを建てていて外からのアクセスを許可するなら、
UDP ポート 53 (domain) 加えて、スレーブからの TCP も許可。
function udpinput {
/sbin/iptables -A INPUT -p udp --dport $1 -j ACCEPT
}
udpinput domain
/sbin/iptables -A INPUT -p tcp -s スレーブのアドレス --dport domain --syn -j ACCEPT
FTP のアクセスを許可するにはモジュール ip_conntrack_ftp を
ロードしておく必要がある。データコネクションを許可するため。
IRC の場合は ip_conntrack_irc。
あとは conntrack も完璧じゃないので、
いくつか手で許可するルールを追加しなきゃならんかも。
- 82 :
- >>35 = 1 かどうかはしらんけど普通に赤帽入れると
ipchains のフィルタリングに、なるんだから
TABLE止めてくれよ。。。
- 83 :
- >>82
lokkit なんてオモチャみたいなもんだ。Red Hat はデフォルトで
ipchains と iptables が両方入ってる。iptables を使うには
ipchains 削除して iptables のルールを save するだけだ。
2.4 カーネルの ipchains は制限多いので、昔作った ipchains
のルールを流用する時以外は iptables に移行せろ。
- 84 :
- 意外と良スレだな。
勉強になるわ。
- 85 :
- ここの「い」さんのIPCHAINS
>>26
を参考に、input -P DENYしてから
SYNパケットの段階で判断させるってのは
シンプルでわかりやすかったのですが。
これだと何かまずいってことはありますか?
- 86 :
- そもそも >>26 のルールには誤りがあるが、
それを除いても、SYN だけでの判断ではザルになりやすい。
例えばこのルールでは SYN パケットだけを拒否していて、
その他のパケットは無条件に受け入れている。
家庭用のフィルタならいいが、サーバを守るとなるとちょっと。
ていうか、もっとやれる事があるのにしないのは不安。
- 87 :
- 誤りを指摘してください。
お願いします。
- 88 :
- 例えば...
# これは必要ない。下のルールでループバックを全て許可してるから。
-A input -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
# 誤りじゃないでど単に -A input -i lo -j ACCEPT でいいのに。
-A input -s 0/0 -d 0/0 -i lo -j ACCEPT
# 始点アドレスに基づくフィルタリングではなく、ループバックの
# の場合と同様に -A input -i eth? -j ACCPET としたほうがいい。
-A input -s 192.168.1.0/24 -d 0/0 -j ACCEPT
# これは不要。input ポリシーが DENY だから。
-A input -s 0/0 -d 0/0 -f -j DENY
# 他の人も指摘してたが、始点ポート 53 を全て受け入れるのは危険
# IP アドレスを限定してるからまぁ大丈夫だろうけど。
-A input -s www.zzz.yyy.zzz 53 -d 0/0 -p udp -j ACCEPT
-A input -s www.zzz.yyy.zzz 53 -d 0/0 -p udp -j ACCEPT
# destination-unreachable を許可するルールが重複してる。
-A input -s 0/0 3 -d 0/0 -p icmp -j ACCEPT
-A input -p icmp -s 0/0 destination-unreachable -d 0/0 -j ACCEPT
ICMP は source-quench と parameter-problem も許可すべき。
細かいミスが目立つけど致命的な誤りは無さそうだね。
これは趣味の問題だけど、皆 ping に応答しなくしたがる。
自分の存在を隠したいって気持は判るし、そう勧めてる本もある
が厳密に言えは RFC 違反。ping 以外にもホストの存在を調べる
手段は沢山あるし、むしろ echo-request よりも echo-reply の
ほうが危険な事もある。
最近読んだ本に「パケットフィルタリングは技術じゃなくて教養」
とあった。つまり理論的にこれがベストという解はなくて、知識
と経験の積み重ねが全てって事。
- 89 :
- >>88様
ありがとうございます!!
すごく勉強になります。
フィルタリングの神と呼ばせていただきます。
- 90 :
- なるほど、とても参考になります>86さん、26さん
ttp://www.linux.or.jp/JF/JFdocs/IPCHAINS-HOWTO-5.html
とりあえず、DNSはUDPだけだとあかん。と。512バイト以上の
メッセージのときはTCPつかうから。
サルでごめん。一応、書いときます。
- 91 :
- >>90
うん。確かに DNS は TCP 使う時もある。忘れてた。指摘サンキュー。
でも自鯖に長い TXT レコードとか、数十台のラウンドロビンとかを
定義しない限り TCP での問い合わせが来る事は無いと思う。
だったら禁止しておくのも悪くないんじゃないかな、と今思った。
- 92 :
- >>90
禁止している私は、いままで困ったことなど無いもんだが。
- 93 :
- 無駄が多いかな?
########## MASTER_POLICY
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
########## LOCALHOST
iptables -A INPUT -i lo -s 127.0.0.1 -j ACCEPT
########## INTERNAL
iptables -A INPUT -i eth1 -p tcp -d ! 192.168.1.0/24 --dport 137:139 -j DROP
iptables -A INPUT -i eth1 -p udp -d ! 192.168.1.0/24 --dport 137:139 -j DROP
iptables -A INPUT -i eth1 -p tcp -d ! 192.168.1.0/24 --dport 445 -j DROP
iptables -A INPUT -i eth1 -p udp -d ! 192.168.1.0/24 --dport 445 -j DROP
iptables -A INPUT -i eth1 -s 192.168.1.0/24 -j ACCEPT
iptables -A POSTROUTING -o ppp0 -t nat -j MASQUERADE
########## SERVICES
iptables -A PREROUTING -t nat -p tcp -d LOCALIP --dport 6699 -j DNAT --to 192.168.1.1
iptables -A PREROUTING -t nat -p udp -d LOCALIP --dport 6257 -j DNAT --to 192.168.1.1
########## EXTERNAL
#OUTGOING
iptables -A OUTPUT -o ppp0 -j ACCEPT
#INCOMING
iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j LOG --log-level warning --log-prefix ATTACK-1__
iptables -A FORWARD -i ppp0 -m state --state INVALID -j LOG --log-level warning --log-prefix ATTACK-INVARID__
iptables -A INPUT -i ppp0 -p udp -d LOCALIP --dport 1:1024 -j LOG --log-level warning --log-prefix ATTACK-UDP__
########## DROP_ALL
iptables -A INPUT -i ppp0 -j LOG --log-level warning --log-prefix ATTACK-DEFAULT__
- 94 :
- ipchainsのスレじゃないの?
- 95 :
- iptables のスレ建てたらいじめられそうなんだもん。
- 96 :
- >95
あんまりにぎわってないけど、すでにあるよ。
おい、iptablesの使い方を具体的に詳しく教えろ!
http://pc.2ch.net/test/read.cgi/linux/1000817457/
- 97 :
- もう、ここは使われていないのでしょうか?
どなたか教えてください。
次の2つの設定は同じ意味と思うのですが
自作版を使うとlynxすら使えません。
>lokkit版
inputのポリシーACCEPT
ローカルデバイスのものを許可
プロバイダのDNSからで53番からのものUDPを許可
上記以外のtcpとudpを破棄
>自作版
inputポリシーDENY
ローカルデバイスのものを許可
プロバイダのDNSからで53番からのものUDPを許可
icmpを許可
本当は自作版のほうはもっといろいろ設定されていたのですが
思うように動作しないのでほとんどの行がコメントアウトされて
現在の形になっています。
- 98 :
- >>97
そんな簡単なもんやおまへんで。
lokkit がどういう設定をしてるのか見てみれ。
/etc/sysconfig/ipchains に保存されてる。
- 99 :
- 早速のレス、ありがとうございます
lokkitはこれだけしかやってないみたいですけど。
:input ACCEPT
:forward ACCEPT
:output ACCEPT
-A input -s 0/0 -d 0/0 -i lo -j ACCEPT
-A input -s xxx.xxx.xxx.xxx 53 -d 0/0 -p udp -j ACCEPT
-A input -s 0/0 -d 0/0 -p tcp -y -j REJECT
-A input -s 0/0 -d 0/0 -p udp -j REJECT
97での私の理解が間違っているのでしょうか?
- 100read 1read
- 1read 100read
TOP カテ一覧 スレ一覧 削除依頼 ▲
・ 次のスレ
KDDLab神 に感謝をささげるスレ
はやいルータを作る
Itaniumで64ビットLinuxだぁ!
■光でLinux(ノ゚ρ゚)ノ ■
-