最小的 iptables 防火牆

最小的 iptables 防火牆

我打算在 ubuntu 伺服器 14.04 中建置一個最小的 iptables 防火牆。為了確保我正確建造並正確執行防火牆,我透過社群運行它進行驗證。不太明白方法-o interface-i interface操作。每次我查看不同的防火牆規則時,它們的配置都不同,這使得我的wan規則設定方式變得複雜lan。我的理解方式是這樣的:個人電腦>-i interface 區域網路 -o interface>-i interface 廣域網路 -o interface>網際網路。對於NAT表格來說也是如此。 prerouting>網路 postroutingforward繞過網路

wan如果我正確的是哪裡eth0laneth1,那麼這是使防火牆正常運作的通用規則集:

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

這是我的規則集,其中waniseth0lanis eth1

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate DNAT,ESTABLISHED,RELATED -j ACCEPT
iptables -P FORWARD -j DROP

iptables -A INPUT -i eth1 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 67 -j ACCEPT
iptables -A INPUT -p udp --dport 123 -j ACCEPT
iptables -P INPUT -j DROP

iptables -P OUTPUT -j ACCEPT

iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT

也涉及防火牆的永久執行。在我編輯此規則集然後sudo nano -w /etc/rc.local使用後sudo chmod 755 /etc/rc.localsudo reboot每次設備啟動時此規則集將是永久性的?

答案1

在走得更遠之前。查看「網路過濾表」( nftables)。它取代了 iptables、iptables6、arptables...

nftables 是:更容易使用、更強大、更新。在最近的系統上,iptables 是 nftables 的(傳統)前端。

nftables 規則集的範例:阻止 user 的直接網路訪問other,並強制他們使用代理。它仍然有兩個計數器,用於測試(它們可以被刪除)。另外accept,skuid「代理伺服器」是不必要的。因為這是目前的政策。

#!/usr/sbin/nft -f

table ip my_table {}
flush table my_table

table ip my_table {
    chain output {
        type filter hook output priority 0; policy accept;
        skuid "other" jump restrict_chain;
        skuid "proxy-server" accept;
    }

    chain restrict_chain {
        counter;
        oifname != "lo" reject;
        tcp dport != "1080" reject;
        counter;
        accept;
    }
}

相關內容