summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEmīls Piņķis <emils@mullvad.net>2018-10-25 13:49:15 +0100
committerEmīls Piņķis <emils@mullvad.net>2018-10-25 13:49:15 +0100
commit6550301700b954a96a561fd2c25e7a1201080ca4 (patch)
treed5c90328250c9185dd18f2ce9e7e1a06ae2e9b4b
parentbedadceeaadf47e7f1c539f6d2ed02c19946af2f (diff)
parentd6d3516ce01cf64e1704af2cde0545b28aa94323 (diff)
downloadmullvadvpn-6550301700b954a96a561fd2c25e7a1201080ca4.tar.xz
mullvadvpn-6550301700b954a96a561fd2c25e7a1201080ca4.zip
Merge branch 'block-port-53'
-rw-r--r--talpid-core/src/security/linux/mod.rs22
1 files changed, 14 insertions, 8 deletions
diff --git a/talpid-core/src/security/linux/mod.rs b/talpid-core/src/security/linux/mod.rs
index 0fb5b394be..c892b24ee3 100644
--- a/talpid-core/src/security/linux/mod.rs
+++ b/talpid-core/src/security/linux/mod.rs
@@ -276,18 +276,24 @@ impl<'a> PolicyBatch<'a> {
tunnel: &tunnel::TunnelMetadata,
protocol: TransportProtocol,
) -> Result<()> {
- let mut rule = Rule::new(&self.out_chain)?;
+ // allow DNS traffic to the tunnel gateway
+ let mut allow_rule = Rule::new(&self.out_chain)?;
- check_iface(&mut rule, Direction::Out, &tunnel.interface[..])?;
- check_port(&mut rule, protocol, End::Dst, 53)?;
- check_l3proto(&mut rule, IpAddr::V4(tunnel.gateway))?;
+ check_iface(&mut allow_rule, Direction::Out, &tunnel.interface[..])?;
+ check_port(&mut allow_rule, protocol, End::Dst, 53)?;
+ check_l3proto(&mut allow_rule, IpAddr::V4(tunnel.gateway))?;
- rule.add_expr(&nft_expr!(payload ipv4 daddr))?;
- rule.add_expr(&nft_expr!(cmp != tunnel.gateway))?;
+ allow_rule.add_expr(&nft_expr!(payload ipv4 daddr))?;
+ allow_rule.add_expr(&nft_expr!(cmp == tunnel.gateway))?;
- add_verdict(&mut rule, &Verdict::Drop)?;
+ add_verdict(&mut allow_rule, &Verdict::Accept)?;
+ self.batch.add(&allow_rule, nftnl::MsgType::Add)?;
+
+ let mut block_rule = Rule::new(&self.out_chain)?;
+ check_port(&mut block_rule, protocol, End::Dst, 53)?;
+ add_verdict(&mut block_rule, &Verdict::Drop)?;
+ self.batch.add(&block_rule, nftnl::MsgType::Add)?;
- self.batch.add(&rule, nftnl::MsgType::Add)?;
Ok(())
}