ইন্টারনেট অ্যাক্সেস করতে ভিপিএন ডিভাইসগুলিকে অনুমতি দেওয়ার জন্য iptables নিয়ম


2

আমার লিনাক্স ফায়ারওয়াল সেটআপ আমার হোম নেটওয়ার্ক গেটওয়ে যা আমার নেটওয়ার্কে ডিভাইসগুলিতে যথাযথভাবে লিজিং আইপি ঠিকানা দেয় এবং সেই ডিভাইসগুলির ইন্টারনেট অ্যাক্সেস আছে।

আমি একই মেশিনে ওপেন ভিপিএন সেট আপ করেছি এবং এটি আপ এবং চলমান এবং আইপি ঠিকানা ডলিং আউট করে এবং আমি আমার ফোন থেকে ভিপিএন অ্যাক্সেস করতে সক্ষম। যাইহোক, ভিপিএন ডিভাইসগুলিতে ইন্টারনেট অ্যাক্সেস নেই এবং আমি কেন তা বুঝতে পারছি না।

আমি ব্যবহার করছি iptables নিয়ম এখানে:

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# enp2s0 is WAN interface, enp1s0 is LAN interface, tun0 is vpn interface
-A POSTROUTING -o enp2s0 -j MASQUERADE
-A POSTROUTING -s 10.8.0.0/8 -o enp2s0 -j MASQUERADE

COMMIT

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# block invalid packets
-A PREROUTING -m conntrack --ctstate INVALID -j DROP

# block fragmented packets (may be unnecessary)
#-A PREROUTING -f -j DROP

# block new packets that are not SYN
-A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

# block uncommon MSS values
-A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP

# block packets with bogus TCP flags
-A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
-A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
-A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
-A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
-A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
-A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
-A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
-A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
-A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
-A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

# block packets from private subnets (spoofing)
-A PREROUTING -s 224.0.0.0/3 -j DROP
-A PREROUTING -s 169.254.0.0/16 -j DROP
-A PREROUTING -s 172.16.0.0/12 -j DROP
-A PREROUTING -s 192.0.2.0/24 -j DROP
#-A PREROUTING -s 192.168.0.0/16 -j DROP
-A PREROUTING -s 10.0.0.0/8 -j DROP
-A PREROUTING -s 0.0.0.0/8 -j DROP
-A PREROUTING -s 240.0.0.0/5 -j DROP
-A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP

COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
# Service rules

# Log all input and forward connections
-A INPUT -j LOG
-A FORWARD -j LOG

# basic global accept rules - ICMP, loopback, traceroute, established all accepted
-A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
#-A OUTPUT -o lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
# the below rule might require ,RELATED if things fail, such as OpenVPN
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#-A INPUT -m conntrack --ctstate RELATED -j ACCEPT
#-A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

# enable traceroute rejections to get sent out
-A INPUT -p udp -m udp --dport 33434:33523 -j REJECT --reject-with icmp-port-unreachable

# DNS - accept from LAN and VPN
-A INPUT -i enp1s0 -p tcp --dport 53 -j ACCEPT
-A INPUT -i enp1s0 -p udp --dport 53 -j ACCEPT
-A INPUT -i tun0 -p tcp --dport 53 -j ACCEPT
-A INPUT -i tun0 -p udp --dport 53 -j ACCEPT

# SSH - accept from LAN and VPN; note that SSH on this machine uses a non-standard port
-A INPUT -i enp1s0 -p tcp --dport 123 -j ACCEPT
-A INPUT -i tun0 -p tcp --dport 123 -j ACCEPT

# OpenVPN - accept from WAN; note that OpenVPN on this machine uses port 443 to try to get past client network filtering
-A INPUT -i enp2s0 -p tcp --dport 443 -j ACCEPT
#-I INPUT -i tun0 -j ACCEPT
-I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# DHCP client requests - accept from LAN and VPN
-A INPUT -i enp1s0 -p udp --dport 67:68 -j ACCEPT
-A INPUT -i tun0 -p udp --dport 67:68 -j ACCEPT

# drop invalid packets
-A INPUT -m conntrack --ctstate INVALID -j DROP

# drop connections from hosts that have more than 80 established connections (prevents connection attacks)
-A INPUT -p tcp -m connlimit --connlimit-above 80 -j REJECT --reject-with tcp-reset

# limit the new TCP connections that a client can establish per second, reducing connection attacks
-A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -j DROP

# block port scanning
-N port-scanning
-A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN
-A port-scanning -j DROP

# block HTTPS ads
#-A INPUT -p udp --dport 80 -j REJECT --reject-with icmp-port-unreachable
#-A INPUT -p tcp --dport 443 -j REJECT --reject-with tcp-reset
#-A INPUT -p udp --dport 443 -j REJECT --reject-with icmp-port-unreachable

# drop all other inbound traffic
-A INPUT -j DROP

# Forwarding rules

# forward packets along established/related connections
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# forward from LAN (enp1s0) to WAN (enp2s0)
-A FORWARD -i enp1s0 -o enp2s0 -j ACCEPT

# forward from VPN (tun0) to WAN (enp2s0)
-A FORWARD -i tun0 -o enp2s0 -j ACCEPT

# drop all other forwarded traffic
-A FORWARD -j DROP

COMMIT

আমি কি হারিয়েছি যে ভিপিএন ডিভাইসগুলিতে ইন্টারনেট অ্যাক্সেস করার অনুমতি দেবে?

উত্তর:


0

আপনার ক্লায়েন্টদের মত শোনাচ্ছে (যদি তারা Android / iOS হয়) সেমেলেস টানেল বিকল্প সক্ষম থাকে, বা iptables NAT-সক্ষম সক্ষম টানেল (অসম্ভাব্য) দিয়ে স্ক্রু করছে। তারা ভুল সাবনেট ব্লক করা হয় না তা নিশ্চিত করার জন্য আপনার ব্লকিং নিয়ম পরীক্ষা করে দেখুন।

এছাড়াও (যদি আপনার সার্ভার লিনাক্সের একটি সংস্করণ চালাচ্ছে) নিশ্চিত করুন যে কার্নেলে আইপি ফরওয়ার্ডিং সক্ষম করা আছে। এটি করার জন্য (প্রশাসক হিসাবে চালান):

echo 1 > /proc/sys/net/ipv4/ip_forward
উইন্ডোজ আইপি ফরওয়ার্ডিং সক্রিয় করার একটি ভিন্ন পদ্ধতি আছে। এই নিবন্ধ সেখানে আপনাকে সাহায্য করা উচিত।

আমি সিমলেস টানেল নিষ্ক্রিয় করেছি এবং তারপরে আইপি ফরওয়ার্ডিং সক্রিয় ছিল তা পরীক্ষা করে দেখলাম। উভয় সমস্যা সমাধান। আমি আমার ব্লকিং নিয়ম চেক এবং ফিরে রিপোর্ট করব।
rosstripi

0

আমি করেছি - আপনি কি চেষ্টা করছেন - একটি ভার্চুয়াল মেশিনে। আমি দুটি ইথারনেট ডিভাইস দিয়ে দুটি মেশিন, মেশিন এ তৈরি করেছি। ইন্টারনেটের সাথে সংযুক্ত একটি ডিভাইস, অন্যটি দ্বিতীয় ভার্চুয়াল মেশিন বি সংযুক্ত।

মেশিন এ থেকে ইন্টারনেট বা ভিপিএন সংযোগ ব্যবহার করতে সক্ষম হ'ল মেশিন বি তৈরির জন্য নিম্নলিখিত লাইনগুলি আমার দরকার।

vm1@vm1:~$ cat firewall01.sh 
#!/bin/bash

#sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
#sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -m state --state RELATED,ESTABLISHED -j ACCEPT
#sudo iptables -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT


sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o enp0s8 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i enp0s8 -o tun0 -j ACCEPT

এছাড়াও আমি সম্পাদনা করেছেন /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

যে রান পরে sudo sysctl -p পরিবর্তন অবিলম্বে কার্যকর করা যাক।

  • enp0s3 ইথারনেট ডিভাইস ইন্টারনেট সংযুক্ত।
  • enp0s8 ইথারনেট ডিভাইস স্থানীয় মেশিন বি সংযুক্ত।
  • tun0 Openvpn থেকে তৈরি ইথারনেট ডিভাইস

পরীক্ষার উদ্দেশ্যে, আমি আমার ডিফল্ট নীতি গ্রহণ করার জন্য সেট করি।

vm1@vm1:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Openvpn-client-script এই রকম দেখায়, btw .:

client
dev tun
proto udp
remote server-ip server-port
nobind 
resolv-retry infinite 
auth SHA512
cipher AES-256-CBC
keysize 256
comp-lzo
verb 2
mute-replay-warnings
ns-cert-type server
persist-key
persist-tun
key-direction 1
ca /path/to/file.crt
tls-auth /path/to/file.key 1
auth-user-pass /path/to/file
auth-nocache
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

---------------------------------------------

** সম্পাদনা ** আমি এই সময় আপনার অনুরোধ পূরণ আশা করি।

আমি শুধু নিম্নলিখিত সেটআপ তৈরি:

  • কম্পিউটার এ একটি openvpn সার্ভার
  • আমার ল্যাপটপ এ একটি openvpn- ক্লায়েন্ট বি
  • আমার ল্যাপটপ বি থেকে আমার কম্পিউটারে একটি ভিপিএন সংযোগ তৈরি করে আমার কম্পিউটারে একটি কম্পিউটারে যা আমাকে আমার কম্পিউটারের আইপি-অ্যাড্রেস সহ আমার ল্যাপটপ বিতে ওয়েব ব্রাউজ করার অনুমতি দেয়।

আমি নিম্নলিখিত স্ক্রিপ্ট দিয়ে আমার openvpn-server তৈরি করেছি:

cat /etc/openvpn/server.conf 
port 11194
proto udp
dev tun10
tun-mtu 1500
mssfix 1450
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/ca.crt
key /etc/openvpn/easy-rsa/keys/ca.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
server 10.9.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
client-to-client
keepalive 5 60
comp-lzo
persist-key
persist-tun
#user openvpn
#group openvpn
status openvpn-SERVER-status.log
verb 6
cipher AES-256-CBC

আপনার ভিপিএন এর মাধ্যমে Dns-redirection অর্জন করতে সবচেয়ে গুরুত্বপূর্ণ সেটিং হওয়া উচিত: ধাক্কা "পুনঃনির্দেশ-গেটওয়ে def1 বাইপাস-dhcp"

তারপরে নিম্নলিখিত লাইন সম্পাদনা করুন /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

এবং চালানো sudo sysctl -p

পরবর্তী iptables নিয়ম তৈরি করুন: প্রতি নীতি সেট করা হয় গ্রহণ নিম্নোক্ত কমান্ডটি চালানোর জন্য আমার প্রয়োজন ছিল: iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE

  • enp0s3 হল কম্পিউটার এ ইথারনেট-কার্ড যা ইন্টারনেটের সাথে সংযুক্ত।

ভিপিএন-ক্লায়েন্ট-স্ক্রিপ্ট

নিম্নোক্ত স্ক্রিপ্টটি ক্লায়েন্ট ল্যাপটপ B থেকে কম্পিউটার এ ভিপিএন-সার্ভারের সাথে সংযোগ করার জন্য ব্যবহৃত হয়েছিল

 
client
#tls-client
#key-direction 1
proto udp
port 11194
remote some.dyndns.org
dev tun
#persist-key
#persist-tun
#tun-mtu 1500
#mssfix 1450
#nobind 
#resolv-retry infinite 
keepalive 5 60
comp-lzo
cipher AES-256-CBC
ca /home/alex/Downloads/dellvpn/ca.crt
cert /home/alex/Downloads/dellvpn/dell-inspirion.crt
key /home/alex/Downloads/dellvpn/dell-inspirion.key
verb 2
script-security 2 
up /etc/openvpn/update-resolv-conf 
down /etc/openvpn/update-resolv-conf 

আমার সবচেয়ে গুরুত্বপূর্ণ লাইন হয় শেষ তিনটি লাইন । এই linux সিস্টেমের উপর ডিএনএস-লিক প্রতিরোধ। https://dnsleaktest.com/what-is-a-dns-leak.html

এই মুহুর্তে আমি কম্পিউটার ল্যাপটপ আইপি দিয়ে আমার ল্যাপটপ বি ব্রাউজ করতে সক্ষম হয়েছিলাম।


** আইপ্যাবল নীতি ড্রপ **

আমি ডিফল্ট iptables নীতি ড্রপ করার পরে, জিনিস জটিল হতে চলেছে। অবশেষে আমি সফলভাবে নিচের লিপিটি ব্যবহার করেছি:

#!/bin/bash

##SCRIPT-SNIPPET taken from https://wiki.debianforum.de/Einfaches_Firewall-Script


IPTABLES="/sbin/iptables"

# Set Ports for Service
#------------------------------------------------------------------------------

pSSH="22"
pDNS="53"
pHTTP="80"
pHTTPS="443"
pOPENVPN="-p UDP --dport 11194"
pNTP="123"

# Set Networks
#------------------------------------------------------------------------------
LOCALNET="192.168.178.0/24"
VPNNET="10.9.0.0/24"


# Default policies.
#------------------------------------------------------------------------------

# Drop everything by default.
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

# Set the nat/mangle/raw tables' chains to ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT

$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT

# Cleanup.
#------------------------------------------------------------------------------

# Delete all
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F

# Delete all
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

# Zero all packets and counters.
$IPTABLES -Z
$IPTABLES -t nat -Z
$IPTABLES -t mangle -Z


# Allow loopback interface to do anything.
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# Allow incoming connections related to existing allowed connections.
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections EXCEPT invalid
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# Forward OpenVPN
#------------------------------------------------------------------------------
### Taken from the installscript at https://github.com/Nyr/openvpn-install/blob/master/openvpn-install.sh

IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
$IPTABLES -t nat -A POSTROUTING -s $VPNNET -j SNAT --to $IP
$IPTABLES -I FORWARD -s $VPNNET -j ACCEPT
$IPTABLES -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT


# Selectively allow certain outbound connections, block the rest.
#------------------------------------------------------------------------------

# Allow DNS. Few things will work without this.
$IPTABLES -A OUTPUT -m state --state NEW -p udp --dport $pDNS -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport $pDNS -j ACCEPT


# Allow HTTP.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport $pHTTP -j ACCEPT

# Allow HTTPS.
$IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport $pHTTPS -j ACCEPT

# Allow NTP.
$IPTABLES -A OUTPUT -m state --state NEW -p udp --dport $pNTP -j ACCEPT


# Selectively allow certain inbound connections, block the rest.
#------------------------------------------------------------------------------

# Allow inbound OPENVPN requests.
$IPTABLES -A INPUT -m state --state NEW $OPENVPN -j ACCEPT

# Allow inbound SSH request from specified IP-Range.
$IPTABLES -A INPUT -m state --state NEW -s $LOCALNET -p tcp --dport $pSSH -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW -s $VPNNET -p tcp --dport $pSSH -j ACCEPT

# Exit gracefully.
#------------------------------------------------------------------------------

    exit 0

সবচেয়ে গুরুত্বপূর্ণ রাউটিং লাইন হওয়া উচিত:

# Forward OpenVPN
#------------------------------------------------------------------------------
### Taken from the installscript at https://github.com/Nyr/openvpn-install/blob/master/openvpn-install.sh

IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
$IPTABLES -t nat -A POSTROUTING -s $VPNNET -j SNAT --to $IP
$IPTABLES -I FORWARD -s $VPNNET -j ACCEPT
$IPTABLES -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

নিশ্চিত করো যে $ ভিপিএন নেট openvpn-server.conf- এ যথাযথ আইপি সেট করা হয়

একটি বিকল্প হিসাবে ফরওয়ার্ড নিয়ম উপরে, আমি সফলভাবে সুরটি তৈরি করতে এবং এই লাইনগুলির পরিবর্তে ওয়েব ব্রাউজ করতে সক্ষম হয়েছিলাম:

# Forward OpenVPN
#------------------------------------------------------------------------------

$IPTABLES -t nat -A POSTROUTING -o tun10 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
$IPTABLES -I FORWARD -o enp0s3 -i tun10 -j ACCEPT
$IPTABLES -I FORWARD -i enp0s3 -o tun10 -j ACCEPT
  • enp0s3 ছিল ইথারনেট-কার্ড যা ইন্টারনেটের সাথে সংযুক্ত ছিল
  • tun10 আমার openvpn-server থেকে তৈরি ইথারনেট-ডিভাইস ছিল

আমি এই আমার সমস্যা একটি সমাধান মনে হয় না। আমার একটি ফোন আছে যা সেলুলার ডেটা সংযোগের মাধ্যমে ভিপিএন সংযোগ করতে সক্ষম, তবে সংযোগ স্থাপন হওয়ার পরে এটি আর ইন্টারনেটে পৌঁছে যাবে না।
rosstripi

শুধু জিনিস পরিষ্কার করতে। আপনি আপনার ক্লায়েন্টদের আপনার ভিপিএন-সার্ভারে সারা বিশ্ব (ইন্টারনেট) থেকে এবং আপনার ভিপিএন-সার্ভার-আইপি-অ্যাড্রেস দিয়ে ইন্টারনেট ব্রাউজ করতে সক্ষম হওয়ার চেয়েও লগ ইন করতে সক্ষম হতে চান?
AlexOnLinux

আমি শুধু আমার উত্তর সম্পাদনা করেছেন। আমি এখন আপনার প্রয়োজন ফিট করে যদি আমি আশা করি।
AlexOnLinux
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.