ファイアウォール(iptables)の設定

Red Hat Linuxのページトップへ

% tar xvzf iptables-1.2.9.tar.gz
% cd iptables-1.2.9
% ./configure
$ make
% su
# make install

ipchainsを削除
# rmmod ipchains

iptablesのタイムテーブルを変更
# touch /etc/sysconfig/iptables

起動
# /etc/rc.d/init.d/iptables start

ロックファイルとして/var/lock/subsys/iptablesが作成されるので、以下を実行しておく
# chkconfig ipchains off
# chkconfig iptables on  

セキュリティレベル設定ツール
メインメニュー=> システムツール =>セキュリティレベル設定
(コマンドredhat-config-securitylevel)
設定変更後、 iptablesコマンドに翻訳され、/etc/sysconfig/iptables ファイルに書き込まれる
iptablesサービスも開始されて、選択したオプションを 保存するとすぐにファイアウォールが有効になります。 
選択されたオプションは/etc/sysconfig/redhat-config-securitylevelファイルにも 書き込まれるため、次回アプリケーションが起動される時にその設定を復元できる
このファイルは手動で編集をしてはいけない

ウィザードでの設定
メインメニューボタン => システムツール => 他のシステムツール => Lokkit
(コマンドgnome-lokkit)

iptablesサービスの起動
ファイアウォール規則は、iptablesサービスを実行しているときだけ有効にされる
このサービスを手動で起動する場合は、次のコマンドを使用する
# /sbin/service iptables restart
 
システムがブートしたときに必ずこのサービスが起動するようにするには次のコマンドを発行する
# /sbin/chkconfig --level 345 iptables on
 
ipchainsサービスは、iptablesサービスと並行して動作することは出来ない
確実にipchainsサービスが無効になっていることを確認するには、以下のコマンドを実行する
# /sbin/chkconfig --level 345 ipchains off
受信 INPUT
送信 OUTPUT
転送 FORWARD
PCに入った直後 PREROUTING
PCから出る直前 POSTROUTING

テーブル機能使用するchain
filterフィルタリングINPUT,FORWARD,OUTPUT
natアドレス変換PREROUTING,OUTPUT,POSTROUTING
mangle特別なパケット変換PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

# iptables [-t <table-name>] <command> <chain-name> <parameter-1> <option-1> <parameter-n> <option-n>

コマンドの構造の総合的な一覧が表示される
# iptables -h
基本ルールの設定
ルールの確認
# iptables -L

受信パケットを全て許可
# iptables -P INPUT ACCEPT
転送パケットは全て拒否(ルーティングしないため)
# iptables -P FORWARD DROP
送信パケットは全て許可
# iptables -P OUTPUT ACCEPT

まず個別のルールを全て削除する
# iptables -F

個別にルールを設定

自分自身からの入力を許可
# iptables -A INPUT -i lo -j ACCEPT

ポート別の設定
80番(www)を許可
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp --sport 80 -j ACCEPT
20番と21番(FTP)を許可
# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# iptables -A INPUT -p tcp --sport 20 -j ACCEPT
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# iptables -A INPUT -p tcp --sport 21 -j ACCEPT
25番(SMTP)を許可
# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
# iptables -A INPUT -p tcp --sport 25 -j ACCEPT
110番(POP)を許可
# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
# iptables -A INPUT -p tcp --sport 110 -j ACCEPT
1000番(Webmin)を特定のIPアドレスのみ許可
# iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 10000 -j ACCEPT
# iptables -A INPUT -s 192.168.0.0/24 -p tcp --sport 10000 -j ACCEPT
22番(SSH)を特定のIPアドレスのみ許可
# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -s 192.168.0.3 -p tcp --sport 22 -j ACCEPT

DNSサーバを公開する場合は以下の設定も追加する
53番(DNS)を許可
# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
# iptables -A INPUT -p tcp --sport 53 -j ACCEPT
# iptables -A INPUT -p udp --dport 53 -j ACCEPT
# iptables -A INPUT -p udp --sport 53 -j ACCEPT

攻撃を防ぐ設定
synフラッド攻撃(syn 信号を大量に送信される)、Ping攻撃(Pingを大量に送信される)を回避する為に、syn信号やPingは1秒に1回だけ受信する様に設定する
# iptables -A INPUT -i ppp+ -p tcp --syn -m limit --limit 1/s -j ACCEPT
# iptables -A INPUT -i ppp+ -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

ルールの削除
iptables の1つ目の引数が『-A』から『-F』に変わるだけ
例:
# iptables -F INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
# iptables -F INPUT -s 192.168.0.3 -p tcp --sport 22 -j ACCEPT

基本ルールの再定義
個別に設定したルール以外の INPUT は全て拒否する
(INPUT についてのルールを再定義している)
# iptables -P INPUT DROP

iptablesの設定を保存
設定が完了したら設定を保存し、iptables を再起動しないといけない
そうしないと再起動後に、設定したルールが消えてしまう
ルールを/etc/sysconfig/iptablesに保存する
# /etc/init.d/iptables save

保存後、iptables を再起動する
# service iptables restart


上のルールを下記のようなshファイルにして実行すると楽
# gedit fw.sh
#!/bin/sh

# 80番(www)を許可
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -j ACCEPT

# 20番と21番(FTP)を許可
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --sport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --sport 21 -j ACCEPT
.......................
............
....
# sh fw.sh
フィルタリングされているかをチェック
nmap -v -sA -p 23 XXX.XXX.XXX.XXX
↓
The ACK scan took 0 seconds to scan 1 ports.
The 1 scanned port on hogehoge (XXX.XXX.XXX.XXX) is: UNfiltered
結果
UNfiltered=フィルタリングされていない

ポートスキャン
nmap -v -sT -p 23 XXX.XXX.XXX.XXX
↓
The TCP connect scan took 0 seconds to scan 1 ports.
Interesting ports on hogehoge (XXX.XXX.XXX.XXX):
Port       State       Service
23/tcp     open        telnet
結果
23番telne のポートが開いている
(このスキャンでは/var/log/messagesや/var/log/secureにログが残ることがある)
nmap -v -sF -p 23 XXX.XXX.XXX.XXX
↓
The UDP or stealth FIN/NULL/XMAS scan took 0 seconds to scan 1 ports.
Interesting ports on hogehoge (XXX.XXX.XXX.XXX):
Port       State       Service
23/tcp     open        telnet                  
結果
23番telne のポートが開いている
(このスキャンではログは残らない)
Tcp_Wrappersでアクセス制限している場合でも同じ
ただしrpcinfo -p XXX.XXX.XXX.XXXでは情報が得られず、/var/log/messages にログが残る

フィルタリングされている場合
nmap -v -sF -p 21 XXX.XXX.XXX.XXX
↓
The ACK scan took 2 seconds to scan 1 ports.
Interesting ports on hogehoge (XXX.XXX.XXX.XXX):
Port       State       Service
21/tcp     filtered    ftp

80番のポートを偽ってスキャンすると
nmap -v -sF -p 21 -g 80 XXX.XXX.XXX.XXX
↓
The UDP or stealth FIN/NULL/XMAS scan took 1 second to scan 1 ports.
Interesting ports on hogehoge (XXX.XXX.XXX.XXX):
Port       State       Service
21/tcp     open        ftp  

ぺんたん.info
あかいひ.com
IPくん.com
8枠.com - 競馬情報
galhime.com

PC Q&A||古い記事|雑学|ラーメン