Iptablesファイアウォール
私は最近、nginxとphpを使用してcentosにWebサーバーをセットアップしていました。 nginxのインストールは問題ありませんでしたが、システムのhttpポートに外部からアクセスできませんでした。
これは、centOSがデフォルトでいくつかのiptablesファイアウォールルールを有効にしているためです。 sshポート(22)のみがアクセス可能であり、リモートシェルが機能していました。したがって、nginxなどのWebサーバーが機能するには、ポート80を開く必要があります。
Iptables は、さまざまな種類のパケットレベルのルールセットに基づいてネットワークトラフィックを受け入れるか拒否するように構成できるLinux上のファイアウォールです。したがって、ネットワークポートでの接続を有効にするようにこのファイアウォールを構成する必要があります。
Iptablesルールを確認する
ポート80を開くようにiptablesを設定する方法は2つあります。1つはiptablesコマンドを使用する方法で、もう1つは設定ファイルを作成する方法です。まず、有効な既存のiptablesルールを確認します。コマンドは非常に簡単です。これが出力例です。
[[email protected] ~]# 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 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 [[email protected] ~]#
出力に見られるように、最後にINPUTチェーンにREJECT行があり、すべてを拒否します。ただし、前の行ではssh接続を受け入れることができるため、sshは機能しています。 Lオプションと一緒にvオプションとnオプションを使用すると、もう少し詳細で数値のリストを見ることができます
[[email protected] ~]# iptables --line -vnL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 273 22516 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 271 36456 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 172 packets, 24494 bytes) num pkts bytes target prot opt in out source destination [[email protected] ~]#
Iptablesでポート80を開きます
http接続を受け入れるには、行番号5にルールを追加し、下のREJECT行をプッシュする必要があります。これを行うためのコマンドは次のとおりです。
# iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
上記のコマンドは、ファイアウォールがポート80で着信接続を受け入れる必要があることを示すルールを5行目に追加します。iptablesルールをもう一度確認してください。
[[email protected] ~]# iptables --line -vnL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 291 23868 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW,ESTABLISHED 6 286 38524 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 4 packets, 608 bytes) num pkts bytes target prot opt in out source destination [[email protected] ~]#
これで、5行目に新しいtcpポート80ルールが追加され、外部ネットワークからhttpポートにアクセスできるようになりました。
iptablesルールを保存する
新しいルールでポート80が開いていますが、この変更は一時的なものであり、サーバーを再起動するとiptablesは以前のルールに戻ります。
永続的にするには、iptablessaveコマンドを発行します。
[[email protected] ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
新しいルールはファイル/etc / sysconfig / iptablesに保存されます 。
ファイルの外観は次のとおりです。
# Generated by iptables-save v1.4.7 on Fri Oct 25 10:33:46 2013 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [39:6956] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Fri Oct 25 10:33:46 2013
現在、変更は永続的です。
または、iptables構成ファイルを直接編集してiptablesを再起動すると、同じ変更が有効になります。
[[email protected] ~]# service iptables restart iptables: Flushing firewall rules: [ OK ] iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Unloading modules: [ OK ] iptables: Applying firewall rules: [ OK ] [[email protected] ~]#
結論
これは、iptablesで特定のポートを開いてアクセス可能にする方法の簡単な例でした。 iptablesの詳細については、ターミナルで「man iptables」コマンドを実行してマニュアルページを確認するか、ここからオンラインで確認してください。
https://linux.die.net/man/8/iptables