방화벽설정과 SSH통신 [ iptables , ssh ]

2017. 5. 31. 19:07Linux



iptables를 이용해서 각 서버의 SSH통신을 관리해보겠습니다


먼저 SSH통신을 위한 패키지를 다운받아야합니다

#yum -y install openssh-client

" #ssh 계정명@서버IP주소 " 명령어를 통해서 해당 서버로 접속할 수 있습니다 ( 계정명@ 생략하면 root계정으로 접속 )



예제에 사용할 서버는  Server-A / Server-B / Server-C

Server-A IP : 100.100.100.110

Server-B IP : 100.100.100.120

Server-C IP : 100.100.100.130


 [ ex1 ] 

[ 명령어를 치는 서버 Server-A ]

#iptables -A INPUT -p tcp --dport 22 -j ACCEPT

해당 설정은 INPUT체인에 추가할것이고, tcp 프로토콜을 사용하고, Server-A의 22번포트번호로 들어오는 정보는 ACCEPT 한다

-A : append

-p : protocol 설정

--dport : destination port ( 도착지 포트번호 )

-j : 추가할 내용 ( ACCEPT or DROP )


 [ ex2 ] 

Server-B 는 Server-A에게 접속이 가능하고 Server-C는 Server-A에게 접속이 불가능하도록 설정해보자


[ 명령어를 치는 서버 Server-A ]

#iptables -A INPUT -s 100.100.100.120 --dport 22 -j ACCEPT

INPUT체인에 추가할 것이다. 서버 100.100.100.120에서 Server-A의 22번포트로 들어오는 정보는 ACCEPT

#iptables -A INPUT -s 100.100.100.130 --dport 22 -j DROP

INPUT체인에 추가할 것이다. 서버 100.100.100.130에서 Server-A의 22번포트로 들어오는 정보는 DROP


[ 명령어를 치는 서버 Server-B ]

#ssh 100.100.100.110 => root의 비밀번호 입력후 접속이 가능하다.

[ 명령어를 치는 서버 Server-C ]

#ssh 100.100.100.110 => Server-A로의 접속을 할 수 없다. ( 연결자체가 안됨 )


* 서버B와 서버C에서 패킷이 들어올 때에는 서버B와 서버C의 포트번호는 매번 다르기 때문에 서버IP주소를 사용한다 !



[ 추가 내용 ]

1> Server-A에서 바깥으로 정보를 보낼 때에는 OUTPUT 체인에 설정을 추가해주면된다

2> --dport 는 도착지 포트번호이며,  --sport는 출발지의 포트번호로써 옵션을 바꿔서 줄 수도 있다

3> iptables의 설정을 바꿧을 시에는 항상 실행시킬 명령어가 있다 ( 다른 service들과 다르게 save를 해주어야 합니다 ! )

 => ① #service iptables save

 => ② #service iptables restart