로컬 네트워크 연결 만 허용하도록 일부 방화벽 포트를 설정 하시겠습니까?


18

LAN의 시스템에서 방화벽을 설정하여 일부 포트가 외부 영역이 아닌 로컬 영역 네트워크의 연결에만 개방되도록하려면 어떻게해야합니까?

예를 들어, Scientific Linux 6.1 (RHEL 기반 배포판)을 실행하는 상자가 있으며 SSH 서버가 localhost 또는 LAN의 연결 만 허용하기를 원합니다. 어떻게해야합니까?

답변:


24

커널의 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대신 명령을 사용할 수 있지만 일반적으로 시스템 부팅시 체인이 채워지는 방법을 찾아 해당 프로세스를 수정하여 새 규칙이 항상 설치되도록하는 것이 좋습니다. 올바른 순서.-Aiptables

RHEL 7 이상

최근 RHEL 유형 시스템에서이를 수행하는 가장 좋은 방법 firewall-cmd은 GUI 또는 이와 동등한 시스템을 사용 하는 것입니다. 이것은 OS의 firewalld데몬에게 원하는 것을 알려주며 , 이는 실제로 당신이 보는 것을 채우고 조작하는 것 iptables -L입니다.

RHEL 6 이하

구형 RHEL 유형 시스템에서 문제를 주문할 때 방화벽 체인을 수정하는 가장 쉬운 방법은 편집 /etc/sysconfig/iptables입니다. OS의 GUI 및 TUI 방화벽 도구는 다소 단순하므로 이와 같이 더 복잡한 규칙을 추가하기 시작하면 이전 구성 파일로 돌아가는 것이 좋습니다. 일단이 작업을 시작하면 OS의 방화벽 도구를 사용하여 구성을 수정하는 경우 변경 사항을 잃을 위험이 있으므로주의하십시오. 이러한 규칙은 이러한 규칙을 처리하는 방법을 모를 수 있기 때문입니다.

해당 파일에 다음과 같은 것을 추가하십시오.

-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체인 이름을 변경 한 부분을 볼 수 있습니다. 왜 그런지 말하지 못했습니다.)


4

Linux에서 방화벽 설정을위한 저수준 도구는 iptables 입니다. 사용 가능한 고급 도구도 있습니다. Scientific Linux에 권장되는 방화벽 도구가 있는지 모르겠습니다.

이 웹 페이지 에 따르면 (6.1에 적용되는지 확인하지 않음) service iptables save현재 방화벽 규칙을 저장하며 이러한 저장된 규칙은 부팅시로드됩니다. 따라서 iptables명령 (또는 다른 수단)을 통해 원하는 규칙을 설정 한 다음 service iptables save설정을 유지하기 위해 실행 해야합니다.

Scott Pack의 블로그 게시물 은 일반적으로 필요하지 않고 공격에 참여할 위험이 높은 "oddball"패킷을 삭제하기위한 시작입니다. 그 외에도 들어오는 포트를 모두 닫고 필요한 포트만 열어야합니다. 이 같은:

# 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

1
질, 당신은 질문을 조금 잘못 읽지 않았습니까? Scientific Linux 상자는 LAN상의 컴퓨터 중 하나이지만 방화벽은 아닙니다.
rozcietrzewiacz

@Gilles 예, 상자는 LAN에있는 컴퓨터 중 하나입니다.
hpy

@rozcietrzewiacz 방화벽이 서버와 동일한 컴퓨터에 있다는 것을 알고 있습니다. 나는 그 질문이 어느 정도 모호하다는 것에 동의하지만, penyuan은 하나의 시스템의 OS만을 언급했기 때문에 모든 것이 그 시스템에서 일어나고 있다고 가정합니다. 그렇지 않으면 이것은 유닉스 질문이 아니며, 이것은 지정되지 않은 네트워크 관리자 질문입니다.
Gilles 'SO- 악마 그만해'

1

선호하는 방법은입니다 iptables. 그것은 다른 사람들에 의해 적절하게 다루어 진 것처럼 보이므로 완전성을 위해 대부분의 Linux 배포판에서 많은 데몬이 사용할 수있는 대체 액세스 제어 방법을 지적 할 것입니다. 해당 액세스 제어 방법은 libwrap라이브러리에서 제공 합니다.

자주 사용하는 데몬이 libwrap지원 하는지 확인하려면 다음을 실행하십시오.

ldd `which sshd` | grep libwrap

비어 있지 않은 결과를 얻는 경우 (예 :

libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f84e7b0e000)

그럼 당신은 확실히 갈 것입니다.

sshd데몬이 libwrap지원 한다는 것은 거의 확실 하므로 액세스 제어를 위해 /etc/hosts.allow/etc/hosts.deny파일을 참조해야합니다 . 로컬 LAN 네트워크는 가정 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).


1

자신의 리눅스 기반 방화벽이 있다면 iptables다른 사람들이 여기에 설명하는 것처럼 설정하는 것이 가장 좋습니다 . 그렇지 않은 경우 방화벽이 라우터 인 경우 포트 포워딩을 명시 적으로 활성화하지 않는 한 (기본적 으로이 질문 에 대한 답변 에서 설명한대로) 기본 구성이 이미 외부에서 액세스하지 못하게 할 수 있습니다 .

그 이상의 보안을 위해 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. 그게 다야! 해당 서브넷의 통신을 라우팅하도록 게이트웨이를 구성하지 않으면 외부와 분리되어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.