Linux
[centOS] CentOS 7 에서 기본적인 iptables 설정 방법
- 2023.06.08 22:26:18
centos7은 firewalld와 iptable이 함께 구동 되는데, 나의 경우 firewalld가 익숙하지 않기 때문에 firewalld를 비활성화 한 뒤 iptable 위주로 사용한다. 서버 앞단에 방화벽이 없는 경우 iptable 설정이 필수이기 때문에 기본적인 설정 방법을 정리해 본다. [!]firewalld 사용을 원치 않는 경우 비활성화 하기[/!] 아래 명령어로 firewalld를 종료 및 비활성화 한다. # systemctl stop firewalld
# systemctl mask firewalld [!]iptables-services 설치[/!] iptable-services 가 설치되어 있지 않은 경우 iptables 데몬 시작시 'Failed to start iptables.service: Unit not found.'와 같은 에러가 발생한다. 아래와 같이 iptables-services 를 설치한다. #yum install iptables-services
[!]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를 지정하여 접속을 차단시킨다. (이때 아이피 차단을 가장 우선순위로 하기 위해 숫자 1을 함께 지정한다.) # iptables -A INPUT 1 -s 111.222.333.444 -j DROP
[ ip대역으로 차단하는 경우 - 111.222.333.xxx ] # iptables -A INPUT 1 -s 111.222.333.0/24 -j DROP
[ ip대역으로 차단하는 경우 - 111.222.xxx.xxx ] # iptables -A INPUT 1 -s 111.222.0.0/16 -j DROP
[ ip대역으로 차단하는 경우 - 111.xxx.xxx.xxx ] # iptables -A INPUT 1 -s 111.0.0.0/8 -j DROP
[!]vi 로 iptable 관리하기[/!] 앞서 명령어를 통한 iptable 설정방법 외에도 아래와 같이 vi 로도 설정할 수 있다. iptable에 등록된 정보가 많은 경우 vi를 통해 손쉽게 관리 가능하다. # vi /etc/sysconfig/iptables
|