基于这种情况,要修改内核的配置文件vim /etc/sysctl.conf
[root@server1 ~]# echo "1" /proc/sys/net/ipv4/ip_forward #可以这么开启,不过重启之后就失效了,因为这个文件是内存中的
# Controls IP packet forwarding
net.ipv4.ip_forward = 1 #找到这行,把0修改为1
[root@server1 ~]# sysctl -p #这条命令可以把这些指令重新加载到内核中去
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
二、在网关上做SNAT使内网电脑可以连接到Internet
[root@server1 ~]# cat /proc/sys/net/ipv4/ip_forward #现在查看这个文件的值为1
1
[root@server1 ~]#
[root@server1 ~]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 192.168.18.110
2.能看网页内网客户机出去的目标端口是80,53都放行
iptables -t filter -A FORWARD -p icmp -j ACCEPT
解析后回来的源端口是80,53的都给与放行
iptables -t filter -A FORWARD -p tcp -i eth1 --dport 80 -s 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -i eth1 --dport 53 -s 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p udp -i eth1 --dport 53 -s 192.168.0.0/24 -j ACCEPT
者 两者写其中一个即可
iptables -t filter -A FORWARD -p tcp --dport 80 -s 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 53 -s 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p udp --dport 53 -s 192.168.0.0/24 -j ACCEPT
3.能收发邮件
iptables -t filter -A FORWARD -p tcp -i eth0 --sport 80 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p udp -i eth0 --sport 53 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -i eth0 --sport 53 -d 192.168.0.0/24 -j ACCEPT
或者,两者写其中一个即可
iptables -t filter -A FORWARD -p tcp --sport 80 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p udp --sport 53 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 53 -d 192.168.0.0/24 -j ACCEPT
有其他端口的类似设置就可以了,一出一进配合。
iptables -t filter -A FORWARD -p tcp --dport 25 -s 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 25 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 110 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 110 -s 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 143 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 143 -s 192.168.0.0/24 -j ACCEPT
更严格的措施,就是找出QQ登录服务器的地址,然后设置:
iptables -t filter -A FORWARD -p udp --dport 8000 -s 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p udp --sport 8000 -d 192.168.0.0/24 -j ACCEPT
tcp 80(跟网页端口一样80,所以只要能看网页,那就能上QQ)
iptables -t filter -A FORWARD -p tcp --sport 80 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 80 -s 192.168.0.0/24 -j ACCEPT
tcp 443
iptables -t filter -A FORWARD -p tcp --sport 443 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 443 -s 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 443 -s 192.168.0.0/24 -d 119.147.45.43 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 443 -s 119.147.45.43 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 80 -s 192.168.0.0/24 -d 112.95.240.16 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 80 -s 112.95.240.16 -d 192.168.0.0/24 -j ACCEPT
b.进来的要进行限速,对单个主机进行限速(要在网关的外网卡限制下载的速度,而在内网卡上限制上传的速度)
[root@server1 ~]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 192.168.18.110
[root@server1 ~]# iptables -t filter -A FORWARD -i eth1 -s 192.168.0.0/24 -j ACCEPT
按照这个命令,这个主机最大也就14.6KB/S,根据实际情况对速度进行调整-m limit --limit 10/s --limit-burst 10 该选项就是对主机进行限速--limit 10/s:10/s是每秒发个10个包,又因网卡的MTU值为1500B,换算成KB,1500/1024=1.46KB,也就是每个包大小理想情况下是1.46KB,每秒10个包,那就是每秒1.46*10=14.6KB/S--limit-burst 10 :最大峰值也是10个包
[root@server1 ~]# iptables -t filter -A FORWARD -i eth0 -d 192.168.0.2 -m limit --limit 10/s --limit-burst 10 -j ACCEPT
访问网关的3389端口,就相当于访问内网192.168.0.2的3389端口,这样就把3389端口映射出去了
[root@server1 ~]# iptables -t nat -A PREROUTING -p tcp -d 192.168.18.110 --dport 8080 -j DNAT --to 192.168.0.2:80
做端口映射时,POSTROUTING链其实可以不做SNAT,iptables就能把进来的包交给内网机器,而内网机器也将数据回复到外网的机器,原因是:iptables是一种状态型的防火墙,不用我们手动将设置数据包的转发方向,它也能很好的转发我们的数据包。查看nat表和filter表
[root@server1 ~]# iptables -t nat -A PREROUTING -p tcp -d 192.168.18.110 --dport 3389 -j DNAT --to 192.168.0.2:3389
注意:这时候,就算filter中的INPUT和OUTPUT链默认策略是DROP,那也不会影响端口映射的,因为INPUT链和OUTPUT链只会对进入自己和自己出去的做限制,这时候是转发,所以不会影响。
[root@server1 ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 192.168.18.110 tcp dpt:8080 to:192.168.0.2:80
DNAT tcp -- 0.0.0.0/0 192.168.18.110 tcp dpt:3389 to:192.168.0.2:3389
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.0.0/24 0.0.0.0/0 to:192.168.18.110
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@server1 ~]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- 192.168.0.0/24 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 192.168.0.0/24
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (0 references)
target prot opt source destination
这时客户端如果设置为被动模式的话,是连接不到服务器
[root@server1 ~]# iptables -t nat -A PREROUTING -p tcp -d 192.168.18.110 --dport 21 -j DNAT --to 192.168.0.2:21
[root@server1 ~]# iptables -t nat -A PREROUTING -p tcp -d 192.168.18.110 --dport 20 -j DNAT --to 192.168.0.2:20
这样客户端就可以以被动模式(FTP客户端可以设置被动模式和主动模式)来连接到服务器,这时如果用主动模式连接服务器,是连接不到的。
[root@server1 ~]# modprobe ip_nat_ftp
[root@server1 ~]# modprobe ip_conntrack_ftp
[root@server1 ~]# lsmod | grep ftp
2:ip_nat_ftp 7361 0
3:ip_conntrack_ftp 11569 1 ip_nat_ftp
14:ip_nat 20973 2 ip_nat_ftp,iptable_nat
15:ip_conntrack 53281 5 ip_nat_ftp,ip_conntrack_ftp,ip_conntrack_netbios_ns,iptable_nat,ip_nat
只需要发布21端口出去就可以了。
[root@server1 ~]# iptables -t nat -A PREROUTING -p tcp -d 192.168.18.110 --dport 21 -j DNAT --to 192.168.0.2:21
iptables -t filter -A FORWARD -p udp -s 192.168.0.0/24 -d 112.95.240.16 --dport 8000 -j DROP
多端口要这么设置然后把这些地址和这些端口,封掉,但是webQQ无法封,因为使用80端口,以此类推找到其他不能使用的软件的端口IP地址,禁止掉。
iptables -t filter -A FORWARD -p udp -s 192.168.0.0/24 -d 112.95.240.16 -m multiport --dport 8000,80,443 -j DROP