diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-05-20 11:03:15 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-06-03 13:33:40 +0200 |
| commit | ddabbd93019c49d4de3a27a3f4536776ee0b1f42 (patch) | |
| tree | 87040c26f5f1e70da88eef0bd59ea632db0e42c4 | |
| parent | 902ce9fec479abc39584c8ab411b89a3d9056053 (diff) | |
| download | mullvadvpn-ddabbd93019c49d4de3a27a3f4536776ee0b1f42.tar.xz mullvadvpn-ddabbd93019c49d4de3a27a3f4536776ee0b1f42.zip | |
Reject select outgoing traffic instead of silently dropping it on Linux
| -rw-r--r-- | talpid-core/src/firewall/linux.rs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/talpid-core/src/firewall/linux.rs b/talpid-core/src/firewall/linux.rs index abe542d4b3..c1cc847d60 100644 --- a/talpid-core/src/firewall/linux.rs +++ b/talpid-core/src/firewall/linux.rs @@ -5,7 +5,7 @@ use lazy_static::lazy_static; use libc; use nftnl::{ self, - expr::{self, Payload, Verdict}, + expr::{self, IcmpCode, Payload, RejectionType, Verdict}, nft_expr, table, Batch, Chain, FinalizedBatch, ProtoFamily, Rule, Table, }; use std::{ @@ -480,6 +480,15 @@ impl<'a> PolicyBatch<'a> { if allow_lan { self.add_allow_lan_rules(); } + + // Reject any remaining outgoing traffic + let mut reject_rule = Rule::new(&self.out_chain); + add_verdict( + &mut reject_rule, + &Verdict::Reject(RejectionType::Icmp(IcmpCode::PortUnreach)), + ); + self.batch.add(&reject_rule, nftnl::MsgType::Add); + Ok(()) } @@ -567,12 +576,15 @@ impl<'a> PolicyBatch<'a> { fn add_drop_dns_rule(&mut self) { let mut block_udp_rule = Rule::new(&self.out_chain); check_port(&mut block_udp_rule, TransportProtocol::Udp, End::Dst, 53); - add_verdict(&mut block_udp_rule, &Verdict::Drop); + add_verdict( + &mut block_udp_rule, + &Verdict::Reject(RejectionType::Icmp(IcmpCode::PortUnreach)), + ); self.batch.add(&block_udp_rule, nftnl::MsgType::Add); let mut block_tcp_rule = Rule::new(&self.out_chain); check_port(&mut block_tcp_rule, TransportProtocol::Tcp, End::Dst, 53); - add_verdict(&mut block_tcp_rule, &Verdict::Drop); + add_verdict(&mut block_tcp_rule, &Verdict::Reject(RejectionType::TcpRst)); self.batch.add(&block_tcp_rule, nftnl::MsgType::Add); } |
