使用Linux搭建软路由

环境:Ubuntu 16.0.4\6网卡、电信光猫一个、交换机N个,无线路由器N个

1.使用电信账号连接Internet,这里使用一张网卡即可,即eth0

配置网卡eth0固定IP:
vim /etc/network/interfaces

auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0


配置pppoe拨号:
sudo pppoeconf
1.等待检测网卡,如果检测失败,可能是由于有其它设备正在尝试拨号(PC,路由器)
2.输入宽带账号
3.输入密码
4.剩下的选择YES即可

连接ADSL:
sudo pon dsl-provider

断开ADSL连接:
sudo poff

查看日志:
plog

查看接口信息:
ifconfig ppp0(一般是这个,如果你之前有配置VPN占用了ppp0,则ADSL端口可能会变成ppp1,详细可以看plog)

2.配置iptables规则,转发网络请求

检测内核是否开启路由转发:
sudo sysctl -p #输出:net.ipv4.ip_forward = 1
如果没有开启,vim /etc/sysctl.conf
添加 net.ipv4.ip_forward = 1
再次执行 sysctl -p

配置iptables:
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
#把eth0网卡的数据包通过nat转发到ppp0,根据自己的需要修改相应的网卡
iptables-save > /etc/iptables.rules #保存规则到文件




3.配置iptables规则,禁止不必要的访问

禁止ping:
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

禁止原先服务端口:
1.SSH端口禁止外网访问
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j DROP

2.禁止其他端口外网访问80
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -p tcp --dport 80 -j DROP

 

4.添加开机自启动

添加开机启动:
vim /etc/rc.local 或者是 /etc/init.d/rc.local #添加:

sudo /usr/bin/pon dsl-provider 

sudo /sbin/iptables-restore < /etc/iptables.rules

5.iptables命令参考:

参数含义:
-P 代表协议(PROTOCOL)
指明当前规则针对的传输协议(如 TCP、UDP、ICMP 等)
可能的参数值有:tcp, udp, icmp, all
使用 “all” 表示适用于所有协议。而如果在规则中不指定 -p 参数,则默认使用 “all” 参数。一般不使用 “all” 这个值,要么指定某个特定的协议,要么就指定 -p 参数。
-p 的参数值既可以用名称(如 tcp)也可以用协议对应的数值(如 6 代表 tcp 协议)
/etc/protocols 文件中包含了所有允许的协议名称和相应数值
也可以用长的参数名 –protocol

-S 代表源地址(SOURCE)
指定数据包的源地址
可以是 ip 地址,或者网络地址,或者主机名(hostname)
例如:-s 192.168.1.101 表示针对特定的 ip 地址
对于网络掩码,使用 /mask。例如,“-s 192.168.1.0/24″ 表示网络掩码为 255.255.255.0 的所有 192.168.1.x 地址都匹配。
如果不指定 -s 参数,默认匹配所有源地址
也可以用长参数名 –src 或者 –source

-D 代表目的地址(DESTINATION)
指定数据包的目的地址
使用方式与上面的 “-s” 一样(不同之处仅在于 -s 指源,而 -d 表示目的地址)
也可以用长参数名 –dst 或者 –destination

-J 代表跳转(TARGET)
j 的意思是 “jump”(跳转) 到目标
指定当某个数据包满足该规则的时候的就跳转到的下一个处理规则,而不再顺序执行后面的规则判断
可能的值有:ACCEPT, DROP, QUEUE, RETURN,分别表示接受、丢弃、进入队列,返回(跳出,通常是从某个 chain 中跳回到调用该 chain 的上层 chain)
也可以跳转到某个自定义的 chain 中,使用该 chain 的名称做为跳转目标

-I 代表 IN INTERFACE(入站接口)
i 表示 “input interface”(输入接口,即,指定网络数据处理的网卡,一般 eth0 即表示第一块有线网卡的外网接口,lo 表示局域网接口)
可以直接理解为 “-i” 表示接口。不过,-i 和 -o 都表示接口,-i 表示输入时的接口,而 -o 特指输出用的接口。
指定数据包进入 INPUT、FORWARD 和 PREROUTING 链时经由的接口。
例如:-i eth0 表示该规则应该针对从 eth0 接口进来的数据包。
如果不指定 -i 参数,则经由系统中所有可用的接口进入的数据包都可以匹配该规则。
也可以使用长参数 –in-interface

-O 代表 OUT INTERFACE(出站接口)
o 表示 “output interface”(出站经由接口)
指定发送出去的数据包进入 INPUT、FORWARD 和 PREROUTING 链时经由的接口。
如果不指定 -o 参数,则经由系统中所有可用的接口发出的数据包都可以匹配该规则。
也可以使用长参数 –out-interface

常用选项:
注意:下面所有这些选项前面都是 –(2个短横线 – )。

–SPORT 表示 SOURCE PORT (源端口,用于 -P TCP, 或者 -P UDP)
默认匹配所有端口(未特别指定时)
可以指定端口号(数字),也可以指定端口名称。例如,默认的 SSH 端口号码为 22,名称为 ssh,可以表示为 “–sport 22″ 或者 “–sport ssh”。
/etc/services 文件包含了所有允许的端口名称和对应的端口号码。
在规则中使用号码比使用名称要好(效率高些)
要匹配一个端口范围,使用英文半角冒号(:),如 22:100 匹配从 22 到 100 的所有端口号。
也可以使用长名称 –source-port

–DPORT 表示 DESTINATION PORT (目的端口,-P TCP, 或者 -P UDP)
与 –sport 的用法相同,区别仅在于对象是目的端口
也可以使用长名称 –destination-port

–TCP-FLAGS 表示 TCP FLAGS (用于 -P TCP)
可以使用英文半角逗号(,)来指定多个 TCP 状态标识
可能值有:SYN, ACK, FIN, RST, URG, PSH。可以全用,也可以不用。

–ICMP-TYPE 表示 ICMP TYPE (ICMP 类型,用于 -P ICMP)
当使用 icmp 协议 “-p icmp” 的时候,可以使用 “–icmp-type” 特别指定 ICMP 类型
例如,使用 “–icmp-type 0″ 表示 “Echo Reply”,“–icmp-type 8″ 表示 “Echo”。

参考自:https://cnzhx.net/blog/common-iptables-cli/

 

 

你可能感兴趣的:(Linux,wan)