Ubuntu iptables配置
配置iptablesUbuntu默认安装是没有开启任何防火墙的,因此为了服务器的安全,建议大家安装启用防火墙设置。 查看系统是否安装了防火墙: whereis iptables iptables: /sbin/iptables /usr/share/iptables /usr/share/man/man8/iptables.8.gz如果默认没有安装,可执行如下语句: sudo apt-get install iptables 一开始没有配置防火墙的时候,防火墙配置信息如下: iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 我先说说我的配置,然后再详解各个命令的意思。 vim /etc/iptables.up.rules内容如下: *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT 然后使防火墙开机自启: vim /etc/network/if-pre-up.d/iptables 添加如下内容: #!/bin/bash iptables-restore < /etc/iptables.up.rules 添加执行权限: chmod +x /etc/iptables.up.rules (ps:上面的路径可自选) 执行如下语句,即可生效。 iptables-restore < /etc/iptables.up.rules或 sh /etc/network/if-pre-up.d/iptables现在防火墙配置如下: iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8080 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:3306 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination iptables详解允许已建立的连接接收数据: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT开放指定的端口: iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT 只允许192.168.1.1的机器进行ssh连接: iptables -A INPUT -s 192.168.1.1 -p tcp --dport 22 -j ACCEPT限制指定IP访问的办法 限制单个IP的命令: iptables -I INPUT -s 192.168.1.1 -j DROP限制IP段的命令: iptables -I INPUT -s 192.1.0.0/16 -j DROP iptables -I INPUT -s 192.2.0.0/16 -j DROP iptables -I INPUT -s 192.3.0.0/16 -j DROP限制几个段的命令: iptables -I INPUT -s 192.168.1.0/24 -j DROP iptables -I INPUT -s 192.168.2.0/24 -j DROP限制整个段的命令: iptables -I INPUT -s 192.0.0.0/8 -j DROP如果你希望系统在每次重启前将防火墙的设置保存下来,你可以在/etc/network/interfaces文件最后添加如下语句: pre-up iptables-restore < /etc/iptables.up.rules post-down iptables-save > /etc/iptables.up.rules 消除默认的规则 这个一定要先做,不然清空后可能会悲剧iptables -P INPUT ACCEPT 清除预设表filter中的所有规则链的规则 iptables -F清除预设表filter中使用者自定链中的规则 iptables -X 将规则表计数器清零 iptables -Z iptables -A和 -I的区别: 首先都是对链添加规则, -A参数是将规则写到现有链规则的最后; -I参数默认是将一条规则添加到现有规则链的最前面,当然也可以指定插入到第几行,行数可以用数字来指定,比如说将一条规则添 加到某一条链的第三行,那么原来在第三行的规则就会降到下一行第四行。
小结维护规则表的命令: 1.iptables (-N)创建一个新规则表 2.iptables (-X)删除一个空规则表 3.iptables (-P)改变内建规则表的默认策略 4.iptables (-L)列出规则表中的规则 5.iptables (-F)清空规则表中的规则 6.iptables (-Z)将规则表计数器清零管理规则表中的规则: 1.iptables (-A)添加新规则到规则表 2.iptables (-I)插入新规则到规则表的某个位置 3.iptables (-R)替换规则表中的规则 4.iptables (-D)删除规则表中的某条规则 在调试iptables规则时,你也许需要反复修改你的脚本来实现某些特定的功能,这时建议在你的脚本里添加这样几行,以防止重复设 置规则: # 清除所有规则 iptables -F -t filter iptables -X -t filter iptables -Z -t filter iptables -F -t nat iptables -X -t nat iptables -Z -t nat # 设置内建规则表的默认策略 iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT“-t”选项是“--table”的简写,它指明了你要对哪类规则表进行操作,默认的是指filter。 下面举例说明iptables的部分选项的使用: 指定源地址和目标地址 指定规则操作的源地址 -s 或 --source 或 -src 指定规则操作的目标地址 -d 或 --destination 或 -dst 允许来自192.168.100.0/24的数据包通过 iptables -A INPUT -s 192.168.100.0/24 -d 0.0.0.0/0 -j ACCEPT“-j”选项是“--jump”的简写,它指明了匹配该条规则的数据包的具体处理方法,可能是ACCEPT、DROP等。 取反:在参数前加“!”号 接受除了来自192.168.100.0/24外的所有的数据包 iptables -A INPUT -s ! 192.168.100.0/24 -d 0.0.0.0/0 -j ACCEPT指定协议(TCP、UDP或ICMP) -p 或 --protocol 禁止icmp协议 iptables -A INPUT -p icmp -j DROP指定接口 指定数据包进入的接口 -i 或 --in-interface 指定数据包送出的接口 -o 或 --out-interface INPUT规则表中只允许指定-i接口,OUTPUT规则表中只允许指定-o接口,FORWARD表可以指定这两种接口。 允许从eth1进入的数据包 iptables -A INPUT -i eth1 -j ACCEPT允许从eth0接口送出的数据包 iptables -A OUTPUT -o eth0 -j ACCEPT转发从eth1进入,eth0送出的数据包 iptables -A FORWARD -i eth1 -o eth0 -j ACCEPTTCP/UDP扩展 指定源端口 --sport 或 --source-port 指定目的端口 --dport 或 --destination-port 允许从eth0进入访问到目标端口为21的tcp数据包 iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT允许从eth0进入访问到目标端口为21的udp数据包 iptables -A INPUT -i eth0 -p udp --dport 21 -j ACCEPT状态匹配 --state state,state... 正如前面我们脚本中用到的,state是用逗号分隔的列表,表示要匹配的连接状态。有效的状态选项包括:INVAILD,表示数据包对应的连接是未知的;ESTABLISHED,表示数据包对应的连接已经进行了双向的数据包传输,也就是说连接已经建立;NEW,表示这个数据包请求发起一个连接;RELATED,表示数据包要发起一个新的连接,但是这个连接和一个现有的连接有关,例如:FTP的数据传输连接和控制连接之间就是RELATED关系。 禁止从eth0进来的NEW状态,也就是禁止来自eth0的新的访问请求 iptables -A INPUT -i eth0 -m state --state NEW -j DROP “-m”是“--match”的简写。-m选项引出了iptables的state扩展模块,比如mac扩展模块,它实现根据主机网卡的MAC地址进行权限控制 (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Linux(Ubuntu)下Mysql5.6.28安装配置方法图文教程
- ubuntu 16.04.2 server LAMP 搭建环境
- Ubuntu Desktop 16.04下安装Visual Studio Code
- Ubuntu 安装mysql和简单操作
- ubuntu中snap包的安装、更新删除与简单使用
- 在ubuntu 14.04中的现有ruby 2.2安装上安装tk / tcl
- ubuntu下安装Python多版本的方法及注意事项
- Ubuntu14.04下OpenCV2.4.10安装
- ubuntu下Keras中神经网络可视化模块keras.utils.visualize_
- ubuntu16.04 vim-gnome