특정 포트가 외부 연결이 아닌 LAN 연결에만 열리도록 LAN 시스템에 방화벽을 설정하려면 어떻게 해야 합니까?
예를 들어, 실행 중인 상자가 있습니다.사이언티픽 리눅스 6.1(RHEL 기반 배포) SSH 서버가 localhost 또는 LAN의 연결만 허용하도록 하고 싶습니다. 어떻게 해야 하나요?
답변1
커널로iptables완전히 비어 있으면( iptables -F
) 요구 사항을 충족합니다.
# iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
이는 모든 LAN 주소가 TCP 포트 22와 통신할 수 있고, localhost가 동일한 고려 사항(예, 127.0.0.1뿐만 아니라 127.*)을 가지며 처음 두 규칙과 일치하지 않는 다른 모든 주소의 데이터가 가방이 됨을 의미합니다. 무의식적으로 여기에 버려졌어비트 버킷. TCP 포트 22를 패킷의 블랙홀로 만드는 대신 능동 거부(TCP RST)를 원하는 경우 REJECT
이를 대신 사용할 수 있습니다.DROP
LAN이 192.168.0.* 블록을 사용하지 않는 경우 LAN의 IP 체계와 일치하도록 첫 번째 줄의 IP와 마스크를 자연스럽게 변경해야 합니다.
방화벽에 일부 규칙이 구성되어 있으면 이러한 명령이 원하는 대로 작동하지 않을 수 있습니다. ( iptables -L
루트로 찾기.) 기존 규칙 중 하나가 필터링하려는 패킷을 잡아서 새 규칙을 추가해도 아무런 효과가 없는 경우가 자주 발생합니다. 명령을 사용하여 새 규칙을 추가하는 -I
대신 체인 중간에 연결할 수 있지만 일반적으로 시스템 시작 시 체인이 어떻게 채워지는지 알아내고 새 규칙이 항상 올바른 순서로 설치되도록 해당 프로세스를 수정하는 것이 가장 좋습니다. .-A
iptables
RHEL 7+
최신 RHEL 유형 시스템에서 가장 좋은 접근 방식은 다음을 사용하는 것입니다.firewall-cmd
또는 그에 상응하는 GUI. 이는 운영 체제의 firewalld
데몬에게 사용자가 원하는 것을 알려주며, 실제로 사용자가 보는 내용을 채우고 조작합니다 iptables -L
.
RHEL 6 이하
이전 RHEL 유형 시스템에서 주문하는 동안 방화벽 체인을 수정하는 가장 쉬운 방법은 /etc/sysconfig/iptables
. 오래된 구성 파일. 일단 이 작업을 시작하면 운영 체제의 방화벽 도구를 사용하여 구성을 수정하는 경우 이러한 수동 규칙을 처리하는 방법을 모르기 때문에 변경 사항이 손실될 위험이 있습니다.
파일에 다음과 같은 내용을 추가합니다.
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -j DROP
어디에 추가해야 할지가 까다롭습니다. 해당 파일에서 해당 내용을 설명하는 줄을 찾으면 --dport 22
위의 세 줄로 바꾸세요. 그렇지 않으면 아마도 로 끝나는 첫 번째 기존 줄 앞에 와야 할 것입니다 -j ACCEPT
. 일반적으로 방법을 잘 알고 있어야 합니다.iptables유효하면 올바른 삽입 지점이 분명해집니다.
파일을 저장하고 service iptables restart
방화벽 규칙을 다시 로드합니다. 실수로 이 작업을 수행하는 것을 방지하려면 콘솔에 로그인한 상태에서 이 작업을 수행하십시오! SSH를 통해 로그인할 때 컴퓨터가 잠기는 것을 원하지 않을 것입니다.
위 순서와의 유사성은 우연이 아닙니다. 파일의 대부분은 iptables
명령에 대한 인수로 구성됩니다. 위와 다른 점은 iptables
명령이 제거되고 INPUT
체인 이름이 특수 RHEL 특정 RH-Firewall-1-INPUT
체인이 된다는 점입니다. (파일을 더 자세히 조사하고 싶다면 기본적으로 INPUT
체인 이름이 변경된 파일의 앞부분을 볼 수 있습니다. 왜? 말할 수 없습니다.)
답변2
Linux에서 방화벽 설정을 위한 기본 도구는 다음과 같습니다.iptables. 더 높은 수준의 도구도 사용할 수 있습니다. Scientific Linux에 권장되는 방화벽 도구가 있는지 모르겠습니다.
~에 따르면이 페이지(6.1에서 작동하는지 확인하지 않았습니다.) service iptables save
현재 방화벽 규칙이 저장되고 저장된 규칙은 시작 시 로드됩니다. 따라서 iptables
명령(또는 다른 방법)을 통해 원하는 규칙을 설정한 다음 실행하여 service iptables save
설정을 유지해야 합니다.
Scott Parker의 블로그 게시물일반적으로 원하지 않고 공격의 일부가 될 가능성이 높은 "이상한" 패킷을 삭제하는 시작입니다. 그 외에도 들어오는 포트를 모두 닫고 필요한 포트만 열어야 합니다. 이 같은:
# Accept everything on the loopback interface
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
# Drop oddball packets
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -f -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Accept packets that are part of established connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Accept selected incoming connections, e.g. ssh from 10.0.42.x
iptables -A INPUT -p tcp --dport 22 -s 10.0.42.0/24 -j ACCEPT
# Reject incoming connections that aren't explicitly accepted
iptables -A INPUT -j REJECT
답변3
선호되는 방법은 iptables
. 이 액세스 제어 방법은 라이브러리에서 제공됩니다 libwrap
.
즐겨 사용하는 데몬이 지원되는지 확인하려면 libwrap
다음 명령을 실행해 보세요.
ldd `which sshd` | grep libwrap
비어 있지 않은 결과를 얻는 경우, 예를 들어
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f84e7b0e000)
그럼 가셔도 됩니다.
귀하의 sshd
데몬은 거의 확실하게 지원되므로 액세스 제어를 위해 문의 하고 파일을 제출 libwrap
해야 합니다 . 로컬 LAN 네트워크가 다음과 같다고 가정하면 다음을 수행할 수 있습니다./etc/hosts.allow
/etc/hosts.deny
192.168.100.0/24
부정적인sshd
모든 클라이언트에 액세스와는 별개로이는 다음을 파일에 넣어 로컬 호스트 또는 로컬 LAN에서 설정할 수 있습니다 /etc/hosts.deny
.
sshd: ALL EXCEPT 127.0.0.0/255.0.0.0, [::1]/128, 192.168.100.0/255.255.255.0
이 방법을 주목하세요확실히실제로 포트 자체를 열거나 닫습니다. 이는 단순히 이 액세스 제어 방법을 사용하는 데몬에게 주어진 패턴과 일치하는 클라이언트의 연결 시도를 수락할지 거부할지 알려줍니다.
자세한 내용은 를 확인하세요 hosts_access(5)
.
답변4
iptables
자신만의 Linux 기반 방화벽이 있는 경우 여기에 설명된 대로 설정하는 것이 가장 좋습니다 . 그렇지 않고 방화벽이 라우터인 경우 포트 전달을 명시적으로 활성화하지 않는 한 기본 구성이 이미 외부 액세스를 차단할 가능성이 높습니다(최근 답변에서 언급한 대로).이 질문에 대하여).
보안을 강화하기 위해 LAN 내 연결에 별도의 서브넷을 사용할 수 있습니다. 이렇게 하려면 라우터가 아닌 LAN 내에서만 사용되는 각 컴퓨터에 두 번째 IP 주소를 추가하세요. 이제 전체 LAN이 192.168.0.xxx
주소를 사용하고 있고 라우터(게이트웨이, 방화벽)가 192.168.0.1
. 따라서 각 컴퓨터에 두 번째 주소를 추가하세요. 예를 들면 다음과 같습니다.
ifconfig eth0:0 192.168.5.1/24
그런 다음 sshd
이 주소만 사용하도록 구성을 편집합니다(연결을 허용하지 않도록 192.168.0.xxx
). 새 서브넷 중 하나를 편집 /etc/ssh/sshd_config
하고 수정합니다 ( 위 예에서). 그게 다야! 이 서브넷에 대한 트래픽을 라우팅하도록 게이트웨이를 구성하지 않는 경우 외부와 격리되어야 합니다.ListenAddress
192.168.5.1