Amazon LinuxでFirewallを設定する(iptables)

2019-01-06
プログラミング

基本的には、AWSはセキュリテイグループでIP制限ができるので、Amazon Linux上でFirewallを設定する必要はないと思います。
しかし、ポートフォワーディングなどを実装(8080⇨80)するなら、iptablesでFirewallを使用する必要が出てきます。

$ sudo /etc/init.d/iptables status
iptables: Firewall is not running.
# 自動起動
$ sudo /sbin/chkconfig --level 2345 iptables on
# 2, 3, 4, 5がonだったら、自動起動
$ /sbin/chkconfig --list iptables
iptables 0:off	1:off	2:on	3:on	4:on	5:on	6:off

iptablesの設定ファイルを作成。

$ sudo vi /etc/init.d/iptables

iptablesの設定ファイルの内容

# /etc/init.d/iptables
*filter
:INPUT   DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT  ACCEPT [0:0]
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
# SSH 許可
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
# httpd 許可
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# httpd ssl 許可
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

設定ファイル(/etc/init.d/iptables)が無いとFirewallがスタートしないので、上記編集を保存後、以下を実施。

# firewall スタート
$ sudo /etc/init.d/iptables start
iptables: Applying firewall rules:[  OK  ]
# filter条件確認
$sudo /etc/init.d/iptables status
# firewall リスタート
$ sudo /etc/init.d/iptables start
iptables: Flushing firewall rules:[  OK  ]
iptables: Setting chains to policy ACCEPT: filter [  OK  ]
iptables: Unloading modules: [  OK  ]
iptables: Applying firewall rules:[  OK  ]

まとめ

Firewallを設定すると、IPやPortの管理が複雑になりがちです。
AWSを使っているなら、セキュリティグループなどもあるので、なおさらです。
人為的ミスで不要なPortを解放しないで済むようになるかもしれないですが、管理が面倒になってしまいます。
この辺りはトレードオフですが、どの機能を使ってIPやPortを制限しているかは意識したいですね。