linux下以多用户运行程序监听不同的端口分别走指定的IP出去

linux下以多用户运行程序监听不同的端口分别走指定的IP出去

第一步,安装示例服务端后,根据要监听的端口数设置多个配置文件,此处步骤省略。

第二步,根据要监听的端口数新增用户数,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
useradd -r user30
useradd -r user31
useradd -r user32
useradd -r user33
useradd -r user34
useradd -r user35
useradd -r user36
useradd -r user37
useradd -r user38
useradd -r user39
useradd -r user40
useradd -r user41
useradd -r user42
useradd -r user43
useradd -r user44
useradd -r user45

第三步,复制和修改示例配置文件此处步骤省略。

第四步,修改 iptables 规则

在第二步新建好的用户,需要知道其userid,直接查看/etc/passwd文件即可,命令如下:

1
[email protected]~# more /etc/passwd

修改 iptables 规则(假设端口从8030至8045):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8030 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8031 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8032 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8033 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8034 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8035 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8036 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8037 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8038 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8039 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8040 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8041 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8042 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8043 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8044 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8045 -j ACCEPT
#
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 999 -j MARK --set-mark 999
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 998 -j MARK --set-mark 998
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 997 -j MARK --set-mark 997
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 996 -j MARK --set-mark 996
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 995 -j MARK --set-mark 995
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 994 -j MARK --set-mark 994
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 993 -j MARK --set-mark 993
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 992 -j MARK --set-mark 992
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 991 -j MARK --set-mark 991
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 990 -j MARK --set-mark 990
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 989 -j MARK --set-mark 989
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 988 -j MARK --set-mark 988
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 987 -j MARK --set-mark 987
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 986 -j MARK --set-mark 986
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 985 -j MARK --set-mark 985
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 984 -j MARK --set-mark 984
#
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 999 -j SNAT --to-source IP1
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 998 -j SNAT --to-source IP2
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 997 -j SNAT --to-source IP3
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 996 -j SNAT --to-source IP4
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 995 -j SNAT --to-source IP5
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 994 -j SNAT --to-source IP6
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 993 -j SNAT --to-source IP7
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 992 -j SNAT --to-source IP8
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 991 -j SNAT --to-source IP9
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 990 -j SNAT --to-source IP10
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 989 -j SNAT --to-source IP11
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 988 -j SNAT --to-source IP12
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 987 -j SNAT --to-source IP13
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 986 -j SNAT --to-source IP14
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 985 -j SNAT --to-source IP15
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 984 -j SNAT --to-source IP16

保存 iptables 配置:

1
[email protected]~# /etc/init.d/iptables save

第五步,启动示例服务端
假设是以 root 用户登录的,那么需要分别以user30—user45运行示例服务端

命令如下:

1
[email protected]~# sudo -u user30 bash -c 'nohup /command_path -c /etc/config_path > /tmp/pid30 &'

此处省略其它用户命令。

至此,设置完成。