SSH 포트가 특정 IP 주소에만 열려 있는지 확인하는 방법은 무엇입니까?

SSH 포트가 특정 IP 주소에만 열려 있는지 확인하는 방법은 무엇입니까?

이 내 꺼야 /etc/sysconfig/iptables:

Apache에는 80개, SSH에는 22개의 포트가 열려 있습니다.

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

포트 22(SSH)의 경우 특정 IP 주소 외에는 누구도 해당 포트에 연결할 수 없도록 하고 싶습니다.

예시 IP:

1.2.3.4

내 IP가 변경되어 더 이상 내 서버에 SSH를 사용할 수 없는 경우에 대한 감독/우려를 무시하십시오.

답변1

질문이 맞다면 포트 22의 특정 IP 주소에서만 서버에 액세스할 수 있도록 하려면 다음과 같이 Iptables를 업데이트할 수 있습니다.

iptables -A INPUT -p tcp -s YourIP --dport 22 -j ACCEPT

이 경우 내부 네트워크에 대한 DNS를 열어야 하는 경우 SSH 포트를 YourIP로 열면 됩니다.

iptables -A INPUT -p udp -s YourIP --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -s YourIP --dport 53 -j ACCEPT

해당 IP를 추가하고 열면 나머지 IP에 대해서는 문을 닫아야 합니다.

iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 --dport 53 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 53 -j DROP

iptables -A INPUT(규칙 세트의 올바른 위치에 규칙을 설정했는지 확인하세요. 규칙은 현재 규칙의 끝에 추가됩니다 .)INPUT

또는조엘규칙을 추가할 수 있다고 가정해 보겠습니다.

iptables -A INPUT -p tcp ! -s <permittedIP> -j DROP

또는 방화벽에 기본 정책을 설정할 수 있습니다.

iptables -P INPUT DROP

요컨대,SO에 대한 이 질문:

iptables -A INPUT -p tcp --dport 22 -s YourIP -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

답변2

다른 답변에서는 이것을 예제에서 사용하는데 iptables -I, 이는 일반적으로 사용해야 하는 것이 아닙니다.

iptables는 첫 번째 일치 규칙을 실행하므로 규칙의 순서가 매우 중요합니다. -I"삽입" 명령이며 목록에서 특정 규칙의 위치를 ​​지정하려면 index 매개변수와 함께 사용해야 합니다. -A목록 끝에 규칙을 추가하는 "추가" 명령입니다.

일부 배포판(아마도 모두)에서는 -Iindex 매개변수를 사용하지 않으면 규칙이 인덱스에 추가되어 첫 번째로 확인되는 규칙이 됩니다. 이 경우 실행한 마지막 명령이 iptables이면 iptables -I INPUT -s tcp 0.0.0.0/0 -j DROP체인 뒤에 규칙이 있는지 여부에 관계없이 모든 트래픽을 삭제합니다.ACCEPT

다음은 단일 IP에서만 SSH를 허용하는 규칙을 설정하는 예입니다.

규칙 없이 시작:

#> iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

새로운 "1.2.3.4에서 SSH 허용" 규칙을 추가합니다.

#>iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT

다른 모든 IP에서 SSH를 차단합니다.

#>iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

이제 INPUT 체인은 다음과 같습니다:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  1.2.3.4              0.0.0.0/0            tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

나중에 두 번째 IP를 화이트리스트에 추가해야 하는 경우 이 -I매개변수를 사용하여 블랙리스트 규칙 앞에 배치할 수 있습니다.

#>iptables -I INPUT 2 -p tcp -s 4.3.2.1 --dport 22 -j ACCEPT

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  1.2.3.4              0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  4.3.2.1              0.0.0.0/0            tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Rule 2에는 새로운 규칙 이 -I INPUT 2추가되었고, Rule 3에는 DROP 규칙이 추가되었습니다.

답변3

SSH 키를 사용하는 것을 권장하지만 설명을 드리겠습니다.

달성하려는 것을 달성하기 위해 IPtables를 사용할 필요는 없으며 여러 가지 방법이 있습니다. 이것은 IPtables 방식입니다.

iptables -I INPUT -s [YOUR_HOME_IP] -p tcp -m tcp --dport [SSH_PORT] -j ACCEPT

[YOUR_HOME_IP]= 귀하의 집 IP (매우 간단함)

[SSH_PORT]= SSH를 실행 중인 포트(기본값은 22)

iptables -I INPUT -p tcp -m tcp --dport [SSH_PORT] -j REJECT

이렇게 하면 귀하의 IP 외에는 누구도 SSH에 로그인할 수 없습니다.

에 또 다른 방법이 있습니다 sshd_config.

다음을 추가하세요.

AllowUsers root@[YOUR_HOME_IP]
PermitRootLogin without-password

root이를 통해 비밀번호를 묻지 않고도 IP에서 사용자로 SSH에 접속할 수 있습니다 .

cronjob은 다음과 같습니다.

iptables -X
iptables -F

SSH에 의해 서버가 잠기지 않도록 똑똑할 수도 있습니다(cronjob은 IPtables를 재설정하여 다시 액세스할 수 있도록 합니다). 여전히 액세스 권한이 있는 경우 cronjob을 삭제하고 IPtables를 재설정할 수 있습니다.

답변4

나는 그것을 사용하고 있다우프보(간단한 방화벽) 이러한 이유로 내 설정에 기여하고 싶었습니다. Ufw는 내부적으로 iptables를 사용하지만 이와 같은 간단한 작업을 위한 더 간단한 인터페이스를 가지고 있습니다.

다음을 발행하면 됩니다.

sudo ufw allow from <your-ipv4-here> to any port 22
sudo ufw allow from <your-ipv6-here> to any port 22

그게 다야.

물론 기본적으로 다른 들어오는 트래픽을 거부하고 나가는 트래픽을 허용하도록 설정할 수도 있습니다.

sudo ufw default deny incoming
sudo ufw default allow outgoing

이것이 누군가에게 도움이 되기를 바랍니다.

관련 정보