iptables: VPN ਕਲਾਇੰਟਾਂ ਨੂੰ ਸਿਰਫ਼ ਇੱਕ ਹੋਸਟ ਤੱਕ ਪਹੁੰਚਣ ਦਿਓ
ਤੁਹਾਨੂੰ ਜੋ ਨਿਯਮ ਚਾਹੀਦਾ ਹੈ ਉਹ FORWARD ਵਿੱਚ ਹੈ, INPUT ਵਿੱਚ ਨਹੀਂ। VPN ਪੂਲ ਲਈ ਇੱਕ ਮੰਜ਼ਿਲ ਦੀ ਆਗਿਆ ਦਿਓ, ਬਾਕੀ ਨੂੰ ਰੱਦ ਕਰੋ, ਫਿਰ ਕਾਊਂਟਰ ਅਤੇ ਰੋਲਬੈਕ ਕਮਾਂਡ ਨਾਲ ਇਸ ਨੂੰ ਸਾਬਤ ਕਰੋ।
ਅਸੰਬੰਧਿਤ ਦਿਸਦੇ ਦੋ ਸਹਾਇਤਾ ਟਿਕਟ ਅੰਤ ਵਿੱਚ ਇੱਕੋ ਕਾਰਨ ਸਾਂਝਾ ਕਰਦੇ ਹਨ। ਪਹਿਲੇ ਵਿੱਚ, ਪ੍ਰਬੰਧਕ ਚਾਹੁੰਦਾ ਹੈ ਕਿ ਸਰਵਰ ਸਿਰਫ਼ ਟਨਲ ਤੋਂ ਕਨੈਕਸ਼ਨ ਸਵੀਕਾਰ ਕਰੇ; ਦੂਜੇ ਵਿੱਚ, VPN ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਇੱਕ ਅੰਦਰੂਨੀ ਹੋਸਟ ਤੱਕ ਪਹੁੰਚਣਾ ਚਾਹੀਦਾ ਹੈ, ਉਸ ਤੋਂ ਵੱਧ ਕੁਝ ਨਹੀਂ। ਦੋਵੇਂ ਨੀਤੀਆਂ FORWARD ਵਿੱਚ ਹਨ, ਅਤੇ ਦੋਵੇਂ ਆਮ ਤੌਰ ’ਤੇ INPUT ਵਿੱਚ ਅਜ਼ਮਾਈਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਨਤੀਜਾ ਫਾਇਰਵਾਲ ਵਰਗਾ ਦਿਸਦਾ ਹੈ ਅਤੇ ਪਲੇਸਹੋਲਡਰ ਵਾਂਗ ਵਿਵਹਾਰ ਕਰਦਾ ਹੈ।
ਕਿਹੜੀ ਚੇਨ ਤੁਹਾਡੇ ਸਵਾਲ ਦਾ ਜਵਾਬ ਦਿੰਦੀ ਹੈ
VPN ਕਲਾਇੰਟ ਜੋ ਪੈਕਟ LAN ਹੋਸਟ ਨੂੰ ਜਾਂ ਅੱਗੇ ਇੰਟਰਨੈੱਟ ਵੱਲ ਭੇਜਦਾ ਹੈ, ਕਰਨਲ ਉਹਨਾਂ ਨੂੰ ਅੱਗੇ ਭੇਜਦਾ ਹੈ ਅਤੇ ਉਹਨਾਂ ਦਾ ਮੁਲਾਂਕਣ FORWARD ਵਿੱਚ ਹੁੰਦਾ ਹੈ। INPUT ਅਤੇ OUTPUT ਸਿਰਫ਼ ਉਹ ਟ੍ਰੈਫਿਕ ਦੇਖਦੇ ਹਨ ਜੋ ਸਰਵਰ ’ਤੇ ਹੀ ਖ਼ਤਮ ਹੁੰਦਾ ਹੈ ਜਾਂ ਉੱਥੋਂ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ। ਇਸ ਲਈ tun0 ’ਤੇ ਨਾ ਆਉਣ ਵਾਲੀ ਹਰ ਚੀਜ਼ ਨੂੰ ਰੱਦ ਕਰਨਾ ਸਰਵਰ ਦੇ ਆਪਣੇ ਸਰੋਤਿਆਂ ਦੀ ਰੱਖਿਆ ਕਰਦਾ ਹੈ, ਅਤੇ ਜੇ ਸਥਾਪਿਤ ਫ਼ਲੋ ਪਹਿਲਾਂ ਮਨਜ਼ੂਰ ਨਾ ਹੋਣ ਤਾਂ ਇਹ ਤੁਹਾਡਾ SSH ਸੈਸ਼ਨ ਵੀ ਖ਼ਤਮ ਕਰ ਦੇਵੇਗਾ। ਕਲਾਇੰਟ ਕਿੱਥੇ ਜਾ ਸਕਦੇ ਹਨ ਇਸ ਵਿੱਚ ਇਹ ਕੁਝ ਨਹੀਂ ਬਦਲਦਾ।
ਪਹਿਲਾਂ ਸਵਾਲ ਦਾ ਨਾਮ ਦਿਓ: ਕੌਣ ਸਰਵਰ ਤੱਕ ਪਹੁੰਚ ਸਕਦਾ ਹੈ, ਜਾਂ ਕਲਾਇੰਟ ਕਿੱਥੇ ਜਾ ਸਕਦੇ ਹਨ। ਬਹੁਤੇ ਨੈੱਟਵਰਕਾਂ ਨੂੰ ਦੋਵੇਂ ਜਵਾਬ ਚਾਹੀਦੇ ਹਨ, ਵੱਖ-ਵੱਖ ਚੇਨਾਂ ਵਿੱਚ।
ਪਹਿਲਾਂ ਸਥਿਤੀ, ਫਿਰ ਆਗਿਆ, ਫਿਰ ਰੱਦ
ਆਗਿਆ-ਸੂਚੀ ਤਦ ਹੀ ਕੰਮ ਕਰਦੀ ਹੈ ਜਦੋਂ ਖਾਸ ਆਗਿਆ ਆਮ ਰੱਦ ਦੇ ਉੱਪਰ ਹੋਵੇ ਅਤੇ ਵਾਪਸੀ ਟ੍ਰੈਫਿਕ ਦੋਵਾਂ ਦੇ ਉੱਪਰ ਮਨਜ਼ੂਰ ਹੋਵੇ। ਨਿਯਮ ਸਪਸ਼ਟ ਥਾਵਾਂ ’ਤੇ ਪਾਓ, ਫਿਰ iptables -S FORWARD ਨਾਲ ਚੇਨ ਡੰਪ ਕਰੋ ਤਾਂ ਜੋ ਕ੍ਰਮ ਅਨੁਮਾਨਿਤ ਨਹੀਂ, ਦਿਸਦਾ ਹੋਵੇ।
POOL=10.99.0.0/24
iptables -I FORWARD 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD 2 -s "$POOL" -d 172.31.20.15 -p tcp -m multiport --dports 443,3389 -j ACCEPT
iptables -I FORWARD 3 -s "$POOL" -j REJECTਅਸਲੀ ਟ੍ਰੈਫਿਕ ਨਾਲ ਟਕਰਾਅ ਵਿੱਚ ਇਹ ਟਿਕੇਗਾ ਜਾਂ ਨਹੀਂ, ਇਹ ਦੋ ਵੇਰਵੇ ਤੈਅ ਕਰਦੇ ਹਨ। ਸਥਿਤੀ-ਨਿਯਮ ਤੋਂ ਬਿਨਾਂ, ਹੁਣੇ ਮਨਜ਼ੂਰ ਕੀਤੇ ਕਨੈਕਸ਼ਨਾਂ ਦੇ ਜਵਾਬ ਆਪ ਹੀ ਰੱਦ ਦੇ ਸਾਹਮਣੇ ਮੁਲਾਂਕਣ ਹੋ ਕੇ ਸੁੱਟ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ। ਬਿਨਾਂ ਸੀਮਾ ਵਾਲਾ LOG ਨਿਯਮ ਪਹਿਲੀ ਸਕੈਨ ’ਤੇ ਹੀ ਛੋਟਾ ਵਿਭਾਜਨ ਭਰ ਸਕਦਾ ਹੈ, ਇਸ ਲਈ ਲੌਗਿੰਗ ਜਾਰੀ ਰੱਖਣ ਤੋਂ ਪਹਿਲਾਂ -m limit --limit 10/min ਜੋੜੋ। REJECT ਤੁਰੰਤ ਗਲਤੀ ਵਾਪਸ ਕਰਦਾ ਹੈ, ਜੋ ਸੂਚੀ ਸੰਵਾਰਦਿਆਂ ਵਧੇਰੇ ਸੁਖਾਵਾਂ ਹੈ; DROP ਚੁੱਪਚਾਪ ਸੁੱਟ ਦਿੰਦਾ ਹੈ, ਇਸ ਲਈ ਹਰ ਗਲਤੀ ਸਮਾਂ-ਸਮਾਪਤੀ ਵਾਂਗ ਦਿਸਦੀ ਹੈ। ਜਾਣ-ਬੁੱਝ ਕੇ ਇੱਕ ਚੁਣੋ ਅਤੇ ਚੋਣ ਬਦਲਾਅ ਰਿਕਾਰਡ ਵਿੱਚ ਲਿਖੋ।
ਫਾਰਵਰਡਿੰਗ ਅਤੇ NAT ਪਹਿਲਾਂ ਹੀ ਕੰਮ ਕਰਨੇ ਚਾਹੀਦੇ ਹਨ
ਫਿਲਟਰਿੰਗ ਇਹ ਸਾਬਤ ਨਹੀਂ ਕਰ ਸਕਦੀ ਕਿ ਕੋਈ ਰਾਹ ਮੌਜੂਦ ਹੈ। ਪਹਿਲਾਂ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਕਰਨਲ ਬਿਲਕੁਲ ਫਾਰਵਰਡ ਕਰਦਾ ਹੈ, ਅਤੇ ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਸ਼ੈੱਲ ਦਾ ਇੱਕ-ਵਾਰੀ ਆਦੇਸ਼ ਨਹੀਂ, ਪੱਕਾ ਬਣਾਓ। ਫਿਲਟਰ ਆਖ਼ਰੀ ਪਰਤ ਹੈ, ਪਹਿਲੀ ਨਹੀਂ।
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s "$POOL" -o eth0 -j MASQUERADEਮਾਸਕਰੇਡ ਕਿੱਥੇ ਬੈਠੇਗਾ ਇਹ ਇਸ ’ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ ਕਿ ਕਲਾਇੰਟ ਕਿੱਥੋਂ ਬਾਹਰ ਜਾਂਦੇ ਹਨ। ਜੇ ਉਹ ਟਨਲ ਰਾਹੀਂ ਦੂਰ ਦੇ ਨੈੱਟਵਰਕ ਵੱਲ ਜਾਂਦੇ ਹਨ, ਤਾਂ NAT ਨਿਯਮ WAN ਇੰਟਰਫੇਸ ’ਤੇ ਨਹੀਂ, ਉਸ ਇੰਟਰਫੇਸ ’ਤੇ ਜਾਂਦਾ ਹੈ। ਫਿਰ ਕਾਊਂਟਰ ਵੇਖੋ: ਜੇ POSTROUTING ਕਾਊਂਟਰ ਕਦੇ ਨਹੀਂ ਹਿਲਦਾ ਜਦੋਂ ਕਿ FORWARD ਮਨਜ਼ੂਰੀਆਂ ਦੀ ਗਿਣਤੀ ਵਧਦੀ ਹੈ, ਤਾਂ ਵਾਪਸੀ ਦਾ ਰਾਹ ਟੁੱਟਿਆ ਹੈ ਅਤੇ ਫਿਲਟਰ ਠੀਕ ਹੈ। ਇਹ ਪੜ੍ਹਤ ਉਹਨਾਂ ਨਿਯਮਾਂ ਨੂੰ ਮੁੜ ਲਿਖਣ ਵਿੱਚ ਇੱਕ ਦੁਪਹਿਰ ਬਚਾਉਂਦੀ ਹੈ ਜੋ ਕਦੇ ਸਮੱਸਿਆ ਨਹੀਂ ਸਨ।
ਮੇਲ ਬਲਾਕ ਇੱਕ ਚੇਨ ਅੱਗੇ ਦਾ ਹੈ
INPUT ਵਿੱਚ ਪੋਰਟ 25 ਬਲਾਕ ਕਰਨਾ ਸਿਰਫ਼ VPN ਸਰਵਰ ਨੂੰ ਭੇਜੇ ਮੇਲ ਨੂੰ ਰੋਕਦਾ ਹੈ। ਟਨਲ ਰਾਹੀਂ ਮੇਲ ਭੇਜਣ ਵਾਲਾ ਸੰਕਰਮਿਤ ਕਲਾਇੰਟ ਫਾਰਵਰਡ ਹੁੰਦਾ ਹੈ, ਇਸ ਲਈ ਬਲਾਕ 465 ਅਤੇ 587 ਦੇ ਕੋਲ FORWARD ਵਿੱਚ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੇ ਇੱਕ ਐਪਲੀਕੇਸ਼ਨ ਜਾਇਜ਼ ਤੌਰ ’ਤੇ ਮੇਲ ਰੀਲੇ ਕਰਦੀ ਹੈ, ਤਾਂ ਉਸ ਦੀ ਮੰਜ਼ਿਲ ਅਤੇ ਪੋਰਟ ਉਸ ਨਿਯਮ ਦੇ ਉੱਪਰ ਰੱਖੋ।
iptables -I FORWARD 2 -s "$POOL" -p tcp -m multiport --dports 25,465,587 -j REJECTਹੋਰ ਕੁਝ ਵੀ ਸਖ਼ਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਰੱਦ ਕਾਊਂਟਰ ਨੂੰ ਇੱਕ ਹਫ਼ਤਾ ਚੱਲਣ ਦਿਓ। ਜੋ ਗਿਣਤੀ ਵਧਣਾ ਬੰਦ ਕਰ ਦੇਵੇ, ਉਹੀ ਜਾਇਜ਼ ਪ੍ਰਵਾਹ ਹੈ ਜੋ ਤੁਸੀਂ ਹੁਣੇ ਤੋੜਿਆ ਹੈ।
ਇਸ ਨੂੰ ਦੁਬਾਰਾ ਪੜ੍ਹੋ, ਫਿਰ ਕਲਾਇੰਟ ਤੋਂ ਸਾਬਤ ਕਰੋ
ਨਿਯਮ-ਸਮੂਹ ਨੂੰ ਉਸ ਤਰ੍ਹਾਂ ਪੜ੍ਹੋ ਜਿਵੇਂ ਕਰਨਲ ਰਿਪੋਰਟ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਤੁਹਾਡੀ ਸਕ੍ਰਿਪਟ ਨੇ ਲਿਖਿਆ ਨਹੀਂ। iptables -S FORWARD ਨਾਲ ਸ਼ੁਰੂ ਕਰੋ, ਫਿਰ iptables -t nat -L POSTROUTING -n -v ਨਾਲ NAT ਸਾਰਣੀ, ਫਿਰ ਤੁਸੀਂ ਜਾਂਚ ਰਹੇ ਪ੍ਰਵਾਹ ਦੀ conntrack ਐਂਟਰੀ। ਜਿੰਨਾ ਚਿਰ ਕੰਮ ਚੱਲੇ, ਰੋਲਬੈਕ ਕਮਾਂਡ ਜਾਂ ਨਿਯਤ ਫਲੈਸ਼ ਰੱਖੋ। ਹਰ ਕਾਲ ਨੂੰ -w ਚਾਹੀਦਾ ਹੈ, ਨਹੀਂ ਤਾਂ ਦੋ ਪ੍ਰਬੰਧਕ xtables ਲਾਕ ’ਤੇ ਟਕਰਾਉਣਗੇ। ਬਦਲਾਅ ਵਿੰਡੋ ਵਿੱਚ ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੁਝ ਵੀ ਚੋਣਵਾਂ ਨਹੀਂ ਹੈ।
ਪੂਲ ਦੇ ਅੰਦਰਲੇ ਕਲਾਇੰਟ ਅਤੇ ਬਾਹਰਲੇ ਕਲਾਇੰਟ ਤੋਂ ਪਰਖ ਕੇ ਮੁਕੰਮਲ ਕਰੋ। ਜੋ ਨਿਯਮ ਸਿਰਫ਼ ਤੁਹਾਡੇ ਟਾਈਪ ਕੀਤੇ ਮਸ਼ੀਨ ਤੋਂ ਹੀ ਚੱਲਦਾ ਹੈ, ਉਹ ਨੀਤੀ ਨਹੀਂ।