iptablesでhttp・https接続を許可する方法
Tag:[]
iptablesでhttp・https接続を許可する方法を紹介します。
1.問題点
使い回しのLinuxサーバにApacheをインストールしましたが、外部からアクセスするとタイムアウトが発生します。
Linux内部からのアクセスはOKなので、iptablesで接続が許可されていない可能性があります。
ということで、iptablesでhttp・https接続を許可する方法を紹介します。
2.iptablesでhttp・https接続を許可する
iptablesの設定状況を確認するには"-L"オプションを指定します。
情報が設定されていれば次のような内容が表示されます。
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ms-wbt-server
ACCEPT udp -- anywhere anywhere state NEW udp dpt:ntp
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ちなみに、iptablesに何も設定していない状態であれば次のように表示されます。
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
また、"--line-numbers"を設定すれば、一番左に"num"が表示されます。
# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ms-wbt-server
6 ACCEPT udp -- anywhere anywhere state NEW udp dpt:ntp
7 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
iptablesのルールは上から適用されるようで、http接続を許可するための新しいルールは7番目のREJECTよりも上に設定する必要があります。
今回はすでにiptablesが設定された状態のため、5と6の間に新しいルール(http接続許可)を、下記のコマンドで追加します。
# iptables -I INPUT 6 -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
以下、パラメータの説明です。
"-I INPUT 6"でルールを追加する位置を指定します。「6」を指定したので5の直後にルールが追加され、既存の「6」以降のルールはひとつずつ後ろにずれます。
"--state NEW"は接続開始要求パケット(SYNパケット)のみ許可することを意味します。
上記のstateマッチを利用するため、"-m state"もペアで設定し、拡張モジュールを指定します。
"-p tcp"はTCPプロトコルを指定します。"-m tcp"もペアで設定し、拡張モジュールを指定します(/etc/sysconfig/iptablesでは暗黙的に設定されているもので、コマンドラインでは設定不要かも)。
"--dport 80"でポート番号80(http)を指定します。httpsの場合は80の部分が443になります。
"-j ACCEPT"で許可を指定します。
設定後の表示は次のようになります(赤色が追加された内容)。
# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ms-wbt-server
6 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
7 ACCEPT udp -- anywhere anywhere state NEW udp dpt:ntp
8 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
設定変更後、iptablesを再起動しなくてもhttp接続OKになりました。
3.iptablesの設定を削除する
もしiptablesの設定を削除したいのであれば、
# iptables -F
を実行します。
4.参考サイト
参考サイトは下記です。ありがとうございました。
- IPTABLES
- Linuxで作るファイアウォール[パケットフィルタリング設定編] (1/2)
- iptablesの設定方法
- iptablesで、httpとhttpsの接続を許可する設定
- iptablesの設定
- iptablesを起動
- ServersMan@VPSでのiptables設定(state版)
- OS 再起動時に /etc/sysconfig/iptables のルールが反映されない
- iptables を眺める
- VMをundefineできない場合の対処
- cpanflute2でエラーになる場合の対処
- シェルスクリプトをバイナリ化する「shc」
- OpenSSLで文字列を暗号化・複号化する方法
- sshログインに時間がかかる場合の対処
- vi/vimで範囲指定して置換する方法
- vi/vimでマークした行に移動する方法
- vi/vimで複数行を一括削除する方法
- LinuxでOSキャッシュをクリアする方法
- lessで検索文字列だけを表示する方法
- tailコマンドでファイルがローテートされても追従する方法
- svnでファイルやディレクトリを削除する方法
- phpMyAdminで「unknown system variable 'lc_messages'」となる場合の対処
- Linux(CentOS)でapxsがみつからない場合の対処
- PHP7.3とApacheを連携させる方法