iptables 로 초기 접속 제어 하기
CentOS 7 기본 설치 후, 공인 네트워크 환경에 연결해야 할 때 우선 최소 SSH 접근만 허용하기
( Pre ) CentOS 7 에서 firewalld 대신 iptables 사용하기
firewalld 사용이 권장되지만, iptables 에 익숙할 경우 iptables.target 을 service 에 연결하는 패키지를 운영할 수 있다.
# firewalld disable
systemctl stop firewalld && systemctl disable firewalld
# firewalld 대신 service 를 통한 운영.
# 설치 후 서비스 재시작하면 /etc/sysconfig/iptables 에 실시간 룰이 저장된다.
yum install iptables-services
service iptables reload
service iptables status
# 룰 저장
service iptables save
# 룰 리로드
service iptables reload
# 룰 형식으로 텍스트 저장. 반드시 -c ( ALL Rule ) 옵션을 지정해서 저장하여야 방화벽 정책과 ROUTE(NAT) 룰이 같이 저장된다.
iptables-save -c > rules.txt
# 룰 복원
iptables-restore < rules.txt
iptables 초기 설정 ( 모두 차단 후 특정 IP만 허용하기 )
# 모든 룰 초기화
iptables -F
# lo 인터페이스 모든 ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# 모든 접근 허용할 소스 IP 지정. 포트(SSH) 까지 지정할 경우 -p tcp (-m tcp 생략 가능) --dport 22 를 추가한다
iptables -A INPUT -s 1.2.3.4/32 -m comment --comment "회사" -j ACCEPT
# state 상태를 지정한 ACCEPT.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# (선택) Ping request 요청에 대해 호스트 접근 불가 응답 설정. 서버가 존재한다는 힌트를 주는 것이다.
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
# (선택) Ping request 요청에 거절 하고 싶다면.
iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
# (선택) Ping 접근 자체를 막고 싶다면 DROP. 허용하려면 ACCEPT 를 주면 된다.
iptables -A INPUT -p icmp -j DROP
# 그 외 모든 TCP 접근 DROP
iptables -A INPUT -p tcp -j DROP
# 저장
service iptables save
추가 접근 정책 추가
# 기본 설정 이후에 -A 로 추가하면 DROP 이후의 Line 에 들어가므로 Line 순서 상 제대로 허용되지 않는다
# -I INPUT [DROP Line] 을 기입하여 DROP 라인 위로 추가되도록 한다.
iptables -nL --line-number
---------------------------------------------------------------------------------
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 1.2.3.4 0.0.0.0/0 /* 회사 */
2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0
---------------------------------------------------------------------------------
# 2번 DROP 정책 위로 추가한다.
iptables -I INPUT 2 -s 5.6.7.8 -j ACCEPT -m comment --comment "허용 추가"
iptables -nL --line-number
---------------------------------------------------------------------------------
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 1.2.3.4 0.0.0.0/0 /* 회사 */
2 ACCEPT all -- 5.6.7.8 0.0.0.0/0 /* 허용 추가 */
3 DROP tcp -- 0.0.0.0/0 0.0.0.0/0
---------------------------------------------------------------------------------
# 라인 정렬이 어려울 경우 /etc/sysconfig/iptables 파일을 직접 수정 후 reload 가능하다.
라인 정책 삭제
iptables -D INPUT [Number]