Ipset script installation instructions - XIYO/asuswrt-merlin.ng-kr GitHub Wiki
์๋๋ ๋งํฌ๋ค์ด ๋ฌธ๋ฒ์ ์ ์งํ๋ฉด์ ๊ฐ๋ฐ ๋ฌธ์ ํ์์ผ๋ก ํ๊ธ๋ก ๋ฒ์ญํ ๋ด์ฉ์ ๋๋ค. ์ถ๋ ฅ์ ๋ณธ๋ฌธ๋ง ํฌํจ๋์ด ์์ต๋๋ค.
์ฐธ๊ณ : ์ด ํ์ด์ง์๋ ๋ค์ํ ์ ์ง ๊ด๋ฆฌ๋๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ด ํฌํจ๋์ด ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ํด๋น ์คํฌ๋ฆฝํธ์ ์ง์์ ๋ฐ๊ธฐ ์ํด ์ ์์ ํด๋น ์ค๋ ๋๋ก ์ด๋ํ์ญ์์ค.
์ฃผ์: ๋ฌด์ธ๊ฐ ์๋ชป๋์์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ JFFS ํํฐ์ ์ ๋ฐฑ์ ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ์ฌ๋ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋์์ ์คํ๋์ง ์๋๋ก ์ฃผ์ํ์ญ์์ค. ์คํฌ๋ฆฝํธ๋ฅผ ์๋ก ๋ค๋ฅธ ์๊ฐ์ ์คํํ๋ ค๋ฉด sleep ๋ช ๋ น์ ์ฌ์ฉํ๊ฑฐ๋ &&๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ๋ค์ด์ด ์คํํ์ญ์์ค.
๋ชฉ์ฐจ
- MatchIP ์ ํธ๋ฆฌํฐ - IPSet ๋ชฉ๋ก์์ IP ๊ฒ์
- Tor ๋ฐ ๊ตญ๊ฐ ์ฐจ๋จ
- iblocklist-loader# MatchIP ์ ํธ๋ฆฌํฐ - IPset ๋ชฉ๋ก์์ IP ๊ฒ์
์ด ํ์ด์ง์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ๋, ์ ๊ธฐ์ ์ผ๋ก ์ก์ธ์คํ๋ ์ฌ์ดํธ/IP ์ฃผ์๊ฐ ์ฐจ๋จ๋ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ์ฌ์ฉ ์ค์ธ ์คํฌ๋ฆฝํธ์ ์์ ๋ฐ๋ผ ์ด๋ค ipset ๋ชฉ๋ก์ด ์ฐจ๋จ์ ์ผ์ผํค๊ณ ์๋์ง ํ์ธํ๋ ๊ฒ์ ์๊ฐ์ด ์์๋ ์ ์์ต๋๋ค.
์๋ ๋จ๊ณ๋ ์ ๊ณต๋ IP์ ๋ํด ์คํฌ๋ฆฝํธ ์์ค์ ๊ด๊ณ์์ด ์ฌ์ฉ ์ค์ธ ๋ชจ๋ ipset ๋ชฉ๋ก์ ๊ฒ์ํ ์ ์๋ ๋ช ๋ น์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
์ผ๋ฐ์ ์ธ ์คํฌ๋ฆฝํธ ์ค์น ์ง์นจ์ ๋ฐ๋ฅด์ธ์:
-
JFFS๋ฅผ ๋จผ์ WEB UI๋ฅผ ํตํด ํ์ฑํ ๋ฐ ํฌ๋งทํ ํ์ธ์ (์ด๋ฏธ ํ์ฑํ๋์ด ์์ง ์์ ๊ฒฝ์ฐ)
-
์ข์ํ๋ ํ ์คํธ ํธ์ง๊ธฐ (์: nano)๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ /jffs/configs/profile.add์ ์ถ๊ฐํ์ธ์.
-
๋ผ์ฐํฐ๊ฐ ์ง์ํ๋ ipset ๋ฒ์ ์ ํด๋นํ๋ ๊ธฐ๋ฅ๋ง ์ถ๊ฐํ์ธ์.
-
ipset v4์ ๊ฒฝ์ฐ:
MatchIP() { # IP๋ฅผ ipset ๋ชฉ๋ก๊ณผ ๋น๊ต
if [ -z "$1" ]; then
echo "ipset ๋ชฉ๋ก์ ํตํด ํ์ธํ IP๋ฅผ ์ง์ ํ์ธ์. ์ข
๋ฃ๋ฉ๋๋ค."
else
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # ์์ ์์
for TestList in $( (iptables -L -t raw && iptables -L) | grep " set" | tr -s ' ' | cut -d' ' -f7 | tr '\n' ' '); do
ipset -q --test $TestList $1 && echo -e "$1๊ฐ ${GREEN}${TestList}${NC}์์ ๋ฐ๊ฒฌ๋จ" || echo -e "$1๊ฐ ${RED}${TestList}${NC}์์ ๋ฐ๊ฒฌ๋์ง ์์"
done
fi
}
- ipset v6์ ๊ฒฝ์ฐ:
MatchIP() { # IP๋ฅผ ipset ๋ชฉ๋ก๊ณผ ๋น๊ต
if [ -z "$1" ]; then
echo "ipset ๋ชฉ๋ก์ ํตํด ํ์ธํ IP๋ฅผ ์ง์ ํ์ธ์. ์ข
๋ฃ๋ฉ๋๋ค."
else
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # ์์ ์์
for TestList in $( (iptables -L -t raw && iptables -L) | grep "match-set" | tr -s ' ' | cut -d' ' -f7 | tr '\n' ' '); do
ipset -q test $TestList $1 && echo -e "$1๊ฐ ${GREEN}${TestList}${NC}์์ ๋ฐ๊ฒฌ๋จ" || echo -e "$1๊ฐ ${RED}${TestList}${NC}์์ ๋ฐ๊ฒฌ๋์ง ์์"
done
fi
}
-
ํ๋กํ ๋ณ๊ฒฝ์ ์ ์ฉํ๋ ค๋ฉด SSH ์ธ์ ์ ๋ค์ ์์ํ์ธ์.
-
๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ น์ ์ฌ์ฉํ์ธ์.
MatchIP 8.8.8.8
```# ์ํ ์ถ๋ ฅ
8.8.8.8๊ฐ YAMalwareBlock1IP์์ ์ฐพ์ง ๋ชปํจ
8.8.8.8๊ฐ YAMalwareBlock2IP์์ ์ฐพ์ง ๋ชปํจ
8.8.8.8๊ฐ YAMalwareBlockCIDR์์ ์ฐพ์ง ๋ชปํจ
8.8.8.8๊ฐ WhitelistDomains์์ ์ฐพ์ง ๋ชปํจ
8.8.8.8๊ฐ BlacklistDomains์์ ์ฐพ์ง ๋ชปํจ
8.8.8.8๊ฐ I-BlocklistTheOnionRouterCIDR์์ ์ฐพ์ง ๋ชปํจ
8.8.8.8๊ฐ I-BlocklistTheOnionRouterSingle์์ ์ฐพ์ง ๋ชปํจ
8.8.8.8๊ฐ BluetackDshieldCIDR์์ ์ฐพ์ง ๋ชปํจ
8.8.8.8๊ฐ BluetackDshieldSingle์์ ์ฐพ์ง ๋ชปํจ
8.8.8.8๊ฐ BluetackSpiderCIDR์์ ์ฐพ์ง ๋ชปํจ
8.8.8.8๊ฐ BluetackSpiderSingle์์ ์ฐพ์ง ๋ชปํจ
# Tor ๋ฐ ๊ตญ๊ฐ ์ฐจ๋จ
์ด ์์ ์์๋ [Tor](https://www.torproject.org/) ๋
ธ๋ (iphash ์ธํธ ์ ํ - IP ์ฃผ์ ์)์์์ ๋ค์ด์ค๋ ์ฐ๊ฒฐ ์ฐจ๋จ ๋ฐ ์ ์ฒด ๊ตญ๊ฐ์์์ ๋ค์ด์ค๋ ์ฐ๊ฒฐ ์ฐจ๋จ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
* [JFFS](https://github.com/RMerl/asuswrt-merlin.ng/wiki/JFFS)๋ฅผ ๋จผ์ WEB UI๋ฅผ ํตํด ํ์ฑํ ๋ฐ ํฌ๋งทํ
ํ์ธ์ (์ด๋ฏธ ํ์ฑํ๋์ด ์์ง ์์ ๊ฒฝ์ฐ)
* ๊ทธ๋ฐ ๋ค์ [**์ด ๋ด์ฉ**](https://raw.githubusercontent.com/shounak-de/misc-scripts/master/create-ipset-lists.sh)์ `/jffs/scripts/create-ipset-lists.sh`์ ๋ฐฐ์นํ์ธ์.
* ๊ทธ๋ฐ ๋ค์ ์คํ ๊ฐ๋ฅํ๊ฒ ๋ง๋์ธ์:
chmod +x /jffs/scripts/create-ipset-lists.sh
* ๋ง์ง๋ง์ผ๋ก ๊ธฐ์กด์ /jffs/scripts/services-start *๋๋* /jffs/scripts/post-mount์ ๋์์ ๋ค์์ ํธ์ถํ์ธ์:# ipset ํํฐ ๊ท์น ๋ก๋
sh /jffs/scripts/create-ipset-lists.sh
๋ํ /jffs/scripts/create-ipset-lists.sh
๋ฅผ ๋ช
๋ น ๋ผ์ธ์์ ์คํํ๊ฑฐ๋ ๋ผ์ฐํฐ๋ฅผ ๋ค์ ๋ถํ
ํ์ฌ ์๋ก์ด ์ฐจ๋จ ๊ท์น์ ์ฆ์ ์ ์ฉํ ์ ์์ต๋๋ค. ์คํฌ๋ฆฝํธ ๊ตญ๊ฐ ๋ชฉ๋ก์ด๋ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ณ๊ฒฝํ๋ฉด ๋ผ์ฐํฐ๋ฅผ ๋ค์ ๋ถํ
ํด์ผ ํฉ๋๋ค. ์ด๋ฏธ ์งํฉ์ด ์๋ ๊ฒฝ์ฐ์๋ ์งํฉ์ ๋ค์๋ก๋ํ์ง ์๋๋ก ํ์ธํ๋ ๊ฒ์ฌ๊ฐ ์์ต๋๋ค.
ํ๋กํ์์ ํธ๋ฆฌํ ๋ณ์นญ์ ๋ง๋ค ์๋ ์์ต๋๋ค (์: /opt/etc/profile ๋๋ /jffs/configs/profile.add ๋ด์์).
ipset v4๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
alias blockstats='iptables -vL | sed "2q;d"; (iptables -vL -t raw; iptables -vL) | grep -e " set"'
ipset v6๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
alias blockstats='iptables -vL | sed "2q;d"; (iptables -vL -t raw; iptables -vL) | grep "match-set"; ip6tables -vL | grep "match-set"'
๊ทธ๋ฐ ๋ค์ ๋ช ๋ น ํ๋กฌํํธ์์ 'blockstats'๋ฅผ ์ ๋ ฅํ์ฌ ๋ธ๋ก ๋ชฉ๋ก์ ์ฑ๋ฅ์ ํ์ธํ ์ ์์ต๋๋ค (์ฐจ๋จ๋ ๋ฐ์ดํฐ ํจํท ์ ๋ฐ ๋ฐ์ดํธ ์ ํ์ธ).
์น UI ๋๋ ๋ผ์ฐํฐ๋ฅผ ์ ์ดํ๋ ๋ฐ ์ํฅ์ ์ฃผ๋ ๋ชจ๋ ์์
(๋ผ์ฐํฐ์ ๋ฐฉํ๋ฒฝ ๊ท์น์ ๋ค์๋ก๋ํ๋)์ ์ํํ ๋๋ง๋ค /jffs/scripts/firewall-start
๊ฐ ํธ์ถ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐ๊นฅ์ชฝ์์ ์ ์๋ iptables ๊ท์น์ด ์ง์์ง๋๋ค. ์ด ์คํฌ๋ฆฝํธ์์ ์ ์ํ ๋๋ก ๊ท์น์ ๋ค์ ์ ์ฉํ๋ ค๋ฉด ์คํฌ๋ฆฝํธ์ ๋ค์์ ์ถ๊ฐํด์ผ ํฉ๋๋ค (์: /jffs/scripts/firewall-reinstate.sh
):
#!/bin/sh# ์ด๋ฏธ ์์ฑ๋ ๊ฒฝ์ฐ ipset ๊ท์น์ ๋ค์ ์ ์ฉํฉ๋๋ค.
[ "$(uname -m)" = "mips" ] && MATCH_SET='--set' || MATCH_SET='--match-set'
for ipSet in $(ipset -L | sed -n '/^Name:/s/^.* //p'); do
case $ipSet in
AcceptList) iptables-save | grep -q "$ipSet" || iptables -I INPUT -m set $MATCH_SET $ipSet src -j ACCEPT;;
WhitelistDomains) iptables-save | grep -q "$ipSet" || iptables -t raw -I PREROUTING -m set $MATCH_SET $ipSet src,dst -j ACCEPT;;
TorNodes|BlockedCountries|CustomBlock) iptables-save | grep -q "$ipSet" || iptables -I INPUT -m set $MATCH_SET $ipSet src -j DROP;;
MicrosoftSpyServers) iptables-save | grep -q "$ipSet" || iptables -I FORWARD -m set $MATCH_SET $ipSet dst -j DROP;;
YAMalwareBlock*) iptables-save | grep -q "$ipSet" || iptables -t raw -I PREROUTING -m set $MATCH_SET $ipSet src -j DROP;;
*) iptables-save | grep -q "$ipSet" || iptables -t raw -I PREROUTING -m set $MATCH_SET $ipSet src,dst -j DROP;;
esac
done
๊ทธ๋ฐ ๋ค์ ๊ธฐ์กด์ /jffs/scripts/firewall-start
์์ ๋ค์์ ํธ์ถํ์ธ์:
sh /jffs/scripts/firewall-reinstate.sh
์ด ์คํฌ๋ฆฝํธ์ ๋ํ ์ง์์ SnBForums์ ์ด ํฌ๋ผ ์ค๋ ๋์์ ๋ฐ์ ์ ์์ต๋๋ค.# iblocklist-loader
์ค๋ช : ์ด๊ฒ์ ๋ค๋ชฉ์ ์ฐจ๋จ ์คํฌ๋ฆฝํธ๋ก, ์ด์ Peerguardian ์คํฌ๋ฆฝํธ์ ๋์ฒด๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๋ํ ์ด ์คํฌ๋ฆฝํธ๋ ํด์ปค, ์คํ์ด๋, ๋ณด๊ณค IP, ๋ค์ํ ๊ธฐ๊ด ๋ฐ ISP ๋ฑ์ ์ฐจ๋จํ๋ ๋ฐ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ๋ํ Tor ๋ฐ ํ๋ก์๋ ์ฐจ๋จํฉ๋๋ค. ๋ฌด์์ ์ฐจ๋จํ ์ ์๋์ง์ ๋ํ ์ ์ฒด ๋ชฉ๋ก์ iblocklist ์ฌ์ดํธ์์ ํ์ธํ ์ ์์ต๋๋ค. ํด๋น ์ฌ์ดํธ์์ ๋ฌด๋ฃ ๋ชฉ๋ก ๋ฐ ์ค๋ช ์ ๋ณผ ์ ์์ต๋๋ค (๋ชฉ๋ก ์ด๋ฆ์ ํด๋ฆญ).
์ด ์คํฌ๋ฆฝํธ๋ iblocklist ์ฌ์ดํธ์์ ์์ถ๋ IP ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ , ipset 6.x์ฉ์ผ๋ก ๋จ์ผ IP ์ธํธ ๋ฐ CIDR ์ธํธ๋ฅผ ์์ฑํ๋ฉฐ ipset 4.x์ฉ์ผ๋ก iptreemap์ ์ฌ์ฉํฉ๋๋ค. ๋ํ ํ์ฉ ๋๋ ์ฐจ๋จํ๋ ค๋ ๋๋ฉ์ธ์ ๋ช ์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ WhitelistDomains ๋ฐ BlacklistDomains ๊ธฐ๋ฅ์ ๋ชจ๋ ๊ฐ์ถ๊ณ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์คํฌ๋ฆฝํธ ์ค์น ์ง์นจ์ ๋ฐ๋ฅด์ธ์:
-
JFFS๋ฅผ ๋จผ์ WEB UI๋ฅผ ํตํด ํ์ฑํ ๋ฐ ํฌ๋งทํ ํ์ธ์ (์ด๋ฏธ ํ์ฑํ๋์ด ์์ง ์์ ๊ฒฝ์ฐ)
-
๊ทธ๋ฐ ๋ค์ ์ด ๋ด์ฉ์
/jffs/scripts/iblocklist-loader.sh
์ ๋ฐฐ์นํ์ธ์.
์ฐจ๋จํ ์์ค๋ฅผ ๊ฒฐ์ ํ ํ, ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: ์คํฌ๋ฆฝํธ์์ ์๋จ ์น์
์ ์๋ ๋ชฉ๋ก์ ์๋ณํ๊ณ List
๋ค์์ ์ซ์ (๋จ์ด List
๋ค์ ์ค๋ ์ซ์)๋ฅผ ์ฐธ๊ณ ํ์ธ์. ๊ทธ๋ฐ ๋ค์ ์ ํํ ์ธ๋ฑ์ค๋ฅผ BLOCKLIST_INDEXES=
๋ผ์ธ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ๊ทธ๋ฐ ๋ค์ ์คํ ๊ฐ๋ฅํ๊ฒ ๋ง๋์ธ์:
chmod +x /jffs/scripts/iblocklist-loader.sh
- ๋ง์ง๋ง์ผ๋ก ๊ธฐ์กด์ /jffs/scripts/services-start ๋๋ /jffs/scripts/post-mount์ ๋์์ ๋ค์์ ํธ์ถํ์ธ์:# ipset ํํฐ ๊ท์น ๋ก๋ sh /jffs/scripts/iblocklist-loader.sh
์คํฌ๋ฆฝํธ ๋ด์์ ์์ฒด ๋ฌธ์ํ๋ ๋ค๋ฅธ ์ค์ ์ด ์์ผ๋ฉฐ, ์ด ์ค์ ์ ์๋ช
ํ ๊ฒ์ด์ด์ผ ํฉ๋๋ค. ์ง๋ฌธ์ด๋ ์ถ๊ฐ ์ ๋ณด๊ฐ ํ์ํ ๊ฒฝ์ฐ [SNBForums](https://www.snbforums.com/threads/iblocklist-com-generic-ipset-loader-for-ipset-v6-and-v4.37976/)์ [ํฌ๋ผ ์ค๋ ๋](https://www.snbforums.com/threads/iblocklist-com-generic-ipset-loader-for-ipset-v6-and-v4.37976/)์์ ์ง๋ฌธํด์ฃผ์ธ์.