IptablesルールはPING、Whois、DNS、NTP、SSH、HTTP(S)、FTPに適用されます。

IptablesルールはPING、Whois、DNS、NTP、SSH、HTTP(S)、FTPに適用されます。

ここに Debian 8 の新規インストール時にロードしたファイルがありますiptables-restore。私が変更した唯一のことは、ファイルでSSHポート22022を使用することでした/etc/ssh/sshd_config

-----下記のアップデートをご覧ください -----

このファイルをロードすると、何らかの方法でこの Debian にアクセスできなくなります。 pingも動作しません。 /var/log/messages ファイルにエラーに関する情報はありません。 iptablesを設定するのは今回が初めてです。私はそれに関する多くの文書を読みましたが、どこかで間違っています。ここで何が起こっているのかを指摘できますか?

    *filter

    #----------
    # Local loop
    #----------
    -A INPUT -i lo -j ACCEPT
    -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

    #----------
    # Connexions already established
    #----------
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    #----------
    # PING
    #----------
    -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

    #----------
    # SSH
    #----------

    -A INPUT -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT
    -A OUTPUT -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # HTTP
    #----------

    -A INPUT -p tcp --dport 80 -j ACCEPT
    -A OUTPUT -p tcp --dport 80 -j ACCEPT

    #----------
    # HTTPS
    #----------

    -A INPUT -p tcp --dport 443 -j ACCEPT
    -A OUTPUT -p tcp --dport 443 -j ACCEPT

    #----------
    # FTP
    #----------

    -A INPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
    -A OUTPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT

    -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
    -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # Logs
    #----------
    -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 4

    #----------
    # DROP everything else
    #----------
    -A INPUT -j DROP
    -A OUTPUT -j DROP
    -A FORWARD -j DROP

    COMMIT

- - - 更新 - - -

これで、NTP、Ping、DNS、Whois、SSH、HTTP(S)、およびFTPを使用できるようになりました。フラ。新しいファイルです。奇妙なことを見つけたら教えてください。また、私が使用しているvsftpでFTP(TLS / SSL)を使用するにはいくつかの良い設定のヒントが必要であることも学びましたが、これまでに良い解決策が見つかりませんでした。私はこのように「きれいな」FTPを維持しないので、この問題を解決できることを本当に願っています。アイデアがあれば。助けてくれてありがとう。どちらの答えも素晴らしいです。一つを選べませんでした。 ;)

(ところで、shスクリプトを使用してモジュールをロードします)

    #!/bin/sh

    #----------
    # Load needed modules
    #----------
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp

    #----------
    # Local loop
    #----------
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

    #----------
    # Connexions already established
    #----------
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    #----------
    # NTP
    #----------
    iptables -A INPUT -p udp --sport 123 -j ACCEPT
    iptables -A OUTPUT -p udp --dport 123 -j ACCEPT

    #----------
    # PING
    #----------
    iptables -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

    #----------
    # DNS
    #----------
    # UDP
    iptables -A INPUT -i eth0 -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
    # TCP
    iptables -A INPUT -i eth0 -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # WHOIS
    #----------
    iptables -A INPUT -p tcp --sport 43 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 43 -j ACCEPT

    #----------
    # SSH
    #----------
    # Incoming
    iptables -A INPUT -i eth0 -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 22022 -m state --state ESTABLISHED -j ACCEPT
    # Outgoing
    iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # HTTP
    #----------
    # Incoming
    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
    # Outgoing
    iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # HTTPS
    #----------
    # Incoming
    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
    # Outgoing
    iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # FTP
    #----------
    #incoming
    iptables -A INPUT -i eth0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT

    #----------
    # Logs
    #----------
    #-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 4

    #----------
    # DROP everything else
    #----------
    iptables -A INPUT -j DROP
    iptables -A OUTPUT -j DROP
    iptables -A FORWARD -j DROP

    exit 0

ベストアンサー1

この規則の後には:

-A OUTPUT -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -j DROP

コンピュータから送信できるのは、HTTP(S)要求、ポート22022への一部のFTP接続、およびSSH接続のみです。たとえば、SSHサーバーからの応答には該当しません。これは、ターゲットがクライアントが選択した任意のポート(偶然でない限り22022ではない可能性が高い)であるためです。同様に、HTTP サーバーからの応答は送信されず、ICMP エコー応答は許可されません。

SSHサーバーから送信されたパケットのみを許可するには、そのパケットを許可する必要があります。送るポート22022から--sport 22022

SSH サーバーからの応答を許可しても、外部に出てくる要求があまりできないことがすぐにわかります。 HTTP 要求を許可しますが、たとえば、発信 DNS クエリは出ません。出力ルールをどれほど厳しくするかを考えてみましょう。少なくとも最初にチェーンに-m state --state ESTABLISHED -j ACCEPTルールを追加することをお勧めします。-j LOGOUTPUT

おすすめ記事