기능 전용 C Linux 프로그램 내부에서 iptables 규칙을 추가할 수 있습니까? 아니면 루트가 필요합니까?

기능 전용 C Linux 프로그램 내부에서 iptables 규칙을 추가할 수 있습니까? 아니면 루트가 필요합니까?

C Linux 프로그램 내부에서 iptables 규칙을 추가해야 합니다.

어떻게 해야 합니까? 루트 액세스가 필요합니까, 아니면 일부 기능만 부여할 수 있습니까?

CAP_NET_RAW+iep를 부여하고 popen(), system() 및 execve()를 사용하여 iptables를 설정하려고 시도했지만 작동하지 않았습니다.

sudo를 하면 분명히 작동하지만 루트 권한을 부여하고 싶지 않습니다.

감사해요.

답변1

사용자에게 루트 권한을 부여할 필요는 없습니다. sudoers 파일을 편집하고 사용자가 sudo를 통해 실행할 수 있는 명령을 제한할 수 있습니다. 또는 sudoers 파일에 NOPASSWD 옵션을 제공할 수 있습니다.

MY_USER_NAME  ALL = NOPASSWD: /sbin/iptables

sudoers 파일을 편집한 후 MY_USER_NAME은 "sudo iptables" 명령을 실행할 수 있습니다. 권한이 필요한 다른 명령은 실행할 수 없습니다.

sudoers 파일을 편집하려면 "visudo" 명령을 사용하십시오.

답변2

iptablesiptables v1.8.4(레거시)의 경우 다음 을 통해 및 명령을 실행할 수 있습니다 iptables-save/restore.

setcap cap_dac_read_search,cap_net_admin,cap_net_raw+ep /path/to/your/bin

xtables-legacy-multi바이너리를 복사하고 위 기능을 수동으로 추가하여 이를 테스트 할 수 있습니다 .

sudo cp /usr/sbin/xtables-legacy-multi ipt
chown ipt user:user # Some non root user
# Test a command
./ipt iptables -I INPUT -m state --state INVALID -j DROP
# Should see errors here...
# Update caps
sudo setcap cap_dac_read_search,cap_net_admin,cap_net_raw+ep ipt
# Now test a rule
./ipt iptables -I INPUT -m state --state INVALID -j DROP
echo $?
# Should see a successful exit code of 0 for valid rules

또 다른 방법은libnftnl 넷필터용 넷링크 라이브러리, 그러나 위의 기능은 여전히 ​​적용됩니다(예외가 있을 수 있음 cap_dac_read_search).

관련 정보