LinuxでのIptableファイアウォールルールの適用


ハードウェアのファイアウォールがない前提の下で、Linuxシステムも完備したファイアウォール戦略Iptableを提供して、同様にファイアウォールの戦略に適任することができて、しかし規則の責任の原因のためめったに使われません.iptableの使い方をまとめてみます.
 
通常、ファイアウォールポリシープロファイルのパスは/etc/sysconfig/iptablesです.
# Generated by iptables-save v1.4.7 on Wed Apr  8 13:50:49 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [43:5250]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 0.0.0.0/24 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -i eth3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 3306 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 20000:20500 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Apr  8 13:50:49 2015

つまり、プロファイルにポリシーを直接追加することで、ファイアウォールポリシーを有効にすることができます.
ファイアウォールのもう1つの方法は、コマンドラインを使用してポリシーを追加することです.最初はiptables--helpで使い方を確認できなかったら
1、存在するポリシーをクリア新しいポリシーの作成を開始すると、すべてのデフォルトポリシーと存在するポリシーをクリアしたい場合があります.
iptables -F    iptables --flush

2、デフォルトポリシーを設定するデフォルトチェーンポリシーはACCEPTであり、すべてのチェーンポリシーをDROPに変更する:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

3、増加策略
ファイアウォールポリシーの読み込み順序が上から下になるので、ポリシーの追加順序に注意してください.順序が間違っている場合は、ポリシーを挿入することもできます.
iptables -L -n --line-number
iptables -A INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

4、指定されたipをブロックする
BLOCK_THIS_IP=“x.x.x.x"
iptables -A INPUT -s ”$BLOCK_THIS_IP“ -j DROP
iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

5、SSHを許可eth 0インタフェースを通じてsshプロトコルを使用して本機を接続することを許可する:
iptables -A INPUT -i eth0 -p tcp --dport 22 -m 
state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

6、あるセグメントをsshで接続することを許可する
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

7、httpとhttpsがすべてのウェブトラフィックを許可することを許可する:httpプロトコルの80ポート
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

すべてのWebトラフィックを許可:httpsプロトコルの443ポート
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

8、複数のポリシーを組み合わせてssh、http、httpsを許可する:
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

9、SSHの他のホストへの接続を許可する
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

10.SSH接続指定されたセグメントを許可する
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

11、httpsの外出を許可する
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

12、webリクエストに対して負荷等化を行う(3つのパケットごとに、指定したサーバに等化し、iptablesを拡張する必要がある)
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

13、ping許可
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

14、pingリモート許可
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

15、ローカルループを許可する
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

16、イントラネットの外部ネットワークへのアクセスを許可するこの例eth 1は外部ネットワークに接続し、eth 0は内部ネットワークに接続する
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

17、DNSの外出を許可する
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

18.NIS接続を許可するNISポートは動的であり、ypbindが起動するとポートが割り当てられる.まずrpcinfo−p表示を実行してポート番号を取得し、この例ではポート850853を使用する.
iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 853 -j ACCEPT
iptables -A INPUT -p udp --dport 853 -j ACCEPT
iptables -A INPUT -p tcp --dport 850 -j ACCEPT
iptables -A INPUT -p udp --dport 850 -j ACCEPT

上記の例では、ypbindが再起動されると失効し、(1)nisサービス静的ipを割り当てる(2)優れたスクリプト19を使用して、指定されたセグメント接続Rsyncを許可する
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

20、mysqlが指定したセグメントから接続することを許可する
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

21、sendmailまたはpostfixを許可する
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

22.IMAPとIMAPSを許可する
IMAP:
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
IMAPS:
iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

23、POP 3とPOP 3 Sを許可する
POP3:
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
POP3S:
iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

24、DOS攻撃の予防
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

-m:iptables拡張機能を使用する--limit 25/minute:分接続要求数を制限する--limit-burst:バルブ値をトリガし、パケット数25に1回流入し、ポート転送442から22ポートに転送
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

442ポートを明確に許可する必要があります
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

26、パケット破棄ログすべての破棄パケットのログを表示したいかもしれません.まずLOGGINGという新しいチェーンを作成します
iptables -N LOGGING

すべての接続がLOGGINGにジャンプしていることを確認します.
iptables -A INPUT -j LOGGING

これらのパッケージをカスタム名「log-prefix」で記録します.
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped:" --log-level 7

最後にこれらのパケットを破棄
tables -A LOGGING -j DROP

 
詳細は以下を参照してください.
http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html