통합검색

Linux

[centOS] CentOS 7 에서 기본적인 iptables 설정



centos7은 firewalld와 iptable이 함께 구동 되는데,
나의 경우 firewalld가 익숙하지 않기 때문에 firewalld를 비활성화 한 뒤 iptable 위주로 사용한다.
서버 앞단에 방화벽이 없는 경우 iptable 설정이 필수이기 때문에 기본적인 설정 방법을 정리해 본다.

 
[!]firewalld 사용을 원치 않는 경우 비활성화 하기[/!]
아래 명령어로 firewalld를 종료 및 비활성화 한다.
 
# systemctl stop firewalld
# systemctl mask firewalld
 

[!]iptables 정책 확인[/!]
아래와 같이 현재 설정되어 있는 iptable 정책 내용을 확인한다.
 
# iptables -nL
  

 

[!]모든 포트 접속을 차단한 뒤 특정 포트만 접속 허용[/!]
보안을 위해 서버에 들어오는 모든 포트를 기본적으로 차단하고 특정 필요한 포트만 개방시키는 정책을 설정한다.
먼저 설정되는 정책이 우선 순위를 갖게 되므로 허용할 포트를 먼저 설정한 뒤 모든 포트를 차단하는 정책을 마지막에 설정해야 한다.
차단 정책이 먼저 설정되는 경우 SSH 접속이 불가하니 주의해야 한다.

가장 먼저, 현재 등록되어 있는 정책을 모두 초기화 시킨다.
  
# iptables -F
 
output tcp/udp 포트는 모두 개방시킨다.
 
# iptables -A OUTPUT -p tcp -j ACCEPT
# iptables -A OUTPUT -p udp -j ACCEPT
 
한번 연결된 트래픽에 대한 응답을 지속 시키기 위해 아래와 같이 정책을 추가한다.
아래 정책이 없는 경우 pdo로 database를 연결하는 웹앱에서 문제가 발생할 수 있다.
 
# iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
 
그 다음, 필요한 포트를 아래와 같이 개방 시킨다.
 
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
 
아래와 같이 범위로 포트를 지정할 수도 있다.
 
# iptables -A INPUT -p tcp --match multiport --dports 5000:5050 -j ACCEPT
 
필요 포트를 모두 개방 하였다면,
마지막으로 나머지 포트를 모두 차단한다.
 
# iptables -A INPUT -j DROP
 

[!]등록된 정책의 우선순위 변경[/!]
아래와 같이 나중에 등록한 정책의 우선순위를 높일 수 있다.
원하는 우선순위를 숫자로 입력하여 설정한다.
 
# iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
 

[!]등록된 정책 삭제[/!]
등록된 정책 중 원치않는 정책을 삭제할 수 있.
우선순위의 숫자로 지정 하거나, 포트 번호를 명시하여 지정할 수 있다.
 
# iptables -D INPUT 1
# iptables -D INPUT -p tcp --dport 8080 -j ACCEPT
 

[!]정책 저장 및 복구[/!]
iptable 사용시 주의해야 할 점은, 데몬을 restart하는 경우 정책이 모두 초기화 된다는 점이다.
(이를 보완하기 위한 데몬이 존재하기는 하지만)
지금까지 설정한 정책을 시스템에 저장한 뒤 원할 때 마다 복구시킬 수 있는 방법이 있다.

먼저, iptable 정책 설정이 마무리 되었다면 아래와 같이 정책을 저장한다.
 
# service iptables save
or
# iptables-save > /etc/sysconfig/iptables
 


데몬 재시작 후 정책이 초기화 되었다면 아래와 같이 저장된 정책을 다시 복구시킨다.
 
# iptables-restore < /etc/sysconfig/iptables
 

[!] iptable을 통해 접속 ip 차단 시키기[/!]
iptable에서 특정 input ip를 접속 차단시킬 수 있는데, 정책 등록시 아이피 대역으로도 설정할 수 있다.
 
아래와 같이 ip를 지정하여 접속을 차단시킨다.
 
# iptables -A INPUT -s 111.222.333.444 -j DROP
 
[ ip대역으로 차단하는 경우 - 111.222.333.xxx ]
 
# iptables -A INPUT -s 111.222.333.0/24 -j DROP
  
[ ip대역으로 차단하는 경우 - 111.222.xxx.xxx ]
 
# iptables -A INPUT -s 111.222.0.0/16 -j DROP
   
[ ip대역으로 차단하는 경우 - 111.xxx.xxx.xxx ]
 
# iptables -A INPUT -s 111.0.0.0/8 -j DROP