본문 바로가기
운영체제 (LNX,WIN)

FreeBSD - IPFW 방화벽

by 날으는물고기 2010. 1. 20.

FreeBSD - IPFW 방화벽

FreeBSD 에서 ipfw 를 이용하여 방화벽이 사용가능 하다.

커널 설정 파일에 옵션을 주고 컴파일 해야 사용가능 하다.
아래 처럼 간단히 커널 컴파일을 하기 위해 기본설정 파일인 GENERIC 을 복사하여 옵션을 추가해주자.
[root@yongbok ~]# mkdir Kernel ; cd Kernel
[root@yongbok ~]# cp /usr/src/sys/i386/conf/GENERIC ~/Kernel/Yongbok
[root@yongbok ~]# vi ~/Kernel/Yongbok
ident       Yongbok
options    IPFIREWALL
options    IPFIREWALL_VERBOSE
options    IPFIREWALL_VERBOSE_LIMIT=5
options    IPFIREWALL_DEFAULT_TO_ACCEPT
options    IPDIVERT

커널 설정 파일을 심볼링크로 걸고 컴파일을 시작한다.
[root@yongbok ~]# cd /usr/src
[root@yongbok ~]# ln -s ~/Kernel/Yongbok /usr/src/sys/i386/conf/Yongbok
[root@yongbok ~]# make buildkernel KERNEL=Yongbok ; make installkernel KERNEL=Yongbok

셀러론 CPU 2.0 에서 대략 2~3시간 정도 걸린듯하다.
/etc/sysctl.conf 파일에 아래와 같이 추가 해준다.
[root@yongbok ~]# echo 'net.inet.ip.fw.verbose=1' >> /etc/sysctl.conf
[root@yongbok ~]# echo 'net.inet.ip.fw.verbose_limit=5' >> /etc/sysctl.conf

ipfw 활성화, 로깅, 방화벽 설정파일을 지정해준다.
[root@yongbok ~]# echo 'firewall_enable="YES"' >> /etc/rc.conf
[root@yongbok ~]# echo 'firewall_logging="YES"' >> /etc/rc.conf
[root@yongbok ~]# echo 'firewall_type="/etc/firewall.conf"' >> /etc/rc.conf

방화벽 룰을 저장할 /etc/firewall.conf 를 생성하고 그 안에 원하는 해당 룰을 첨가한다.
[root@yongbok ~]# vi /etc/firewall.conf
### IP 차단 ###
# 192.168.100.0/24 대역에서 오는 TCP, UDP 패킷들을 차단
add 10 deny tcp from 192.168.100.0/24 to any
add 10 deny udp from 192.168.100.0/24 to any
#
### Port 허용 ###
# 서비스 포트 허용
# (FTP, SSH, Mail, DNS, HTTP)
add 20 allow tcp from any to any 21 in
add 20 allow tcp from any to any 21 out
add 20 allow tcp from any to any 22 in
add 20 allow tcp from any to any 22 out
add 20 allow tcp from any to any 25 in
add 20 allow tcp from any to any 25 out
add 20 allow udp from any to any 53 in
add 20 allow udp from any to any 53 out
add 20 allow tcp from any to any 80 in
add 20 allow tcp from any to any 80 out
#
### Port 차단 ###
# 외부 포트 6667 에서 들어오고 나가는 모든 TCP 패킷 차단
add 30 deny tcp from any to any src-port 6667 in
add 30 deny tcp from any to any src-port 6667 out
# 내부 포트 6667 에서 들어오고 나가는 모든 TCP 패킷 차단
add 30 deny tcp from any to any dst-port 6667 in
add 30 deny tcp from any to any dst-port 6667 out
#
### ICMP 차단 ###
# ICMP 를 차단하고 로깅을 활성화
add 40 deny icmp from any to any via fxp0
add 40 deny log icmp from any to any via fxp0
#
### 모든 접속 차단 ###
# 외부에서 오는 모든 접속을 차단하며
# 룰셋순위가 아래에 있어야 한다.
add 65534 deny ip from any to any

이후 적용을 위해 리부팅을 한다.
[root@yongbok ~]# reboot

커널 컴파일이 정상적으로 되었는지 확인해보자. 흐믓하다. >_<
[root@yongbok ~]# uname -v
FreeBSD 7.2-RELEASE #1: Sat Aug 22 09:09:08 KST 2009     root@yongbok.net:/usr/obj/usr/src/sys/Yongbok

룰셋이 정상적으로 적용 됬는지 ipfw 목록을 확인한다.
[root@yongbok ~]# ipfw list
00010 deny tcp from 192.168.100.0/24 to any
00010 deny udp from 192.168.100.0/24 to any
00020 allow tcp from any to any dst-port 21 in
00020 allow tcp from any to any dst-port 21 out
00020 allow tcp from any to any dst-port 22 in
00020 allow tcp from any to any dst-port 22 out
00020 allow tcp from any to any dst-port 25 in
00020 allow tcp from any to any dst-port 25 out
00020 allow udp from any to any dst-port 53 in
00020 allow udp from any to any dst-port 53 out
00020 allow tcp from any to any dst-port 80 in
00020 allow tcp from any to any dst-port 80 out
00030 deny tcp from any 6667 to any in
00030 deny tcp from any 6667 to any out
00030 deny tcp from any to any dst-port 6667 in
00030 deny tcp from any to any dst-port 6667 out
00040 deny icmp from any to any via fxp0
00040 deny log logamount 5 icmp from any to any via fxp0
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
65534 deny ip from any to any
65535 allow ip from any to any


출처 : http://www.cyworld.com/ruo91
728x90

댓글