iptables 설정하기
iptables는 커널 2.4로 올라가면서 새롭게 나타난 것이다. 이 것은 기존의 ipchains를 교체 한 것이다. 여기에서는 간단히 외부에서 들어오는 것을 필터링 하는 것으로 설정하는 방법을 모색한다.
iptables는 테이블 형식으로 관리를 한다. 그리고 먼저 등록 된것이 효력을 발생하기때문에 등록을 하는 순서가 중요하다. 모든 것을 거부하는 설정이 먼저오게 되면 드 이후에 포트를 열어주는 설정이 와도 효과가 없다. 그러므로 허용하는 정책이 먼저오고 나서 거부하는 정책이 와야한다.
예) iptables -A INPUT -p tcp --dport 22:30 -j DROP
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
이 경우에는 먼저 22번부터 30번까지의 포트를 목적지로 하는 패킷이 들어오면 무시하라는 줄이 먼저 들어 있다. 그리고 다음에 25번 포트를 열라는 명령이 있다. 그러나 이 명령은 먼저온 거부 메시지때문에 패킷이 이미 거부된 상태이어서 효력이 없다. 따라서 이 경우는 잘못 설정한 것으로 볼 수가 있다. 그러므로 제대로 설정을 하려면 이렇게 바꾸어야한다.
예) iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 22:30 -j DROP
이렇게 하면 먼저 25번 포트로 들어오는 것을 허용하고 난후에 다른 것을 막아내기 때문에 제대로 된 설정이 된다.
Usage: iptables -[ADC] chain rule-specification [options]
iptables -[RI] chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LFZ] [chain] [options]
iptables -[NX] chain
iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
iptables -h (print this help information)
이 부분은 전체적인 옵션을 적는 것을 간략히 보여주는 것이다.
아직 커널 2.4대를 써보는 것이 얼마되지 않아서 정확한 개념과 고급적인 설정은 파악이 되지 않은 상태이다. 다만 iptable을 추가하고 삭제하고 필수적인 부분을 이해해보자.
iptables을 이용해서 추가하는 것은
iptables -A 체인이름 옵션
의 형식을 사용한다. 이 때에 iptables에 등록이 되는데 이것을 확인하는 것은 iptables -L로 확인이 가능하다.
예) iptables -L
나타나는 목록은 다음과 같다.
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
아직은 아무것도 등록이 되지않은 상태이다. 여기에 등록을 하는 것이다.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
이 명령을 사용하면 한줄이 등록이 된다. 결과는 다음과 같다.
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
처음에 한줄이 등록이 된다. 여기에 등록된 라인은 ssh를 사용하는 것을 허용하는 것이다.
이 한줄을 설명하면
먼저 -A 옵션은 추가하도록하는 것이다. 그리고 따라오는 INPUT은 chain명이다. 그리고 다음에 따라오는 -p는 protocol에 관한 옵션이다. 여기에서는 tcp에 관한 설정임을 명시하였다. 그리고 source와 destination은 명시하지 않았기 때문에 전체포트와 아이피가 대상이 된다. -dport는 패킷이 대상으로 삼는 포트를 명시한 것이다 여기에서 22라고 표기한 것은 ssh서비스 포트이다. 그리고 마지막에 -j ACCEPT는 허용하도록 정책을 정하는 것이다. 따라서 여기로의 ssh서비스를 요청하는 패킷은 허용되도록 설정을 한 것이다.
다음은 전체적인 설정을 한 것이다.
#!/bin/sh
# iptables 모듈 등록하기
modprobe iptable_filter
# ssh 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# httpd 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# pop3 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 109 -j ACCEPT
# pop2 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT
# imap 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT
# mysqld 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# ftpd 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# ftp-data 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# ircd 열어주기
/usr/local/bin/iptables -A INPUT -p tcp --dport 6667 -j ACCEPT
/usr/local/bin/iptables -A INPUT -p udp --dport 6667 -j ACCEPT
# 전부 거절하기
/usr/local/bin/iptables -A INPUT -p tcp --dport 1:30000 -j DROP
/usr/local/bin/iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
이 것은 허용하는 서비스가 한정적이다. 우선 ssh, http, pop3, pop2, imap, mysql, ftp, ircd를 위해서 서비스를 요청하는 패킷은 허용하고 나머지는 전부 거부하는 설정이다. 이 설정을 자세히 보면 tcp와 icmp를 대상으로 하였다. icmp는 그 중에서 ping을 막은 것이다. 특히 echo-request만을 막아서 핑 요청은 거부하지만 서버에서의 핑테스트는 가능하다. 또한 거절하는 줄인
/usr/local/bin/iptables -A INPUT -p tcp --dport 1:30000 -j DROP
이 라인에서 --dport 다음에 1:30000으로 지정되어 있다. 이 부분은 서버를 경유하여서 다른 곳으로 가고자하는 경우에 클라이언트 프로그램이 사용할 포트를 남겨주기 위함이다. 1번포트에서 30000번 포트까지는 완전히 tcp에 대헤서 막는 것이다. 알려진 포트는 1024이나 해킹 프로그램붕에서 그이후를 사용하여서 소켓을 여는 경우를 방지하기 위함이다. 만약에 서버에서 나갈 이유가 없으면 전부 막으면 된다. 1:65535로 설정하면 전체 포트가 막힌다.
다음의 출력은 결과이다.
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:www
ACCEPT tcp -- anywhere anywhere tcp dpt:www
ACCEPT tcp -- anywhere anywhere tcp dpt:pop2
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3
ACCEPT tcp -- anywhere anywhere tcp dpt:imap2
ACCEPT tcp -- anywhere anywhere tcp dpt:mysql
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data
ACCEPT tcp -- anywhere anywhere tcp dpt:ircd
ACCEPT udp -- anywhere anywhere udp dpt:ircd
DROP tcp -- anywhere anywhere tcp dpts:tcpmux:30000
DROP icmp -- anywhere anywhere icmp echo-request
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
이와 같이 설정을 한다면 대부분의 것에 대해서 설정 할수가 있다. NAT와 MASQUERADE는 좀더 다양한 설정을 이용하여서 적용할 수가 있다. 이러한 iptables는 원하지 않은 서비스에 의해서 서버가 위험에 노출되지 않도록 하는 것이 목적이다. 좀더 나은 설정을 하게 되면 서버의 보안은 굳건히 하는 것에 도움이 된다.
이 iptables 설정은 조금만 공부를 하면 쉽게 습득이 가능하다. 그러므로 문서를 보는 것이 중용하다. 이 설정은 기본이므로 좀더 많은 것은 관련 문서를 이용하기를 바란다.
참고 문서
http://netfilter.kernelnotes.org/unreliable-guides/packet-filtering-HOWTO.html<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:32:05 Linux에서 이동 됨]</div>
iptables는 커널 2.4로 올라가면서 새롭게 나타난 것이다. 이 것은 기존의 ipchains를 교체 한 것이다. 여기에서는 간단히 외부에서 들어오는 것을 필터링 하는 것으로 설정하는 방법을 모색한다.
iptables는 테이블 형식으로 관리를 한다. 그리고 먼저 등록 된것이 효력을 발생하기때문에 등록을 하는 순서가 중요하다. 모든 것을 거부하는 설정이 먼저오게 되면 드 이후에 포트를 열어주는 설정이 와도 효과가 없다. 그러므로 허용하는 정책이 먼저오고 나서 거부하는 정책이 와야한다.
예) iptables -A INPUT -p tcp --dport 22:30 -j DROP
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
이 경우에는 먼저 22번부터 30번까지의 포트를 목적지로 하는 패킷이 들어오면 무시하라는 줄이 먼저 들어 있다. 그리고 다음에 25번 포트를 열라는 명령이 있다. 그러나 이 명령은 먼저온 거부 메시지때문에 패킷이 이미 거부된 상태이어서 효력이 없다. 따라서 이 경우는 잘못 설정한 것으로 볼 수가 있다. 그러므로 제대로 설정을 하려면 이렇게 바꾸어야한다.
예) iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 22:30 -j DROP
이렇게 하면 먼저 25번 포트로 들어오는 것을 허용하고 난후에 다른 것을 막아내기 때문에 제대로 된 설정이 된다.
Usage: iptables -[ADC] chain rule-specification [options]
iptables -[RI] chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LFZ] [chain] [options]
iptables -[NX] chain
iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
iptables -h (print this help information)
이 부분은 전체적인 옵션을 적는 것을 간략히 보여주는 것이다.
아직 커널 2.4대를 써보는 것이 얼마되지 않아서 정확한 개념과 고급적인 설정은 파악이 되지 않은 상태이다. 다만 iptable을 추가하고 삭제하고 필수적인 부분을 이해해보자.
iptables을 이용해서 추가하는 것은
iptables -A 체인이름 옵션
의 형식을 사용한다. 이 때에 iptables에 등록이 되는데 이것을 확인하는 것은 iptables -L로 확인이 가능하다.
예) iptables -L
나타나는 목록은 다음과 같다.
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
아직은 아무것도 등록이 되지않은 상태이다. 여기에 등록을 하는 것이다.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
이 명령을 사용하면 한줄이 등록이 된다. 결과는 다음과 같다.
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
처음에 한줄이 등록이 된다. 여기에 등록된 라인은 ssh를 사용하는 것을 허용하는 것이다.
이 한줄을 설명하면
먼저 -A 옵션은 추가하도록하는 것이다. 그리고 따라오는 INPUT은 chain명이다. 그리고 다음에 따라오는 -p는 protocol에 관한 옵션이다. 여기에서는 tcp에 관한 설정임을 명시하였다. 그리고 source와 destination은 명시하지 않았기 때문에 전체포트와 아이피가 대상이 된다. -dport는 패킷이 대상으로 삼는 포트를 명시한 것이다 여기에서 22라고 표기한 것은 ssh서비스 포트이다. 그리고 마지막에 -j ACCEPT는 허용하도록 정책을 정하는 것이다. 따라서 여기로의 ssh서비스를 요청하는 패킷은 허용되도록 설정을 한 것이다.
다음은 전체적인 설정을 한 것이다.
#!/bin/sh
# iptables 모듈 등록하기
modprobe iptable_filter
# ssh 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# httpd 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# pop3 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 109 -j ACCEPT
# pop2 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT
# imap 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT
# mysqld 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# ftpd 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# ftp-data 열기
/usr/local/bin/iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# ircd 열어주기
/usr/local/bin/iptables -A INPUT -p tcp --dport 6667 -j ACCEPT
/usr/local/bin/iptables -A INPUT -p udp --dport 6667 -j ACCEPT
# 전부 거절하기
/usr/local/bin/iptables -A INPUT -p tcp --dport 1:30000 -j DROP
/usr/local/bin/iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
이 것은 허용하는 서비스가 한정적이다. 우선 ssh, http, pop3, pop2, imap, mysql, ftp, ircd를 위해서 서비스를 요청하는 패킷은 허용하고 나머지는 전부 거부하는 설정이다. 이 설정을 자세히 보면 tcp와 icmp를 대상으로 하였다. icmp는 그 중에서 ping을 막은 것이다. 특히 echo-request만을 막아서 핑 요청은 거부하지만 서버에서의 핑테스트는 가능하다. 또한 거절하는 줄인
/usr/local/bin/iptables -A INPUT -p tcp --dport 1:30000 -j DROP
이 라인에서 --dport 다음에 1:30000으로 지정되어 있다. 이 부분은 서버를 경유하여서 다른 곳으로 가고자하는 경우에 클라이언트 프로그램이 사용할 포트를 남겨주기 위함이다. 1번포트에서 30000번 포트까지는 완전히 tcp에 대헤서 막는 것이다. 알려진 포트는 1024이나 해킹 프로그램붕에서 그이후를 사용하여서 소켓을 여는 경우를 방지하기 위함이다. 만약에 서버에서 나갈 이유가 없으면 전부 막으면 된다. 1:65535로 설정하면 전체 포트가 막힌다.
다음의 출력은 결과이다.
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:www
ACCEPT tcp -- anywhere anywhere tcp dpt:www
ACCEPT tcp -- anywhere anywhere tcp dpt:pop2
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3
ACCEPT tcp -- anywhere anywhere tcp dpt:imap2
ACCEPT tcp -- anywhere anywhere tcp dpt:mysql
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data
ACCEPT tcp -- anywhere anywhere tcp dpt:ircd
ACCEPT udp -- anywhere anywhere udp dpt:ircd
DROP tcp -- anywhere anywhere tcp dpts:tcpmux:30000
DROP icmp -- anywhere anywhere icmp echo-request
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
이와 같이 설정을 한다면 대부분의 것에 대해서 설정 할수가 있다. NAT와 MASQUERADE는 좀더 다양한 설정을 이용하여서 적용할 수가 있다. 이러한 iptables는 원하지 않은 서비스에 의해서 서버가 위험에 노출되지 않도록 하는 것이 목적이다. 좀더 나은 설정을 하게 되면 서버의 보안은 굳건히 하는 것에 도움이 된다.
이 iptables 설정은 조금만 공부를 하면 쉽게 습득이 가능하다. 그러므로 문서를 보는 것이 중용하다. 이 설정은 기본이므로 좀더 많은 것은 관련 문서를 이용하기를 바란다.
참고 문서
http://netfilter.kernelnotes.org/unreliable-guides/packet-filtering-HOWTO.html<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:32:05 Linux에서 이동 됨]</div>
게시글 목록
| 번호 | 제목 |
|---|---|
| 8624 |
기타
소유권변경
|
| 8623 | |
| 8617 | |
| 8615 | |
| 28464 | |
| 8613 | |
| 8612 | |
| 8611 |
JavaScript
vim 의 들여쓰기 + 색상 눈 덜피곤 c++ php 등.. (리눅스용)
|
| 8610 |
JavaScript
vim 의 간단한 사용법
|
| 8609 |
JavaScript
[자바스크립트] 상태표시줄 제어 + 간단한 복사 제어
|
| 8606 |
Linux
/etc 디렉토리 아래의 파일들
2
|
| 8605 |
기타
shadow 잠금 해제
|
| 8604 | |
| 8603 |
JavaScript
yum 업데이트 되는곳 7.3 or 페도라
|
| 8602 |
MySQL
mysql 링크하기
|
| 8601 | |
| 8600 |
MySQL
mysql.sock 삭제 하였을 경우
|
| 8599 | |
| 8598 | |
| 8597 |
JavaScript
ps 시 화면 짤리는부분 보이게 하기
|
| 8596 | |
| 8595 | |
| 8594 |
기타
chmod 의 스틱키
|
| 8593 |
JavaScript
tripwire 의 twr 파일 보기
|
| 8592 |
JavaScript
최근 사용자 접속 리스트 보기
|
| 8591 | |
| 8590 | |
| 8589 |
JavaScript
atd 데몬
|
| 28463 | |
| 8588 |
JavaScript
portmap
|
| 8587 | |
| 8586 | |
| 8585 |
JavaScript
md5sum 사용방법
|
| 8584 |
JavaScript
TAR 압축방법
|
| 8583 | |
| 8581 | |
| 8580 |
기타
crontab 사용하기
|
| 8579 |
JavaScript
umask 설정법
|
| 8578 | |
| 8577 |
기타
Find 명령어 활용
|
| 8576 |
기타
zip 압축 해제
|
| 8575 |
JavaScript
삼바(samba)에서 내부만 들어오게 하기
|
| 8574 | |
| 8572 | |
| 8571 |
JavaScript
quota 젠체 용량 확인
|
| 8570 | |
| 8569 | |
| 8568 |
JavaScript
런레벨 편집
|
| 8567 |
기타
리눅스에서 문자찾기
|
| 8566 | |
| 8565 |
JavaScript
삼바로 리눅스에서 윈도우로 공유하기
|
| 8564 |
JavaScript
shadow 패스워드 잠금 해제 하기
|
| 8563 | |
| 8562 | |
| 8561 |
JavaScript
vim에서 컬러는 나오게 하기
|
| 8560 | |
| 8558 | |
| 8557 |
MySQL
my.cnf 파일은 어디에?
|
| 8556 | |
| 8555 |
MySQL
cron 설정
|
| 8554 |
JavaScript
호스트네임 바꾸기
|
| 8553 |
JavaScript
하드링크와 심볼릭링크?
|
| 28462 |
HTML
콘솔의 화면보호기능을 끄려면?
|
| 8552 |
기타
스틱키
|
| 8551 |
JavaScript
날짜 바꾸기 date 명령을 이용
|
| 28461 |
HTML
스왑 사용 안하기
|
| 8549 | |
| 8548 |
기타
SSH
|
| 8547 |
JavaScript
rsync 백업
|
| 8545 |
JavaScript
저 사양 PC로 리눅스 라우터 만들기
1
|
| 8544 |
Linux
Tripwire
|
| 8543 | |
| 8542 | |
| 8541 | |
| 8540 |
JavaScript
링크 시킨 파일 찾기
|
| 8539 |
JavaScript
리눅스 하드웨어 정보 보기
|
| 8538 | |
| 8537 | |
| 8536 |
MySQL
my.cnf 파일은 위치..
|
| 8535 |
MySQL
부팅시 자동으로 mysql 서버 자동실행
|
| 8533 |
MySQL
MySQL 루트비번 분실시 대처요령
1
|
| 8532 |
MySQL
mysql에서 log 파일 남기기
|
| 8531 |
MySQL
ALTER 테이블 추가,변경
|
| 8530 |
MySQL
sql 파일로 테이블 간단히 만들기
|
| 8529 |
MySQL
mysql 4.1 의 password()
|
| 8528 |
MySQL
mysql 에서 최대 사용자 수
|
| 8525 | |
| 8524 | |
| 8523 |
기타
핑(ping) 막기
|
| 8522 | |
| 8521 |
JavaScript
su 사용자 제한하기
|
| 8520 | |
| 8519 |
JavaScript
기본적인 삼바 설정
|
| 8518 |
기타
실시간 로그 보기..
|
| 8517 | |
| 8516 |
JavaScript
부팅 로고 삭제
|
| 8515 |
JavaScript
콘솔에서 해상도 높이기
|
| 8514 | |
| 8513 | |
| 8512 |
JavaScript
ssh로 접속할때 메시지를 보여주는 방법..
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기