Gumagana ang hook sa unang pagkakataon, at pagkatapos ng tatlong muling pagkonekta ay may tatlong kopya ng parehong panuntunan ang chain. Walang bigong malakas; ginawa lang ng script ang sinabi dito sa bawat pagtakbo. Ang hook ng VPN ay isang operasyon ng configuration na maaaring tumakbo nang higit sa isang beses, kaya kailangan nito ng may-ari, gustong estado at isang naka-serialize na pagbabago. Sundin ang ayos na iyon at titigil ang mga duplicate.

Bigyan ng may-ari ang mga panuntunan bago magsulat ng kahit isa

Magpasya kung aling chain o table ang pag-aari ng integrasyong ito bago magsulat ng kahit isang panuntunan. Ang nakatalagang chain na ginagawa at nililinis ng hook ang pinakamalinaw na anyo ng pagmamay-ari, dahil maaaring alisin ng paglilinis ang chain na iyon nang hindi hinahawakan ang patakaran ng iba. Kung kailangan mong magdagdag ng mga panuntunan sa isang shared chain, lagyan sila ng komento upang mahanap ng susunod na paghahanap ang eksaktong sa iyo. Ang pagmamay-ari ang nagpapasiguro sa pagtatanggal, at ang pagtatanggal ang bahaging tahimik na nabibigo.

iptables -N VPN_HOOK 2>/dev/null || true
iptables -C INPUT -j VPN_HOOK 2>/dev/null || iptables -I INPUT -j VPN_HOOK
iptables -S VPN_HOOK

Ang komento rito ay hindi palamuti. Ito ang pagkakaiba ng pag-alis ng iyong panuntunan at pag-alis ng panuntunang nagkataong kamukha, at nananatili ito sa naka-save na set ng panuntunan. Isulat ang komento nang isang beses sa isang variable at gamitin ang parehong string sa bawat command na nagdadagdag, sumusubok o nagtatanggal.

Subukan ang gustong estado sa halip na magdagdag muli

Isulat kung ano ang dapat umiral habang nakabukas ang tunnel: aling mga interface, aling pinagmulan at destinasyon, aling protocol at aling port. Pagkatapos ay ipahayag ang bawat panuntunan bilang pagsubok na sinusundan ng pagsingit, upang mahanap ng ikalawang pagtakbo ang panuntunan at wala nang gawin. Nagtatapos sa zero ang command ng pagsuri kapag umiiral ang panuntunan, at iyon mismo ang senyales na kailangan ng script. Dinodokumento ng sanggunian ng iptables ang mga anyo ng pagsuri, pagdaragdag at pagsingit na ginagamit dito.

iptables -C VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT ||
  iptables -A VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT

Mag-ingat sa posisyon. Ang pagsuri ng panuntunan at pagsingit nito sa unahan ay maaaring ilipat ang isang pahintulot bago ang sinadyang pagtanggi na dating nauuna, kaya binabago ng ikalawang pagtakbo ang pag-uugali kahit wala itong idinadagdag. Magdagdag sa dulo sa loob ng sarili mong chain, at kontrolin ang ayos sa pamamagitan ng lokasyon ng pagtalon sa chain na iyon. Kung mahalaga ang ayos sa loob ng chain, muling buuin ang chain mula sa kilalang listahan sa halip na tagpi-tagpiin ito nang paisa-isa.

Huminto kung ang kailangang panuntunan ay hindi maipahayag bilang matatag na pagsubok. Karaniwang ibig sabihin nito na malabo pa ang gustong estado.

I-serialize ang pagbabago sa halip na umasa na tatagal ito

Maaaring magsalapawan ang dalawang pagtawag sa hook, at parehong makikita ang nawawalang panuntunan bago ito idagdag ng alinman. Pinapahintay ng option na paghihintay ng xtables ang isang command sa lock, ngunit hindi nito ginagawang atomiko ang sunod-sunod na pagsuri-at-pagdaragdag sa dalawang command. I-serialize ang buong operasyon gamit ang sarili mong lock, o gumamit ng manager na naglalapat ng isang idineklarang batch bilang isang transaksyon. Kayang gawin ng nftables ang huli, at isa itong dahilan upang piliin ito sa mga host kung saan available ito.

flock /run/vpn-hook.lock /usr/local/sbin/vpn-firewall-apply
nft -f /etc/nftables/vpn-hook.nft

Anuman ang mekanismong piliin, panatilihing maikli ang kritikal na seksyon at gawin itong muling mapapasok: ang hook na nabibigo sa kalagitnaan ay dapat ligtas na patakbuhin muli. I-log ang resulta upang makita sa journal ang paulit-ulit na pagtakbo sa halip na hulaan mula sa bilang ng mga panuntunan. Kung dalawang magkaibang supervisor ang makakatawag sa hook, ayusin muna iyon; walang lock ang nag-aayos ng dalawang may-ari.

Tanggalin lamang ang pag-aari mo

Dapat makilala ng pagtatanggal ang kapalit na koneksyon sa koneksyong pinagretiro nito, at dapat itong makatagal sa isang pangyayaring hindi kailanman nakakakuha ng maayos na paglilinis. Burahin gamit ang parehong mga identifier na ginamit mo sa pagdaragdag, at huwag kailanman buhusan ng laman ang shared chain para gawing simple ang paglilinis. Pagkatapos ng matigas na paghinto, magpatakbo ng reconcile pass sa susunod na pagsisimula sa halip na ipagpalagay na tumakbo ang down hook.

iptables -D VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT
iptables -F VPN_HOOK
ip -brief link show type tun

Bahagi rin ng disenyo ang buhay ng interface. Ang muling pagkonekta ay maaaring gumawa ng device na may ibang pangalan, kaya ang panuntunang hardcoded ang pangalan ng ikalawang tunnel ay naluluma habang mukha pa ring wasto. Piliin ang pagkakakilanlang inilalantad ng koneksyon mismo, at basahin itong muli sa bawat pagtakbo. Subukan ang tatlong pangyayari nang hiwalay: paulit-ulit na koneksyon, kapalit na koneksyon at pagsasara. Ang pinapayagang trapiko ay dapat makatagal sa tatlo nang walang duplicate, at ang mga walang kaugnayang serbisyo ay dapat manatiling hindi nagalaw.

Nagtatapos ang paglalakad kapag ang hook ay may may-ari, pagsubok para sa bawat panuntunang idinadagdag nito, isang naka-serialize na landas at pagtatanggal na nag-aalis lamang ng sarili nitong estado. Ang hook na ligtas patakbuhin nang dalawang beses ay mas mahalaga kaysa hook na matalino nang isang beses.

Kaugnay na mga artikulo