IT
C# Windows 방화벽 정책 추가/삭제
목차
C#으로 특정 통신을 받아주는 어플리케이션을 만든 경우, Window OS상에서 제공되는 방화벽에 정책 추가가 필요할 수 있습니다.
제어판에서 직접 방화벽 기능에 들어가서 정책을 추가해줘도 되지만, 어플리케이션이 실행될 때 방화벽 정책을 자동으로 추가하도록 코드를 구성할 수 있습니다.
구현할 수 있는 방법은 2가지로 아래와 같습니다.
1. NetFwTypeLib 사용
2. cmd 명령줄 사용
여기서는 cmd 명령줄을 사용하는 방법으로 구현하겠습니다.
public static void WindowsFWRoleAdd()
{
ProcessStartInfo processStartInfo = new ProcessStartInfo();
Process process = new Process();
processStartInfo.FileName = "cmd";
processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; // 프로세스 실행창 숨기기
processStartInfo.CreateNoWindow = true;
processStartInfo.UseShellExecute = false;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardInput = true; // cmd창으로 데이터 보내기
processStartInfo.RedirectStandardError = true; // cmd창에서 오류 내용 가져오기
process.EnableRaisingEvents = false;
process.StartInfo = processStartInfo;
process.Start();
process.StandardInput.Write("netsh advfirewall firewall add rule name = 방화벽룰이름 dir =in action = allow protocol = tcp localport = 8054" + Environment.NewLine);
process.StandardInput.Close();
process.WaitForExit();
process.Close();
}
위 메소드를 어플리케이션이 시작되는 위치에서 실행해주면 방화벽 정책이 자동으로 추가되게 됩니다.

라고 끝난줄 알았으나!! 이렇게만 하면 프로그램이 실행될때마다 방화벽에 동일한 정책이 계속 추가되는 문제가 있었네요 ㄷㄷㄷ
그래서 룰을 추가하기 전에 아예 해당 이름의 룰을 삭제하는 코드를 추가해줬습니다.
public static void WindowsFWRoleAdd()
{
ProcessStartInfo processStartInfo = new ProcessStartInfo();
Process process = new Process();
processStartInfo.FileName = "cmd";
processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; // 프로세스 실행창 숨기기
processStartInfo.CreateNoWindow = true;
processStartInfo.UseShellExecute = false;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardInput = true; // cmd창으로 데이터 보내기
processStartInfo.RedirectStandardError = true; // cmd창에서 오류 내용 가져오기
process.EnableRaisingEvents = false;
process.StartInfo = processStartInfo;
process.Start();
//방화벽 정책 삭제. 동일한 정책이 계속 추가되는 것을 방지하기 위함.
process.StandardInput.Write("netsh advfirewall firewall delete rule name= 방화벽룰이름" + Environment.NewLine);
//방화벽 정책 추가
process.StandardInput.Write("netsh advfirewall firewall add rule name = 방화벽룰이름 dir =in action = allow protocol = tcp localport = 8054" + Environment.NewLine);
process.StandardInput.Close();
process.WaitForExit();
process.Close();
}
이제 진짜 끝!!
'IT' 카테고리의 다른 글
Linux 서버 상태 확인하기 (0) | 2024.03.04 |
---|---|
ElasticSearch Heap 메모리 설정 (0) | 2024.03.04 |
대규모 언어 모델(LLM)을 위한 검색-증강 생성(RAG) (0) | 2024.02.28 |
nohup (0) | 2022.12.05 |
TCP 소켓 상태(FIN_WAIT1, FIN_WAIT2, TIME_WAIT, CLOSE_WAIT, LAST_WAIT) (0) | 2022.10.24 |
댓글