次の記事では、ファイアウォールを使用してUbuntuまたはDebianベースの仮想サーバーを保護および保護する方法を紹介します。 iptablesと呼ばれるアプリケーション。
iptablesとは何ですか?
これは、システム管理者がLinuxカーネルファイアウォール(さまざまなNetfilterモジュールとして実装)によって提供されるテーブルを構成できるようにするユーザースペースアプリケーションプログラムです。 )およびそれが格納するチェーンとルール。
侵入の試行回数を抑え、仮想サーバーで開いているポートをフィルタリングするには、ファイアウォールを適切に構成する必要があります。 。
サーバーのファイアウォールルールの管理を容易にするために、ファイアウォールルールの管理に役立つ簡単なシェルスクリプトを提供します。基本的に、ファイアウォールルールを変更する必要があるときはいつでも、このスクリプトを使用して目的のルールを追加/削除します。
ファイアウォールルールの設定
ルールをスクリプトでラップする前に、ファイアウォールの設計とどのルールが適用されるかを理解できるように、ルールをセクションに分割しましょう。
フラッシュの古いルール
ファイアウォールルールは、次のコマンドを使用してフラッシュできます。
## iptables --flush ## iptables --delete-chain ## iptables --table nat --flush ## iptables --table nat --delete-chain
サービスポートを決定する
適切なルールを設定できるように、公開しているサービスを知る必要があります。どのサービスがどのポートでリッスンしているかを確認する1つの方法は、netstat
を使用することです。 またはss
次のようなコマンド:
## netstat -tunlp or ## ss -tunlp
たとえば、Ubuntu 12.04 LTS仮想サーバーの1つを使用しており、次はnetstat
の出力です。 コマンド:
## netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 296/mysqld tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 449/sendmail: MTA: tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 261/dovecot tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 261/dovecot tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 590/apache2 tcp 0 0 209.135.140.77:53 0.0.0.0:* LISTEN 353/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 353/named tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 173/vsftpd tcp 0 0 0.0.0.0:5622 0.0.0.0:* LISTEN 630/sshd tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 449/sendmail: MTA: tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 353/named tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 590/apache2 tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 261/dovecot tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 261/dovecot udp 0 0 209.135.140.77:53 0.0.0.0:* 353/named udp 0 0 127.0.0.1:53 0.0.0.0:* 353/named
つまり、次のポートが一般に公開されているということです。
- 25(smtp)
- 587(SMTP送信)
- 110(pop3)
- 143(imap)
- 993(imap ssl)
- 995(pop3 ssl)
- 80(http)
- 443(https)
- 53(dns)
- 21(ftp)
- 5622(ssh)
デフォルトポリシーの設定
これで、ファイアウォールのポリシーを DROPに設定できます。 入力のすべて および転送 チェーンし、出力でトラフィックを許可します チェーン。
デフォルトのテーブルfilter
3つの組み込みチェーンが含まれています:
- マシン自体にアドレス指定されたインバウンドトラフィックがINPUTチェーンにヒットします。
- ローカルで生成されたアウトバウンドトラフィックがOUTPUTチェーンにヒットします。
- ローカルに配信されるべきではないルーティングされたトラフィックはFORWARDチェーンにヒットします。
man 8 iptables
を確認してください 詳細については
デフォルトのポリシーは、次のコマンドを使用して適用できます。
## iptables -P INPUT DROP # <- do not run this over ssh as it will lock you out ## iptables -P FORWARD DROP ## iptables -P OUTPUT ACCEPT
ファイアウォールルールの設定
次に行うことは、サービスのファイアウォールルールを実際に設定することです。 INPUTチェーンが削除されているため、パブリックポートでリッスンしているサービスをホワイトリストに登録する必要があります。
まず、loopback interfaces
を無料で使用できるようにすることです。 、すべてのTCPセッションがSYNで始まることを確認し、確立された関連パケットを許可するには:
## iptables -A INPUT -i lo -j ACCEPT ## iptables -A OUTPUT -o lo -j ACCEPT ## iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP ## iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
次に、次のようなファイアウォールルールを使用してサービスポートを開きます。
### SSH ## iptables -A INPUT -p tcp --dport 5622 -m state --state NEW -j ACCEPT ### HTTP ## iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT ### SMTP ## iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
等々。すべてのサービスがホワイトリストに登録されたら、ICMPパケットを許可し、INPUTチェーン内の他のすべてをログに記録してドロップすることをお勧めします。
## iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT ## iptables -A INPUT -j LOG ## iptables -A INPUT -j DROP
ファイアウォールルールの保存/復元
ファイアウォールルールはデフォルトでは永続的ではありません。つまり、たとえば仮想サーバーを再起動すると、ファイアウォールルールは失われます。現在のファイアウォールを/etc/fwall.rules
に保存するには 次のようなものを使用します:
## iptables-save > /etc/fwall.rules
保存したルールを復元するには、次のようなものを使用します。
## iptables-restore -c /etc/fwall.rules
システムの起動時にルールを自動的に復元するには、iptables-persistent
という名前のパッケージを使用する必要があります。 または、/etc/network/if-pre-up.d
にスクリプトを作成することもできます。 /etc/fwall.rules
に保存されているルールをロードします 、例:
## vim /etc/network/if-pre-up.d/iptables #!/bin/bash test -e /etc/fwall.rules && iptables-restore -c /etc/fwall.rules ## chmod +x /etc/network/if-pre-up.d/iptables
ファイアウォールスクリプト
スクリプトを/usr/local/bin/fwall-rules
に保存します 実行可能にする
#!/bin/bash IPTABLES=/sbin/iptables echo " * flushing old rules" ${IPTABLES} --flush ${IPTABLES} --delete-chain ${IPTABLES} --table nat --flush ${IPTABLES} --table nat --delete-chain echo " * setting default policies" ${IPTABLES} -P INPUT DROP ${IPTABLES} -P FORWARD DROP ${IPTABLES} -P OUTPUT ACCEPT echo " * allowing loopback devices" ${IPTABLES} -A INPUT -i lo -j ACCEPT ${IPTABLES} -A OUTPUT -o lo -j ACCEPT ${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW -j DROP ${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## BLOCK ABUSING IPs HERE ## #echo " * BLACKLIST" #${IPTABLES} -A INPUT -s _ABUSIVE_IP_ -j DROP #${IPTABLES} -A INPUT -s _ABUSIVE_IP2_ -j DROP echo " * allowing ssh on port 5622" ${IPTABLES} -A INPUT -p tcp --dport 5622 -m state --state NEW -j ACCEPT echo " * allowing ftp on port 21" ${IPTABLES} -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT echo " * allowing dns on port 53 udp" ${IPTABLES} -A INPUT -p udp -m udp --dport 53 -j ACCEPT echo " * allowing dns on port 53 tcp" ${IPTABLES} -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT echo " * allowing http on port 80" ${IPTABLES} -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT echo " * allowing https on port 443" ${IPTABLES} -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT echo " * allowing smtp on port 25" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT echo " * allowing submission on port 587" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT echo " * allowing imaps on port 993" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT echo " * allowing pop3s on port 995" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT echo " * allowing imap on port 143" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT echo " * allowing pop3 on port 110" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT echo " * allowing ping responses" ${IPTABLES} -A INPUT -p ICMP --icmp-type 8 -j ACCEPT # DROP everything else and Log it ${IPTABLES} -A INPUT -j LOG ${IPTABLES} -A INPUT -j DROP # # Save settings # echo " * SAVING RULES" if [[ -d /etc/network/if-pre-up.d ]]; then if [[ ! -f /etc/network/if-pre-up.d/iptables ]]; then echo -e "#!/bin/bash" > /etc/network/if-pre-up.d/iptables echo -e "test -e /etc/iptables.rules && iptables-restore -c /etc/iptables.rules" >> /etc/network/if-pre-up.d/iptables chmod +x /etc/network/if-pre-up.d/iptables fi fi iptables-save > /etc/fwall.rules iptables-restore -c /etc/fwall.rules
## chmod +x /usr/local/bin/fwall-rules
スクリプトで準備したルールをアクティブにするには、実行するだけです
## fwall-rules
コマンドラインから。ルールを追加または削除するには、スクリプトを開き、目的のルールを追加または削除し、保存して再度実行する必要があります。例:
## fwall-rules * flushing old rules * setting default policies * allowing loopback devices * allowing ssh on port 5622 * allowing ftp on port 21 * allowing dns on port 53 udp * allowing dns on port 53 tcp * allowing http on port 80 * allowing https on port 443 * allowing smtp on port 25 * allowing submission on port 587 * allowing imaps on port 993 * allowing pop3s on port 995 * allowing imap on port 143 * allowing pop3 on port 110 * allowing ping responses * SAVING RULES
もちろん、Linux VPSホスティングサービスのいずれかを使用している場合は、これを行う必要はありません。その場合は、専門のLinux管理者に依頼するだけで済みます。 24時間年中無休でご利用いただけます。リクエストはすぐに処理されます。
PS。 この投稿が気に入った場合は、左側のボタンを使用してソーシャルネットワーク上の友達と共有するか、下に返信を残してください。ありがとう。