【iptables】ファイアーウォール設定研究
前回はcentosへのssh鍵認証設定について書きましたが、ここまで来たら、やはりfirewall(iptables)の設定に興味が湧いてきました。
実は不正のアクセスを防ぐために、firewall設定がかなり役立ています。
設定の流れ
iptablesファイルを作成
1 | vi /etc/sysconfig/iptables |
訳分からないと思いますが、一応このファイルに何を書き込むのか(一例として)をひたすら入れてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] :SERVICES - [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -p icmp --icmp-type echo-request -m limit 1/s --limit-burst4 -j ACCEPT -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p tcp -m state --state NEW -j SERVICES -A INPUT -p udp --sport 53 -j ACCEPT -A INPUT -p udp --sport 123 --dport 123 -j ACCEPT -A SERVICES -p tcp --dport 22 -j ACCEPT -A SERVICES -p tcp --dport 80 -j ACCEPT -A SERVICES -p tcp --dport 443 -j ACCEPT COMMIT |
サービスの再起動
1 | service iptables restart |
設定の確認
1 | iptables -L |
設定の説明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | ### テーブル ### *テーブル名 # パケットフィルタリングでは、filterテーブルを使用 *filter ### チェーンの定義 ### :チェーン名 デフォルトポリシー [パケットカウント:バイトカウント] # INPUT/FORWARD/OUTPUチェーンのいずれかひとつのみ使用する # デフォルトポリシーをACCEPTにすると明示されないパケットは通過され、DROPにすると明示されないパケットは破棄される ### # INPUTチェーン、送信先がローカルホストのパケットに適用される :INPUT DROP [0:0] # FORWARDチェーン、ローカルホストを経由するパケットに適用される :FORWARD DROP [0:0] # OUTPUTチェーン、送信元がローカルホストのパケットに適用 :OUTPUT ACCEPT [0:0] # ユーザ定義チェーン :SERVICES - [0:0] ### ルール # 基本は、-A チェーン名 マッチング条件 -j ターゲット # -A チェーン名 : チェーンに新たなルールを追加 # -j(--jump) ターゲット : 条件したパケットをどうするか指定 # ターゲットには、ACCEPT(許可)/DROP(破棄)/REJECT(拒否)ユーザ定義チェーンなどなどを指定 # # マッチング条件の一部 # 頭に"!"をつけると、notという意味 # -i(--in-interface) 受信インタフェース : filterテーブルでは、INPUT/FORWARDチェーンで使用可能 # -o(--out-interface) 送信インタフェース : filterテーブルでは、OUTPUT/FORWARDチェーンで使用可能 # -p(--protocol) プロトコルまたはプロトコル番号 : 指定できるプロトコルは、tcp/udp/icmp/all # -s(--source、--src) 送信元アドレス : "192.168.0.1"、"192.168.0.0/24"、"192.168.0.0/255.255.255.0"のように指定 # -d(--destination、--dst) 送信先アドレス : "192.168.0.1"、"192.168.0.0/24"、"192.168.0.0/255.255.255.0"のように指定 # # 以下は拡張されたマッチングの一部 # 頭に"!"をつけると、notという意味 # -m tcp --sport(--source-port) TCP送信元ポート : "-p tcp"のとき使用可能、ポート範囲は"0:1023"のように指定 # -m tcp --dport(--destination-port) TCP送信先ポート : "-p tcp"のとき使用可能、ポート範囲は"0:1023"のように指定 # -m udp --sport(--source-port) UDP送信元ポート : "-p udp"のとき使用可能、ポート範囲は"0:1023"のように指定 # -m udp --dport(--destination-port) UDP送信先ポート : "-p udp"のとき使用可能、ポート範囲は"0:1023"のように指定 # -m state --state 接続状態 : 接続状態には、NEW(新規)/ESTABLISHED(接続中)/RELATED(既存の接続に関係?)/INVALID(その他)を指定 # --icmp-type ICMPタイプ : "-p icmp"のとき使用可能、指定できるICMPタイプは"iptables -p icmp -h"で確認 ### # 受信インタフェースはlo(local loopback)のアクセスを許可 -A INPUT -i lo -j ACCEPT # プロトコルはicmp(pingコマンドがicmpプロトコルを使っています)のアクセスを許可 -A INPUT -p icmp --icmp-type echo-request -m limit 1/s --limit-burst4 -j ACCEPT # プロトコルはtcp、かつ接続状態は接続中または既存の接続に関係ありのアクセスを許可 -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT # プロトコルはtcp、かつ接続状態は新規のアクセスをSERVICESチェーンに渡す -A INPUT -p tcp -m state --state NEW -j SERVICES # プロトコルはudp、かつ送信ポートが53(DNS)のアクセスを許可 -A INPUT -p udp --sport 53 -j ACCEPT # プロトコルはudp、かつ送信ポートが123(ntp、即ちNetwork Time Protocol)、受信ポートが123のアクセスを許可 -A INPUT -p udp --sport 123 --dport 123 -j ACCEPT # プロトコルはtcp、かつ受信ポートは22(SSH)のアクセスを許可 -A SERVICES -p tcp --dport 22 -j ACCEPT # プロトコルはtcp、かつ受信ポートは80(HTTP)のアクセスを許可 -A SERVICES -p tcp --dport 80 -j ACCEPT # プロトコルはtcp、かつ受信ポートは443(HTTPS)のアクセスを許可 -A SERVICES -p tcp --dport 443 -j ACCEPT # 以上を登録する COMMIT |
Author Profile
スターフィールド編集部
SHARE