리눅스

Total 331
Today 0
profile_image
윤진한
08-01-18 17:40 0개 6회
일반문서
[FreeBSD] ipfw 설정 예제
팁란에 있던 김상택님의 방화벽 문서를 보고
제가 응용하여 룰을 만들어 보았습니다.
지금은 링크가 삭제되었더군요
natd는 일본구글 웹서핑중 보고 배꼇구요..^^
예전에 기본방화벽 룰을 올렸었는데 제가 실수로
삭제를 해버린 후 이렇게 다시 작성하여 올립니다.


도움이 되었으면 하구요 잘못된 부분 많은 지적 부탁드립니다.




커널 설정
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPDIVERT ---> natd 설정
options DUMMYNET ---> 대역폭 설정룰
options TCP_DROP_SYNFIN ---> 포트스캔 방지

-----------------------------------------------------------------------
rc.conf 수정
firewall설정 및 nat 설정함

firewall_enable="YES"
firewall_type="ipfw" ---> 자신의 방화벽룰 이름
firewall_<script>="/etc/ipfw" ---> 자신의 방화벽룰 설정파일
firewall_quiet="YES"
gateway_enable="YES" ---> 2개의 인터페이스간에 패킷을 허용
natd_enable="YES"
natd_interface="xl0" ---> 내측 인터페이스
natd_flags="-f /etc/natd.conf"
portmap_enable="NO"
tcp_drop_synfin="YES" 

-----------------------------------------------------------------------
natd.conf룰
log no ---> yes 라면 /var/log/alias.log 에 기록되는
verbose no ---> 기동시에는 no
deny_incoming no ---> yes 이라면 외부로부터의 접속을 거부
log_denied yes ---> 거부한 패킷을 기록
log_facility security ---> 디폴트는 daemon
use_sockets yes ---> socket 을 사용해 NAT 의 실패를 회피
same_ports yes ---> 가능한 한 같은 포토 번호를 사용
unregistered_only yes 


-----------------------------------------------------------------------
ipfw 방화벽룰

fwcmd="/sbin/ipfw -q"
fwcmd="/sbin/ipfw"
${fwcmd} -f flush

# 외부 네트웍
oif="랜카드"
onet="게이트웨이"
omask="넷마스크"
oip="자신의 ip"

# 내부 네트웍
iif="xl0"
inet="192.168.0.0/24"
imask="255.255.255.0"
iip="192.168.0.1"


-----------------------------------------------------------------------
# loopback
${fwcmd} add pass ip from 127.0.0.1 to 127.0.0.1 via lo0
${fwcmd} add pass ip from 127.0.0.1 to ${oip} via ${oif}
${fwcmd} add pass ip from ${oip} to 127.0.0.1 via lo0
${fwcmd} add pass tcp from ${oip} to ${iip} via xl0
${fwcmd} add pass tcp from ${iip} to ${oip} via ${oif}


-----------------------------------------------------------------------
# NAT 적용
${fwcmd} add divert natd all from any to any via ${natd_interface}

-----------------------------------------------------------------------
# 접속된 TCP 패킷을 허가
${fwcmd} add pass tcp from any to any established 

-----------------------------------------------------------------------
# DNS IN 
${fwcmd} add pass udp from 0.0.0.0 to ${oip} 53 keep-state 

-----------------------------------------------------------------------
# SMTP 허용
${fwcmd} add pass tcp from any to ${oip} 25 keep-state setup
${fwcmd} add reset tcp from any to any 113 keep-state

-----------------------------------------------------------------------
# WWW 
${fwcmd} add check-state
${fwcmd} add pass tcp from any to ${oip} 80 keep-state setup

80%의 트래픽만을 통과
${fwcmd} add prob 0.8 pass tcp from any to ${oip} 80 in 
${fwcmd} add prob 0.8 pass tcp from ${oip} 80 to any out

-----------------------------------------------------------------------
# FTP 
passive 모드작동 1024-2048포트로 무작위 접속
21번 포트를 통해서 데이터 전송

${fwcmd} add check-state
${fwcmd} add pass tcp from any to ${oip} 21 keep-state setup
${fwcmd} add pass tcp from any 1024-2048 to any 1024-2048 keep-state setup

동시접속 1명으로 제한
${fwcmd} add pass tcp from any to ${oip} 21 keep-state setup limit src-addr 1 

50%의 트래픽허용/50KB의 업로드 속도제한
${fwcmd} add prob 0.5 pass tcp from any to ${oip} 21 in 
${fwcmd} add pipe 3 tcp from any to ${oip} 21 in
${fwcmd} pipe 3 config bw 50 KBytes/s 

50%의 트래픽허용/50KB의 다운로드 속도제한
${fwcmd} add prob 0.5 pass tcp from ${oip} 21 to any out
${fwcmd} add pipe 4 tcp from ${oip} 21 to any out 
${fwcmd} pipe 4 config bw 50 KBytes/s 

-----------------------------------------------------------------------
# ssh 
${fwcmd} add check-state
${fwcmd} add pass tcp from any to ${oip} 22 keep-state
${fwcmd} add pass tcp from any to ${oip} 22 keep-state limit src-addr 2
${fwcmd} add pipe 5 tcp from any to me 22 in
${fwcmd} pipe 5 config bw 50 KBytes/s

-----------------------------------------------------------------------
# 그 이외의 외측으로부터의 TCP 접속을 거부 로그기록
${fwcmd} add deny log tcp from any to any in via ${oif} setup

-----------------------------------------------------------------------
# 상기 이외 안쪽으로부터 TCP 접속허가
${fwcmd} add pass tcp from any to any setup

-----------------------------------------------------------------------
# ping 응답만 허가
${fwcmd} add pass icmp from ${oip} to any out via ${oif} icmptypes 8
${fwcmd} add pass icmp from any to ${oip} in via ${oif} icmptypes 0

# 그 이외의 것 ICMP 파기 로그기록
${fwcmd} add deny log icmp from any to any


-----------------------------------------------------------------------
# DNS OUT
${fwcmd} add pass udp from ${oip} to 0.0.0.0 53 keep-state


# 모두 접속 거부
${fwcmd} add deny tcp from any to any

댓글목록

등록된 댓글이 없습니다.