10/05/05 21:27:49 VmXl8nxk
例えば
sudo iptables -A OUTPUT ! -d 10.0.2.0/255.255.255.0 -m owner --uid-owner jaiko -m time --timestart 21:00:00 --timestop 05:00:00 -j DROP
を実行すると、
jaikoは夜の9時から朝の5時までの間、
LAN内部以外とは通信できなくなるのかな。
963:ジャイアン ◆J1N3P2v8mu/2
10/05/06 20:49:17 wRsOF2vt
-iや-oで指定するインターフェイス名は
/etc/network/interfacesを見ればだいたい分かるだろう。
ifconfigコマンドを実行すると
稼働中のネットワークインターフェイスが表示されるので
これも参考になるだろう。
964:ジャイアン ◆J1N3P2v8mu/2
10/05/08 20:54:40 LQrEbcm1
-Dオプションでルールを削除する。
-Fオプションでチェイン内の全ルールを消去する。
何かおかしくなったときに使えそうだな。
-Zオプションですべてのチェインのパケットカウンタ、バイトカウンタを0にする。
各ルールが適用されたパケット数、バイト数を記録してるんだな。
カウンタの数値は「-L -v」オプションで見られるらしい。
965:ジャイアン ◆J1N3P2v8mu/2
10/05/09 21:06:00 IU09vcKg
ルールは上にあるものほど優先されるから、順番が大切だ。
>>962のようなやつは、通信を許可するルールよりも
上にしておかないと意味がないらしい。
よく使うルールはなるべく上の方にしておくと
CPUの仕事が少し減るとかなんとかで、
パケットカウンタも参考にして順番を決めるんだとか。
966:ジャイアン ◆J1N3P2v8mu/2
10/05/09 21:53:40 IU09vcKg
いよいよファイヤーウォールの設定を始めるわけだが、
>>955にあるとおり、シェルスクリプトを使うのが普通みたいだな。
送信は
既存の接続とこれに関連のある接続を通す
DNS、DHCP、NTP、webとメール、ループバック、pingの新規接続を通す
他は通さない
受信は
既存の接続とこれに関連のある接続を通す
ループバック、LAN内部からのpingの新規接続を通す
他は通さない
という方針でやってみよう。
DHCPサーバーとDNSサーバーのアドレスは>>927だ。
967:ジャイアン ◆J1N3P2v8mu/2
10/05/10 20:47:26 c5Akoipn
>>954
× sudo iptables OUTPUT -d 10.0.2.0/255.255.255.0 -j ACCEPT
○ sudo iptables -A OUTPUT -d 10.0.2.0/255.255.255.0 -j ACCEPT
>>958
× sudo iptables -A OUTPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 80,443 ACCEPT
○ sudo iptables -A OUTPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 80,443 -j ACCEPT
よく見てみたら、けっこう間違ってるじゃないか。
iptablesは複雑で難しいな。
のび太は1から全部読み返してみて、どこがどう間違っているか指摘しろ。
968:login:Penguin
10/05/10 20:52:45 o8QQ0v0D
なんというできるジャイアン
969:ジャイアン ◆J1N3P2v8mu/2
10/05/14 21:06:05 c090gNNJ
以下の内容でload-firewall-rulesというシェルスクリプトを作った。
ほとんど全部、誰かが作ったやつのコピペだ。
のび太はよく検証しておかしなところがあったらおしえろ。
INPUTもOUTPUTも、やりとりするパケットの大半はESTABLISHEDになるみたいだから、
これを通すルールを一番上にした。
manによるとRELATEDはFTPデータ転送とかICMPエラーとかで使われるらしいが、
他にどんなのがRELATEDとして扱われるか、RELATEDを通さないとどんな問題があるか
のび太はよく調べて報告しろ。
970:ジャイアン ◆J1N3P2v8mu/2
10/05/14 21:08:49 c090gNNJ
---ここから
#!/bin/sh
#各チェインを初期化する
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
#各チェインのポリシーを設定する
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP
971:ジャイアン ◆J1N3P2v8mu/2
10/05/14 21:12:56 c090gNNJ
#OUTPUTチェインにルールを追加する
#既存の接続とそれに関連する接続を通す
/sbin/iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#DNSサーバーへの新規接続を通す
/sbin/iptables -A OUTPUT -p udp -d 10.0.2.3 -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
#WWWサーバーへの新規接続を通す
/sbin/iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW -j ACCEPT
#NTPサーバーへの新規接続を通す
/sbin/iptables -A OUTPUT -p udp -m udp --sport 123 --dport 123 -m conntrack --ctstate NEW -j ACCEPT
#DHCPサーバーへの新規接続を通す
/sbin/iptables -A OUTPUT -p udp -d 10.0.2.2 -m udp --sport 68 --dport 67 -m conntrack --ctstate NEW -j ACCEPT
#メールサーバーへの新規接続を通す
/sbin/iptables -A OUTPUT -p tcp -m multiport --dports 25,110 -m conntrack --ctstate NEW -j ACCEPT
#自分自身への新規接続(loopback)を通す
/sbin/iptables -A OUTPUT -o lo -s 127.0.0.0/255.0.0.0 -d 127.0.0.0/255.0.0.0 -m conntrack --ctstate NEW -j ACCEPT
#pingを通す
/sbin/iptables -A OUTPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
972:ジャイアン ◆J1N3P2v8mu/2
10/05/14 21:14:20 c090gNNJ
#INPUTチェインにルールを追加する
#既存の接続とそれに関連する接続を通す
/sbin/iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#自分自身からの新規接続(loopback)を通す
/sbin/iptables -A INPUT -i lo -s 127.0.0.0/255.0.0.0 -d 127.0.0.0/255.0.0.0 -m conntrack --ctstate NEW -j ACCEPT
#LAN内部からのpingを通す
/sbin/iptables -A INPUT -p icmp -s 10.0.2.0/255.255.255.0 -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
---ここまで
973:login:Penguin
10/05/15 12:11:57 GGpTElO6
>970
頻繁に使うIPアドレスはわかりやすい名前の変数に入れておくと、後々メンテするときにパッと見てどんなルールなのか理解しやすいかもしれない。
SELF=`ifconfig eth0 | grep "inetアドレス" | awk '{print $1}' | sed 's/.*://'`
DNS='192.168.0.1'
BCAST='255.255.255.255'
ANY='0.0.0.0/0'
こんな風に書いておけば$SELFとか$ANYで参照すればいいし。
|#各チェインを初期化する
直後にDROPしているからACCEPTしている3行は必要ないと思う。
あとは以下を最後に入れておくとdmesgでDROPしたログが取れて便利かもしれない。
iptables -N LOGGING
iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit
iptables -A LOGGING -j DROP
iptables -A INPUT -j LOGGING
iptables -A OUTPUT -j LOGGING
974:ジャイアン ◆J1N3P2v8mu/2
10/05/15 21:24:32 1+V3dTpu
$がついてるのは変数というものか。
確かにそうしている例が多かったな。
シェルスクリプトについては、まだ知らないことがたくさんあるから、
今回は単純にコマンドを並べただけにした。
知識が増えるにつれて、少しづつ改良できるようになるといいな。
チェインの初期化についても、のび太の言う通りだが、
こんな風にしている奴が多かったから、俺も真似してみた。
-Fオプションはルールを消すだけでポリシーはそのままだから
なんとかかんとかって言ってた奴がいたが、やっぱり要らないよな。
ログの取り方はドキュメントに少し書いてあった。
同じ内容であふれないように「-m limit」で頻度を調整するみたいだな。
-jオプションで指定するターゲットもたくさんあって訳が分からんのだが、
LOGターゲットについては後で余裕があったら調べてみようかな。
975:ジャイアン ◆J1N3P2v8mu/2
10/05/17 21:56:00 s3cgTh1e
>>970-972のスクリプトでファイヤーヲールを設定できるわけだが、
PCを再起動するとその設定は失われてしまうので
起動する度にスクリプトを実行しないといけないらしい。
976:login:Penguin
10/05/18 10:26:57 cIfMJtXp
>975
URLリンク(forums.ubuntulinux.jp)
ちょっと古いけど参考になりそうな記事。
もしかするとufwに挑戦しないといけないのかもしれない。
977:login:Penguin
10/05/18 10:46:30 rcU8yBdM
もう2年か。DVD再生できなかったとか言ってた頃よりずいぶんスキルアップしたなwwww
978:ジャイアン ◆J1N3P2v8mu/2
10/05/18 21:13:58 e42ouVj1
URLリンク(manpages.ubuntu.com)
/etc/network/if-pre-up.dにスクリプトを置いておくと
ネットワークインターフェイスが起動するときに
それを自動で実行すると書いてある。
これにはrun-partsというのを使っているそうだが、
URLリンク(manpages.ubuntu.com)
ファイル名に制約があるらしい。
大文字、小文字、数字、アンダースコア、ハイフン
だけにしろというようなことが書いてある。
979:ジャイアン ◆J1N3P2v8mu/2
10/05/18 21:52:34 e42ouVj1
network-managerを使ってると都合が悪いというようなことが
ドキュメントにも書いてあったんだが、
>>976の奴の場合は、他に原因があったみたいだな。
ドキュメントの記述が古いのだろうか。
いずれにせよ、俺はnetwork-managerをインストールしてないから関係なさそうだな。
980:野比 のび太
10/05/18 22:19:29 vVeBSaym
g