FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
codex/codex-cli/scripts/init_firewall.sh at main · hencjo/codex · GitHub
hencjo
/
codex
Public
forked from
openai/codex
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
codex
/
codex-cli
/
scripts
/
init_firewall.sh
Copy path
More file actions
More file actions
Latest commit
History
History
History
115 lines (99 loc) · 3.81 KB
Breadcrumbs
codex
/
codex-cli
/
scripts
/
init_firewall.sh
Copy path
File metadata and controls
115 lines (99 loc) · 3.81 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!
/bin/bash
set
-euo pipefail
#
Exit on error, undefined vars, and pipeline failures
IFS=
$'
\n\t
'
#
Stricter word splitting
#
Read allowed domains from file
ALLOWED_DOMAINS_FILE=
"
/etc/codex/allowed_domains.txt
"
if
[
-f
"
$ALLOWED_DOMAINS_FILE
"
]
;
then
ALLOWED_DOMAINS=()
while
IFS=
read
-r domain
;
do
ALLOWED_DOMAINS+=(
"
$domain
"
)
done
<
"
$ALLOWED_DOMAINS_FILE
"
echo
"
Using domains from file:
${ALLOWED_DOMAINS[*]}
"
else
#
Fallback to default domains
ALLOWED_DOMAINS=(
"
api.openai.com
"
)
echo
"
Domains file not found, using default:
${ALLOWED_DOMAINS[*]}
"
fi
#
Ensure we have at least one domain
if
[
${
#
ALLOWED_DOMAINS[@]}
-eq
0 ]
;
then
echo
"
ERROR: No allowed domains specified
"
exit
1
fi
#
Flush existing rules and delete existing ipsets
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
ipset destroy allowed-domains
2>
/dev/null
||
true
#
First allow DNS and localhost before any restrictions
#
Allow outbound DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
#
Allow inbound DNS responses
iptables -A INPUT -p udp --sport 53 -j ACCEPT
#
Allow localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#
Create ipset with CIDR support
ipset create allowed-domains hash:net
#
Resolve and add other allowed domains
for
domain
in
"
${ALLOWED_DOMAINS[@]}
"
;
do
echo
"
Resolving
$domain
...
"
ips=
$(
dig +short A
"
$domain
"
)
if
[
-z
"
$ips
"
]
;
then
echo
"
ERROR: Failed to resolve
$domain
"
exit
1
fi
while
read
-r ip
;
do
if
[[
!
"
$ip
"
=~
^[0-9]{1,3}
\.
[0-9]{1,3}
\.
[0-9]{1,3}
\.
[0-9]{1,3}$ ]]
;
then
echo
"
ERROR: Invalid IP from DNS for
$domain
:
$ip
"
exit
1
fi
echo
"
Adding
$ip
for
$domain
"
ipset add allowed-domains
"
$ip
"
done
<
<(
echo
"
$ips
"
)
done
#
Get host IP from default route
HOST_IP=
$(
ip route
|
grep default
|
cut -d
"
"
-f3
)
if
[
-z
"
$HOST_IP
"
]
;
then
echo
"
ERROR: Failed to detect host IP
"
exit
1
fi
HOST_NETWORK=
$(
echo
"
$HOST_IP
"
|
sed
"
s/\.[0-9]*$/.0\/24/
"
)
echo
"
Host network detected as:
$HOST_NETWORK
"
#
Set up remaining iptables rules
iptables -A INPUT -s
"
$HOST_NETWORK
"
-j ACCEPT
iptables -A OUTPUT -d
"
$HOST_NETWORK
"
-j ACCEPT
#
Set default policies to DROP first
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#
First allow established connections for already approved traffic
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
Then allow only specific outbound traffic to allowed domains
iptables -A OUTPUT -m
set
--match-set allowed-domains dst -j ACCEPT
#
Append final REJECT rules for immediate error responses
#
For TCP traffic, send a TCP reset; for UDP, send ICMP port unreachable.
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A OUTPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A OUTPUT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -p tcp -j REJECT --reject-with tcp-reset
iptables -A FORWARD -p udp -j REJECT --reject-with icmp-port-unreachable
echo
"
Firewall configuration complete
"
echo
"
Verifying firewall rules...
"
if
curl --connect-timeout 5 https://example.com
>
/dev/null
2>&1
;
then
echo
"
ERROR: Firewall verification failed - was able to reach https://example.com
"
exit
1
else
echo
"
Firewall verification passed - unable to reach https://example.com as expected
"
fi
#
Always verify OpenAI API access is working
if
!
curl --connect-timeout 5 https://api.openai.com
>
/dev/null
2>&1
;
then
echo
"
ERROR: Firewall verification failed - unable to reach https://api.openai.com
"
exit
1
else
echo
"
Firewall verification passed - able to reach https://api.openai.com as expected
"
fi
Back
|
FazBrowse Home
|
New Git URL