1. EPEL 저장소 및 패키지 설치
sudo dnf install epel-release -y
sudo dnf install knock knock-server -y # knock 클라이언트 + 서버
2. 서비스 파일 생성/활성화(Rocky 9.6 기준 knockd.service가 활성화가 안되는 상황이 있어 수동 제작.)
sudo tee /etc/systemd/system/knockd.service << 'EOF'
============================================
[Unit]
Description=Port-Knocking Daemon
After=network.target
[Service]
ExecStart=/usr/sbin/knockd -d -c /etc/knockd.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
============================================
3.서비스 리로드
sudo systemctl daemon-reload
sudo systemctl enable --now knockd
sudo systemctl status knockd
4. knockd 설정
sudo vi /etc/knockd.conf
============================================
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 7000,8000,9000 # 순서대로 열리도록
seq_timeout = 10
# sleep 300이 300초 만 열어둔다는 의미.
command = /bin/bash -c '/usr/sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT; sleep 300; /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT'
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000 # 순서대로 닫히도록
seq_timeout = 10
command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
============================================
5. 방화벽 설정
sudo dnf install iptables iptables-services -y
sudo systemctl enable --now iptables
# ssh 기본 접근을 막고, knockd로 열리도록 설정
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
sudo service iptables save
완료 됬으니 이번엔 테스트.
다른 PC(클라이언트에서 테스트)
sudo dnf install knock -y
안된다면 아래 두줄로.
sudo dnf install epel-release -y
sudo dnf install knock -y
knock <해당 포트노킹을 위해 열어둔 서버IP> 7000 8000 9000
ssh user@<해당 포트노킹을 위해 열어둔 서버IP>
knock 10.20.30.207 7000 8000 9000
ssh torang@10.20.30.207
보안
댓글