Linux 방화벽 소프트웨어 IPtables를 사용하는 방법을 모릅니다! 당신은 어떤 운영 및 유지관리 담당자인가요?
연결 추적(conntrack)

외부 접속 기기에서 FTP 서비스로의 연결(대상 포트 21) 기기에서 외부 DNS 서비스로의 연결(대상 포트 53) -
연결 추적이 수행하는 작업은 다음과 같은 연결 상태를 검색하고 추적하는 것입니다.
연결 생성 시간, 전송된 패킷 수, 전송된 바이트 수 등과 같은 모든 연결에 대한 상태 데이터베이스(conntrack 테이블)를 유지 관리합니다. 만료된 연결(GC)을 재활용합니다. NAT 등 상위 기능을 위한 서비스를 제공합니다.
In TCP/IP 프로토콜에서 연결은 레이어 4 개념입니다. TCP는 연결 지향적이며 전송된 모든 패킷에는 피어의 응답(ACK)이 필요하며 재전송 메커니즘이 있습니다. UDP는 연결이 없으며 전송된 패킷에는 피어의 응답이 필요하지 않으며 재전송 메커니즘도 없습니다. conntrack(CT)에서는 튜플(tuple)로 정의된 데이터 흐름(flow)이 연결(connection)을 나타낸다. UDP 및 ICMP와 같은 3계층 프로토콜도 CT에 연결 기록을 가지고 있지만 모든 프로토콜이 연결되는 것은 아니라는 점을 나중에 살펴보겠습니다.
Netfilter


BPF Hook 기반 패킷 차단 기능 구현(netfilter의 Hook 메커니즘과 동일) BPF Hook 기반으로 새로운 conntrack 및 NAT 세트 구현 따라서 Netfilter를 제거해도 Kubernetes ClusterIP, NodePort, ExternalIPs 및 LoadBalancer와 같은 기능에 대한 Cilium의 지원에는 영향을 미치지 않습니다. 이 연결 추적 메커니즘은 Netfilter와 독립적이므로 해당 conntrack 및 NAT 정보는 커널(즉, Netfilter의) conntrack 테이블 및 NAT 테이블에 저장되지 않습니다.따라서 일반 conntrack/netstats/ss/lsof 및 기타 도구는 볼 수 없습니다.
$ cilium bpf nat list$ cilium bpf ct list global
Iptables

필터 테이블: 데이터 패킷을 필터링하는 데 사용됩니다. 특정 규칙 요구 사항에 따라 데이터 패킷 처리 방법이 결정됩니다. nat 테이블: 주로 데이터 패킷의 IP 주소 및 포트 번호 정보를 수정하는 데 사용됩니다. mangle 테이블: 주로 데이터 패킷의 서비스 유형 및 수명 주기 수정, 데이터 패킷의 태그 설정, 트래픽 셰이핑 구현, 정책 라우팅 등에 사용됩니다. 원시 테이블: 주로 데이터 패킷에 대한 상태 추적을 수행할지 여부를 결정하는 데 사용됩니다.
입력 체인: 로컬 주소에 액세스하는 패킷이 수신되면 이 체인의 규칙이 적용됩니다. 출력 체인: 기계가 패킷을 보낼 때 이 체인의 규칙이 적용됩니다. 전달 체인: 다른 주소로 전달해야 하는 데이터 패킷을 수신할 때 이 체인의 규칙이 적용됩니다. 전달 전달을 구현해야 하는 경우 에서 ip_forward 기능을 활성화해야 합니다. 리눅스 커널. 라우팅 전 체인: 이 체인의 규칙은 패킷을 라우팅하기 전에 적용됩니다. 포스트라우팅 체인: 패킷을 라우팅한 후 이 체인의 규칙이 적용됩니다.
이 시스템에서 전달되는 메시지: PREROUTING –> FORWARD –> 로컬 시스템의 프로세스에서 보낸 메시지(일반적으로 응답 메시지): OUTPUT –>
Query Rules
-t: 테이블 이름 -n: Do IP 주소를 확인하지 않음 -v: 카운터 정보, 패킷 수 및 크기를 표시합니다. -x: 이 옵션은 카운터의 정확한 값을 표시함을 나타냅니다. -
--line-numbers : 표시 규칙의 일련번호(--line으로 축약) 또한, 공용 계정인 Linux를 검색할 때 "monkey"라고 답하는 방법을 익혀야 합니다. 깜짝 선물 패키지를 받기 위해 백그라운드에서. -L:链名
#iptables -t filter -nvxL DOCKER --lineChain DOCKER (1 references)num pkts bytes target prot opt in out source destination1 5076 321478 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.2 tcp dpt:84432 37233 54082508 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.2 tcp dpt:223 1712 255195 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.3 tcp dpt:90004 0 0 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.3 tcp dpt:80005 40224 6343104 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.4 tcp dpt:34436 21034 2227009 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.5 tcp dpt:33067 58 5459 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.6 tcp dpt:808 826 70081 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.6 tcp dpt:4439 10306905 1063612492 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.9 tcp dpt:330610 159775 12297727 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.7 tcp dpt:11111
增加规则
命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP
命令语法:iptables -t 表名 -I 链名 匹配条件 -j 动作示例:iptables -t filter -I INPUT -s 192.168.1.146 -j ACCEPT
命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作示例:iptables -t filter -I INPUT 5 -s 192.168.1.146 -j REJECT
删除规则
命令语法:iptables -t 表名 -D 链名 规则序号示例:iptables -t filter -D INPUT 3
命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP
命令语法:iptables -t 表名 -F 链名示例:iptables -t filter -F INPUT
修改规则
命令语法:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作示例:iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT
命令语法:iptables -t 表名 -P 链名 动作示例:iptables -t filter -P FORWARD ACCEPT
保存规则
方式一
service iptables save
#配置好yum源以后安装iptables-serviceyum install -y iptables-services#停止firewalldsystemctl stop firewalld#禁止firewalld自动启动systemctl disable firewalld#启动iptablessystemctl start iptables#将iptables设置为开机自动启动,以后即可通过iptables-service控制iptables服务systemctl enable iptables
方式二
iptables-save > /etc/sysconfig/iptables
加载规则
iptables-restore < /etc/sysconfig/iptables
匹配条件
#示例如下iptables -t filter -I INPUT -s 192.168.1.111,192.168.1.118 -j DROPiptables -t filter -I INPUT -s 192.168.1.0/24 -j ACCEPTiptables -t filter -I INPUT ! -s 192.168.1.0/24 -j ACCEPT
#示例如下iptables -t filter -I OUTPUT -d 192.168.1.111,192.168.1.118 -j DROPiptables -t filter -I INPUT -d 192.168.1.0/24 -j ACCEPTiptables -t filter -I INPUT ! -d 192.168.1.0/24 -j ACCEPT
#示例如下iptables -t filter -I INPUT -p tcp -s 192.168.1.146 -j ACCEPTiptables -t filter -I INPUT ! -p udp -s 192.168.1.146 -j ACCEPT
#示例如下iptables -t filter -I INPUT -p icmp -i eth4 -j DROPiptables -t filter -I INPUT -p icmp ! -i eth4 -j DROP
#示例如下iptables -t filter -I OUTPUT -p icmp -o eth4 -j DROPiptables -t filter -I OUTPUT -p icmp ! -o eth4 -j DROP
扩展匹配条件
tcp扩展模块
–sport:用于匹配 tcp 协议报文的源端口,可以使用冒号指定一个连续的端口范围。 –dport:用于匹配 tcp 协议报文的目标端口,可以使用冒号指定一个连续的端口范围。 –tcp-flags:用于匹配报文的tcp头的标志位。 –syn:用于匹配 tcp 新建连接的请求报文,相当于使用 <span style="outline: 0px;font-size: 17px;">–tcp-flags SYN,RST,ACK,FIN SYN</span>
。
#示例如下iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp --sport 22 -j REJECTiptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 22:25 -j REJECTiptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport :22 -j REJECTiptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 80: -j REJECTiptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp ! --sport 22 -j ACCEPTiptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECTiptables -t filter -I OUTPUT -p tcp -m tcp --sport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECTiptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags ALL SYN -j REJECTiptables -t filter -I OUTPUT -p tcp -m tcp --sport 22 --tcp-flags ALL SYN,ACK -j REJECTiptables -t filter -I INPUT -p tcp -m tcp --dport 22 --syn -j REJECT
udp 扩展模块
–sport:匹配udp报文的源地址。 –dport:匹配udp报文的目标地址。
#示例iptables -t filter -I INPUT -p udp -m udp --dport 137 -j ACCEPTiptables -t filter -I INPUT -p udp -m udp --dport 137:157 -j ACCEPT
icmp 扩展模块
–icmp-type:匹配icmp报文的具体类型。
#示例iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8/0 -j REJECTiptables -t filter -I INPUT -p icmp --icmp-type 8 -j REJECTiptables -t filter -I OUTPUT -p icmp -m icmp --icmp-type 0/0 -j REJECTiptables -t filter -I OUTPUT -p icmp --icmp-type 0 -j REJECTiptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j REJECT
multiport 扩展模块
-p tcp -m multiport –sports 用于匹配报文的源端口,可以指定离散的多个端口号,端口之间用”逗号”隔开。 -p udp -m multiport –dports 用于匹配报文的目标端口,可以指定离散的多个端口号,端口之间用”逗号”隔开。
#示例如下iptables -t filter -I OUTPUT -d 192.168.1.146 -p udp -m multiport --sports 137,138 -j REJECTiptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,80 -j REJECTiptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport ! --dports 22,80 -j REJECTiptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 80:88 -j REJECTiptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,80:88 -j REJECT
iprange 模块
–src-range:指定连续的源地址范围。 –dst-range:指定连续的目标地址范围。
#示例iptables -t filter -I INPUT -m iprange --src-range 192.168.1.127-192.168.1.146 -j DROPiptables -t filter -I OUTPUT -m iprange --dst-range 192.168.1.127-192.168.1.146 -j DROPiptables -t filter -I INPUT -m iprange ! --src-range 192.168.1.127-192.168.1.146 -j DROP
牛逼啊!接私活必备的 N 个开源项目!赶快收藏
string 模块
–algo:指定对应的匹配算法,可用算法为bm、kmp,此选项为必需选项。 –string:指定需要匹配的字符串
#示例 iptables -t filter -I INPUT -m string --algo bm --string "OOXX" -j REJECT
time 模块
–timestart:用于指定时间范围的开始时间,不可取反。 –timestop:用于指定时间范围的结束时间,不可取反。 –weekdays:用于指定”星期几”,可取反。 –monthdays:用于指定”几号”,可取反。 –datestart:用于指定日期范围的开始日期,不可取反。 –datestop:用于指定日期范围的结束时间,不可取反。
#示例 iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 443 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --weekdays 6,7 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --monthdays 22,23 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time ! --monthdays 22,23 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 6,7 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --weekdays 5 --monthdays 22,23,24,25,26,27,28 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --datestart 2017-12-24 --datestop 2017-12-27 -j REJECT
connlimit 模块
–connlimit-above:单独使用此选项时,表示限制每个IP的链接数量。 –connlimit-mask:此选项不能单独使用,在使用–connlimit-above选项时,配合此选项,则可以针对”某类IP段内的一定数量的IP”进行连接数量的限制,如果不明白可以参考上文的详细解释。
#示例 iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 10 --connlimit-mask 27 -j REJECT
limit 模块
–limit-burst:类比”令牌桶”算法,此选项用于指定令牌桶中令牌的最大数量。 –limit:类比”令牌桶”算法,此选项用于指定令牌桶中生成新令牌的频率,可用时间单位有second、minute 、hour、day。
#示例,注意,如下两条规则需配合使用 #令牌桶中最多能存放3个令牌,每分钟生成10个令牌(即6秒钟生成一个令牌)。 iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT #默认将icmp包丢弃 iptables -t filter -A INPUT -p icmp -j REJECT
state 扩展模块
NEW: 연결의 첫 번째 패킷, 상태는 NEW입니다. 새로운 연결의 첫 번째 패킷 상태는 NEW인 것으로 이해될 수 있다. ESTABLISHED: NEW 상태 패킷이 연결이 설정되었음을 나타내는 ESTABLISHED 이후의 패킷 상태를 이해할 수 있습니다. 관련: RELATED는 문자 그대로 관계로 번역되지만 여전히 이해하기 쉽지 않습니다. 예를 들어, FTP 서비스에서 FTP 서버는 명령 프로세스 하나와 데이터 프로세스 하나, 두 개의 프로세스를 생성합니다. 명령 프로세스는 서버와 클라이언트 간의 명령 전송을 담당합니다(이 전송 프로세스를 소위 "연결" 상태로 이해할 수 있으며 일시적으로 "명령 연결"이라고 함). 데이터 프로세스는 서버와 클라이언트 간의 데이터 전송을 담당합니다(일시적으로 이 프로세스를 "데이터 연결"이라고 함). 그러나 전송될 특정 데이터는 명령에 의해 제어됩니다. 따라서 "데이터 연결"의 메시지는 "명령 연결"과 "관련"됩니다. 그러면 "데이터 연결"의 패킷은 "명령 연결"의 패킷과 관련되어 있으므로 RELATED 상태일 수 있습니다. (참고: FTP에 대한 연결 추적을 수행하려면 해당 커널 모듈 nf_conntrack_ftp를 별도로 로드해야 합니다. 자동으로 로드하려면 /etc/sysconfig/iptables-config 파일을 구성하면 됩니다) -
INVALID: 패키지를 식별할 방법이 없거나 패킷에 상태가 없으면 이 패킷의 상태는 INVALID 상태의 패킷을 적극적으로 차단할 수 있습니다. UNTRACKED: 패킷 상태가 추적되지 않은 경우 패킷이 추적되지 않았음을 의미합니다. 패킷 상태가 추적되지 않은 경우 일반적으로 해당 연결을 찾을 수 없음을 의미합니다.
iptables -t filter -I INPUT -m state --state ESTABLISHED -j ACCEPT
mangle 表
TOS:用来设置或改变数据包的服务类型域。这常用来设置网络上的数据包如何被路由等策略。注意这个操作并不完善,有时得不所愿。它在Internet 上还不能使用,而且很多路由器不会注意到这个域值。换句话说,不要设置发往 Internet 的包,除非你打算依靠 TOS 来路由,比如用 iproute2。 TTL:用来改变数据包的生存时间域,我们可以让所有数据包只有一个特殊的 TTL。它的存在有 一个很好的理由,那就是我们可以欺骗一些ISP。为什么要欺骗他们呢?因为他们不愿意让我们共享一个连接。那些 ISP 会查找一台单独的计算机是否使用不同的 TTL,并且以此作为判断连接是否被共享的标志。 MARK 用来给包设置特殊的标记。iproute 2能识别这些标记,并根据不同的标记(或没有标记) 决定不同的路由。用这些标记我们可以做带宽限制和基于请求的分类。

iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 80 -j MARK --set-mark 1; iptables -t mangle -A PREROUTING -i eth0 -p udp --dprot 53 -j MARK --set-mark 2;
ip rule add from all fwmark 1 table 10 ip rule add from all fwmark 2 table 20
ip route add default via 10.10.1.1 dev eth1 table 10 ip route add default via 10.10.2.1 dev eth2 table 20
커스텀 체인
创建自定义链
#在filter表中创建IN_WEB自定义链 iptables -t filter -N IN_WEB
引用自定义链
#在INPUT链中引用刚才创建的自定义链 iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB
重命名自定义链
#将IN_WEB自定义链重命名为WEB iptables -E IN_WEB WEB
删除自定义链
1、自定义链没有被引用。 2、自定义链中没有任何规则。
#第一步:清除自定义链中的规则 iptables -t filter -F WEB #第二步:删除自定义链 iptables -t filter -X WEB
LOG 动作
kern.warning /var/log/iptables.log
service rsyslog restart
–log-level 选项可以指定记录日志的日志级别,可用级别有 emerg,alert,crit,error,warning,notice,info,debug。 –log-prefix 选项可以给记录到的相关信息添加”标签”之类的信息,以便区分各种记录到的报文信息,方便在分析时进行过滤。–log-prefix 对应的值不能超过 29 个字符。
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix "want-in-from-port-22"

参考链接
https://www.zsythink.net/archives/category/%e8%bf%90%e7%bb%b4%e7%9b%b8%e5%85%b3 /iptables/ https://my.oschina.net/mojiewhy/blog/3039897 https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial- cn-1.1.19.html#MARKTARGET https://mp.weixin.qq.com/s/NOxY4ZC7Cay4LCWlMkVx8A
위 내용은 Linux 방화벽 소프트웨어 IPtables를 사용하는 방법을 모릅니다! 당신은 어떤 운영 및 유지관리 담당자인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Linux 시스템의 5 개의 기둥은 다음과 같습니다. 1. Kernel, 2. System Library, 3. Shell, 4. 파일 시스템, 5. 시스템 도구. 커널은 하드웨어 리소스를 관리하고 기본 서비스를 제공합니다. 시스템 라이브러리는 애플리케이션에 대한 사전 컴파일 된 기능을 제공합니다. 쉘은 사용자가 시스템과 상호 작용할 수있는 인터페이스입니다. 파일 시스템은 데이터를 구성하고 저장합니다. 시스템 도구는 시스템 관리 및 유지 보수에 사용됩니다.

Linux 시스템에서 시작시 특정 키를 누르거나 "sudosystemctlrescue"와 같은 명령을 사용하여 유지 보수 모드를 입력 할 수 있습니다. 유지 보수 모드는 관리자가 파일 시스템 수리, 비밀번호 재설정, 보안 취약성 패치 등과 같은 간섭없이 시스템 유지 관리 및 문제 해결을 수행 할 수 있습니다.

Linux 초보자는 파일 관리, 사용자 관리 및 네트워크 구성과 같은 기본 작업을 마스터해야합니다. 1) 파일 관리 : mkdir, touch, ls, rm, mv 및 cp 명령을 사용하십시오. 2) 사용자 관리 : userAdd, passwd, userdel 및 usermod 명령을 사용합니다. 3) 네트워크 구성 : ifconfig, echo 및 ufw 명령을 사용하십시오. 이러한 운영은 Linux 시스템 관리의 기초이며, 마스터하면 시스템을 효과적으로 관리 할 수 있습니다.

이 기사는 Linux의 Sudo 권한을 관리하는 방법, 보안 및 보안 모범 사례를 포함하여 Linux의 Sudo 권한을 관리하는 방법을 설명합니다. 주요 초점은 /etc /sudoers를 안전하게 편집하고 액세스를 제한하는 데 중점을 둡니다. 문자 수 : 159

이 기사는 Google Authenticator를 사용하여 Linux에서 SSH에 대한 2 단계 인증 (2FA) 설정, 설치, 구성 및 문제 해결 단계에 대한 가이드를 제공합니다. Enhanced SEC와 같은 2FA의 보안 이점을 강조합니다.

이 기사는 Linux 시스템 성능을 모니터링하기위한 Top, HTOP 및 VMSTAT 사용에 대해 설명하고 효과적인 시스템 관리를위한 고유 한 기능 및 사용자 정의 옵션을 자세히 설명합니다.

기사는 APT, YUM 및 DNF를 사용하여 Linux의 소프트웨어 패키지 관리, 설치, 업데이트 및 제거를 다루는 것에 대해 설명합니다. 다양한 분포에 대한 기능과 적합성을 비교합니다.

이 기사는 패턴 매칭, 파일 검색 및 텍스트 조작을 위해 Linux에서 정규식 (Regex)을 사용하는 방법, 구문, 명령 및 Grep, Sed 및 Awk와 같은 도구를 자세히 설명합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

드림위버 CS6
시각적 웹 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

뜨거운 주제



