OpenBSD에서 pf로 악의적 인 IP 주소를 차단하는 방법은 무엇입니까?


13

우리는 nginx 로그에서 불쾌한 일을하는 IP 주소가 있음을 알 수 있습니다.

pf명령으로 어떻게 차단 한 다음 나중에 /etc/pf.log? x.x.x.x/24해당 IP의 a 를 어떻게 차단할 수 있습니까? 예입니다 : 1.2.3.4

업데이트 : 아니요, OpenBSD에 / etc에 허용 / 거부 파일이없는 것 같습니다. AFAIK는 혹독한 IP 주소를 차단하기위한 최선의 조언입니다.

# cd /etc 
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
# 

/ etc 디렉토리에 hosts.deny 파일이 있습니까?
료 카요

답변:


13

이를 수행하는 가장 좋은 방법은 테이블을 정의하고 호스트를 차단하는 규칙을 작성하는 것입니다 pf.conf.

table <badhosts> persist
block on fxp0 from <badhosts> to any

그런 다음 IP 주소를 동적으로 추가 / 삭제하십시오.

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4

다른 'table'명령에는 flush(모두 제거) replaceshow. 자세한 내용 man pfctl을 참조하십시오 .

보다 영구적 인 목록을 원하면 하나 이상의 파일로 보관할 수 있습니다. 에서 pf.conf:

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any

IP 주소 대신 호스트 이름을 추가 할 수도 있습니다. man pf.conf및 의 "테이블"섹션을 참조하십시오 man pfctl.

참고 : 위의 예는 인터넷 연결 인터페이스가이라고 가정하고 fxp0설정에 따라 변경하십시오. 또한 규칙 pf.conf은 순차적으로 평가 되고 마지막으로 적용되는 규칙과 일치 block하는지 pass규칙 으로 평가 됩니다. 이 규칙 집합으로

table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80

1.2.3.4 및 192.168.0.10을 badhosts테이블에 추가 한 후

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10

1.2.3.4 및 192.168.0.10의 모든 트래픽은 차단되지만 규칙과 일치하고 규칙을 무시 하기 때문에 두 번째 호스트 다른 시스템의 포트 80에 연결할 수 있습니다 .passblock


4
차단 규칙을보다 쉽게 ​​지정할 수 있습니다 block in from <badhosts>. 인터페이스 나 to any부품 을 지정할 필요가 없습니다 .
kurtm

4

다른 답변에서 차단하려는 나쁜 호스트의 실제 테이블을 만들어야한다는 것은 분명하지 않습니다.

이것은 pf.conf 파일에 들어갑니다. 예를 들어 2 개의 badguys 파일이 있습니다. 1 & 2 badguys1은왔다 갔다하는 사람들을위한 것이고 badguys2는 영구적 인 블랙리스트를위한 것입니다.

따라서 일정 기간 동안 성가신 사람의 IP를 추가 해야하는 경우 badguys1에 추가하십시오.

이제 pf.conf 파일에 이것이 있습니다. 내 예에서는 en1을 사용합니다. 왜냐하면 그것은 WiFi 인터페이스이기 때문입니다. 네트워크가 들어오는 인터페이스로 설정하십시오.

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on en1 from <badhosts> to any

이제 badguys1에 임시 주소를 추가 할 수 있습니다. (불량 호스트가 아니라 테이블의 이름입니다)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

1 개의 테이블이 생성되었다고 말하지만 실제로 새 테이블을 생성하지 않고 ip를 추가합니다. 이제 badguys1을 살펴보면 새로운 IP가 나타납니다.

sudo pfctl -t badhosts -T show

3

나는이 정보를 웹 사이트에서 얻었고에 대한 나의 나쁜 지식을 용서해 OpenBSD주지만 여기에 간다. 이 URL을 살펴보십시오 . 이에 따르면 IP를 차단한다고 명시되어 있습니다.

echo '123.123.123.123' >> /etc/pf.blocked.ip.conf

그런 다음 방화벽을 다시 시작하십시오.

pfctl -d
pfctl -e -f /etc/pf.conf

또는 방화벽 유형을 다시 시작하지 않고 추가하려면 다음을 수행하십시오.

pfctl -t blockedips -T add 111.222.333.444

추가되었는지 확인하려면 다음을 입력하십시오.

pfctl -t blockedips -T show

업데이트 : 아마도 도움이 될 것입니다.

  • vi에서 다음 파일을 엽니 다.

    vi /etc/pf.conf

  • 다음 코드 줄을 추가하십시오.

    table <blockedips> persist file "/etc/pf.blocked.ip.conf" ext_if="bge0" # interface connected to internet

  • 그 후 방화벽을 다시 시작하고 다음을 입력하여 IP가 차단되었는지 확인합니다.

    pfctl -d
    pfctl -e -f /etc/pf.conf
    pfctl -t blockedips -T show
    

1
나는 테이블의 요구가 블록으로 설정 될 생각하지만, 그 부분이 하우투에서 명확하지 않다, 나는 그것을 따라하지만, IP는 여전히 차단되지 않습니다
somelooser28533

그렇게하는 방법을 찾아 보도록하겠습니다.
ryekayo

2
pf.conf를 다시로드하기 위해 pf를 비활성화하고 다시 활성화 할 필요는 없습니다. pfctl -f /etc/pf.conf충분하다.
Zé Loff

1
(나쁜) HOWTO는 사고를 자제하고 복사를 장려합니다. 읽기는 man pf.conf, 당신은 좋은 오픈 BSD 맨 페이지가 얼마나 놀랄 것입니다. 또한 pf.conf파일을 전체적으로 읽어야하므로 (규칙을 정하는 순서가 중요합니다) 단일 행을 복사하여 붙여 넣는 것은 일반적으로 나쁜 생각입니다. 파일과 table규칙을 작성하십시오 (정확한 내용 임). 그러나 전체 pf.conf파일 을 공유하거나 파일에서 적절한 block규칙과 파일의 위치를 ​​결정해야합니다.
Zé Loff

1
@ryekayo ext_if="bge0"매크로 포함을 정당화하고 차단 규칙이없는 이유를 정당화 할 수 없다면 , 입력 한 노력에 관계없이 불완전한 (즉, 정답이 아닌) 답변 비판합니다. 또한 HOWTO에 대한 나의 의견은 OP가 아닌 OP에서 다루어졌습니다.
Zé Loff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.