메뉴 건너뛰기

Linux
2016.02.18 08:00

iptables 설정 두번째

조회 수 107 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
antamis.egloos.com/671138
iptables이 패킷을 필터링 하는것이 아니다 패킷필터링은 커널에 탑제된 netfilter기능으로 하며

iptables은 단지 netfilter의 룰을 세워줄 뿐이다.


방화벽을 설정함에있어 두가지 방식이있다


모든것을 허용하고 일부를 제한할것인지 , 모든것을 제한하고 일부를 허용할것인지이다


기본적으로 규칙을 정할때의 순서는 허용되는 규칙설정후에 거부하는 순서로 해야된다.

먼저 iptables 모듈을 올리자
# system-config-securitylevel 에서 방화벽 활성화 selinux 사용안함 해주자





기본정책
ACCEPT -- 패킷을 허용한다
DENY -- 패킷을 폐기한다는 메세지를 보내고 폐기한다
DROP -- 패킷에 대한 어떤 정보도 되돌려주지않고 폐기한다


기본 chain
INPUT -- 로컬로 들어오는 패킷
FORWARD -- 수신지가 로컬이 아닌 다른곳을 향해 나가는 패킷
OUTPUT -- 외부로 나가는 패킷




사용법
iptables [command] [chain] [options] [정책]


commands
--append -A chain 체인에 새로운 규칙을 추가하기
--delete -D chain 체인의 어떤 지점에 규칙을 제거하기
--delete -D chain rulenum 체인에서 rulenum에 일치하는 규칙제거
--insert -I chain [rulenum] 체인의 rulenum 지점에 규칙을 삽입 (default 1=first)
--replace -R chain rulenum 체인의 rulenum 지점에 규칙을 교환
--list -L [chain] 모든 체인의 규칙들을 나열
--flush -F [chain] 모든 체인의 모든 규칙을 제거(일시적, 재부팅하면 원상복구)
--zero -Z [chain] 해당 체인이나 모든 체인내의 모든 규칙들의 패킷과 바이트의 카운트를 0으로 만듬
--new -N chain 새로운 체인 생성
--delete-chain -X [chain] 사용자 정의 비어진 체인 제거
--policy -P chain target 미리 만들어진 체인 정책 바꾸기
--rename-chain -E old-chain new-chain 체인의 명칭 바꾸기




options
-t -- table 사용 디폴트는 filter이므로 nat를 사용하려면 필히 nat라고 지정해야 한다.
-o -- 패킷이 나가는 네트워크장치를 지정한다. 보통 OUTPUT,FORWARD사슬에 사용된다.
-i -- 패킷이 들어오는 인터페이스를 지정하는데 사용된다. 즉 INPUT과 FORWARD 사슬에 사용된다.
-p -- 프로토콜을 지시할 때 사용한다. 보통 TCP, UDP, ICMP같은 이름들이 사용된다
-j -- 타켓(ACCEPT,DROP,FEJECT) 을 설정하겟다는 의미
-s -- 출발지 주소 도메인 넷마스크등을 표기
-d -- 목적지의 주소 도메인 넷마스크등을 표기

--sport -- 출발지 포트
--dport -- 목적지 포트
-m state -- 연결상태를 의미한다 ESTABLISHED,NEW 등
! -- 아닌 NOT의 의미로 사용된다.
--tcp-flags -- tcp 패킷의 특성인 SYN,ACK,FIN,PSH,URG,RST 등을 설정한다.
--limit -- 지정한 시간동안의 최대 매칭횟수를 정의한다 ddos공격을 차단하는데 상용





현재 사용중인 기본정책을 보면 모든것을 허용하고 일부를 제한하는 방식이다
# 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 -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
주의할점은 원격지에서 이렇게 설정하면 당장 원격접속부터 안될것이다


# iptables -F 는 설정초기화

사용예


# iptables -A INPUT -j DROP -- INPUT 체인을 통해 들어오는 패킷은 드롭한다
# iptables -D INPUT -j DROP -- 설정한 체인을 삭제한다
# iptables -A INPUT -s 192.168.1.100 -j DROP -- 출발지(-s) 호스트가 192.168.1.100인 패킷이 들어오면 드롭
# iptables -A INPUT -d 192.168.1.100 -j DROP -- 목적지(-d) 호스트가 192.168.1.100인 패킷이 들어오면 드롭


-s / -d 옵션사용법은 다양하다
-s www.cdral.net
-s 192.168.1.0/24
-s 192.168.1.100/255.255.255.0


# iptables -A INPUT -s ! 192.168.1.100 -j DROP -- 출발지호스트가 192.168.1.100이 "아닌(!)" 패킷이 들어오면 드롭
# iptables -A INPUT -p TCP -j ACCEPT -- tcp 프로토콜을 사용하는 패킷은 허용
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT -- tcp포트 21번을 목적지포트로(--dport)로 사용하는 패킷은 허용


--sport는 패킷의 출발지 포트이다.
--dport는 패킷의 도착지 포트이다.
여러포트를 같이 쓸려면 20:100 와 같이 지정할수있다 (20~100까지)

특정포트들만 골라서 쓸려면 -m multiport --dport 21,25,80

-A RH-Firewall-1-INPUT -m multiport -p tcp --dport 21,23,25,80 -j ACCEPT


# iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT -- 인터페이스가 eth0이며 tcp포트 21번을 목적지포트로(--dport)로 사용하는 패킷은 허용
- 인터페이스 설정시 -i 옵션은 INPUT에서만 -o 옵션은 OUTPUT에서만 사용가능하다


# iptables -A INPUT -i eth0 -s 192.168.1.100 -p tcp --dport 80 -j DROP
-- INPUT 체인에 들어오는 패킷중 인터페이스가 eth0 이고 출발지 호스트가 192.168.1.100이며 프로토콜은 tcp 목적지포트가 80인
패킷은 드롭시켜라이다










-m state --state 옵션을 사용하여 설정해보자

NEW : 새로운 접속을 만드는 패킷
ESTABLISHED :존재하는 접속에 속하는 패킷 즉 접속이 허가되고 통신하면서 발생되는 패킷이다.
RELATED :기존의 접속의 부분은 아니지만 연관성을 가진 패킷으로 . ICMP 에러 나 ftp 데이터 접속을 형성하는 패킷.
INVALID :어떤 이유로 확인할 수 없는 패킷. 알려진 접속과 부합하지 않는 ICMP 에러와 out of memory 등을 포함한다. 보통 이런 패킷은 DROP 된다.


# iptables -A INPUT -m state --state NEW, ESTABLISHED, RELATED -j ACCEPT
-- 들어 오는 패킷이 상태가 NEW, ESTABLISHED나 RELATED 인경우 허용


# iptables -A INPUT -p TCP --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-- tcp프로토콜을쓰는 목적지가 21번인 포트에 new:접속패킷과,established:통신패킷을 허용하라 (일반적인 서버측사용)
# iptables -A INPUT -p TCP --sport 21 -m state --state ESTABLISHED -j ACCEPT
-- 일반적인 클라이언트측 사용인데 NEW가 없다 이유는 클라이언트는 접속허가를 요청하는위치이지 요청받는 위치가 아니기땜에
# iptables -A INPUT -m state --state INVALID -j DROP
-- 확인할수없는 INVALID 패킷은 들어오면 drop시켜라

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
--80포트 추가




-m limit --limit 를 사용해보자
# iptables -A INPUT -s 192.168.10.0/24 -p icmp -m limit --limit 5/minute
192.168.10.0/24 대역의 icmp 패킷중 1분동안 최대5번 매칭되는것을 의미한다
/second /minute /hour /day 등이있다.



tip) DROP와 REJECT은 둘다 룰에 매칭되는 패킷을 차단하지만 DROP은 패킷을 거부한후 추가적인 동작이 없는반면
REJECt는 패킷거부와 함께 패킷의 소스주소로 패킷이 거부되었다는 에러메세지를 발송한다.
그렇기에 거부된 패킷에 일일이 응답하기엔 블필요한 트래픽이 발생되기에 DROP으로 설정하는게 좋다.



상태추적설정하기 - 이미설정된 필터링 룰에따라 허용이 된 트래픽의 경우 뒤이어 전송되는 모든 패킷을 다시 첫번째 룰부터
검사할 필요가 없이 바로 허용할수있다.
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


아웃풋 추가해주지
-A OUTPUT -d 203.233.124.88 -p tcp -m tcp --dport 3000 -j ACCEPT


설정저장하기

# service iptables save



reboot 후에도 설정된 룰셋을 그대로 유지된다.
# vi /etc/sysconfig/iptables-config
IPTABLES_SAVE_ON_RESTART="yes"



/etc/sysconfig/iptables 수정후 재시작시 내용이 지워진다면
stop먼저하고 내용복사후 start하자


아니면 그냥 쉘파일로 저장해서 실행시켜도 된다.
#!/bin/bash

iptables -F
iptables -Z
iptables -X
iptables -F -t nat
iptables -Z -t nat
iptables -X -t nat
iptables -A INPUT -s 127.0.0.1 -m state --state NEW -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -j ACCEPT
iptables -A INPUT -s 192.168.2.0/24 -p tcp -m state --state NEW -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m multiport -p tcp --dport 1111,7700,873,111 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -j REJECT


그외 포트포워딩을 설정해보자
포트포워딩은 주로 내부 사설ip로 세팅된 자신의 pc로 원격접속(3389포트)을 위해서 사용하는경우가 많다.
우리집pc - 회사공유기 or 회사방화벽서버 등등 내부 사실ip를 할당해주는 장치 - 사무실 사설ip pc
이상태에서 사무실ip로 원격접속을 할려면 회사공유기 혹은 dhcp서버 방화벽에서 설정을해주자

/etc/sysctl.conf의 net.ipv4.ip_forward항목이 0으로 되어 있으면 1로 변경한다.
변경사항 적용
# sysctl -p /etc/sysctl.conf

마스쿼레이딩설정 - 공인ip하나로 여러 사설ip를 만들수있다.
-A POSTROUTING -o -eth0 -s 사무실ip -j SNAT --to 방화벽ip
-A PREROUTING -p tcp -i eth0 -d 방화벽ip --dport 외부포트 -j LOG --log-prefix "로그남기기"
-A PREROUTING -p tcp -i eth0 -d 방화벽ip --dport 외부포트 -j DNAT --to 사무실 내pc:3389

원격접속은 공유기ip:외부포트 이다 물론 외부포트는 임의로 설정
단순히 원격만 사용할거라서 사무실pc가 사설ip인 이유이다.

만약 서버용으로 쓴다면 웹접속이나. ftp, 메일주고받기 서비스용도의 pc/서버라면 공인ip를 할당해주자


만약 iptables를 하나의 서버에서만 사용하는게 아니라, 서버단의 앞단에 따로 배치하여 사용한다면
즉 브릿지 방식으로 운영한다면 forward방식을 사용해야 한다.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
127 Linux nmtui 맨하탄노숙자 2017.11.21 0
126 Linux xfs repair 맨하탄노숙자 2017.10.14 0
125 Linux RHEL7(CentOS7) 의 grub2 사용 해 보기 맨하탄노숙자 2017.07.26 3
124 Linux VMware ESXi SSD on RAID showing as non-ssd 맨하탄노숙자 2017.05.09 3
123 Windows Windows XP 의 윈도우에서 Visual Studio .net (2003) 설치시 옵션 맨하탄노숙자 2017.01.02 10
122 Windows 윈 10 인증 크랙 secret 맨하탄노숙자 2016.05.01 8
121 Windows 윈도우10 정품인증을 확실하게 받을 수 있는 방법입니다 맨하탄노숙자 2016.05.01 2464
120 Linux CentOS 7 CPU 퍼포먼스가 100% 안나올때 맨하탄노숙자 2016.03.25 152
119 Linux ## 아파치 설치용으로 CSR을 생성하고, 발급받은 VeriSign(베리사인) SSL 인증서를 Tomcat 8 에 적용 맨하탄노숙자 2016.03.22 210
118 Linux mysql old_password 설정 맨하탄노숙자 2016.03.22 84
117 Windows 윈도우7 원격데스크톱 2인 이상 동시 접속 (다중 사용자 모드) 설정 방법 file 맨하탄노숙자 2016.03.21 351
116 Linux rsync 맨하탄노숙자 2016.03.21 57
115 Linux Rsync 특정 기간(일정 기간) 이상 지난 컨텐츠 복사 (730일, 365일, 1주일) 맨하탄노숙자 2016.03.10 51
114 Linux iptables 용어 맨하탄노숙자 2016.02.18 320
113 Linux iptables 용어 맨하탄노숙자 2016.02.18 330
112 Linux Linux iptables 방화벽 설정 맨하탄노숙자 2016.02.18 60
111 Linux Linux iptables 방화벽 설정 맨하탄노숙자 2016.02.18 184
» Linux iptables 설정 두번째 맨하탄노숙자 2016.02.18 107
109 Linux iptables connlimit 모듈 활용 DDoS 맨하탄노숙자 2016.02.17 59
108 Linux iptables 분석 맨하탄노숙자 2016.02.17 23
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7