iptablesの設定
戻る
とりあえずの設定です(^-^)/ 実験環境についてはこちらをごらん下さい。
参考文献:『はじめてのRedHat Linux8.0 サーバー構築編』アイティーブースト著 秀和システム
『TCP/IPバッケトフィルタリング 常時接続時代の基本セキュリティ』宇野 俊夫著 エーアイ出版
iptablesにはひとつひとつコマンド入力していく方法と、iptablesコマンドをまとめたスクリプトを作成しそれを実行する方法があります。
手馴れた人ならひとつひとつコマンド入力していってもいいかと思いますが、わたしのような初心者はスクリプトを使った方がいいだろう
ということで、スクリプトを書きました。
ポリシー?!としては、IPマスカレードは使わない。Delegateでhttp・pop・smtp・ftpをプロクシする。dhcpd・ntpd・ssh・samba・cupsを
LAN側のクライアントに対してのみ使う。そして、必要なポートだけ開ける…
<変更> サーバーの設定を確実にし、少しでもルールを減らしてiptablesを軽くする。50くらいルールが減りましたが…い・い・の・か??
さて、まずスクリプトを作ります。
# mkdir /root/bin
# vi bin/filter
とします。以下がその内容です。
スキップ
===================================================================================
#!/bin/sh
# policy 許可しないものは全て禁止にします
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# DROP for samba eth0にはNetBIOSのバケットが出入りしないように拒否しておきます
iptables -A INPUT -p tcp --sport 135 -i eth0 -j DROP
iptables -A INPUT -p udp --sport 135 -i eth0 -j DROP
iptables -A OUTPUT -p tcp --dport 135 -o eth0 -j DROP
iptables -A OUTPUT -p udp --dport 135 -o eth0 -j DROP
iptables -A INPUT -p tcp --sport 137:139 -i eth0 -j DROP
iptables -A INPUT -p udp --sport 137:139 -i eth0 -j DROP
iptables -A OUTPUT -p tcp --dport 137:139 -o eth0 -j DROP
iptables -A OUTPUT -p udp --dport 137:139 -o eth0 -j DROP
iptables -A INPUT -p tcp --sport 445 -i eth0 -j DROP
iptables -A INPUT -p udp --sport 445 -i eth0 -j DROP
iptables -A OUTPUT -p tcp --dport 445 -o eth0 -j DROP
iptables -A OUTPUT -p udp --dport 445 -o eth0 -j DROP
# DROP for samba config(=swat)
iptables -A INPUT -p tcp --dport 901 -i eth0 -j DROP
iptables -A OUTPUT -p tcp --sport 901 -o eth0 -j DROP
# DROP for cups config
iptables -A INPUT -p tcp --dport 631 -i eth0 -j DROP
iptables -A OUTPUT -p tcp --sport 631 -o eth0 -j DROP
# DROP for delegate eth0へのdelegateへの要求を拒否します
iptables -A INPUT -p tcp --dport 8080 -i eth0 -j DROP
iptables -A INPUT -p tcp --dport 8110 -i eth0 -j DROP
iptables -A INPUT -p tcp --dport 8025 -i eth0 -j DROP
iptables -A INPUT -p tcp --dport 8021 -i eth0 -j DROP
# router dns ルーターとのDNS通信を許可します
iptables -A INPUT -p udp --sport 53 -s 192.168.0.1 --dport 1024:
-d 192.168.0.2 -i eth0 -j ACCEPT
iptables -A OUTPUT -p udp --sport 1024: -s 192.168.0.2 --dport 53
-d 192.168.0.1 -o eth0 -j ACCEPT
# router config ルーターはhttpで設定します
iptables -A OUTPUT -p tcp --sport 1024: -s 192.168.0.2 --dport 80
-d 192.168.0.1 -o eth0 -j ACCEPT
iptables -A INPUT -p tcp ! --syn --sport 80 -s 192.168.0.1 --dport
1024: -d 192.168.0.2 -i eth0 -j ACCEPT
# ingress in eth0から入ってくるルーターとのDNS通信・ルーター設定以外のプライベートアドレスからのバケットを拒否しておきます
iptables -A INPUT -s 192.168.0.0/16 -i eth0 -j DROP
iptables -A INPUT -s 192.168.0.0/24 -i eth0 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -i eth0 -j DROP
iptables -A INPUT -s 10.0.0.0/8 -i eth0 -j DROP
iptables -A INPUT -s 127.0.0.1/32 -i eth0 -j DROP
# ingress out ルーターとのDNS通信・ルーター設定以外のeth0へ出て行くプライベートアドレスへのバケットを拒否します
iptables -A OUTPUT -d 192.168.0.0/32 -o eth0 -j DROP
iptables -A OUTPUT -d 192.168.0.255/32 -o eth0 -j DROP
iptables -A OUTPUT -d 192.168.0.0/16 -o eth0 -j DROP
iptables -A OUTPUT -d 192.168.0.0/24 -o eth0 -j DROP
iptables -A OUTPUT -d 172.16.0.0/12 -o eth0 -j DROP
iptables -A OUTPUT -d 10.0.0.0/8 -o eth0 -j DROP
# loopback ループバックを許可
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# ident これを許可しておかないとメーラーが使えません…いらない
iptables -A OUTPUT -p tcp --sport 1024: -s 192.168.0.2
--dport 113 -o eth0 -j ACCEPT
iptables -A INPUT -p tcp --sport 113 -s 192.168.2.0/24
--dport 1024: -d 192.168.2.1 -i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: -s 192.168.2.1
--dport 113 -d 192.168.2.0/24 -o eth1 -j ACCEPT
# provider dns プロバイダのDNSサーバーとの通信を許可します
iptables -A INPUT -p udp --sport 53 -s ***.***.***.****
--dport 1024: -d 192.168.0.2 -i eth0 -j ACCEPT
iptables -A OUTPUT -p udp --sport 1024: -s 192.168.0.2 --dport 53
-d ***.***.***.*** -o eth0 -j ACCEPT
#[service] それぞれのデーモンに必要なポートを開けます
# ssh & samba & samba config(swat) & delegate client
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -s 192.168.2.0/24
-d 192.168.2.1 -i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp ! --syn -m state --state ESTABLISHED -s 192.168.2.1
-d 192.168.2.0/24 -o eth1 -j ACCEPT
# dhcpd クライアントのためのルールです 一番下のバケットについてはDROPしてもいいと思います ちょっとログが五月蝿かったので…
# ルーターのdhcpを切ったのでRedHatのdhcpdも切りました。
iptables -A INPUT -p udp --sport 68 -s 192.168.2.0/24 --dport
67 -d 192.168.2.1 -i eth1 -j ACCEPT
iptables -A OUTPUT -p udp --sport 67 -s 192.168.2.1 --dport
68 -d 192.168.2.0/24 -o eth1 -j ACCEPT
iptables -A INPUT -p udp --sport 68 -s 0.0.0.0 --dport
67 -d 255.255.255.255 -i eth1 -j ACCEPT
# ssh クライアントのためのルールです
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -s 192.168.2.2
--dport 22 -d 192.168.2.1 -i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
22 -s 192.168.2.1 -d 192.168.2.2 -o eth1 -j ACCEPT
# ntpd for server サーバーのためのルールです
iptables -A INPUT -p udp --sport 123 --dport 123 -d 192.168.0.2
-i eth0 -j ACCEPT
iptables -A OUTPUT -p udp --sport 123 -s 192.168.0.2 --dport
123 -o eth0 -j ACCEPT
# ntpd for client クライアントのためのルールです
iptables -A INPUT -p udp -s 192.168.2.0/24 --dport 123
-d 192.168.2.1 -i eth1 -j ACCEPT
iptables -A OUTPUT -p udp --sport 123 -s 192.168.2.1 -d
192.168.2.0/24 -o eth1 -j ACCEPT
# samba クライアントのためのルールです
iptables -A INPUT -p udp --sport 137:138 -s 192.168.2.0/24
--dport 137:138 -i eth1 -j ACCEPT
iptables -A OUTPUT -p udp --sport 137:138 --dport 137:138
-d 192.168.2.0/24 -o eth1 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.2.0/24 --dport
139 -i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 139 -d 192.168.2.0/24
-o eth1 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.2.0/24 --dport 445
-i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 445 -d 192.168.2.0/24
-o eth1 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.2.0/24 --dport 1024:5000
-i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024:5000 -d 192.168.2.0/24
-o eth1 -j ACCEPT
# samba config (=swat) クライアントからのブラウザによる設定のためのルールです
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024:5000 -s 192.168.2.2 --dport 901 -d 192.168.2.1 -i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
901 -s 192.168.2.1 --dport 1024:5000 -d 192.168.2.2 -o eth1 -j ACCEPT
# cups config クライアントからのブラウザによる設定のためのルールです
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024:5000 -s 192.168.2.2 --dport 631 -d 192.168.2.1 -i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
631 -s 192.168.2.1 --dport 1024:5000 -d 192.168.2.2 -o eth1 -j ACCEPT
#[delegate] 以下はDelegateのためのルールです
# delegate
iptables -A INPUT -p tcp ! --syn -m state --state ESTABLISHED --dport 1024:
-d 192.168.0.2 -i eth0 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport 1024:
-s 192.168.0.2 -o eth0 -j ACCEPT
# delehttp for server httpプロクシサーバーのためのルールです
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024: -s 192.168.0.2 --dport 80 -o eth0 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024: -s 192.168.0.2 --dport 86 -o eth0 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024: -s 192.168.0.2 --dport 443 -o eth0 -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
80 --dport 1024: -d 192.168.0.2 -i eth0 -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
86 --dport 1024: -d 192.168.0.2 -i eth0 -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
443 --dport 1024: -d 192.168.0.2 -i eth0 -j ACCEPT
# delehttp for client httpプロクシサーバーのクライアントのためのルールです
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024: -s 192.168.2.0/24 --dport 8080 -d 192.168.2.1 -i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
8080 -s 192.168.2.1 --dport 1024: -d 192.168.2.0/24 -o eth1 -j ACCEPT
# delepop for server popプロクシサーバーのためのルールです
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024:65535 -s 192.168.0.2 --dport 110 -o eth0 -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
110 --dport 1024:65535 -d 192.168.0.2 -i eth0 -j ACCEPT
#delepop for client popプロクシサーバーのクライアントのためのルールです
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024: -s 192.168.2.0/24 --dport 8110 -d 192.168.2.1 -i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
8110 -s 192.168.2.1 --dport 1024: -d 192.168.2.0/24 -o eth1 -j ACCEPT
# delesmtp for server smtpプロクシサーバーのためのルールです
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024: -s 192.168.0.2 --dport 25 -o eth0 -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
25 --dport 1024: -d 192.168.0.2 -i eth0 -j ACCEPT
# delesmtp for client smtpプロクシサーバーのクライアントのためのルールです
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024: -s 192.168.2.0/24 --dport 8025 -d 192.168.2.1 -i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
8025 -s 192.168.2.1 --dport 1024: -d 192.168.2.0/24 -o eth1 -j ACCEPT
# deleftp for server ftpプロクシサーバーのためのルールです
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024: -s 192.168.0.2 --dport 21 -o eth0 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024: -s 192.168.0.2 --dport 1024:65535 -o eth0 -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
1024: --dport 1024: -d 192.168.0.2 -i eth0 -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
21 --dport 1024: -d 192.168.0.2 -i eth0 -j ACCEPT
# deleftp for client ftpプロクシサーバーのクライアントのためのルールです
iptables -A OUTPUT -p tcp --sport 6020 -s 192.168.2.1 --dport 1024:5000
-d 192.168.2.0/24 -o eth1 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --sport
1024: -s 192.168.2.0/24 --dport 8020:8021 -d 192.168.2.1 -i eth1 -j ACCEPT
iptables -A OUTPUT -p tcp ! --syn -m state --state ESTABLISHED --sport
8021 -s 192.168.2.1 --dport 1024: -d 192.168.2.0/24 -o eth1 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: -s 192.168.2.1 --dport 1024:5000
-d 192.168.2.0/24 -o eth1 -j ACCEPT
# ident for delegate ftp ftpプロキシサーバーを使用する際に使用しているようです。
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED
--sport 1024: -s 192.168.2.1 --dport 113 -d 192.168.2.0/24 -o eth1 -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state ESTABLISHED
--sport 113 -s 192.168.2.0/24 --dport 1024: -d 192.168.2.1 -i eth1 -j ACCEPT
# log 以上のルールから外れたバケットのログを出すルールです
iptables -A INPUT -j LOG --log-prefix "### INPUT ###"
iptables -A OUTPUT -j LOG --log-prefix "### OUTPUT ###"
# End Of Rules
===================================================================================
で、このファイルに実行権限をつけます。
# chmod 700 bin/filter
で、このファイルを実行すれば、その内容がiptablesに反映されます。
# filter
で、後はいろいろ操作してみて、そのログの内容次第…
問題があれば、
# /etc/rc.d/init.d/iptables stop
# vi bin/filter
として、/root/bin/filterを書き直す
で、このままでは再起動後に元の設定に戻ってしまうので、確定したら
# /etc/rc.d/init.d/iptables save
とすれば、終了なんですが…
現状…この設定でいっていますが…いいと思うけれど…
トップへ